Skip to content

Commit 0565a24

Browse files
Protocol flush (#3885)
1 parent 44598f8 commit 0565a24

33 files changed

+162
-49
lines changed

Nextcloud.xcodeproj/project.pbxproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5705,7 +5705,7 @@
57055705
CLANG_WARN_UNREACHABLE_CODE = YES;
57065706
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
57075707
COPY_PHASE_STRIP = NO;
5708-
CURRENT_PROJECT_VERSION = 3;
5708+
CURRENT_PROJECT_VERSION = 4;
57095709
DEBUG_INFORMATION_FORMAT = dwarf;
57105710
DEVELOPMENT_TEAM = NKUJUXUJ3B;
57115711
ENABLE_STRICT_OBJC_MSGSEND = YES;
@@ -5771,7 +5771,7 @@
57715771
CLANG_WARN_UNREACHABLE_CODE = YES;
57725772
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
57735773
COPY_PHASE_STRIP = NO;
5774-
CURRENT_PROJECT_VERSION = 3;
5774+
CURRENT_PROJECT_VERSION = 4;
57755775
DEVELOPMENT_TEAM = NKUJUXUJ3B;
57765776
ENABLE_STRICT_OBJC_MSGSEND = YES;
57775777
ENABLE_TESTABILITY = YES;

iOSClient/Data/NCManageDatabase+LivePhoto.swift

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,18 @@ extension NCManageDatabase {
103103
}
104104
}
105105
// swiftlint:enable empty_string
106+
107+
/// Returns true if at least one valid Live Photo record exists for the given account.
108+
func hasLivePhotos() async -> Bool {
109+
await core.performRealmReadAsync { realm in
110+
let results = realm.objects(tableLivePhoto.self)
111+
.where {
112+
$0.serverUrlFileNameImage != "" &&
113+
$0.serverUrlFileNameVideo != "" &&
114+
$0.fileIdImage != "" &&
115+
$0.fileIdVideo != ""
116+
}
117+
return !results.isEmpty
118+
} ?? false
119+
}
106120
}

iOSClient/Data/NCMetadataTranfersSuccess.swift

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,25 @@
55
import Foundation
66
import NextcloudKit
77

