marinofaggiana 5 жил өмнө
parent
commit
250d5f8686

+ 1 - 1
Cartfile

@@ -1,4 +1,4 @@
-github "nextcloud/ios-communication-library" "v0.3"
+github "nextcloud/ios-communication-library" "develop"
 github "tilltue/TLPhotoPicker" "2.0.7"
 github "tilltue/TLPhotoPicker" "2.0.7"
 github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "kishikawakatsumi/UICKeyChainStore" "v2.1.2"
 github "danielsaidi/Sheeeeeeeeet" "3.0.9"
 github "danielsaidi/Sheeeeeeeeet" "3.0.9"

+ 1 - 1
Cartfile.resolved

@@ -17,7 +17,7 @@ github "krzyzanowskim/OpenSSL" "1.0.218"
 github "malcommac/SwiftRichString" "3.5.1"
 github "malcommac/SwiftRichString" "3.5.1"
 github "marinofaggiana/AFNetworking" "2967678c3e0e98c9b8d7e06222ad12d1f49c26f2"
 github "marinofaggiana/AFNetworking" "2967678c3e0e98c9b8d7e06222ad12d1f49c26f2"
 github "marinofaggiana/FastScroll" "81967c2309d29bc2c330d422da612160a30bade8"
 github "marinofaggiana/FastScroll" "81967c2309d29bc2c330d422da612160a30bade8"
-github "nextcloud/ios-communication-library" "v0.3"
+github "nextcloud/ios-communication-library" "a64291367ceb5bf1b715d0689ca6040cb5c3990e"
 github "realm/realm-cocoa" "v4.1.1"
 github "realm/realm-cocoa" "v4.1.1"
 github "rechsteiner/Parchment" "v1.7.0"
 github "rechsteiner/Parchment" "v1.7.0"
 github "tilltue/TLPhotoPicker" "2.0.7"
 github "tilltue/TLPhotoPicker" "2.0.7"

+ 1 - 1
File Provider Extension/FileProviderEnumerator.swift

@@ -244,7 +244,7 @@ class FileProviderEnumerator: NSObject, NSFileProviderEnumerator {
                         
                         
                         // Update directory etag
                         // Update directory etag
                         let directory = files![0]
                         let directory = files![0]
-                        NCManageDatabase.sharedInstance.setDirectory(serverUrl: serverUrl, serverUrlTo: nil, etag: directory.etag, ocId: directory.ocId, encrypted: directory.e2eEncrypted, account: account)
+                        NCManageDatabase.sharedInstance.setDirectory(serverUrl: serverUrl, serverUrlTo: nil, etag: directory.etag, ocId: directory.ocId, encrypted: directory.e2eEncrypted, richWorkspace: nil, account: account)
                                                 
                                                 
                         // Update DB
                         // Update DB
                         NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", account, serverUrl, k_metadataStatusNormal, k_metadataStatusHide))
                         NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", account, serverUrl, k_metadataStatusNormal, k_metadataStatusHide))

+ 2 - 2
File Provider Extension/FileProviderExtension+Actions.swift

@@ -55,7 +55,7 @@ extension FileProviderExtension {
                     return
                     return
                 }
                 }
                 
                 
-                guard let _ = NCManageDatabase.sharedInstance.addDirectory(encrypted: false, favorite: false, ocId: ocId!, permissions: nil, serverUrl: tableDirectory.serverUrl + "/" + directoryName, account: account) else {
+                guard let _ = NCManageDatabase.sharedInstance.addDirectory(encrypted: false, favorite: false, ocId: ocId!, permissions: nil, serverUrl: tableDirectory.serverUrl + "/" + directoryName, richWorkspace: nil, account: account) else {
                     completionHandler(nil, NSFileProviderError(.noSuchItem))
                     completionHandler(nil, NSFileProviderError(.noSuchItem))
                     return
                     return
                 }
                 }
