mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
[AltStoreCore] Fixes incorrect Source.featuredApps relationship post-merging
This commit is contained in:
@@ -171,6 +171,7 @@ open class MergePolicy: RSTRelationshipPreservingMergePolicy
|
||||
}
|
||||
|
||||
var sortedVersionsByAppBundleID = [String: NSOrderedSet]()
|
||||
var featuredAppIDsBySourceID = [String: [String]]()
|
||||
|
||||
for conflict in conflicts
|
||||
{
|
||||
@@ -222,6 +223,11 @@ open class MergePolicy: RSTRelationshipPreservingMergePolicy
|
||||
}
|
||||
}
|
||||
|
||||
if let contextSource = conflict.conflictingObjects.first as? Source
|
||||
{
|
||||
featuredAppIDsBySourceID[databaseObject.identifier] = contextSource.featuredApps?.map { $0.bundleIdentifier }
|
||||
}
|
||||
|
||||
default: break
|
||||
}
|
||||
}
|
||||
@@ -272,6 +278,34 @@ open class MergePolicy: RSTRelationshipPreservingMergePolicy
|
||||
throw nsError
|
||||
}
|
||||
|
||||
case let databaseObject as Source:
|
||||
guard let featuredAppIDs = featuredAppIDsBySourceID[databaseObject.identifier] else {
|
||||
databaseObject.setFeaturedApps(nil)
|
||||
break
|
||||
}
|
||||
|
||||
let featuredApps: [StoreApp]?
|
||||
|
||||
let databaseFeaturedAppIDs = databaseObject.featuredApps?.map { $0.bundleIdentifier }
|
||||
if databaseFeaturedAppIDs != featuredAppIDs
|
||||
{
|
||||
let fixedFeaturedApps = databaseObject.apps.lazy.filter { featuredAppIDs.contains($0.bundleIdentifier) }.sorted { (appA, appB) in
|
||||
let indexA = featuredAppIDs.firstIndex(of: appA.bundleIdentifier)!
|
||||
let indexB = featuredAppIDs.firstIndex(of: appB.bundleIdentifier)!
|
||||
return indexA < indexB
|
||||
}
|
||||
|
||||
featuredApps = fixedFeaturedApps
|
||||
}
|
||||
else
|
||||
{
|
||||
featuredApps = databaseObject.featuredApps
|
||||
}
|
||||
|
||||
// Update featuredApps post-merging to make sure relationships are correct,
|
||||
// even if the ordering is correct.
|
||||
databaseObject.setFeaturedApps(featuredApps)
|
||||
|
||||
default: break
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user