From 4df54ab89f6d80863d5c21112e923045c5efb2bc Mon Sep 17 00:00:00 2001
From: tapframe <85391825+tapframe@users.noreply.github.com>
Date: Thu, 23 Jul 2026 00:08:33 +0530
Subject: [PATCH] fix(simkl): confirm destructive library removals
---
.../composeResources/values/strings.xml | 6 +
.../commonMain/kotlin/com/nuvio/app/App.kt | 95 +++++++++++--
.../app/core/ui/PosterZoomActionOverlay.kt | 12 +-
.../app/features/details/MetaDetailsScreen.kt | 90 ++++++++++--
.../app/features/library/LibraryRepository.kt | 131 +++++++++++++-----
.../TrackingMembershipRemovalConfirmation.kt | 127 +++++++++++++++++
.../app/features/simkl/SimklLibraryAdapter.kt | 71 +++++++---
.../tracking/TrackingLibraryMembership.kt | 14 ++
.../app/features/tracking/TrackingReads.kt | 7 +-
.../features/trakt/TraktLibraryRepository.kt | 10 --
.../trakt/TraktTrackingLibraryProvider.kt | 19 ++-
.../features/simkl/SimklProjectionsTest.kt | 90 ++++++++++++
.../trakt/TraktTrackingLibraryProviderTest.kt | 22 +++
13 files changed, 600 insertions(+), 94 deletions(-)
create mode 100644 composeApp/src/commonMain/kotlin/com/nuvio/app/features/library/TrackingMembershipRemovalConfirmation.kt
create mode 100644 composeApp/src/commonTest/kotlin/com/nuvio/app/features/trakt/TraktTrackingLibraryProviderTest.kt
diff --git a/composeApp/src/commonMain/composeResources/values/strings.xml b/composeApp/src/commonMain/composeResources/values/strings.xml
index 6a01bb0c..031b2e37 100644
--- a/composeApp/src/commonMain/composeResources/values/strings.xml
+++ b/composeApp/src/commonMain/composeResources/values/strings.xml
@@ -13,6 +13,7 @@
Play
Previous
Remove
+ Remove anyway
Reorder
Reset to Default
Resume
@@ -1467,6 +1468,11 @@
Failed to update Trakt lists
Failed to update tracking lists
%1$s placed this title in %2$s instead of %3$s
+ Remove from %1$s?
+ Removing “%1$s” from %2$s will also clear its %3$s there. This can’t be undone.
+ watched history
+ rating
+ watched history and rating
%1$s • %2$s
Update check failed
Download failed
diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt
index 564002b6..50816838 100644
--- a/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt
+++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt
@@ -107,6 +107,7 @@ import com.nuvio.app.core.ui.NuvioPosterZoomActionOverlay
import com.nuvio.app.core.ui.PosterZoomAnchor
import com.nuvio.app.core.ui.PosterZoomAnchorHolder
import com.nuvio.app.core.ui.PosterZoomOverlayAction
+import com.nuvio.app.core.ui.PosterZoomOverlayExitAnimation
import dev.chrisbanes.haze.hazeSource
import dev.chrisbanes.haze.rememberHazeState
import com.nuvio.app.core.ui.NuvioStatusModal
@@ -162,6 +163,9 @@ import com.nuvio.app.features.library.LibraryRepository
import com.nuvio.app.features.library.LibrarySection
import com.nuvio.app.features.library.LibrarySortOption
import com.nuvio.app.features.library.LibrarySourceMode
+import com.nuvio.app.features.library.PendingTrackingMembershipRemoval
+import com.nuvio.app.features.library.TrackingMembershipRemovalConfirmationHost
+import com.nuvio.app.features.library.executeTrackingMembershipOperation
import com.nuvio.app.features.library.showTrackingMembershipRewriteFeedback
import com.nuvio.app.features.library.LibraryScreen
import com.nuvio.app.features.library.toLibraryItem
@@ -226,6 +230,8 @@ import com.nuvio.app.features.tracking.TrackingScrobbleCoordinator
import com.nuvio.app.features.tracking.TrackingScrobbleEvent
import com.nuvio.app.features.tracking.buildTrackingMediaReference
import com.nuvio.app.features.tracking.TrackingLibraryTab
+import com.nuvio.app.features.tracking.TrackingMembershipApplyResult
+import com.nuvio.app.features.tracking.TrackingProviderId
import com.nuvio.app.features.tracking.toggleTrackingLibraryMembership
import com.nuvio.app.features.updater.AppUpdaterHost
import com.nuvio.app.features.updater.AppUpdaterPlatform
@@ -820,6 +826,8 @@ private fun MainAppContent(
var pickerMembership by remember { mutableStateOf