@@ -7,10 +7,10 @@ import NextcloudKit
77
88final class NCMediaMetadataBackgroundProcessor {
99 enum BackfillStatus {
10- case skippedAlreadyCompleted
11- case completed( processed: Int , inserted: Int , updated: Int )
12- case failed( processed: Int , inserted: Int , updated: Int , errorCode: Int , errorDescription: String )
13- case cancelled( processed: Int , inserted: Int , updated: Int )
10+ case skippedAlreadyCompleted( account : String )
11+ case completed( account : String , processed: Int , inserted: Int , updated: Int )
12+ case failed( account : String , processed: Int , inserted: Int , updated: Int , errorCode: Int , errorDescription: String )
13+ case cancelled( account : String , processed: Int , inserted: Int , updated: Int )
1414
1515 var isSuccessful : Bool {
1616 switch self {
@@ -23,22 +23,25 @@ final class NCMediaMetadataBackgroundProcessor {
2323
2424 var logMessage : String {
2525 switch self {
26- case . skippedAlreadyCompleted:
27- return " Media metadata backfill skipped: cycle already completed "
28- case . completed( let processed, let inserted, let updated) :
29- return " Media metadata backfill completed: processed \( processed) - inserted \( inserted) - updated \( updated) "
30- case . failed( let processed, let inserted, let updated, let errorCode, let errorDescription) :
31- return " Media metadata backfill failed: processed \( processed) - inserted \( inserted) - updated \( updated) - error \( errorCode) \( errorDescription) "
32- case . cancelled( let processed, let inserted, let updated) :
33- return " Media metadata backfill cancelled: processed \( processed) - inserted \( inserted) - updated \( updated) "
26+ case . skippedAlreadyCompleted( let account) :
27+ return " Media metadata backfill skipped for account \( account) : cycle already completed "
28+
29+ case . completed( let account, let processed, let inserted, let updated) :
30+ return " Media metadata backfill completed for account \( account) : processed \( processed) - inserted \( inserted) - updated \( updated) "
31+
32+ case . failed( let account, let processed, let inserted, let updated, let errorCode, let errorDescription) :
33+ return " Media metadata backfill failed for account \( account) : processed \( processed) - inserted \( inserted) - updated \( updated) - error \( errorCode) \( errorDescription) "
34+
35+ case . cancelled( let account, let processed, let inserted, let updated) :
36+ return " Media metadata backfill cancelled for account \( account) : processed \( processed) - inserted \( inserted) - updated \( updated) "
3437 }
3538 }
3639 }
3740
3841 enum PlaceholderHydrationStatus {
39- case skippedNoPlaceholders
40- case completed( total: Int , succeeded: Int , failed: Int )
41- case cancelled( total: Int , succeeded: Int , failed: Int )
42+ case skippedNoPlaceholders( account : String )
43+ case completed( account : String , total: Int , succeeded: Int , failed: Int )
44+ case cancelled( account : String , total: Int , succeeded: Int , failed: Int )
4245
4346 var isSuccessful : Bool {
4447 switch self {
@@ -51,14 +54,16 @@ final class NCMediaMetadataBackgroundProcessor {
5154
5255 var logMessage : String {
5356 switch self {
54- case . skippedNoPlaceholders:
55- return " Media metadata placeholder hydration skipped: no placeholders found "
56- case . completed( let total, let succeeded, let failed) :
57+ case . skippedNoPlaceholders( let account) :
58+ return " Media metadata placeholder hydration skipped for account \( account) : no placeholders found "
59+
60+ case . completed( let account, let total, let succeeded, let failed) :
5761 let pending = max ( 0 , total - succeeded - failed)
58- return " Media metadata placeholder hydration completed: total \( total) - succeeded \( succeeded) - failed \( failed) - pending \( pending) "
59- case . cancelled( let total, let succeeded, let failed) :
62+ return " Media metadata placeholder hydration completed for account \( account) : total \( total) - succeeded \( succeeded) - failed \( failed) - pending \( pending) "
63+
64+ case . cancelled( let account, let total, let succeeded, let failed) :
6065 let pending = max ( 0 , total - succeeded - failed)
61- return " Media metadata placeholder hydration cancelled: total \( total) - succeeded \( succeeded) - failed \( failed) - pending \( pending) "
66+ return " Media metadata placeholder hydration cancelled for account \( account ) : total \( total) - succeeded \( succeeded) - failed \( failed) - pending \( pending) "
6267 }
6368 }
6469 }
@@ -73,7 +78,7 @@ final class NCMediaMetadataBackgroundProcessor {
7378 let state = await database. getMediaMetadataBackfillAsync ( account: account. account)
7479
7580 guard state? . lastCompletedCycleDate == nil else {
76- return . skippedAlreadyCompleted
81+ return . skippedAlreadyCompleted( account : account . account )
7782 }
7883
7984 var offset = state? . offset ?? 0
@@ -94,14 +99,15 @@ final class NCMediaMetadataBackgroundProcessor {
9499 )
95100
96101 guard !Task. isCancelled else {
97- return . cancelled( processed: processed, inserted: inserted, updated: updated)
102+ return . cancelled( account : account . account , processed: processed, inserted: inserted, updated: updated)
98103 }
99104
100105 guard let files = result. files else {
101106 let errorCode = result. error? . errorCode ?? 0
102107 let errorDescription = result. error? . errorDescription ?? " "
103108
104109 return . failed(
110+ account: account. account,
105111 processed: processed,
106112 inserted: inserted,
107113 updated: updated,
@@ -112,7 +118,7 @@ final class NCMediaMetadataBackgroundProcessor {
112118
113119 guard !files. isEmpty else {
114120 await database. completeMediaMetadataBackfillAsync ( account: account. account)
115- return . completed( processed: processed, inserted: inserted, updated: updated)
121+ return . completed( account : account . account , processed: processed, inserted: inserted, updated: updated)
116122 }
117123
118124 let ocIds = files. compactMap ( \. ocId)
@@ -131,7 +137,7 @@ final class NCMediaMetadataBackgroundProcessor {
131137 await update ( offset, resultPlaceholders. inserted, resultPlaceholders. updated)
132138
133139 guard !Task. isCancelled else {
134- return . cancelled( processed: processed, inserted: inserted, updated: updated)
140+ return . cancelled( account : account . account , processed: processed, inserted: inserted, updated: updated)
135141 }
136142
137143 await database. updateMediaMetadataBackfillAsync (
@@ -141,13 +147,13 @@ final class NCMediaMetadataBackgroundProcessor {
141147
142148 guard files. count == limit else {
143149 await database. completeMediaMetadataBackfillAsync ( account: account. account)
144- return . completed( processed: processed, inserted: inserted, updated: updated)
150+ return . completed( account : account . account , processed: processed, inserted: inserted, updated: updated)
145151 }
146152
147153 token = result. token
148154 }
149155
150- return . cancelled( processed: processed, inserted: inserted, updated: updated)
156+ return . cancelled( account : account . account , processed: processed, inserted: inserted, updated: updated)
151157 }
152158
153159 /// Completes media metadata placeholders by retrieving and storing their full properties.
@@ -171,7 +177,7 @@ final class NCMediaMetadataBackgroundProcessor {
171177 ascending: false ,
172178 limit: limit
173179 ) , !metadatas. isEmpty else {
174- return . skippedNoPlaceholders
180+ return . skippedNoPlaceholders( account : account . account )
175181 }
176182
177183 let total = metadatas. count
@@ -187,16 +193,25 @@ final class NCMediaMetadataBackgroundProcessor {
187193 account: metadata. account
188194 )
189195
190- guard !Task. isCancelled,
191- result. error == . success,
192- let file = result. files? . first else {
196+ guard !Task. isCancelled else {
193197 return false
194198 }
195199
196- let metadata = await NCManageDatabaseCreateMetadata ( ) . convertFileToMetadataAsync ( file)
197- await database. addMetadataAsync ( metadata)
200+ switch result. error. errorCode {
201+ case 0 :
202+ if let file = result. files? . first {
203+ let metadata = await NCManageDatabaseCreateMetadata ( ) . convertFileToMetadataAsync ( file)
204+ await database. addMetadataAsync ( metadata)
205+ }
206+ return true
207+
208+ case 404 :
209+ await database. deleteMetadataAsync ( ocId: metadata. ocId)
210+ return true
198211
199- return true
212+ default :
213+ return false
214+ }
200215 }
201216
202217 await withTaskGroup ( of: Bool . self) { group in
@@ -235,11 +250,11 @@ final class NCMediaMetadataBackgroundProcessor {
235250 }
236251
237252 guard !Task. isCancelled else {
238- return . cancelled( total: total, succeeded: succeeded, failed: failed)
253+ return . cancelled( account : account . account , total: total, succeeded: succeeded, failed: failed)
239254 }
240255
241256 await update ( succeeded)
242257
243- return . completed( total: total, succeeded: succeeded, failed: failed)
258+ return . completed( account : account . account , total: total, succeeded: succeeded, failed: failed)
244259 }
245260}
0 commit comments