diff --git a/PassepartoutLibrary/Sources/PassepartoutCore/Managers/ProfileManager.swift b/PassepartoutLibrary/Sources/PassepartoutCore/Managers/ProfileManager.swift index 7ed8fd1c..5a85b4cb 100644 --- a/PassepartoutLibrary/Sources/PassepartoutCore/Managers/ProfileManager.swift +++ b/PassepartoutLibrary/Sources/PassepartoutCore/Managers/ProfileManager.swift @@ -39,6 +39,8 @@ public protocol ProfileManager { var headers: [Profile.Header] { get } + var profiles: [Profile] { get } + func isExistingProfile(withId id: UUID) -> Bool func isExistingProfile(withName name: String) -> Bool diff --git a/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/CoreDataProfileManagerStrategy.swift b/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/CoreDataProfileManagerStrategy.swift index b131f2a7..d8998127 100644 --- a/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/CoreDataProfileManagerStrategy.swift +++ b/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/CoreDataProfileManagerStrategy.swift @@ -42,6 +42,10 @@ public class CoreDataProfileManagerStrategy: ProfileManagerStrategy { fetchedHeaders.value } + public func profiles() -> [Profile] { + profileRepository.profiles() + } + public func profile(withId id: UUID) -> Profile? { profileRepository.profile(withId: id) } diff --git a/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/DefaultProfileManager.swift b/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/DefaultProfileManager.swift index 66eb7778..40e887a7 100644 --- a/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/DefaultProfileManager.swift +++ b/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/DefaultProfileManager.swift @@ -117,6 +117,10 @@ extension DefaultProfileManager { Array(allHeaders.values) } + public var profiles: [Profile] { + strategy.profiles() + } + public func isExistingProfile(withId id: UUID) -> Bool { allHeaders[id] != nil } diff --git a/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/ProfileManagerStrategy.swift b/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/ProfileManagerStrategy.swift index 176a6517..ad23d6d3 100644 --- a/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/ProfileManagerStrategy.swift +++ b/PassepartoutLibrary/Sources/PassepartoutProfiles/Managers/ProfileManagerStrategy.swift @@ -30,6 +30,8 @@ import PassepartoutCore public protocol ProfileManagerStrategy { var allHeaders: [UUID: Profile.Header] { get } + func profiles() -> [Profile] + func profile(withId: UUID) -> Profile? func saveProfiles(_ profiles: [Profile]) diff --git a/PassepartoutLibrary/Sources/PassepartoutProfiles/Repositories/ProfileRepository.swift b/PassepartoutLibrary/Sources/PassepartoutProfiles/Repositories/ProfileRepository.swift index d472daa1..92252a76 100644 --- a/PassepartoutLibrary/Sources/PassepartoutProfiles/Repositories/ProfileRepository.swift +++ b/PassepartoutLibrary/Sources/PassepartoutProfiles/Repositories/ProfileRepository.swift @@ -64,6 +64,21 @@ class ProfileRepository: Repository { initial: [:] ) } + + func profiles() -> [Profile] { + let request = CDProfile.fetchRequest() + request.sortDescriptors = [ + .init(keyPath: \CDProfile.uuid, ascending: true), + .init(keyPath: \CDProfile.lastUpdate, ascending: false) + ] + do { + let results = try context.fetch(request) + return try results.compactMap(ProfileMapper.toModel) + } catch { + pp_log.error("Unable to fetch profiles: \(error)") + return [] + } + } func profile(withId id: UUID) -> Profile? { let request = CDProfile.fetchRequest()