From 0a989e7811289cfc8e9a3b696f4b9d11aa351777 Mon Sep 17 00:00:00 2001 From: ronaldheft Date: Thu, 11 Aug 2022 15:36:25 -0400 Subject: [PATCH] Handle deleting podcast episodes --- ios/App/App/plugins/AbsFileSystem.swift | 31 ++++++++++++++++++++---- ios/App/Shared/models/LocalLibrary.swift | 9 ++++--- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/ios/App/App/plugins/AbsFileSystem.swift b/ios/App/App/plugins/AbsFileSystem.swift index a1a2763d..7335fb13 100644 --- a/ios/App/App/plugins/AbsFileSystem.swift +++ b/ios/App/App/plugins/AbsFileSystem.swift @@ -81,19 +81,40 @@ public class AbsFileSystem: CAPPlugin { } } catch { NSLog("Failed to delete \(error)") + success = false } call.resolve(["success": success]) } @objc func deleteTrackFromItem(_ call: CAPPluginCall) { - let localLibraryItemId = call.getString("localLibraryItemId") + let localLibraryItemId = call.getString("id") let trackLocalFileId = call.getString("trackLocalFileId") - let contentUrl = call.getString("contentUrl") - // TODO: Implement - NSLog("deleteTrackFromItem \(localLibraryItemId ?? "UNSET") track file \(trackLocalFileId ?? "UNSET") url \(contentUrl ?? "UNSET")") + NSLog("deleteTrackFromItem \(localLibraryItemId ?? "UNSET") track file \(trackLocalFileId ?? "UNSET")") - call.resolve() + var success = false + do { + if let localLibraryItemId = localLibraryItemId, let trackLocalFileId = trackLocalFileId, var item = Database.shared.getLocalLibraryItem(localLibraryItemId: localLibraryItemId) { + if let fileIndex = item.localFiles.firstIndex(where: { $0.id == trackLocalFileId }) { + try FileManager.default.removeItem(at: item.localFiles[fileIndex].contentPath) + item.localFiles.remove(at: fileIndex) + if item.isPodcast, var media = item.media { + media.episodes = media.episodes?.filter { $0.audioTrack?.localFileId != trackLocalFileId } + item.media = media + } + Database.shared.saveLocalLibraryItem(localLibraryItem: item) + call.resolve(try item.asDictionary()) + success = true + } + } + } catch { + NSLog("Failed to delete \(error)") + success = false + } + + if !success { + call.resolve(["success": success]) + } } } diff --git a/ios/App/Shared/models/LocalLibrary.swift b/ios/App/Shared/models/LocalLibrary.swift index 845434c8..fde755df 100644 --- a/ios/App/Shared/models/LocalLibrary.swift +++ b/ios/App/Shared/models/LocalLibrary.swift @@ -100,16 +100,16 @@ struct LocalFile: Realmable, Codable { var mimeType: String? var size: Int = 0 - var contentUrl: String { - return AbsDownloader.itemDownloadFolder(path: _contentUrl)!.absoluteString - } + var contentUrl: String { AbsDownloader.itemDownloadFolder(path: _contentUrl)!.absoluteString } + var contentPath: URL { AbsDownloader.itemDownloadFolder(path: _contentUrl)! } + var basePath: String? { self.filename } static func primaryKey() -> String? { return "id" } private enum CodingKeys : String, CodingKey { - case id, filename, contentUrl, mimeType, size + case id, filename, contentUrl, mimeType, size, basePath } init() {} @@ -129,6 +129,7 @@ struct LocalFile: Realmable, Codable { try container.encode(contentUrl, forKey: .contentUrl) try container.encode(mimeType, forKey: .mimeType) try container.encode(size, forKey: .size) + try container.encode(basePath, forKey: .basePath) } }