mirror of
https://github.com/SideStore/SideStore.git
synced 2026-03-30 15:25:39 +02:00
Hides app updates that don’t support device’s OS version
This commit is contained in:
@@ -416,10 +416,10 @@ extension AppManager
|
|||||||
{
|
{
|
||||||
completionHandler(.success((fetchedSources, managedObjectContext)))
|
completionHandler(.success((fetchedSources, managedObjectContext)))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
NotificationCenter.default.post(name: AppManager.didFetchSourceNotification, object: self)
|
NotificationCenter.default.post(name: AppManager.didFetchSourceNotification, object: self)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
self.run(operations, context: nil)
|
self.run(operations, context: nil)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ private extension MyAppsViewController
|
|||||||
|
|
||||||
func makeUpdatesDataSource() -> RSTFetchedResultsCollectionViewPrefetchingDataSource<InstalledApp, UIImage>
|
func makeUpdatesDataSource() -> RSTFetchedResultsCollectionViewPrefetchingDataSource<InstalledApp, UIImage>
|
||||||
{
|
{
|
||||||
let fetchRequest = InstalledApp.updatesFetchRequest()
|
let fetchRequest = InstalledApp.supportedUpdatesFetchRequest()
|
||||||
fetchRequest.sortDescriptors = [NSSortDescriptor(keyPath: \InstalledApp.storeApp?.latestSupportedVersion?.date, ascending: false),
|
fetchRequest.sortDescriptors = [NSSortDescriptor(keyPath: \InstalledApp.storeApp?.latestSupportedVersion?.date, ascending: false),
|
||||||
NSSortDescriptor(keyPath: \InstalledApp.name, ascending: true)]
|
NSSortDescriptor(keyPath: \InstalledApp.name, ascending: true)]
|
||||||
fetchRequest.returnsObjectsAsFaults = false
|
fetchRequest.returnsObjectsAsFaults = false
|
||||||
@@ -485,6 +485,15 @@ private extension MyAppsViewController
|
|||||||
{
|
{
|
||||||
func update()
|
func update()
|
||||||
{
|
{
|
||||||
|
do
|
||||||
|
{
|
||||||
|
try self.updatesDataSource.fetchedResultsController.performFetch()
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
print("[ALTLog] Failed to fetch updates:", error)
|
||||||
|
}
|
||||||
|
|
||||||
if self.updatesDataSource.itemCount > 0
|
if self.updatesDataSource.itemCount > 0
|
||||||
{
|
{
|
||||||
self.navigationController?.tabBarItem.badgeValue = String(describing: self.updatesDataSource.itemCount)
|
self.navigationController?.tabBarItem.badgeValue = String(describing: self.updatesDataSource.itemCount)
|
||||||
@@ -495,13 +504,6 @@ private extension MyAppsViewController
|
|||||||
self.navigationController?.tabBarItem.badgeValue = nil
|
self.navigationController?.tabBarItem.badgeValue = nil
|
||||||
UIApplication.shared.applicationIconBadgeNumber = 0
|
UIApplication.shared.applicationIconBadgeNumber = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.isViewLoaded
|
|
||||||
{
|
|
||||||
UIView.performWithoutAnimation {
|
|
||||||
self.collectionView.reloadSections(IndexSet(integer: Section.updates.rawValue))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchAppIDs()
|
func fetchAppIDs()
|
||||||
|
|||||||
@@ -164,7 +164,21 @@ public extension InstalledApp
|
|||||||
{
|
{
|
||||||
let fetchRequest = InstalledApp.fetchRequest() as NSFetchRequest<InstalledApp>
|
let fetchRequest = InstalledApp.fetchRequest() as NSFetchRequest<InstalledApp>
|
||||||
fetchRequest.predicate = NSPredicate(format: "%K == YES AND %K != nil AND %K != %K",
|
fetchRequest.predicate = NSPredicate(format: "%K == YES AND %K != nil AND %K != %K",
|
||||||
#keyPath(InstalledApp.isActive), #keyPath(InstalledApp.storeApp), #keyPath(InstalledApp.version), #keyPath(InstalledApp.storeApp.latestSupportedVersion.version))
|
#keyPath(InstalledApp.isActive),
|
||||||
|
#keyPath(InstalledApp.storeApp),
|
||||||
|
#keyPath(InstalledApp.version), #keyPath(InstalledApp.storeApp.latestVersionString))
|
||||||
|
return fetchRequest
|
||||||
|
}
|
||||||
|
|
||||||
|
class func supportedUpdatesFetchRequest() -> NSFetchRequest<InstalledApp>
|
||||||
|
{
|
||||||
|
let predicate = NSPredicate(format: "%K != nil AND %K != %K",
|
||||||
|
#keyPath(InstalledApp.storeApp.latestSupportedVersion),
|
||||||
|
#keyPath(InstalledApp.version), #keyPath(InstalledApp.storeApp.latestSupportedVersion.version))
|
||||||
|
|
||||||
|
let fetchRequest = InstalledApp.updatesFetchRequest()
|
||||||
|
fetchRequest.predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [fetchRequest.predicate, predicate].compactMap { $0 })
|
||||||
|
|
||||||
return fetchRequest
|
return fetchRequest
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ fileprivate extension NSManagedObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
var storeAppVersion: String? {
|
var storeAppVersion: String? {
|
||||||
let version = self.value(forKey: #keyPath(StoreApp._version)) as? String
|
let version = self.value(forKey: #keyPath(StoreApp.latestVersionString)) as? String
|
||||||
return version
|
return version
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -106,9 +106,9 @@ public class StoreApp: NSManagedObject, Decodable, Fetchable
|
|||||||
@NSManaged public private(set) var iconURL: URL
|
@NSManaged public private(set) var iconURL: URL
|
||||||
@NSManaged public private(set) var screenshotURLs: [URL]
|
@NSManaged public private(set) var screenshotURLs: [URL]
|
||||||
|
|
||||||
@NSManaged @objc(version) internal var _version: String
|
@NSManaged @objc(version) public private(set) var latestVersionString: String
|
||||||
@NSManaged @objc(versionDate) internal var _versionDate: Date
|
@NSManaged @objc(versionDate) internal private(set) var _versionDate: Date
|
||||||
@NSManaged @objc(versionDescription) internal var _versionDescription: String?
|
@NSManaged @objc(versionDescription) internal private(set) var _versionDescription: String?
|
||||||
|
|
||||||
@NSManaged @objc(downloadURL) internal var _downloadURL: URL
|
@NSManaged @objc(downloadURL) internal var _downloadURL: URL
|
||||||
@NSManaged public private(set) var platformURLs: PlatformURLs?
|
@NSManaged public private(set) var platformURLs: PlatformURLs?
|
||||||
@@ -356,7 +356,7 @@ internal extension StoreApp
|
|||||||
|
|
||||||
// Preserve backwards compatibility by assigning legacy property values.
|
// Preserve backwards compatibility by assigning legacy property values.
|
||||||
guard let latestVersion = versions.first else { preconditionFailure("StoreApp must have at least one AppVersion.") }
|
guard let latestVersion = versions.first else { preconditionFailure("StoreApp must have at least one AppVersion.") }
|
||||||
self._version = latestVersion.version
|
self.latestVersionString = latestVersion.version
|
||||||
self._versionDate = latestVersion.date
|
self._versionDate = latestVersion.date
|
||||||
self._versionDescription = latestVersion.localizedDescription
|
self._versionDescription = latestVersion.localizedDescription
|
||||||
self._downloadURL = latestVersion.downloadURL
|
self._downloadURL = latestVersion.downloadURL
|
||||||
|
|||||||
Reference in New Issue
Block a user