From 95f4097d1c4ba49be7bbe8d170d5520ba48a1a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Est=C3=AAv=C3=A3o?= Date: Thu, 26 Feb 2026 22:10:14 +0000 Subject: [PATCH 1/2] check playlists that are already selected --- .../Managers/PlaylistDataManager.swift | 27 +++++++++++++++++++ .../Public/DataManager.swift | 4 +++ ...ManualPlaylistsChooserViewController.swift | 3 ++- 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/Modules/DataModel/Sources/PocketCastsDataModel/Private/Managers/PlaylistDataManager.swift b/Modules/DataModel/Sources/PocketCastsDataModel/Private/Managers/PlaylistDataManager.swift index 0ccb69fc11..00788307ae 100644 --- a/Modules/DataModel/Sources/PocketCastsDataModel/Private/Managers/PlaylistDataManager.swift +++ b/Modules/DataModel/Sources/PocketCastsDataModel/Private/Managers/PlaylistDataManager.swift @@ -186,6 +186,33 @@ class PlaylistDataManager { return exists } + func manualPlaylistUUIDs(for episodesUUIDs: [String], dbQueue: PCDBQueue) -> [String] { + var uuids: [String] = [] + //let episodesUUIDS = episodeUUIDs.joined(separator: ",") + dbQueue.read { db in + do { + let query = """ + SELECT playlist_uuid + FROM \(DataManager.playlistEpisodeTableName) + WHERE episodeUuid IN (\(DataHelper.convertArrayToInString(episodesUUIDs))) + GROUP BY playlist_uuid + HAVING COUNT(DISTINCT episodeUuid) = \(episodesUUIDs.count); + """ + let resultSet = try db.executeQuery(query, values: []) + defer { resultSet.close() } + + while resultSet.next() { + if let uuid = resultSet.string(forColumn: "playlist_uuid") { + uuids.append(uuid) + } + } + } catch { + FileLog.shared.addMessage("PlaylistDataManager.manualPlaylistUUIDs error: \(error)") + } + } + return uuids + } + func manualPlaylistUUIDs(for episodeUUID: String, dbQueue: PCDBQueue) -> [String] { var uuids: [String] = [] dbQueue.read { db in diff --git a/Modules/DataModel/Sources/PocketCastsDataModel/Public/DataManager.swift b/Modules/DataModel/Sources/PocketCastsDataModel/Public/DataManager.swift index 832503239a..8118f37466 100644 --- a/Modules/DataModel/Sources/PocketCastsDataModel/Public/DataManager.swift +++ b/Modules/DataModel/Sources/PocketCastsDataModel/Public/DataManager.swift @@ -935,6 +935,10 @@ public class DataManager { playlistManager.manualPlaylistUUIDs(for: episodeUUID, dbQueue: dbQueue) } + public func manualPlaylistUUIDs(for episodeUUIDs: [String]) -> [String] { + playlistManager.manualPlaylistUUIDs(for: episodeUUIDs, dbQueue: dbQueue) + } + public func playlistContainsPodcast(podcastUuid: String, includeDeleted: Bool = false) -> Bool { playlistManager.playlistContainsPodcast(podcastUuid: podcastUuid, includeDeleted: includeDeleted, dbQueue: dbQueue) } diff --git a/podcasts/New Detail/Episode Add/ManualPlaylistsChooserViewController.swift b/podcasts/New Detail/Episode Add/ManualPlaylistsChooserViewController.swift index abcfa8eca5..99fe1d854d 100644 --- a/podcasts/New Detail/Episode Add/ManualPlaylistsChooserViewController.swift +++ b/podcasts/New Detail/Episode Add/ManualPlaylistsChooserViewController.swift @@ -143,7 +143,8 @@ class ManualPlaylistsChooserViewController: PCViewController { let uuids = dataManager.manualPlaylistUUIDs(for: episode.uuid) initialSelectedPlaylists = Set(uuids) } else { - initialSelectedPlaylists = [] + let uuids = dataManager.manualPlaylistUUIDs(for: episodes.map {$0.uuid}) + initialSelectedPlaylists = Set(uuids) } newSelectedPlaylists = initialSelectedPlaylists } From d8e20d5941f3af537f3fb28d43eb43f6cf7b5cba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Est=C3=AAv=C3=A3o?= Date: Fri, 27 Feb 2026 13:28:33 +0000 Subject: [PATCH 2/2] Query update --- .../Private/Managers/PlaylistDataManager.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Modules/DataModel/Sources/PocketCastsDataModel/Private/Managers/PlaylistDataManager.swift b/Modules/DataModel/Sources/PocketCastsDataModel/Private/Managers/PlaylistDataManager.swift index 00788307ae..0473737c98 100644 --- a/Modules/DataModel/Sources/PocketCastsDataModel/Private/Managers/PlaylistDataManager.swift +++ b/Modules/DataModel/Sources/PocketCastsDataModel/Private/Managers/PlaylistDataManager.swift @@ -188,15 +188,15 @@ class PlaylistDataManager { func manualPlaylistUUIDs(for episodesUUIDs: [String], dbQueue: PCDBQueue) -> [String] { var uuids: [String] = [] - //let episodesUUIDS = episodeUUIDs.joined(separator: ",") + let episodesUUIDsString = DataHelper.convertArrayToInString(episodesUUIDs) dbQueue.read { db in do { let query = """ SELECT playlist_uuid FROM \(DataManager.playlistEpisodeTableName) - WHERE episodeUuid IN (\(DataHelper.convertArrayToInString(episodesUUIDs))) + WHERE episodeUuid IN (\(episodesUUIDsString)) GROUP BY playlist_uuid - HAVING COUNT(DISTINCT episodeUuid) = \(episodesUUIDs.count); + HAVING COUNT(DISTINCT episodeUuid) = \(episodesUUIDs.count) """ let resultSet = try db.executeQuery(query, values: []) defer { resultSet.close() }