@@ -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