@@ -186,7 +186,7 @@ extension FileProviderExtension {
                 
                 
                 if metadata.directory {
                 if metadata.directory {
                     
                     
-                    NCManageDatabase.sharedInstance.setDirectory(serverUrl: fileNamePathFrom, serverUrlTo: fileNamePathTo, etag: nil, ocId: nil, encrypted: directoryTable.e2eEncrypted, account: account)
+                    NCManageDatabase.sharedInstance.setDirectory(serverUrl: fileNamePathFrom, serverUrlTo: fileNamePathTo, etag: nil, ocId: nil, encrypted: directoryTable.e2eEncrypted, richWorkspace: nil, account: account)
                     
                     
                 } else {
                 } else {
                     
                     

+ 1 - 1
Share/NCSelectDestination.m

@@ -233,7 +233,7 @@
             NCFile *fileDirectory = files[0];
             NCFile *fileDirectory = files[0];
         
         
             // Update directory etag
             // Update directory etag
-            [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:_serverUrl serverUrlTo:nil etag:fileDirectory.etag ocId:fileDirectory.ocId encrypted:fileDirectory.e2eEncrypted account:account];
+            [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:_serverUrl serverUrlTo:nil etag:fileDirectory.etag ocId:fileDirectory.ocId encrypted:fileDirectory.e2eEncrypted richWorkspace:nil account:account];
             
             
             // Delete metadata
             // Delete metadata
             [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", account, _serverUrl, k_metadataStatusNormal, k_metadataStatusHide]];
             [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", account, _serverUrl, k_metadataStatusNormal, k_metadataStatusHide]];

+ 2 - 2
iOSClient/AutoUpload/NCAutoUpload.m

@@ -479,7 +479,7 @@
         
         
         tableDirectory *tableDirectory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@", appDelegate.activeAccount, autoUploadPath]];
         tableDirectory *tableDirectory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@", appDelegate.activeAccount, autoUploadPath]];
         if (!tableDirectory)
         if (!tableDirectory)
-            (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:encrypted favorite:false ocId:ocId permissions:nil serverUrl:autoUploadPath account:appDelegate.activeAccount];
+            (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:encrypted favorite:false ocId:ocId permissions:nil serverUrl:autoUploadPath richWorkspace:nil account:appDelegate.activeAccount];
         
         
     } else {
     } else {
        
        
@@ -500,7 +500,7 @@
             
             
             if ( error == nil) {
             if ( error == nil) {
                 
                 
-                (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:encrypted favorite:false ocId:ocId permissions:nil serverUrl:folderPathName account:appDelegate.activeAccount];
+                (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:encrypted favorite:false ocId:ocId permissions:nil serverUrl:folderPathName richWorkspace:nil account:appDelegate.activeAccount];
                 
                 
             } else {
             } else {
                 
                 

+ 1 - 1
iOSClient/CCGlobal.h

@@ -82,7 +82,7 @@
 
 
 // Database Realm
 // Database Realm
 #define k_databaseDefault                               @"nextcloud.realm"
 #define k_databaseDefault                               @"nextcloud.realm"
-#define k_databaseSchemaVersion                         83
+#define k_databaseSchemaVersion                         85
 
 
 // Intro selector
 // Intro selector
 #define k_intro_login                                   0
 #define k_intro_login                                   0

+ 3 - 0
iOSClient/Database/NCDatabase.swift

@@ -249,6 +249,7 @@ class tableDirectory: Object {
     @objc dynamic var ocId = ""
     @objc dynamic var ocId = ""
     @objc dynamic var offline: Bool = false
     @objc dynamic var offline: Bool = false
     @objc dynamic var permissions = ""
     @objc dynamic var permissions = ""
+    @objc dynamic var richWorkspace = ""
     @objc dynamic var serverUrl = ""
     @objc dynamic var serverUrl = ""
     
     
     override static func primaryKey() -> String {
     override static func primaryKey() -> String {
@@ -337,6 +338,7 @@ class tableMedia: Object {
     @objc dynamic var assetLocalIdentifier = ""
     @objc dynamic var assetLocalIdentifier = ""
     @objc dynamic var commentsUnread: Bool = false
     @objc dynamic var commentsUnread: Bool = false
     @objc dynamic var contentType = ""
     @objc dynamic var contentType = ""
+    @objc dynamic var creationDate = NSDate()
     @objc dynamic var date = NSDate()
     @objc dynamic var date = NSDate()
     @objc dynamic var directory: Bool = false
     @objc dynamic var directory: Bool = false
     @objc dynamic var e2eEncrypted: Bool = false
     @objc dynamic var e2eEncrypted: Bool = false
@@ -381,6 +383,7 @@ class tableMetadata: Object {
     @objc dynamic var assetLocalIdentifier = ""
     @objc dynamic var assetLocalIdentifier = ""
     @objc dynamic var commentsUnread: Bool = false
     @objc dynamic var commentsUnread: Bool = false
     @objc dynamic var contentType = ""
     @objc dynamic var contentType = ""
+    @objc dynamic var creationDate = NSDate()
     @objc dynamic var date = NSDate()
     @objc dynamic var date = NSDate()
     @objc dynamic var directory: Bool = false
     @objc dynamic var directory: Bool = false
     @objc dynamic var e2eEncrypted: Bool = false
     @objc dynamic var e2eEncrypted: Bool = false

+ 34 - 2
iOSClient/Database/NCManageDatabase.swift

@@ -1121,7 +1121,7 @@ class NCManageDatabase: NSObject {
     //MARK: -
     //MARK: -
     //MARK: Table Directory
     //MARK: Table Directory
     
     
-    @objc func addDirectory(encrypted: Bool, favorite: Bool, ocId: String, permissions: String?, serverUrl: String, account: String) -> tableDirectory? {
+    @objc func addDirectory(encrypted: Bool, favorite: Bool, ocId: String, permissions: String?, serverUrl: String, richWorkspace: String?, account: String) -> tableDirectory? {
         
         
         let realm = try! Realm()
         let realm = try! Realm()
         realm.beginWrite()
         realm.beginWrite()
@@ -1140,6 +1140,9 @@ class NCManageDatabase: NSObject {
         if let permissions = permissions {
         if let permissions = permissions {
             addObject.permissions = permissions
             addObject.permissions = permissions
         }
         }
+        if let richWorkspace = richWorkspace {
+            addObject.richWorkspace = richWorkspace
+        }
         addObject.serverUrl = serverUrl
         addObject.serverUrl = serverUrl
         
         
         realm.add(addObject, update: .all)
         realm.add(addObject, update: .all)
@@ -1178,7 +1181,7 @@ class NCManageDatabase: NSObject {
         }
         }
     }
     }
     
     
-    @objc func setDirectory(serverUrl: String, serverUrlTo: String?, etag: String?, ocId: String?, encrypted: Bool, account: String) {
+    @objc func setDirectory(serverUrl: String, serverUrlTo: String?, etag: String?, ocId: String?, encrypted: Bool, richWorkspace: String?, account: String) {
         
         
         let realm = try! Realm()
         let realm = try! Realm()
 
 
@@ -1203,6 +1206,9 @@ class NCManageDatabase: NSObject {
                 if let serverUrlTo = serverUrlTo {
                 if let serverUrlTo = serverUrlTo {
                     directory.serverUrl = serverUrlTo
                     directory.serverUrl = serverUrlTo
                 }
                 }
+                if let richWorkspace = richWorkspace {
+                    directory.richWorkspace = richWorkspace
+                }
                 
                 
                 realm.add(directory, update: .all)
                 realm.add(directory, update: .all)
             }
             }
@@ -1381,6 +1387,32 @@ class NCManageDatabase: NSObject {
             print("[LOG] Could not write to database: ", error)
             print("[LOG] Could not write to database: ", error)
         }
         }
     }
     }
+    
+    @objc func setDirectory(ocId: String, serverUrl: String, richWorkspace: String, account: String) {
+        
+        let realm = try! Realm()
+        realm.beginWrite()
+        
+        var addObject = tableDirectory()
+        
+        let result = realm.objects(tableDirectory.self).filter("ocId == %@", ocId).first
+        if result != nil {
+            addObject = result!
+        } else {
+            addObject.ocId = ocId
+        }
+        addObject.account = account
+        addObject.richWorkspace = richWorkspace
+        addObject.serverUrl = serverUrl
+        
+        realm.add(addObject, update: .all)
+        
+        do {
+            try realm.commitWrite()
+        } catch let error {
+            print("[LOG] Could not write to database: ", error)
+        }
+    }
 
 
     //MARK: -
     //MARK: -
     //MARK: Table e2e Encryption
     //MARK: Table e2e Encryption

+ 41 - 11
iOSClient/Main/CCMain.m

@@ -197,8 +197,8 @@
         [self queryDatasourceWithReloadData:YES serverUrl:self.serverUrl];
         [self queryDatasourceWithReloadData:YES serverUrl:self.serverUrl];
     }
     }
     
     
-    // Section Web View
-    [self settingsSectionWebView];
+    // Rich Workspace
+    [self settingsRichWorkspace];
 }
 }
 
 
 - (void)viewDidAppear:(BOOL)animated
 - (void)viewDidAppear:(BOOL)animated
@@ -319,14 +319,15 @@
     [self tableViewReloadData];
     [self tableViewReloadData];
 }
 }
 
 
-- (void)settingsSectionWebView
+- (void)settingsRichWorkspace
 {
 {
     // Nextcloud 18
     // Nextcloud 18
     tableCapabilities *capabilities = [[NCManageDatabase sharedInstance] getCapabilitesWithAccount:appDelegate.activeAccount];
     tableCapabilities *capabilities = [[NCManageDatabase sharedInstance] getCapabilitesWithAccount:appDelegate.activeAccount];
+    tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@", appDelegate.activeAccount, self.serverUrl]];
+    
     if (capabilities.versionMajor >= k_nextcloud_version_18_0) {
     if (capabilities.versionMajor >= k_nextcloud_version_18_0) {
-        tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND fileNameView LIKE[c] %@", appDelegate.activeAccount, self.serverUrl, @"readme.md"]];
-        if (metadata && [[NCUtility sharedInstance] isDirectEditing:metadata]) {
-            NSString *htmlString = metadata.richWorkspace;
+        if (directory.richWorkspace.length > 0) {
+            NSString *htmlString = [NSString stringWithFormat:@"<h2><span style=\"color: #000000;\">%@</span></h2>", directory.richWorkspace];
             [self.webView loadHTMLString:htmlString baseURL:NSBundle.mainBundle.bundleURL];
             [self.webView loadHTMLString:htmlString baseURL:NSBundle.mainBundle.bundleURL];
             self.viewSectionWebViewHeight.constant = CCUtility.getViewSectionWebViewHeight;
             self.viewSectionWebViewHeight.constant = CCUtility.getViewSectionWebViewHeight;
         } else {
         } else {
@@ -380,8 +381,8 @@
         // Setting Theming
         // Setting Theming
         [appDelegate settingThemingColorBrand];
         [appDelegate settingThemingColorBrand];
         
         
-        // Section Web View
-        [self settingsSectionWebView];
+        // Section Rich Workspace
+        [self settingsRichWorkspace];
         
         
         // Detail
         // Detail
         // If AVPlayer in play -> Stop
         // If AVPlayer in play -> Stop
@@ -1141,6 +1142,34 @@
         [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
         [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:self.serverUrl ocId:nil action:k_action_NULL];
     });
     });
     
     
+    [[NCCommunication sharedInstance] readFileOrFolderWithServerUrlFileName:self.serverUrl depth:@"0" account:appDelegate.activeAccount completionHandler:^(NSString *account, NSArray*files, NSInteger errorCode, NSString *errorMessage) {
+          
+        if (errorCode == 0 && [account isEqualToString:appDelegate.activeAccount]) {
+            
+            tableMetadata *metadataFolder;
+            (void)[[NCNetworking sharedInstance] convertFiles:files urlString:appDelegate.activeUrl serverUrl:self.serverUrl user:appDelegate.activeUser metadataFolder:&metadataFolder];
+            
+            // Rich Workspace
+            if (metadataFolder != nil) {
+                [[NCManageDatabase sharedInstance] setDirectoryWithOcId:metadataFolder.ocId serverUrl:self.serverUrl richWorkspace:metadataFolder.richWorkspace account:account];
+                [self settingsRichWorkspace];
+            }
+            
+            tableDirectory *directory = [[NCManageDatabase sharedInstance] getTableDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@", account, metadataFolder.serverUrl]];
+            
+            // Read folder: No record, Change etag or BLINK
+            if ([sectionDataSource.allRecordsDataSource count] == 0 || [metadataFolder.etag isEqualToString:directory.etag] == NO || self.blinkFileNamePath != nil) {
+                [self readFolder:self.serverUrl];
+            }
+            
+        } else if (errorCode != 0) {
+            [[NCContentPresenter shared] messageNotification:@"_error_" description:errorMessage delay:k_dismissAfterSecond type:messageTypeError errorCode:errorCode];
+        } else {
+            NSLog(@"[LOG] It has been changed user during networking process, error.");
+        }
+    }];
+    
+    /*
     [[OCNetworking sharedManager] readFileWithAccount:appDelegate.activeAccount serverUrl:_serverUrl fileName:nil completion:^(NSString *account, tableMetadata *metadata, NSString *message, NSInteger errorCode) {
     [[OCNetworking sharedManager] readFileWithAccount:appDelegate.activeAccount serverUrl:_serverUrl fileName:nil completion:^(NSString *account, tableMetadata *metadata, NSString *message, NSInteger errorCode) {
        
        
         if (errorCode == 0 && [account isEqualToString:appDelegate.activeAccount]) {
         if (errorCode == 0 && [account isEqualToString:appDelegate.activeAccount]) {
@@ -1158,6 +1187,7 @@
             NSLog(@"[LOG] It has been changed user during networking process, error.");
             NSLog(@"[LOG] It has been changed user during networking process, error.");
         }
         }
     }];
     }];
+    */
 }
 }
 
 
 #pragma --------------------------------------------------------------------------------------------
 #pragma --------------------------------------------------------------------------------------------
@@ -1179,7 +1209,7 @@
     
     
     if (self.searchController.isActive == NO) {
     if (self.searchController.isActive == NO) {
         
         
-        [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:serverUrl serverUrlTo:nil etag:metadataFolder.etag ocId:metadataFolder.ocId encrypted:metadataFolder.e2eEncrypted account:account];
+        [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:serverUrl serverUrlTo:nil etag:metadataFolder.etag ocId:metadataFolder.ocId encrypted:metadataFolder.e2eEncrypted richWorkspace:nil account:account];
         [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", account, serverUrl, k_metadataStatusNormal, k_metadataStatusHide]];
         [[NCManageDatabase sharedInstance] deleteMetadataWithPredicate:[NSPredicate predicateWithFormat:@"account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", account, serverUrl, k_metadataStatusNormal, k_metadataStatusHide]];
         [[NCManageDatabase sharedInstance] setDateReadDirectoryWithServerUrl:serverUrl account:account];
         [[NCManageDatabase sharedInstance] setDateReadDirectoryWithServerUrl:serverUrl account:account];
     }
     }
@@ -1571,7 +1601,7 @@
                                     return;
                                     return;
                                 }
                                 }
                                 
                                 
-                                [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:serverUrl serverUrlTo:serverUrlTo etag:@"" ocId:nil encrypted:directoryTable.e2eEncrypted account:appDelegate.activeAccount];
+                                [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:serverUrl serverUrlTo:serverUrlTo etag:@"" ocId:nil encrypted:directoryTable.e2eEncrypted richWorkspace:nil account:appDelegate.activeAccount];
                                 
                                 
                             } else {
                             } else {
                                 
                                 
@@ -2203,7 +2233,7 @@
 - (void)createReMainMenu
 - (void)createReMainMenu
 {
 {
     NSString *title;
     NSString *title;
-    NSString *groupBy = [CCUtility getGroupBySettings];
+    //NSString *groupBy = [CCUtility getGroupBySettings];
     NSString *sorted = [CCUtility getOrderSettings];
     NSString *sorted = [CCUtility getOrderSettings];
     BOOL ascending = [CCUtility getAscendingSettings];
     BOOL ascending = [CCUtility getAscendingSettings];
     
     

+ 9 - 3
iOSClient/Networking/NCNetworking.swift

@@ -153,20 +153,20 @@ import NCCommunication
         return result
         return result
     }
     }
     
     
-    @objc func convertFiles(_ files: [NCFile], urlString: String, serverUrl : String?, user: String) -> [tableMetadata] {
+    @objc func convertFiles(_ files: [NCFile], urlString: String, serverUrl : String?, user: String, metadataFolder: UnsafeMutablePointer<tableMetadata>) -> [tableMetadata] {
         
         
         var metadatas = [tableMetadata]()
         var metadatas = [tableMetadata]()
         
         
         for file in files {
         for file in files {
             
             
             if !CCUtility.getShowHiddenFiles() && file.fileName.first == "." { continue }
             if !CCUtility.getShowHiddenFiles() && file.fileName.first == "." { continue }
-            if file.fileName.count == 0 { continue }
             
             
             let metadata = tableMetadata()
             let metadata = tableMetadata()
             
             
             metadata.account = account
             metadata.account = account
             metadata.commentsUnread = file.commentsUnread
             metadata.commentsUnread = file.commentsUnread
             metadata.contentType = file.contentType
             metadata.contentType = file.contentType
+            metadata.creationDate = file.creationDate
             metadata.date = file.date
             metadata.date = file.date
             metadata.directory = file.directory
             metadata.directory = file.directory
             metadata.e2eEncrypted = file.e2eEncrypted
             metadata.e2eEncrypted = file.e2eEncrypted
@@ -183,6 +183,7 @@ import NCCommunication
             metadata.permissions = file.permissions
             metadata.permissions = file.permissions
             metadata.quotaUsedBytes = file.quotaUsedBytes
             metadata.quotaUsedBytes = file.quotaUsedBytes
             metadata.quotaAvailableBytes = file.quotaAvailableBytes
             metadata.quotaAvailableBytes = file.quotaAvailableBytes
+            metadata.richWorkspace = file.richWorkspace
             metadata.resourceType = file.resourceType
             metadata.resourceType = file.resourceType
             if serverUrl == nil {
             if serverUrl == nil {
                 metadata.serverUrl = urlString + file.path.replacingOccurrences(of: "/remote.php/dav/files/"+user, with: "").dropLast()
                 metadata.serverUrl = urlString + file.path.replacingOccurrences(of: "/remote.php/dav/files/"+user, with: "").dropLast()
@@ -193,7 +194,12 @@ import NCCommunication
                         
                         
             CCUtility.insertTypeFileIconName(file.fileName, metadata: metadata)
             CCUtility.insertTypeFileIconName(file.fileName, metadata: metadata)
             
             
-            metadatas.append(metadata)
+            // Folder
+            if file.fileName.count == 0 {
+                metadataFolder.initialize(to: metadata)
+            } else {
+                metadatas.append(metadata)
+            }
         }
         }
         
         
         return metadatas
         return metadatas

+ 4 - 4
iOSClient/Networking/OCNetworking.m

@@ -563,7 +563,7 @@
                 }
                 }
                 
                 
                 // Add metadata folder
                 // Add metadata folder
-                (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDtoFolder.isEncrypted favorite:itemDtoFolder.isFavorite ocId:itemDtoFolder.ocId permissions:itemDtoFolder.permissions serverUrl:serverUrl account:account];
+                (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDtoFolder.isEncrypted favorite:itemDtoFolder.isFavorite ocId:itemDtoFolder.ocId permissions:itemDtoFolder.permissions serverUrl:serverUrl richWorkspace:nil account:account];
 
 
                 NSArray *itemsSortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
                 NSArray *itemsSortedArray = [items sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
                     
                     
@@ -586,7 +586,7 @@
                     }
                     }
                     
                     
                     if (itemDto.isDirectory) {
                     if (itemDto.isDirectory) {
-                        (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDto.isEncrypted favorite:itemDto.isFavorite ocId:itemDto.ocId permissions:itemDto.permissions serverUrl:[CCUtility stringAppendServerUrl:serverUrl addFileName:fileName] account:account];
+                        (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDto.isEncrypted favorite:itemDto.isFavorite ocId:itemDto.ocId permissions:itemDto.permissions serverUrl:[CCUtility stringAppendServerUrl:serverUrl addFileName:fileName] richWorkspace: nil account:account];
                     }
                     }
                     
                     
                     [metadatas addObject:[CCUtility trasformedOCFileToCCMetadata:itemDto fileName:itemDto.fileName serverUrl:serverUrl autoUploadFileName:autoUploadFileName autoUploadDirectory:autoUploadDirectory account:account isFolderEncrypted:isFolderEncrypted]];
                     [metadatas addObject:[CCUtility trasformedOCFileToCCMetadata:itemDto fileName:itemDto.fileName serverUrl:serverUrl autoUploadFileName:autoUploadFileName autoUploadDirectory:autoUploadDirectory account:account isFolderEncrypted:isFolderEncrypted]];
@@ -936,7 +936,7 @@
                 serverUrl = [CCUtility stringAppendServerUrl:[url stringByAppendingString:k_webDAV] addFileName:serverPath];
                 serverUrl = [CCUtility stringAppendServerUrl:[url stringByAppendingString:k_webDAV] addFileName:serverPath];
                 
                 
                 if (itemDto.isDirectory) {
                 if (itemDto.isDirectory) {
-                    (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDto.isEncrypted favorite:itemDto.isFavorite ocId:itemDto.ocId permissions:itemDto.permissions serverUrl:[NSString stringWithFormat:@"%@/%@", serverUrl, fileName] account:account];
+                    (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDto.isEncrypted favorite:itemDto.isFavorite ocId:itemDto.ocId permissions:itemDto.permissions serverUrl:[NSString stringWithFormat:@"%@/%@", serverUrl, fileName] richWorkspace:nil account:account];
                 }
                 }
                 
                 
                 isFolderEncrypted = [CCUtility isFolderEncrypted:serverUrl account:account];
                 isFolderEncrypted = [CCUtility isFolderEncrypted:serverUrl account:account];
@@ -1268,7 +1268,7 @@
                 serverUrl = [CCUtility stringAppendServerUrl:[url stringByAppendingString:k_webDAV] addFileName:serverPath];
                 serverUrl = [CCUtility stringAppendServerUrl:[url stringByAppendingString:k_webDAV] addFileName:serverPath];
                 
                 
                 if (itemDto.isDirectory) {
                 if (itemDto.isDirectory) {
-                    (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDto.isEncrypted favorite:itemDto.isFavorite ocId:itemDto.ocId permissions:itemDto.permissions serverUrl:[NSString stringWithFormat:@"%@/%@", serverUrl, fileName] account:account];
+                    (void)[[NCManageDatabase sharedInstance] addDirectoryWithEncrypted:itemDto.isEncrypted favorite:itemDto.isFavorite ocId:itemDto.ocId permissions:itemDto.permissions serverUrl:[NSString stringWithFormat:@"%@/%@", serverUrl, fileName] richWorkspace:nil account:account];
                 }
                 }
                 
                 
                 isFolderEncrypted = [CCUtility isFolderEncrypted:serverUrl account:account];
                 isFolderEncrypted = [CCUtility isFolderEncrypted:serverUrl account:account];

+ 1 - 1
iOSClient/Select/NCSelect.swift

@@ -768,7 +768,7 @@ extension NCSelect {
                 self.metadataFolder = metadataFolder
                 self.metadataFolder = metadataFolder
                 
                 
                 // Update directory etag
                 // Update directory etag
-                NCManageDatabase.sharedInstance.setDirectory(serverUrl: self.serverUrl, serverUrlTo: nil, etag: metadataFolder?.etag, ocId: metadataFolder?.ocId, encrypted: metadataFolder!.e2eEncrypted, account: self.appDelegate.activeAccount)
+                NCManageDatabase.sharedInstance.setDirectory(serverUrl: self.serverUrl, serverUrlTo: nil, etag: metadataFolder?.etag, ocId: metadataFolder?.ocId, encrypted: metadataFolder!.e2eEncrypted, richWorkspace: nil, account: self.appDelegate.activeAccount)
                 NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", self.appDelegate.activeAccount ,self.serverUrl, k_metadataStatusNormal, k_metadataStatusHide))
                 NCManageDatabase.sharedInstance.deleteMetadata(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@ AND (status == %d OR status == %d)", self.appDelegate.activeAccount ,self.serverUrl, k_metadataStatusNormal, k_metadataStatusHide))
                 NCManageDatabase.sharedInstance.setDateReadDirectory(serverUrl: self.serverUrl, account: self.appDelegate.activeAccount)
                 NCManageDatabase.sharedInstance.setDateReadDirectory(serverUrl: self.serverUrl, account: self.appDelegate.activeAccount)
                 
                 

+ 1 - 1
iOSClient/Synchronize/CCSynchronize.m

@@ -94,7 +94,7 @@
     
     
     // Add metadata and update etag Directory
     // Add metadata and update etag Directory
     (void)[[NCManageDatabase sharedInstance] addMetadata:metadataFolder];
     (void)[[NCManageDatabase sharedInstance] addMetadata:metadataFolder];
-    [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:serverUrl serverUrlTo:nil etag:metadataFolder.etag ocId:metadataFolder.ocId encrypted:metadataFolder.e2eEncrypted account:appDelegate.activeAccount];
+    [[NCManageDatabase sharedInstance] setDirectoryWithServerUrl:serverUrl serverUrlTo:nil etag:metadataFolder.etag ocId:metadataFolder.ocId encrypted:metadataFolder.e2eEncrypted richWorkspace:nil account:appDelegate.activeAccount];
     
     
     // reload folder ../ *
     // reload folder ../ *
     [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:metadataFolder.serverUrl ocId:nil action:k_action_NULL];
     [[NCMainCommon sharedInstance] reloadDatasourceWithServerUrl:metadataFolder.serverUrl ocId:nil action:k_action_NULL];