bookmark logic

fixed "Mark all previous" counting in the logger and removing a series from bookmarks when you open them from the home tab it no longer kicks you out
This commit is contained in:
Seiike 2025-03-16 17:55:38 +01:00
parent 243f85702d
commit 517ccb8983
3 changed files with 41 additions and 3 deletions

View file

@ -35,6 +35,14 @@ class LibraryManager: ObservableObject {
loadBookmarks()
}
func removeBookmark(item: LibraryItem) {
if let index = bookmarks.firstIndex(where: { $0.id == item.id }) {
bookmarks.remove(at: index)
Logger.shared.log("Removed series \(item.id) from bookmarks.",type: "Debug")
saveBookmarks()
}
}
private func loadBookmarks() {
guard let data = UserDefaults.standard.data(forKey: bookmarksKey) else {
Logger.shared.log("No bookmarks data found in UserDefaults.", type: "Error")

View file

@ -20,6 +20,10 @@ struct LibraryView: View {
@State private var continueWatchingItems: [ContinueWatchingItem] = []
@State private var isLandscape: Bool = UIDevice.current.orientation.isLandscape
// New state variables to handle bookmark navigation explicitly
@State private var selectedBookmark: LibraryItem? = nil
@State private var isDetailActive: Bool = false
private let columns = [
GridItem(.adaptive(minimum: 150), spacing: 12)
]
@ -82,7 +86,10 @@ struct LibraryView: View {
ForEach(libraryManager.bookmarks) { item in
if let module = moduleManager.modules.first(where: { $0.id.uuidString == item.moduleId }) {
NavigationLink(destination: MediaInfoView(title: item.title, imageUrl: item.imageUrl, href: item.href, module: module)) {
Button(action: {
selectedBookmark = item
isDetailActive = true
}) {
VStack(alignment: .leading) {
ZStack {
KFImage(URL(string: item.imageUrl))
@ -114,6 +121,13 @@ struct LibraryView: View {
.multilineTextAlignment(.leading)
}
}
.contextMenu {
Button(role: .destructive, action: {
libraryManager.removeBookmark(item: item)
}) {
Label("Remove from Bookmarks", systemImage: "trash")
}
}
}
}
}
@ -127,6 +141,22 @@ struct LibraryView: View {
}
}
.padding(.vertical, 20)
NavigationLink(
destination: Group {
if let bookmark = selectedBookmark,
let module = moduleManager.modules.first(where: { $0.id.uuidString == bookmark.moduleId }) {
MediaInfoView(title: bookmark.title,
imageUrl: bookmark.imageUrl,
href: bookmark.href,
module: module)
} else {
Text("No Data Available")
}
},
isActive: $isDetailActive
) {
EmptyView()
}
}
.navigationTitle("Library")
.onAppear {
@ -179,7 +209,7 @@ struct ContinueWatchingSection: View {
ScrollView(.horizontal, showsIndicators: false) {
HStack(spacing: 8) {
ForEach(Array(items.reversed())) { item in
ContinueWatchingCell(item: item,markAsWatched: {
ContinueWatchingCell(item: item, markAsWatched: {
markAsWatched(item)
}, removeItem: {
removeItem(item)

View file

@ -237,7 +237,7 @@ struct MediaInfoView: View {
UserDefaults.standard.set(99999999.0, forKey: "totalTime_\(href)")
}
refreshTrigger.toggle()
Logger.shared.log("Marked \(ep.number) episodes watched within anime \"\(title)\".", type: "General")
Logger.shared.log("Marked \(ep.number - 1) episodes watched within anime \"\(title)\".", type: "General")
}
)
.id(refreshTrigger)