@@ -26,20 +26,17 @@ import FileProvider
26
26
import NextcloudKit
27
27
28
28
class FileProviderEnumerator : NSObject , NSFileProviderEnumerator {
29
-
30
29
var enumeratedItemIdentifier : NSFileProviderItemIdentifier
31
30
var serverUrl : String ?
32
31
let fpUtility = fileProviderUtility ( )
33
32
34
33
init ( enumeratedItemIdentifier: NSFileProviderItemIdentifier ) {
35
-
36
34
self . enumeratedItemIdentifier = enumeratedItemIdentifier
37
35
38
36
// Select ServerUrl
39
37
if enumeratedItemIdentifier == . rootContainer {
40
38
serverUrl = fileProviderData. shared. homeServerUrl
41
39
} else {
42
-
43
40
let metadata = fpUtility. getTableMetadataFromItemIdentifier ( enumeratedItemIdentifier)
44
41
if metadata != nil {
45
42
if let directorySource = NCManageDatabase . shared. getTableDirectory ( predicate: NSPredicate ( format: " account == %@ AND serverUrl == %@ " , metadata!. account, metadata!. serverUrl) ) {
@@ -56,12 +53,10 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
56
53
}
57
54
58
55
func enumerateItems( for observer: NSFileProviderEnumerationObserver , startingAt page: NSFileProviderPage ) {
59
-
60
56
var items : [ NSFileProviderItemProtocol ] = [ ]
61
57
62
58
/*** WorkingSet ***/
63
59
if enumeratedItemIdentifier == . workingSet {
64
-
65
60
var itemIdentifierMetadata : [ NSFileProviderItemIdentifier : tableMetadata ] = [ : ]
66
61
67
62
// ***** Tags *****
@@ -103,21 +98,17 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
103
98
}
104
99
105
100
if page == NSFileProviderPage . initialPageSortedByDate as NSFileProviderPage || page == NSFileProviderPage . initialPageSortedByName as NSFileProviderPage {
106
-
107
101
self . readFileOrFolder ( serverUrl: serverUrl) { metadatas in
108
102
self . completeObserver ( observer, numPage: 1 , metadatas: metadatas)
109
103
}
110
-
111
104
} else {
112
-
113
105
let numPage = Int ( String ( data: page. rawValue, encoding: . utf8) !) !
114
106
completeObserver ( observer, numPage: numPage, metadatas: nil )
115
107
}
116
108
}
117
109
}
118
110
119
111
func enumerateChanges( for observer: NSFileProviderChangeObserver , from anchor: NSFileProviderSyncAnchor ) {
120
-
121
112
var itemsDelete : [ NSFileProviderItemIdentifier ] = [ ]
122
113
var itemsUpdate : [ FileProviderItem ] = [ ]
123
114
@@ -166,18 +157,13 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
166
157
// --------------------------------------------------------------------------------------------
167
158
168
159
func completeObserver( _ observer: NSFileProviderEnumerationObserver , numPage: Int , metadatas: [ tableMetadata ] ? ) {
169
-
170
160
var numPage = numPage
171
161
var items : [ NSFileProviderItemProtocol ] = [ ]
172
162
173
163
if metadatas != nil {
174
-
175
164
for metadata in metadatas! {
176
-
177
165
if metadata. e2eEncrypted || ( !metadata. session. isEmpty && metadata. session != NCNetworking . shared. sessionUploadBackgroundExtension) { continue }
178
-
179
166
fpUtility. createocIdentifierOnFileSystem ( metadata: metadata)
180
-
181
167
let parentItemIdentifier = fpUtility. getParentItemIdentifier ( metadata: metadata)
182
168
if parentItemIdentifier != nil {
183
169
let item = FileProviderItem ( metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
@@ -197,29 +183,16 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
197
183
}
198
184
199
185
func readFileOrFolder( serverUrl: String , completionHandler: @escaping ( _ metadatas: [ tableMetadata ] ? ) -> Void ) {
200
-
201
- var directoryEtag : String ?
202
-
203
- if let tableDirectory = NCManageDatabase . shared. getTableDirectory ( predicate: NSPredicate ( format: " account == %@ AND serverUrl == %@ " , fileProviderData. shared. account, serverUrl) ) {
204
- directoryEtag = tableDirectory. etag
205
- }
206
-
207
- NextcloudKit . shared. readFileOrFolder ( serverUrlFileName: serverUrl, depth: " 0 " , showHiddenFiles: NCKeychain ( ) . showHiddenFiles) { account, files, _, error in
208
-
209
- if directoryEtag != files. first? . etag {
210
-
211
- NextcloudKit . shared. readFileOrFolder ( serverUrlFileName: serverUrl, depth: " 1 " , showHiddenFiles: NCKeychain ( ) . showHiddenFiles) { account, files, _, error in
212
-
213
- if error == . success {
214
- DispatchQueue . global ( ) . async {
215
- NCManageDatabase . shared. convertFilesToMetadatas ( files, useFirstAsMetadataFolder: true ) { _, metadatas in
216
- let predicate = NSPredicate ( format: " account == %@ AND serverUrl == %@ AND status == %d " , account, serverUrl, NCGlobal . shared. metadataStatusNormal)
217
- NCManageDatabase . shared. updateMetadatas ( metadatas, predicate: predicate)
218
- let metadatas = NCManageDatabase . shared. getMetadatas ( predicate: NSPredicate ( format: " account == %@ AND serverUrl == %@ " , fileProviderData. shared. account, serverUrl) , sorted: " fileName " , ascending: true )
219
- completionHandler ( metadatas)
220
- }
221
- }
222
- } else {
186
+ NextcloudKit . shared. readFileOrFolder ( serverUrlFileName: serverUrl, depth: " 1 " , showHiddenFiles: NCKeychain ( ) . showHiddenFiles) { account, files, _, error in
187
+ if error == . success {
188
+ DispatchQueue . global ( ) . async {
189
+ NCManageDatabase . shared. convertFilesToMetadatas ( files, useFirstAsMetadataFolder: true ) { metadataFolder, metadatas in
190
+ /// FOLDER
191
+ NCManageDatabase . shared. addMetadata ( metadataFolder)
192
+ NCManageDatabase . shared. addDirectory ( e2eEncrypted: metadataFolder. e2eEncrypted, favorite: metadataFolder. favorite, ocId: metadataFolder. ocId, fileId: metadataFolder. fileId, etag: metadataFolder. etag, permissions: metadataFolder. permissions, richWorkspace: metadataFolder. richWorkspace, serverUrl: serverUrl, account: metadataFolder. account)
193
+ /// FILES
194
+ let predicate = NSPredicate ( format: " account == %@ AND serverUrl == %@ AND status == %d " , account, serverUrl, NCGlobal . shared. metadataStatusNormal)
195
+ NCManageDatabase . shared. updateMetadatas ( metadatas, predicate: predicate)
223
196
let metadatas = NCManageDatabase . shared. getMetadatas ( predicate: NSPredicate ( format: " account == %@ AND serverUrl == %@ " , fileProviderData. shared. account, serverUrl) , sorted: " fileName " , ascending: true )
224
197
completionHandler ( metadatas)
225
198
}
0 commit comments