parent
93a15cd766
commit
a642b27d2b
|
@ -33,5 +33,6 @@ final class CDModulePreferencesV3: NSManagedObject {
|
|||
}
|
||||
|
||||
@NSManaged var uuid: UUID?
|
||||
@NSManaged var lastUpdate: Date?
|
||||
@NSManaged var excludedEndpoints: Set<CDExcludedEndpoint>?
|
||||
}
|
||||
|
|
|
@ -33,6 +33,7 @@ final class CDProviderPreferencesV3: NSManagedObject {
|
|||
}
|
||||
|
||||
@NSManaged var providerId: String?
|
||||
@NSManaged var lastUpdate: Date?
|
||||
@NSManaged var favoriteServerIds: Data?
|
||||
@NSManaged var excludedEndpoints: Set<CDExcludedEndpoint>?
|
||||
}
|
||||
|
|
|
@ -6,11 +6,13 @@
|
|||
<relationship name="providerPreferences" optional="YES" maxCount="1" deletionRule="Nullify" destinationEntity="CDProviderPreferencesV3" inverseName="excludedEndpoints" inverseEntity="CDProviderPreferencesV3"/>
|
||||
</entity>
|
||||
<entity name="CDModulePreferencesV3" representedClassName="CDModulePreferencesV3" syncable="YES">
|
||||
<attribute name="lastUpdate" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="uuid" optional="YES" attributeType="UUID" usesScalarValueType="NO"/>
|
||||
<relationship name="excludedEndpoints" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="CDExcludedEndpoint" inverseName="modulePreferences" inverseEntity="CDExcludedEndpoint"/>
|
||||
</entity>
|
||||
<entity name="CDProviderPreferencesV3" representedClassName="CDProviderPreferencesV3" syncable="YES">
|
||||
<attribute name="favoriteServerIds" optional="YES" attributeType="Binary"/>
|
||||
<attribute name="lastUpdate" optional="YES" attributeType="Date" usesScalarValueType="NO"/>
|
||||
<attribute name="providerId" optional="YES" attributeType="String"/>
|
||||
<relationship name="excludedEndpoints" optional="YES" toMany="YES" deletionRule="Nullify" destinationEntity="CDExcludedEndpoint" inverseName="providerPreferences" inverseEntity="CDExcludedEndpoint"/>
|
||||
</entity>
|
||||
|
|
|
@ -46,9 +46,22 @@ private final class CDModulePreferencesRepositoryV3: ModulePreferencesRepository
|
|||
entity = try context.performAndWait {
|
||||
let request = CDModulePreferencesV3.fetchRequest()
|
||||
request.predicate = NSPredicate(format: "uuid == %@", moduleId.uuidString)
|
||||
request.sortDescriptors = [.init(key: "lastUpdate", ascending: false)]
|
||||
do {
|
||||
let entity = try request.execute().first ?? CDModulePreferencesV3(context: context)
|
||||
let entities = try request.execute()
|
||||
|
||||
// dedup by lastUpdate
|
||||
entities.enumerated().forEach {
|
||||
guard $0.offset > 0 else {
|
||||
return
|
||||
}
|
||||
$0.element.excludedEndpoints?.forEach(context.delete(_:))
|
||||
context.delete($0.element)
|
||||
}
|
||||
|
||||
let entity = entities.first ?? CDModulePreferencesV3(context: context)
|
||||
entity.uuid = moduleId
|
||||
entity.lastUpdate = Date()
|
||||
return entity
|
||||
} catch {
|
||||
pp_log(.app, .error, "Unable to load preferences for module \(moduleId): \(error)")
|
||||
|
|
|
@ -46,9 +46,22 @@ private final class CDProviderPreferencesRepositoryV3: ProviderPreferencesReposi
|
|||
entity = try context.performAndWait {
|
||||
let request = CDProviderPreferencesV3.fetchRequest()
|
||||
request.predicate = NSPredicate(format: "providerId == %@", providerId.rawValue)
|
||||
request.sortDescriptors = [.init(key: "lastUpdate", ascending: false)]
|
||||
do {
|
||||
let entity = try request.execute().first ?? CDProviderPreferencesV3(context: context)
|
||||
let entities = try request.execute()
|
||||
|
||||
// dedup by lastUpdate
|
||||
entities.enumerated().forEach {
|
||||
guard $0.offset > 0 else {
|
||||
return
|
||||
}
|
||||
$0.element.excludedEndpoints?.forEach(context.delete(_:))
|
||||
context.delete($0.element)
|
||||
}
|
||||
|
||||
let entity = entities.first ?? CDProviderPreferencesV3(context: context)
|
||||
entity.providerId = providerId.rawValue
|
||||
entity.lastUpdate = Date()
|
||||
return entity
|
||||
} catch {
|
||||
pp_log(.app, .error, "Unable to load preferences for provider \(providerId): \(error)")
|
||||
|
|
Loading…
Reference in New Issue