diff --git a/Sora/Utils/Modules/Modules.swift b/Sora/Utils/Modules/Modules.swift index d22a985..413a872 100644 --- a/Sora/Utils/Modules/Modules.swift +++ b/Sora/Utils/Modules/Modules.swift @@ -23,12 +23,14 @@ struct ScrapingModule: Codable, Identifiable, Hashable { let id: UUID let metadata: ModuleMetadata let localPath: String + let metadataUrl: String var isActive: Bool - init(id: UUID = UUID(), metadata: ModuleMetadata, localPath: String, isActive: Bool = false) { + init(id: UUID = UUID(), metadata: ModuleMetadata, localPath: String, metadataUrl: String, isActive: Bool = false) { self.id = id self.metadata = metadata self.localPath = localPath + self.metadataUrl = metadataUrl self.isActive = isActive } @@ -94,7 +96,8 @@ class ModuleManager: ObservableObject { let module = ScrapingModule( metadata: metadata, - localPath: fileName + localPath: fileName, + metadataUrl: metadataUrl ) DispatchQueue.main.async { diff --git a/Sora/Views/LibraryView/LibraryManager.swift b/Sora/Views/LibraryView/LibraryManager.swift index dce733b..0f6a9bf 100644 --- a/Sora/Views/LibraryView/LibraryManager.swift +++ b/Sora/Views/LibraryView/LibraryManager.swift @@ -6,7 +6,6 @@ // import Foundation -import SwiftUI struct LibraryItem: Codable, Identifiable { let id: UUID @@ -35,15 +34,24 @@ class LibraryManager: ObservableObject { } private func loadBookmarks() { - if let data = UserDefaults.standard.data(forKey: bookmarksKey), - let decoded = try? JSONDecoder().decode([LibraryItem].self, from: data) { - bookmarks = decoded + guard let data = UserDefaults.standard.data(forKey: bookmarksKey) else { + print("No bookmarks data found in UserDefaults.") + return + } + + do { + bookmarks = try JSONDecoder().decode([LibraryItem].self, from: data) + } catch { + Logger.shared.log("Failed to decode bookmarks: \(error.localizedDescription)") } } private func saveBookmarks() { - if let encoded = try? JSONEncoder().encode(bookmarks) { + do { + let encoded = try JSONEncoder().encode(bookmarks) UserDefaults.standard.set(encoded, forKey: bookmarksKey) + } catch { + Logger.shared.log("Failed to encode bookmarks: \(error.localizedDescription)") } } diff --git a/Sora/Views/MediaInfoView/MediaInfoView.swift b/Sora/Views/MediaInfoView/MediaInfoView.swift index 00e3eb4..3866823 100644 --- a/Sora/Views/MediaInfoView/MediaInfoView.swift +++ b/Sora/Views/MediaInfoView/MediaInfoView.swift @@ -56,7 +56,7 @@ struct MediaInfoView: View { .font(.system(size: 17)) .fontWeight(.bold) - if !aliases.isEmpty && aliases != title { + if !aliases.isEmpty && aliases != title && aliases != "N/A" { Text(aliases) .font(.system(size: 13)) .foregroundColor(.secondary) @@ -64,7 +64,7 @@ struct MediaInfoView: View { Spacer() - if !airdate.isEmpty { + if !airdate.isEmpty && airdate != "N/A" { HStack(alignment: .center, spacing: 12) { HStack(spacing: 4) { Image(systemName: "calendar") diff --git a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewModule.swift b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewModule.swift index 58f4eb3..0201043 100644 --- a/Sora/Views/SettingsView/SettingsSubViews/SettingsViewModule.swift +++ b/Sora/Views/SettingsView/SettingsSubViews/SettingsViewModule.swift @@ -14,6 +14,7 @@ struct SettingsViewModule: View { @State private var errorMessage: String? @State private var isLoading = false + @State private var addedModuleUrl: String? var body: some View { VStack { @@ -57,7 +58,7 @@ struct SettingsViewModule: View { } .contextMenu { Button(action: { - UIPasteboard.general.string = module.metadata.iconUrl + UIPasteboard.general.string = module.metadataUrl }) { Label("Copy URL", systemImage: "doc.on.doc") } @@ -91,6 +92,15 @@ struct SettingsViewModule: View { .padding(5) }) } + .alert(isPresented: .constant(errorMessage != nil)) { + Alert( + title: Text("Error"), + message: Text(errorMessage ?? "Unknown error"), + dismissButton: .default(Text("OK")) { + errorMessage = nil + } + ) + } } func showAddModuleAlert() { @@ -114,6 +124,7 @@ struct SettingsViewModule: View { private func addModule(from url: String) { isLoading = true errorMessage = nil + addedModuleUrl = url Task { do { @@ -124,7 +135,8 @@ struct SettingsViewModule: View { } catch { DispatchQueue.main.async { isLoading = false - errorMessage = error.localizedDescription + errorMessage = "Failed to add module: \(error.localizedDescription)" + Logger.shared.log("Failed to add module: \(error.localizedDescription)") } } }