8+
public protocol NCMetadataTransfersSuccessDelegate: AnyObject {
9+
func metadataTransferWillFlush(hasLivePhotos: Bool)
10+
func metadataTransferDidFlush(hasLivePhotos: Bool)
11+
}
12+
813
actor NCMetadataTranfersSuccess {
914
private var tranfersSuccess: [tableMetadata] = []
1015
private let utility = NCUtility()
16+
private var delegates: [NCMetadataTransfersSuccessDelegate] = []
17+
18+
// Adds a new delegate
19+
func addDelegate(_ delegate: NCMetadataTransfersSuccessDelegate) {
20+
delegates.append(delegate)
21+
}
22+
23+
// Removes a delegate
24+
func removeDelegate(_ delegate: NCMetadataTransfersSuccessDelegate) {
25+
delegates.removeAll { $0 as AnyObject === delegate as AnyObject }
26+
}
1127

1228
func append(metadata: tableMetadata, ocId: String, date: Date?, etag: String?) async {
1329
metadata.ocId = ocId
@@ -55,14 +71,17 @@ actor NCMetadataTranfersSuccess {
5571

5672
func flush() async {
5773
let metadatas: [tableMetadata] = tranfersSuccess
74+
let hasLivePhotos = await NCManageDatabase.shared.hasLivePhotos()
5875
tranfersSuccess.removeAll(keepingCapacity: true)
5976

60-
NotificationCenter.default.postOnMainThread(name: NCGlobal.shared.notificationCenterMetadataTranfersSuccessFlush)
61-
6277
var metadatasLocalFiles: [tableMetadata] = []
6378
var metadatasLivePhoto: [tableMetadata] = []
6479
var autoUploads: [tableAutoUploadTransfer] = []
6580

81+
for delegate in delegates {
82+
delegate.metadataTransferWillFlush(hasLivePhotos: hasLivePhotos)
83+
}
84+
6685
for metadata in metadatas {
6786
let results = await NCNetworking.shared.helperMetadataSuccess(metadata: metadata)
6887
if let localFile = results.localFile {
@@ -99,6 +118,7 @@ actor NCMetadataTranfersSuccess {
99118
for metadata in metadatas {
100119
delegate.transferChange(status: NCGlobal.shared.networkingStatusUploaded,
101120
account: metadata.account,
121+
fileName: metadata.fileName,
102122
serverUrl: metadata.serverUrl,
103123
selector: metadata.sessionSelector,
104124
ocId: metadata.ocId,
@@ -108,6 +128,10 @@ actor NCMetadataTranfersSuccess {
108128
}
109129
}
110130

131+
for delegate in delegates {
132+
delegate.metadataTransferDidFlush(hasLivePhotos: hasLivePhotos)
133+
}
134+
111135
nkLog(tag: NCGlobal.shared.logTagMetadataTransfers, message: "Flush successful (\(metadatas.count))", consoleOnly: true)
112136
}
113137
}

iOSClient/Main/Collection Common/NCCollectionViewCommon.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
150150
return self.serverUrl == self.utilityFileSystem.getHomeServer(session: self.session) && capabilities.recommendations
151151
}
152152

153-
internal let debouncer = NCDebouncer()
153+
internal let debouncer = NCDebouncer(maxEventCount: NCBrandOptions.shared.numMaximumProcess)
154154

155155
// MARK: - View Life Cycle
156156

@@ -346,6 +346,7 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
346346

347347
func transferChange(status: String,
348348
account: String,
349+
fileName: String,
349350
serverUrl: String,
350351
selector: String?,
351352
ocId: String,
@@ -382,7 +383,7 @@ class NCCollectionViewCommon: UIViewController, UIGestureRecognizerDelegate, UIS
382383
case self.global.networkingStatusCreateFolder:
383384
if serverUrl == self.serverUrl,
384385
selector != self.global.selectorUploadAutoUpload,
385-
let metadata = await NCManageDatabase.shared.getMetadataFromOcIdAsync(ocId) {
386+
let metadata = await NCManageDatabase.shared.getMetadataAsync(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileName == %@", account, serverUrl, fileName)) {
386387
self.pushMetadata(metadata)
387388
}
388389
// RENAME

iOSClient/Main/NCDragDrop.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ class NCDragDrop: NSObject {
153153
await NCNetworking.shared.transferDispatcher.notifyAllDelegates { delegate in
154154
delegate.transferChange(status: self.global.networkingStatusCopyMove,
155155
account: metadata.account,
156+
fileName: metadata.fileName,
156157
serverUrl: metadata.serverUrl,
157158
selector: metadata.sessionSelector,
158159
ocId: metadata.ocId,
@@ -168,6 +169,7 @@ class NCDragDrop: NSObject {
168169
await NCNetworking.shared.transferDispatcher.notifyAllDelegates { delegate in
169170
delegate.transferChange(status: self.global.networkingStatusCopyMove,
170171
account: metadata.account,
172+
fileName: metadata.fileName,
171173
serverUrl: metadata.serverUrl,
172174
selector: metadata.sessionSelector,
173175
ocId: metadata.ocId,

iOSClient/Main/NCMainNavigationController.swift

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -336,10 +336,11 @@ class NCMainNavigationController: UINavigationController, UINavigationController
336336
Task { @MainActor in
337337
let richWorkspaceCommon = NCRichWorkspaceCommon()
338338
if let viewController = controller.currentViewController() {
339-
if await NCManageDatabase.shared.getMetadataAsync(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView LIKE[c] %@",
340-
session.account,
341-
serverUrl,
342-
NCGlobal.shared.fileNameRichWorkspace.lowercased())) == nil {
339+
if await NCManageDatabase.shared.getMetadataAsync(
340+
predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND fileNameView LIKE[c] %@",
341+
session.account,
342+
serverUrl,
343+
NCGlobal.shared.fileNameRichWorkspace.lowercased())) == nil {
343344
richWorkspaceCommon.createViewerNextcloudText(serverUrl: serverUrl, viewController: viewController, session: session)
344345
} else {
345346
richWorkspaceCommon.openViewerNextcloudText(serverUrl: serverUrl, viewController: viewController, session: session)

iOSClient/Media/NCMedia+TransferDelegate.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ extension NCMedia: NCTransferDelegate {
1919

2020
func transferChange(status: String,
2121
account: String,
22+
fileName: String,
2223
serverUrl: String,
2324
selector: String?,
2425
ocId: String,

iOSClient/Media/NCMedia.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class NCMedia: UIViewController {
5252
var numberOfColumns: Int = 0
5353
var lastNumberOfColumns: Int = 0
5454

55-
let debouncer = NCDebouncer()
55+
let debouncer = NCDebouncer(maxEventCount: 10)
5656

5757
@MainActor
5858
var session: NCSession.Session {

iOSClient/Menu/NCCollectionViewCommon+Menu.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,7 @@ extension NCCollectionViewCommon {
289289
await NCNetworking.shared.transferDispatcher.notifyAllDelegates { delegate in
290290
delegate.transferChange(status: NCGlobal.shared.networkingStatusDownloaded,
291291
account: metadata.account,
292+
fileName: metadata.fileName,
292293
serverUrl: metadata.serverUrl,
293294
selector: NCGlobal.shared.selectorSaveAsScan,
294295
ocId: metadata.ocId,
@@ -360,6 +361,7 @@ extension NCCollectionViewCommon {
360361
await NCNetworking.shared.transferDispatcher.notifyAllDelegates { delegate in
361362
delegate.transferChange(status: NCGlobal.shared.networkingStatusDownloaded,
362363
account: metadata.account,
364+
fileName: metadata.fileName,
363365
serverUrl: metadata.serverUrl,
364366
selector: NCGlobal.shared.selectorLoadFileQuickLook,
365367
ocId: metadata.ocId,

iOSClient/Menu/NCContextMenu.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ class NCContextMenu: NSObject {
5959
await self.networking.transferDispatcher.notifyAllDelegates { delegate in
6060
delegate.transferChange(status: self.global.networkingStatusDownloaded,
6161
account: self.metadata.account,
62+
fileName: self.metadata.fileName,
6263
serverUrl: self.metadata.serverUrl,
6364
selector: self.global.selectorOpenIn,
6465
ocId: self.metadata.ocId,
@@ -113,6 +114,7 @@ class NCContextMenu: NSObject {
113114
await self.networking.transferDispatcher.notifyAllDelegates { delegate in
114115
delegate.transferChange(status: self.global.networkingStatusDownloaded,
115116
account: self.metadata.account,
117+
fileName: self.metadata.fileName,
116118
serverUrl: self.metadata.serverUrl,
117119
selector: self.global.selectorLoadFileQuickLook,
118120
ocId: self.metadata.ocId,
@@ -180,6 +182,7 @@ class NCContextMenu: NSObject {
180182
await self.networking.transferDispatcher.notifyAllDelegates { delegate in
181183
delegate.transferChange(status: NCGlobal.shared.networkingStatusDelete,
182184
account: self.metadata.account,
185+
fileName: self.metadata.fileName,
183186
serverUrl: self.metadata.serverUrl,
184187
selector: self.metadata.sessionSelector,
185188
ocId: self.metadata.ocId,

0 commit comments

Comments
 (0)