Skip to content

Commit aa28af8

Browse files
author
Marino Faggiana
authored
iOS Files integration fix (#2949)
* fix Signed-off-by: Marino Faggiana <[email protected]> * 532 Signed-off-by: Marino Faggiana <[email protected]> --------- Signed-off-by: Marino Faggiana <[email protected]>
1 parent 6ebaf7e commit aa28af8

File tree

2 files changed

+14
-41
lines changed

2 files changed

+14
-41
lines changed

File Provider Extension/FileProviderEnumerator.swift

+10-37
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,17 @@ import FileProvider
2626
import NextcloudKit
2727

2828
class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
29-
3029
var enumeratedItemIdentifier: NSFileProviderItemIdentifier
3130
var serverUrl: String?
3231
let fpUtility = fileProviderUtility()
3332

3433
init(enumeratedItemIdentifier: NSFileProviderItemIdentifier) {
35-
3634
self.enumeratedItemIdentifier = enumeratedItemIdentifier
3735

3836
// Select ServerUrl
3937
if enumeratedItemIdentifier == .rootContainer {
4038
serverUrl = fileProviderData.shared.homeServerUrl
4139
} else {
42-
4340
let metadata = fpUtility.getTableMetadataFromItemIdentifier(enumeratedItemIdentifier)
4441
if metadata != nil {
4542
if let directorySource = NCManageDatabase.shared.getTableDirectory(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", metadata!.account, metadata!.serverUrl)) {
@@ -56,12 +53,10 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
5653
}
5754

5855
func enumerateItems(for observer: NSFileProviderEnumerationObserver, startingAt page: NSFileProviderPage) {
59-
6056
var items: [NSFileProviderItemProtocol] = []
6157

6258
/*** WorkingSet ***/
6359
if enumeratedItemIdentifier == .workingSet {
64-
6560
var itemIdentifierMetadata: [NSFileProviderItemIdentifier: tableMetadata] = [:]
6661

6762
// ***** Tags *****
@@ -103,21 +98,17 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
10398
}
10499

105100
if page == NSFileProviderPage.initialPageSortedByDate as NSFileProviderPage || page == NSFileProviderPage.initialPageSortedByName as NSFileProviderPage {
106-
107101
self.readFileOrFolder(serverUrl: serverUrl) { metadatas in
108102
self.completeObserver(observer, numPage: 1, metadatas: metadatas)
109103
}
110-
111104
} else {
112-
113105
let numPage = Int(String(data: page.rawValue, encoding: .utf8)!)!
114106
completeObserver(observer, numPage: numPage, metadatas: nil)
115107
}
116108
}
117109
}
118110

119111
func enumerateChanges(for observer: NSFileProviderChangeObserver, from anchor: NSFileProviderSyncAnchor) {
120-
121112
var itemsDelete: [NSFileProviderItemIdentifier] = []
122113
var itemsUpdate: [FileProviderItem] = []
123114

@@ -166,18 +157,13 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
166157
// --------------------------------------------------------------------------------------------
167158

168159
func completeObserver(_ observer: NSFileProviderEnumerationObserver, numPage: Int, metadatas: [tableMetadata]?) {
169-
170160
var numPage = numPage
171161
var items: [NSFileProviderItemProtocol] = []
172162

173163
if metadatas != nil {
174-
175164
for metadata in metadatas! {
176-
177165
if metadata.e2eEncrypted || (!metadata.session.isEmpty && metadata.session != NCNetworking.shared.sessionUploadBackgroundExtension) { continue }
178-
179166
fpUtility.createocIdentifierOnFileSystem(metadata: metadata)
180-
181167
let parentItemIdentifier = fpUtility.getParentItemIdentifier(metadata: metadata)
182168
if parentItemIdentifier != nil {
183169
let item = FileProviderItem(metadata: metadata, parentItemIdentifier: parentItemIdentifier!)
@@ -197,29 +183,16 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
197183
}
198184

199185
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)
223196
let metadatas = NCManageDatabase.shared.getMetadatas(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", fileProviderData.shared.account, serverUrl), sorted: "fileName", ascending: true)
224197
completionHandler(metadatas)
225198
}

Nextcloud.xcodeproj/project.pbxproj

+4-4
Original file line numberDiff line numberDiff line change
@@ -5264,7 +5264,7 @@
52645264
CLANG_WARN_UNREACHABLE_CODE = YES;
52655265
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
52665266
COPY_PHASE_STRIP = NO;
5267-
CURRENT_PROJECT_VERSION = 2;
5267+
CURRENT_PROJECT_VERSION = 0;
52685268
DEBUG_INFORMATION_FORMAT = dwarf;
52695269
DEVELOPMENT_TEAM = NKUJUXUJ3B;
52705270
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -5290,7 +5290,7 @@
52905290
"@executable_path/Frameworks",
52915291
"@executable_path/../../Frameworks",
52925292
);
5293-
MARKETING_VERSION = 5.3.1;
5293+
MARKETING_VERSION = 5.3.2;
52945294
ONLY_ACTIVE_ARCH = YES;
52955295
OTHER_CFLAGS = "-v";
52965296
OTHER_LDFLAGS = "";
@@ -5330,7 +5330,7 @@
53305330
CLANG_WARN_UNREACHABLE_CODE = YES;
53315331
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
53325332
COPY_PHASE_STRIP = NO;
5333-
CURRENT_PROJECT_VERSION = 2;
5333+
CURRENT_PROJECT_VERSION = 0;
53345334
DEVELOPMENT_TEAM = NKUJUXUJ3B;
53355335
ENABLE_STRICT_OBJC_MSGSEND = YES;
53365336
ENABLE_TESTABILITY = YES;
@@ -5353,7 +5353,7 @@
53535353
"@executable_path/Frameworks",
53545354
"@executable_path/../../Frameworks",
53555355
);
5356-
MARKETING_VERSION = 5.3.1;
5356+
MARKETING_VERSION = 5.3.2;
53575357
ONLY_ACTIVE_ARCH = YES;
53585358
OTHER_CFLAGS = "-v";
53595359
OTHER_LDFLAGS = "";

0 commit comments

Comments
 (0)