Skip to content

Commit ffb38e1

Browse files
set directoryOnTop for account
Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
1 parent f33f5cb commit ffb38e1

File tree

16 files changed

+63
-39
lines changed

16 files changed

+63
-39
lines changed

Brand/Database.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@ import Foundation
2626
// Database Realm
2727
//
2828
let databaseName = "nextcloud.realm"
29-
let databaseSchemaVersion: UInt64 = 370
29+
let databaseSchemaVersion: UInt64 = 371

Share/NCShareExtension+Files.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@ extension NCShareExtension {
3030
@objc func reloadDatasource(withLoadFolder: Bool) {
3131
let layoutForView = NCManageDatabase.shared.getLayoutForView(account: session.account, key: keyLayout, serverUrl: serverUrl) ?? NCDBLayoutForView()
3232
let predicate = NSPredicate(format: "account == %@ AND serverUrl == %@ AND directory == true", session.account, serverUrl)
33-
let metadatas = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView)
33+
let directoryOnTop = NCKeychain().getDirectoryOnTop(account: session.account)
34+
let metadatas = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView, directoryOnTop: directoryOnTop)
3435

35-
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas)
36+
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, directoryOnTop: directoryOnTop)
3637

3738
if withLoadFolder {
3839
loadFolder()

iOSClient/Data/NCManageDatabase+LayoutForView.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ class NCDBLayoutForView: Object {
3434
@Persisted var sort: String = "fileName"
3535
@Persisted var ascending: Bool = true
3636
@Persisted var groupBy: String = "none"
37-
@Persisted var directoryOnTop: Bool = true
3837
@Persisted var titleButtonHeader: String = "_sorted_by_name_a_z_"
3938
@Persisted var columnGrid: Int = 3
4039
@Persisted var columnPhoto: Int = 3
@@ -49,7 +48,6 @@ extension NCManageDatabase {
4948
sort: String? = nil,
5049
ascending: Bool? = nil,
5150
groupBy: String? = nil,
52-
directoryOnTop: Bool? = nil,
5351
titleButtonHeader: String? = nil,
5452
columnGrid: Int? = nil,
5553
columnPhoto: Int? = nil) -> NCDBLayoutForView? {
@@ -83,9 +81,6 @@ extension NCManageDatabase {
8381
if let groupBy {
8482
addObject.groupBy = groupBy
8583
}
86-
if let directoryOnTop {
87-
addObject.directoryOnTop = directoryOnTop
88-
}
8984
if let titleButtonHeader {
9085
addObject.titleButtonHeader = titleButtonHeader
9186
}

iOSClient/Data/NCManageDatabase+Metadata.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1052,7 +1052,7 @@ extension NCManageDatabase {
10521052

10531053
// MARK: - GetResult(s)Metadata
10541054

1055-
func getResultsMetadatasPredicate(_ predicate: NSPredicate, layoutForView: NCDBLayoutForView?) -> [tableMetadata] {
1055+
func getResultsMetadatasPredicate(_ predicate: NSPredicate, layoutForView: NCDBLayoutForView?, directoryOnTop: Bool) -> [tableMetadata] {
10561056
do {
10571057
let realm = try Realm()
10581058
var results = realm.objects(tableMetadata.self).filter(predicate).freeze()
@@ -1064,7 +1064,7 @@ extension NCManageDatabase {
10641064
// 1. favorite order
10651065
if $0.favorite == $1.favorite {
10661066
// 2. directory order TOP
1067-
if layout.directoryOnTop {
1067+
if directoryOnTop {
10681068
if $0.directory == $1.directory {
10691069
// 3. natural fileName
10701070
return $0.fileNameView.localizedStandardCompare($1.fileNameView) == ordered
@@ -1080,7 +1080,7 @@ extension NCManageDatabase {
10801080
}
10811081
return sortedResults
10821082
} else {
1083-
if layout.directoryOnTop {
1083+
if directoryOnTop {
10841084
results = results.sorted(byKeyPath: layout.sort, ascending: layout.ascending).sorted(byKeyPath: "favorite", ascending: false).sorted(byKeyPath: "directory", ascending: false)
10851085
} else {
10861086
results = results.sorted(byKeyPath: layout.sort, ascending: layout.ascending).sorted(byKeyPath: "favorite", ascending: false)

iOSClient/Favorites/NCFavorite.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,15 @@ class NCFavorite: NCCollectionViewCommon {
5757

5858
override func reloadDataSource() {
5959
var predicate = self.defaultPredicate
60+
let directoryOnTop = NCKeychain().getDirectoryOnTop(account: session.account)
6061

6162
if self.serverUrl.isEmpty {
6263
predicate = NSPredicate(format: "account == %@ AND favorite == true AND NOT (status IN %@)", session.account, global.metadataStatusHideInView)
6364
}
6465

65-
let metadatas = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView)
66+
let metadatas = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView, directoryOnTop: directoryOnTop)
6667

67-
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView)
68+
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView, directoryOnTop: directoryOnTop)
6869

6970
super.reloadDataSource()
7071
}

iOSClient/Files/NCFiles.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ class NCFiles: NCCollectionViewCommon {
126126
else {
127127
return super.reloadDataSource()
128128
}
129+
let directoryOnTop = NCKeychain().getDirectoryOnTop(account: session.account)
129130

130131
// Watchdog: this is only a fail safe "dead lock", I don't think the timeout will ever be called but at least nothing gets stuck, if after 5 sec. (which is a long time in this routine), the semaphore is still locked
131132
//
@@ -144,9 +145,9 @@ class NCFiles: NCCollectionViewCommon {
144145
self.metadataFolder = database.getMetadataFolder(session: session, serverUrl: self.serverUrl)
145146
self.richWorkspaceText = database.getTableDirectory(predicate: predicateDirectory)?.richWorkspace
146147

147-
let metadatas = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView)
148+
let metadatas = self.database.getResultsMetadatasPredicate(predicate, layoutForView: layoutForView, directoryOnTop: directoryOnTop)
148149

149-
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView)
150+
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView, directoryOnTop: directoryOnTop)
150151

151152
if metadatas.isEmpty {
152153
self.semaphoreReloadDataSource.signal()

iOSClient/Groupfolders/NCGroupfolders.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,17 @@ class NCGroupfolders: NCCollectionViewCommon {
5757

5858
override func reloadDataSource() {
5959
var metadatas: [tableMetadata] = []
60+
let directoryOnTop = NCKeychain().getDirectoryOnTop(account: session.account)
6061

6162
if self.serverUrl.isEmpty {
6263
if let results = database.getResultsMetadatasFromGroupfolders(session: session) {
6364
metadatas = Array(results.freeze())
6465
}
6566
} else {
66-
metadatas = self.database.getResultsMetadatasPredicate(self.defaultPredicate, layoutForView: layoutForView)
67+
metadatas = self.database.getResultsMetadatasPredicate(self.defaultPredicate, layoutForView: layoutForView, directoryOnTop: directoryOnTop)
6768
}
6869

69-
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView)
70+
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: layoutForView, directoryOnTop: directoryOnTop)
7071

7172
super.reloadDataSource()
7273
}

iOSClient/Main/Collection Common/NCCollectionViewCommon.swift

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -835,6 +835,7 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
835835
!literalSearch.isEmpty else {
836836
return self.refreshControl.endRefreshing()
837837
}
838+
let directoryOnTop = NCKeychain().getDirectoryOnTop(account: session.account)
838839

839840
self.dataSource.removeAll()
840841
self.refreshControl.beginRefreshing()
@@ -847,7 +848,7 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
847848
} providers: { _, searchProviders in
848849
self.providers = searchProviders
849850
self.searchResults = []
850-
self.dataSource = NCCollectionViewDataSource(metadatas: [], layoutForView: self.layoutForView, providers: self.providers, searchResults: self.searchResults)
851+
self.dataSource = NCCollectionViewDataSource(metadatas: [], layoutForView: self.layoutForView, providers: self.providers, searchResults: self.searchResults, directoryOnTop: directoryOnTop)
851852
} update: { _, _, searchResult, metadatas in
852853
guard let metadatas, !metadatas.isEmpty, self.isSearchingMode, let searchResult else { return }
853854
NCNetworking.shared.unifiedSearchQueue.addOperation(NCCollectionViewUnifiedSearch(collectionViewCommon: self, metadatas: metadatas, searchResult: searchResult))
@@ -867,9 +868,9 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
867868
guard let metadatasSearch, error == .success, self.isSearchingMode else { return }
868869
let ocId = metadatasSearch.map { $0.ocId }
869870

870-
let metadatas = self.database.getResultsMetadatasPredicate(NSPredicate(format: "ocId IN %@", ocId), layoutForView: self.layoutForView)
871+
let metadatas = self.database.getResultsMetadatasPredicate(NSPredicate(format: "ocId IN %@", ocId), layoutForView: self.layoutForView, directoryOnTop: directoryOnTop)
871872

872-
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: self.layoutForView, providers: self.providers, searchResults: self.searchResults)
873+
self.dataSource = NCCollectionViewDataSource(metadatas: metadatas, layoutForView: self.layoutForView, providers: self.providers, searchResults: self.searchResults, directoryOnTop: directoryOnTop)
873874
}
874875
}
875876
}

iOSClient/Main/Collection Common/NCCollectionViewDataSource.swift

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,21 @@ class NCCollectionViewDataSource: NSObject {
3636
private var metadatasForSection: [NCMetadataForSection] = []
3737
private var layoutForView: NCDBLayoutForView?
3838
private var metadataIndexPath = ThreadSafeDictionary<IndexPath, tableMetadata>()
39+
private var directoryOnTop: Bool = true
3940

4041
override init() { super.init() }
4142

4243
init(metadatas: [tableMetadata],
4344
layoutForView: NCDBLayoutForView? = nil,
4445
providers: [NKSearchProvider]? = nil,
45-
searchResults: [NKSearchResult]? = nil) {
46+
searchResults: [NKSearchResult]? = nil,
47+
directoryOnTop: Bool) {
4648
super.init()
4749
removeAll()
4850

4951
self.metadatas = metadatas
5052
self.layoutForView = layoutForView
53+
self.directoryOnTop = directoryOnTop
5154
/// unified search
5255
self.providers = providers
5356
self.searchResults = searchResults
@@ -111,12 +114,10 @@ class NCCollectionViewDataSource: NSObject {
111114
/// normal
112115
let directory = NSLocalizedString("directory", comment: "").lowercased().firstUppercased
113116
self.sectionsValue = self.sectionsValue.sorted {
114-
if let directoryOnTop = layoutForView?.directoryOnTop,
115-
directoryOnTop,
117+
if self.directoryOnTop,
116118
$0 == directory {
117119
return true
118-
} else if let directoryOnTop = layoutForView?.directoryOnTop,
119-
directoryOnTop,
120+
} else if self.directoryOnTop,
120121
$1 == directory {
121122
return false
122123
}
@@ -146,7 +147,8 @@ class NCCollectionViewDataSource: NSObject {
146147
let metadataForSection = NCMetadataForSection(sectionValue: sectionValue,
147148
metadatas: metadatas,
148149
lastSearchResult: searchResult,
149-
layoutForView: self.layoutForView)
150+
layoutForView: self.layoutForView,
151+
directoryOnTop: self.directoryOnTop)
150152
metadatasForSection.append(metadataForSection)
151153
}
152154

@@ -342,6 +344,7 @@ class NCMetadataForSection: NSObject {
342344
var lastSearchResult: NKSearchResult?
343345
var unifiedSearchInProgress: Bool = false
344346
var layoutForView: NCDBLayoutForView?
347+
var directoryOnTop: Bool
345348

346349
private var metadatasSorted: [tableMetadata] = []
347350
private var metadatasFavoriteDirectory: [tableMetadata] = []
@@ -353,11 +356,12 @@ class NCMetadataForSection: NSObject {
353356
public var numFile: Int = 0
354357
public var totalSize: Int64 = 0
355358

356-
init(sectionValue: String, metadatas: [tableMetadata], lastSearchResult: NKSearchResult?, layoutForView: NCDBLayoutForView?) {
359+
init(sectionValue: String, metadatas: [tableMetadata], lastSearchResult: NKSearchResult?, layoutForView: NCDBLayoutForView?, directoryOnTop: Bool) {
357360
self.sectionValue = sectionValue
358361
self.metadatas = metadatas
359362
self.lastSearchResult = lastSearchResult
360363
self.layoutForView = layoutForView
364+
self.directoryOnTop = directoryOnTop
361365

362366
super.init()
363367

@@ -441,7 +445,7 @@ class NCMetadataForSection: NSObject {
441445
} else {
442446
metadatasFavoriteFile.append(metadata)
443447
}
444-
} else if metadata.directory && layoutForView?.directoryOnTop ?? true {
448+
} else if metadata.directory && self.directoryOnTop {
445449
metadatasDirectory.append(metadata)
446450
} else {
447451
metadatasFile.append(metadata)

iOSClient/Main/NCMainNavigationController.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,12 @@ class NCMainNavigationController: UINavigationController, UINavigationController
153153
"layoutForView": layoutForView])
154154
}
155155

156+
let directoryOnTop = NCKeychain().getDirectoryOnTop(account: session.account)
156157
let sortSubmenu = UIMenu(title: NSLocalizedString("_order_by_", comment: ""), options: .displayInline, children: [byName, byNewest, byLargest])
157158

158-
let foldersOnTop = UIAction(title: NSLocalizedString("_directory_on_top_no_", comment: ""), image: utility.loadImage(named: "folder"), state: layoutForView.directoryOnTop ? .on : .off) { _ in
159+
let foldersOnTop = UIAction(title: NSLocalizedString("_directory_on_top_no_", comment: ""), image: utility.loadImage(named: "folder"), state: directoryOnTop ? .on : .off) { _ in
159160

160-
layoutForView.directoryOnTop = !layoutForView.directoryOnTop
161+
NCKeychain().setDirectoryOnTop(account: self.session.account, value: !directoryOnTop)
161162

162163
NotificationCenter.default.postOnMainThread(name: self.global.notificationCenterChangeLayout,
163164
object: nil,

0 commit comments

Comments
 (0)