mirror of
https://github.com/SideStore/SideStore.git
synced 2026-02-09 06:43:25 +01:00
[AltStoreCore] Fixes incorrectly merging app versions for same app from different sources
This commit is contained in:
@@ -170,7 +170,7 @@ open class MergePolicy: RSTRelationshipPreservingMergePolicy
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
var sortedVersionsByAppBundleID = [String: NSOrderedSet]()
|
var sortedVersionsByGlobalAppID = [String: NSOrderedSet]()
|
||||||
var featuredAppIDsBySourceID = [String: [String]]()
|
var featuredAppIDsBySourceID = [String: [String]]()
|
||||||
|
|
||||||
for conflict in conflicts
|
for conflict in conflicts
|
||||||
@@ -194,9 +194,12 @@ open class MergePolicy: RSTRelationshipPreservingMergePolicy
|
|||||||
appVersion.managedObjectContext?.delete(appVersion)
|
appVersion.managedObjectContext?.delete(appVersion)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Core Data _normally_ preserves the correct ordering of versions when merging,
|
if let globallyUniqueID = contextApp.globallyUniqueID
|
||||||
// but just in case we cache the order and reorder the versions post-merge if needed.
|
{
|
||||||
sortedVersionsByAppBundleID[databaseObject.bundleIdentifier] = contextVersions
|
// Core Data _normally_ preserves the correct ordering of versions when merging,
|
||||||
|
// but just in case we cache the order and reorder the versions post-merge if needed.
|
||||||
|
sortedVersionsByGlobalAppID[globallyUniqueID] = contextVersions
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case let databaseObject as Source:
|
case let databaseObject as Source:
|
||||||
@@ -243,7 +246,8 @@ open class MergePolicy: RSTRelationshipPreservingMergePolicy
|
|||||||
{
|
{
|
||||||
let appVersions: [AppVersion]
|
let appVersions: [AppVersion]
|
||||||
|
|
||||||
if let sortedAppVersions = sortedVersionsByAppBundleID[databaseObject.bundleIdentifier],
|
if let globallyUniqueID = databaseObject.globallyUniqueID,
|
||||||
|
let sortedAppVersions = sortedVersionsByGlobalAppID[globallyUniqueID],
|
||||||
let sortedAppVersionsArray = sortedAppVersions.array as? [String],
|
let sortedAppVersionsArray = sortedAppVersions.array as? [String],
|
||||||
case let databaseVersions = databaseObject.versions.map({ $0.version }),
|
case let databaseVersions = databaseObject.versions.map({ $0.version }),
|
||||||
databaseVersions != sortedAppVersionsArray
|
databaseVersions != sortedAppVersionsArray
|
||||||
|
|||||||
@@ -375,6 +375,13 @@ public extension StoreApp
|
|||||||
return self._versions.firstObject as? AppVersion
|
return self._versions.firstObject as? AppVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var globallyUniqueID: String? {
|
||||||
|
guard let sourceIdentifier = self.sourceIdentifier else { return nil }
|
||||||
|
|
||||||
|
let globallyUniqueID = self.bundleIdentifier + "|" + sourceIdentifier
|
||||||
|
return globallyUniqueID
|
||||||
|
}
|
||||||
|
|
||||||
@nonobjc class func fetchRequest() -> NSFetchRequest<StoreApp>
|
@nonobjc class func fetchRequest() -> NSFetchRequest<StoreApp>
|
||||||
{
|
{
|
||||||
return NSFetchRequest<StoreApp>(entityName: "StoreApp")
|
return NSFetchRequest<StoreApp>(entityName: "StoreApp")
|
||||||
|
|||||||
Reference in New Issue
Block a user