marinofaggiana 5 лет назад
Родитель
Сommit
1702556b7d

+ 1 - 1
iOSClient/CCGlobal.h

@@ -81,7 +81,7 @@
 
 // Database Realm
 #define k_databaseDefault                               @"nextcloud.realm"
-#define k_databaseSchemaVersion                         55
+#define k_databaseSchemaVersion                         56
 
 // Intro selector
 #define k_intro_login                                   0

+ 27 - 0
iOSClient/Database/NCDatabase.swift

@@ -378,10 +378,37 @@ class tablePhotoLibrary: Object {
 class tableShare: Object {
     
     @objc dynamic var account = ""
+    @objc dynamic var displayNameFileOwner = ""
+    @objc dynamic var displayNameOwner = ""
+    @objc dynamic var isDirectory: Bool = false
+    @objc dynamic var expirationDate: NSDate? = nil
     @objc dynamic var fileName = ""
+    @objc dynamic var fileParent = ""
+    @objc dynamic var fileSource: Int = 0
+    @objc dynamic var fileTarget = ""
+    @objc dynamic var hideDownload: Bool = false
+    @objc dynamic var idRemoteShared: Int = 0
+    @objc dynamic var itemSource: Int = 0
+    @objc dynamic var label = ""
+    @objc dynamic var mailSend: Int = 0
+    @objc dynamic var mimeType = ""
+    @objc dynamic var note = ""
+    @objc dynamic var path = ""
+    @objc dynamic var parent: Int = 0
+    @objc dynamic var permissions: Int = 0
     @objc dynamic var serverUrl = ""
+    @objc dynamic var sharedDate: NSDate? = nil
     @objc dynamic var shareLink = ""
+    @objc dynamic var shareType: Int = 0
     @objc dynamic var shareUserAndGroup = ""
+    @objc dynamic var shareWith = ""
+    @objc dynamic var shareWithDisplayName = ""
+    @objc dynamic var storage: Int = 0
+    @objc dynamic var storageID = ""
+    @objc dynamic var token = ""
+    @objc dynamic var uidOwner = ""
+    @objc dynamic var uidFileOwner = ""
+    @objc dynamic var url = ""
 }
 
 class tableTag: Object {

+ 93 - 41
iOSClient/Database/NCManageDatabase.swift

@@ -2259,17 +2259,28 @@ class NCManageDatabase: NSObject {
     @objc func addShareLink(_ share: String, fileName: String, serverUrl: String, account: String) -> [String:String]? {
         
         let realm = try! Realm()
-
+        
         realm.beginWrite()
-
-        let addObject = tableShare()
         
-        addObject.account = account
-        addObject.fileName = fileName
-        addObject.serverUrl = serverUrl
-        addObject.shareLink = share
+        // Verify if exists
+        let result = realm.objects(tableShare.self).filter("account = %@ AND fileName = %@ AND serverUrl = %@", account, fileName, serverUrl).first
         
-        realm.add(addObject)
+        if result != nil {
+            
+            result?.shareLink = share
+            
+        } else {
+            
+            // Add new
+            let addObject = tableShare()
+            
+            addObject.account = account
+            addObject.fileName = fileName
+            addObject.serverUrl = serverUrl
+            addObject.shareLink = share
+            
+            realm.add(addObject)
+        }
         
         do {
             try realm.commitWrite()
@@ -2277,23 +2288,86 @@ class NCManageDatabase: NSObject {
             print("[LOG] Could not write to database: ", error)
             return nil
         }
-
+        
         return ["\(serverUrl)\(fileName)" : share]
     }
-
+    
     @objc func addShareUserAndGroup(_ share: String, fileName: String, serverUrl: String, account: String) -> [String:String]? {
         
         let realm = try! Realm()
+        
+        realm.beginWrite()
+        
+        // Verify if exists
+        let result = realm.objects(tableShare.self).filter("account = %@ AND fileName = %@ AND serverUrl = %@", account, fileName, serverUrl).first
+        
+        if result != nil {
+            
+            result?.shareUserAndGroup = share
+            
+        } else {
+            
+            // Add new
+            let addObject = tableShare()
+            
+            addObject.account = account
+            addObject.fileName = fileName
+            addObject.serverUrl = serverUrl
+            addObject.shareUserAndGroup = share
+            
+            realm.add(addObject)
+        }
+        
+        do {
+            try realm.commitWrite()
+        } catch let error {
+            print("[LOG] Could not write to database: ", error)
+            return nil
+        }
+        
+        return ["\(serverUrl)\(fileName)" : share]
+    }
+    
+    @objc func addShareV2(shareLink: String, shareUserAndGroup: String, fileName: String, serverUrl: String, account: String, sharedDto: OCSharedDto) {
+        
+        let realm = try! Realm()
 
         realm.beginWrite()
 
-        // Add new
         let addObject = tableShare()
         
         addObject.account = account
+        addObject.displayNameFileOwner = sharedDto.displayNameFileOwner
+        addObject.displayNameOwner = sharedDto.displayNameOwner
+        addObject.expirationDate =  Date(timeIntervalSince1970: TimeInterval(sharedDto.expirationDate)) as NSDate
+        addObject.fileParent = sharedDto.fileParent
+        addObject.fileTarget = sharedDto.fileTarget
+        addObject.hideDownload = sharedDto.hideDownload
+        addObject.idRemoteShared = sharedDto.idRemoteShared
+        addObject.isDirectory = sharedDto.isDirectory
+        addObject.itemSource = sharedDto.itemSource
+        addObject.label = sharedDto.label
+        addObject.mailSend = sharedDto.mailSend
+        addObject.mimeType = sharedDto.mimeType
+        addObject.note = sharedDto.note
+        addObject.path = sharedDto.path
+        addObject.permissions = sharedDto.permissions
+        addObject.parent = sharedDto.parent
+        addObject.sharedDate = Date(timeIntervalSince1970: TimeInterval(sharedDto.sharedDate)) as NSDate
+        addObject.shareType = sharedDto.shareType
+        addObject.shareWith = sharedDto.shareWith
+        addObject.shareWithDisplayName = sharedDto.shareWithDisplayName
+        addObject.storage = sharedDto.storage
+        addObject.storageID = sharedDto.storageID
+        addObject.token = sharedDto.token
+        addObject.url = sharedDto.url
+        addObject.uidOwner = sharedDto.uidOwner
+        addObject.uidFileOwner = sharedDto.uidFileOwner
+
         addObject.fileName = fileName
         addObject.serverUrl = serverUrl
-        addObject.shareUserAndGroup = share
+        addObject.shareLink = shareLink
+        addObject.shareUserAndGroup = shareUserAndGroup
         
         realm.add(addObject)
         
@@ -2301,12 +2375,10 @@ class NCManageDatabase: NSObject {
             try realm.commitWrite()
         } catch let error {
             print("[LOG] Could not write to database: ", error)
-            return nil
+            return
         }
-        
-        return ["\(serverUrl)\(fileName)" : share]
     }
-    
+
     @objc func unShare(_ share: String, fileName: String, serverUrl: String, sharesLink: [String:String], sharesUserAndGroup: [String:String], account: String) -> [Any]? {
         
         var sharesLink = sharesLink
@@ -2403,49 +2475,29 @@ class NCManageDatabase: NSObject {
             let fullPath = CCUtility.getHomeServerUrlActiveUrl(activeUrl) + "\(itemOCSharedDto.path!)"
             let fileName = NSString(string: fullPath).lastPathComponent
             var serverUrl = NSString(string: fullPath).substring(to: (fullPath.count - fileName.count - 1))
-            
             if serverUrl.hasSuffix("/") {
                 serverUrl = NSString(string: serverUrl).substring(to: (serverUrl.count - 1))
             }
             
             if itemOCSharedDto.idRemoteShared > 0 {
-                _ = self.addShareLink("\(itemOCSharedDto.idRemoteShared)", fileName: fileName, serverUrl: serverUrl, account: account)
+                _ = self.addShareV2(shareLink: "\(itemOCSharedDto.idRemoteShared)", shareUserAndGroup: "", fileName: fileName, serverUrl: serverUrl, account: account, sharedDto: itemOCSharedDto)
             }
         }
         
         // Manage sharesUserAndGroup
         
-        var paths = [String:[String]]()
-        
         for itemOCSharedDto in itemsUsersAndGroups {
             
-            if paths[itemOCSharedDto.path] != nil {
-                
-                var share : [String] = paths[itemOCSharedDto.path]!
-                share.append("\(itemOCSharedDto.idRemoteShared)")
-                paths[itemOCSharedDto.path] = share
-                
-            } else {
-                
-                paths[itemOCSharedDto.path] = ["\(itemOCSharedDto.idRemoteShared)"]
-            }
-        }
-        
-        for (path, idsRemoteSharedArray) in paths {
-            
-            let idsRemoteShared = idsRemoteSharedArray.joined(separator: ",")
-            
-            print("[LOG] share \(String(describing: idsRemoteShared))")
-            
-            let fullPath = CCUtility.getHomeServerUrlActiveUrl(activeUrl) + "\(path)"
+            let fullPath = CCUtility.getHomeServerUrlActiveUrl(activeUrl) + "\(itemOCSharedDto.path!)"
             let fileName = NSString(string: fullPath).lastPathComponent
             var serverUrl = NSString(string: fullPath).substring(to: (fullPath.count - fileName.count - 1))
-            
             if serverUrl.hasSuffix("/") {
                 serverUrl = NSString(string: serverUrl).substring(to: (serverUrl.count - 1))
             }
             
-            _ = self.addShareUserAndGroup(idsRemoteShared, fileName: fileName, serverUrl: serverUrl, account: account)
+            if itemOCSharedDto.idRemoteShared > 0 {
+                _ = self.addShareV2(shareLink: "", shareUserAndGroup: "\(itemOCSharedDto.idRemoteShared)", fileName: fileName, serverUrl: serverUrl, account: account, sharedDto: itemOCSharedDto)
+            }
         }
     }
     

+ 11 - 0
iOSClient/Library/OCCommunicationLib/OCSharedDto.m

@@ -27,4 +27,15 @@
 
 @implementation OCSharedDto
 
+- (id)init {
+    
+    self = [super init];
+    
+    if (self) {
+        
+        self.url = @"";
+    }
+    
+    return self;
+}
 @end

+ 3 - 2
iOSClient/Main/CCMain.m

@@ -1918,14 +1918,15 @@
             for (OCSharedDto *item in items)
                 [appDelegate.sharesID setObject:item forKey:[@(item.idRemoteShared) stringValue]];
             
-            // V2
+#ifdef DEBUG
             [[NCManageDatabase sharedInstance] updateShareV2:appDelegate.sharesID activeUrl:appDelegate.activeUrl account:appDelegate.activeAccount];
-            //
+#else
             NSArray *result = [[NCManageDatabase sharedInstance] updateShare:appDelegate.sharesID activeUrl:appDelegate.activeUrl account:appDelegate.activeAccount];
             if (result) {
                 appDelegate.sharesLink = result[0];
                 appDelegate.sharesUserAndGroup = result[1];
             }
+#endif
             
             // Notify Shares View
             [[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:@"SharesReloadDatasource" object:nil userInfo:nil];