Allows changing BrowseViewController sort order

This commit is contained in:
Riley Testut
2023-12-07 17:54:59 -06:00
committed by Magesh K
parent 5cb40de113
commit 71eb77cfda
4 changed files with 150 additions and 7 deletions

View File

@@ -53,6 +53,17 @@ public extension UserDefaults
@NSManaged var trustedServerURL: String?
@NSManaged var skipPatreonDownloads: Bool
@nonobjc var preferredAppSorting: AppSorting {
get {
let sorting = _preferredAppSorting.flatMap { AppSorting(rawValue: $0) } ?? .default
return sorting
}
set {
_preferredAppSorting = newValue.rawValue
}
}
@NSManaged @objc(preferredAppSorting) private var _preferredAppSorting: String?
@nonobjc
var activeAppsLimit: Int? {
get {
@@ -103,6 +114,10 @@ public extension UserDefaults
let permissionCheckingDisabled = false
#endif
// Pre-iOS 15 doesn't support custom sorting, so default to sorting by name.
// Otherwise, default to `default` sorting (a.k.a. "source order").
let preferredAppSorting: AppSorting = if #available(iOS 15, *) { .default } else { .name }
let defaults = [
#keyPath(UserDefaults.isAppLimitDisabled): false,
#keyPath(UserDefaults.isBackgroundRefreshEnabled): true,
@@ -117,7 +132,8 @@ public extension UserDefaults
#keyPath(UserDefaults.ignoreActiveAppsLimit): false,
#keyPath(UserDefaults.isMacDirtyCowSupported): isMacDirtyCowSupported
#keyPath(UserDefaults.permissionCheckingDisabled): permissionCheckingDisabled,
] as [String : Any]
#keyPath(UserDefaults._preferredAppSorting): preferredAppSorting.rawValue,
] as [String: Any]
UserDefaults.standard.register(defaults: defaults)
UserDefaults.shared.register(defaults: defaults)

View File

@@ -0,0 +1,35 @@
//
// AppSorting.swift
// AltStoreCore
//
// Created by Riley Testut on 11/14/23.
// Copyright © 2023 Riley Testut. All rights reserved.
//
import Foundation
public enum AppSorting: String, CaseIterable
{
case `default`
case name
case developer
case lastUpdated
public var localizedName: String {
switch self
{
case .default: return NSLocalizedString("Default", comment: "")
case .name: return NSLocalizedString("Name", comment: "")
case .developer: return NSLocalizedString("Developer", comment: "")
case .lastUpdated: return NSLocalizedString("Last Updated", comment: "")
}
}
public var isAscending: Bool {
switch self
{
case .default, .name, .developer: return true
case .lastUpdated: return false
}
}
}