Skip to content

Commit 715cb13

Browse files
NMC 2169 - Media theming customisation changes
1 parent f14d91b commit 715cb13

8 files changed

Lines changed: 924 additions & 673 deletions

File tree

iOSClient/AppDelegate.swift

Lines changed: 376 additions & 5 deletions
Large diffs are not rendered by default.

iOSClient/Data/NCManageDatabase+Metadata.swift

Lines changed: 55 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ extension tableMetadata {
168168
if isDocumentViewableOnly {
169169
return false
170170
}
171-
if ["application/pdf", "com.adobe.pdf"].contains(contentType) || contentType.hasPrefix("text/") || classFile == NKCommon.TypeClassFile.image.rawValue {
171+
if ["application/pdf", "com.adobe.pdf"].contains(contentType) || contentType.hasPrefix("text/") || classFile == NKTypeClassFile.image.rawValue {
172172
return true
173173
}
174174
return false
@@ -177,11 +177,11 @@ extension tableMetadata {
177177
var isSavebleInCameraRoll: Bool {
178178
return (classFile == NKTypeClassFile.image.rawValue && contentType != "image/svg+xml") || classFile == NKTypeClassFile.video.rawValue
179179
}
180-
180+
181181
var isDocumentViewableOnly: Bool {
182-
sharePermissionsCollaborationServices == NCPermissions().permissionReadShare && classFile == NKCommon.TypeClassFile.document.rawValue
182+
sharePermissionsCollaborationServices == NCPermissions().permissionReadShare && classFile == NKTypeClassFile.document.rawValue
183183
}
184-
184+
185185
var isAudioOrVideo: Bool {
186186
return classFile == NKTypeClassFile.audio.rawValue || classFile == NKTypeClassFile.video.rawValue
187187
}
@@ -207,7 +207,7 @@ extension tableMetadata {
207207
}
208208

209209
var isCopyableInPasteboard: Bool {
210-
!isDocumentViewableOnly && !directory
210+
!directory
211211
}
212212

213213
#if !EXTENSION_FILE_PROVIDER_EXTENSION
@@ -216,11 +216,11 @@ extension tableMetadata {
216216
}
217217

218218
var isCopyableMovable: Bool {
219-
!isDocumentViewableOnly && !isDirectoryE2EE && !e2eEncrypted
219+
!isDirectoryE2EE && !e2eEncrypted
220220
}
221221

222222
var isModifiableWithQuickLook: Bool {
223-
if directory || isDocumentViewableOnly || isDirectoryE2EE {
223+
if directory || isDirectoryE2EE {
224224
return false
225225
}
226226
return isPDF || isImage
@@ -251,44 +251,21 @@ extension tableMetadata {
251251
}
252252

253253
var canSetAsAvailableOffline: Bool {
254-
// return session.isEmpty && !isDirectoryE2EE && !e2eEncrypted
255-
return session.isEmpty && !isDocumentViewableOnly
254+
return session.isEmpty && !isDirectoryE2EE && !e2eEncrypted
256255
}
257256

258257
var canShare: Bool {
259-
return session.isEmpty && !isDocumentViewableOnly && !directory && !NCBrandOptions.shared.disable_openin_file
260-
}
261-
262-
var canUnsetDirectoryAsE2EE: Bool {
263-
return !isDirectoryE2EE && directory && size == 0 && e2eEncrypted && NCPreferences().isEndToEndEnabled(account: account)
264-
}
265-
266-
var canOpenExternalEditor: Bool {
267-
if isDocumentViewableOnly {
268-
return false
269-
}
270-
let utility = NCUtility()
271-
let editors = utility.editorsDirectEditing(account: account, contentType: contentType)
272-
let isRichDocument = utility.isTypeFileRichDocument(self)
273-
return classFile == NKCommon.TypeClassFile.document.rawValue && editors.contains(NCGlobal.shared.editorText) && ((editors.contains(NCGlobal.shared.editorOnlyoffice) || isRichDocument))
258+
return session.isEmpty && !directory && !NCBrandOptions.shared.disable_openin_file
274259
}
275260

276-
var isWaitingTransfer: Bool {
277-
status == NCGlobal.shared.metadataStatusWaitDownload || status == NCGlobal.shared.metadataStatusWaitUpload || status == NCGlobal.shared.metadataStatusUploadError
261+
var canSetDirectoryAsE2EE: Bool {
262+
return directory && size == 0 && !e2eEncrypted && NCPreferences().isEndToEndEnabled(account: account)
278263
}
279264

280-
var isInTransfer: Bool {
281-
status == NCGlobal.shared.metadataStatusDownloading || status == NCGlobal.shared.metadataStatusUploading
265+
var canUnsetDirectoryAsE2EE: Bool {
266+
return !isDirectoryE2EE && directory && size == 0 && e2eEncrypted && NCPreferences().isEndToEndEnabled(account: account)
282267
}
283268

284-
var isTransferInForeground: Bool {
285-
(status > 0 && (chunk > 0 || e2eEncrypted))
286-
}
287-
288-
var isDownloadUpload: Bool {
289-
status == NCGlobal.shared.metadataStatusDownloading || status == NCGlobal.shared.metadataStatusUploading
290-
}
291-
292269
var isDownload: Bool {
293270
status == NCGlobal.shared.metadataStatusWaitDownload || status == NCGlobal.shared.metadataStatusDownloading
294271
}
@@ -428,7 +405,7 @@ extension tableMetadata {
428405
guard let capabilities = NCNetworking.shared.capabilities[account] else {
429406
return false
430407
}
431-
if !capabilities.fileSharingApiEnabled || (capabilities.e2EEEnabled && isDirectoryE2EE) {
408+
if !capabilities.fileSharingApiEnabled || (capabilities.e2EEEnabled && isDirectoryE2EE), !e2eEncrypted {
432409
return false
433410
}
434411
return !e2eEncrypted
@@ -1008,6 +985,34 @@ extension NCManageDatabase {
1008985
.map { $0.detachedCopy() }
1009986
} ?? []
1010987
}
988+
989+
func getMediaMetadatas(predicate: NSPredicate, sorted: String? = nil, ascending: Bool = false) -> ThreadSafeArray<tableMetadata>? {
990+
991+
do {
992+
let realm = try Realm()
993+
if let sorted {
994+
var results: [tableMetadata] = []
995+
switch sorted {//NCPreferences().mediaSortDate {
996+
case "date":
997+
results = realm.objects(tableMetadata.self).filter(predicate).sorted { ($0.date as Date) > ($1.date as Date) }
998+
case "creationDate":
999+
results = realm.objects(tableMetadata.self).filter(predicate).sorted { ($0.creationDate as Date) > ($1.creationDate as Date) }
1000+
case "uploadDate":
1001+
results = realm.objects(tableMetadata.self).filter(predicate).sorted { ($0.uploadDate as Date) > ($1.uploadDate as Date) }
1002+
default:
1003+
let results = realm.objects(tableMetadata.self).filter(predicate)
1004+
return ThreadSafeArray(results.map { tableMetadata.init(value: $0) })
1005+
}
1006+
return ThreadSafeArray(results.map { tableMetadata.init(value: $0) })
1007+
} else {
1008+
let results = realm.objects(tableMetadata.self).filter(predicate)
1009+
return ThreadSafeArray(results.map { tableMetadata.init(value: $0) })
1010+
}
1011+
} catch let error as NSError {
1012+
// NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
1013+
}
1014+
return nil
1015+
}
10111016

10121017
func getMetadatas(predicate: NSPredicate,
10131018
sortedByKeyPath: String,
@@ -1282,24 +1287,12 @@ extension NCManageDatabase {
12821287
counter += 1
12831288
listIdentifierRank[item.ocId] = NSNumber(value: counter)
12841289
}
1285-
1290+
12861291
return listIdentifierRank
12871292
}
12881293
return result ?? [:]
12891294
}
12901295

1291-
@objc func clearMetadatasUpload(account: String) {
1292-
do {
1293-
let realm = try Realm()
1294-
try realm.write {
1295-
let results = realm.objects(tableMetadata.self).filter("account == %@ AND (status == %d OR status == %d)", account, NCGlobal.shared.metadataStatusWaitUpload, NCGlobal.shared.metadataStatusUploadError)
1296-
realm.delete(results)
1297-
}
1298-
} catch let error {
1299-
NextcloudKit.shared.nkCommonInstance.writeLog("[ERROR] Could not write to database: \(error)")
1300-
}
1301-
}
1302-
13031296
func getAssetLocalIdentifiersUploadedAsync() async -> [String]? {
13041297
return await core.performRealmReadAsync { realm in
13051298
let results = realm.objects(tableMetadata.self).filter("assetLocalIdentifier != ''")
@@ -1408,41 +1401,17 @@ extension NCManageDatabase {
14081401
} ?? false
14091402
}
14101403

1411-
func createMetadatasFolder(assets: [PHAsset],
1412-
useSubFolder: Bool,
1413-
session: NCSession.Session, completion: @escaping ([tableMetadata]) -> Void) {
1414-
var foldersCreated: Set<String> = []
1415-
var metadatas: [tableMetadata] = []
1416-
let serverUrlBase = getAccountAutoUploadDirectory(session: session)
1417-
let fileNameBase = getAccountAutoUploadFileName(account: session.account)
1418-
let predicate = NSPredicate(format: "account == %@ AND serverUrl BEGINSWITH %@ AND directory == true", session.account, serverUrlBase)
1419-
1420-
func createMetadata(serverUrl: String, fileName: String, metadata: tableMetadata?) {
1421-
guard !foldersCreated.contains(serverUrl + "/" + fileName) else {
1422-
return
1423-
}
1424-
foldersCreated.insert(serverUrl + "/" + fileName)
1425-
1426-
if let metadata {
1427-
metadata.status = NCGlobal.shared.metadataStatusWaitCreateFolder
1428-
metadata.sessionSelector = NCGlobal.shared.selectorUploadAutoUpload
1429-
metadata.sessionDate = Date()
1430-
metadatas.append(tableMetadata(value: metadata))
1431-
} else {
1432-
let metadata = NCManageDatabase.shared.createMetadata(fileName: fileName,
1433-
fileNameView: fileName,
1434-
ocId: NSUUID().uuidString,
1435-
serverUrl: serverUrl,
1436-
url: "",
1437-
contentType: "httpd/unix-directory",
1438-
directory: true,
1439-
session: session,
1440-
sceneIdentifier: nil)
1441-
metadata.status = NCGlobal.shared.metadataStatusWaitCreateFolder
1442-
metadata.sessionSelector = NCGlobal.shared.selectorUploadAutoUpload
1443-
metadata.sessionDate = Date()
1444-
metadatas.append(metadata)
1445-
}
1404+
func getMetadataDirectoryAsync(serverUrl: String, account: String) async -> tableMetadata? {
1405+
guard let url = URL(string: serverUrl) else {
1406+
return nil
1407+
}
1408+
let fileName = url.lastPathComponent
1409+
var baseUrl = url.deletingLastPathComponent().absoluteString
1410+
if baseUrl.hasSuffix("/") {
1411+
baseUrl.removeLast()
1412+
}
1413+
guard let decodedBaseUrl = baseUrl.removingPercentEncoding else {
1414+
return nil
14461415
}
14471416

14481417
return await core.performRealmReadAsync { realm in
@@ -1452,7 +1421,7 @@ extension NCManageDatabase {
14521421
return object?.detachedCopy()
14531422
}
14541423
}
1455-
1424+
14561425
func getMetadataDirectory(serverUrl: String, account: String) -> tableMetadata? {
14571426
guard let url = URL(string: serverUrl) else {
14581427
return nil

0 commit comments

Comments
 (0)