Jelajahi Sumber

Mark comment ad read

marinofaggiana 5 tahun lalu
induk
melakukan
998a860deb

+ 38 - 2
iOSClient/Database/NCManageDatabase.swift

@@ -1060,6 +1060,24 @@ class NCManageDatabase: NSObject {
         return Array(results.map { tableComments.init(value:$0) })
     }
     
+    @objc func readMarkerComments(account: String, objectId: String) {
+        
+        let realm = try! Realm()
+        
+        realm.beginWrite()
+        
+        let results = realm.objects(tableComments.self).filter("account == %@ AND objectId == %@", account, objectId)
+        for result in results {
+            result.isUnread = false
+        }
+        
+        do {
+            try realm.commitWrite()
+        } catch let error {
+            print("[LOG] Could not write to database: ", error)
+        }
+    }
+    
     //MARK: -
     //MARK: Table Directory
     
@@ -1717,6 +1735,10 @@ class NCManageDatabase: NSObject {
     //MARK: -
     //MARK: Table Metadata
     
+    @objc func initNewMetadata(_ metadata: tableMetadata) -> tableMetadata {
+        return tableMetadata.init(value: metadata)
+    }
+    
     @objc func addMetadata(_ metadata: tableMetadata) -> tableMetadata? {
             
         if metadata.isInvalidated {
@@ -2096,8 +2118,22 @@ class NCManageDatabase: NSObject {
         }
     }
     
-    @objc func initNewMetadata(_ metadata: tableMetadata) -> tableMetadata {
-        return tableMetadata.init(value: metadata)
+    @objc func readMarkerMetadata(account: String, fileId: String) {
+        
+        let realm = try! Realm()
+        
+        realm.beginWrite()
+        
+        let results = realm.objects(tableMetadata.self).filter("account == %@ AND fileId == %@", account, fileId)
+        for result in results {
+            result.commentsUnread = false
+        }
+        
+        do {
+            try realm.commitWrite()
+        } catch let error {
+            print("[LOG] Could not write to database: ", error)
+        }
     }
     
     //MARK: -

+ 1 - 1
iOSClient/Library/OCCommunicationLib/OCCommunication.h

@@ -985,7 +985,7 @@ typedef enum {
 
 - (void)updateComments:(NSString*)serverPath fileId:(NSString *)fileId messageID:(NSString *)messageID message:(NSString *)message onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer))successRequest  failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest;
 
-- (void)readMarkComments:(NSString*)serverPath fileId:(NSString *)fileId messageID:(NSString *)messageID onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer))successRequest  failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest;
+- (void)readMarkComments:(NSString*)serverPath fileId:(NSString *)fileId onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer))successRequest  failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest;
 
 - (void)deleteComments:(NSString*)serverPath fileId:(NSString *)fileId messageID:(NSString *)messageID onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer))successRequest  failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest ;
 

+ 3 - 2
iOSClient/Library/OCCommunicationLib/OCCommunication.m

@@ -3219,9 +3219,10 @@
     }];
 }
 
-- (void)readMarkComments:(NSString*)serverPath fileId:(NSString *)fileId messageID:(NSString *)messageID onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer))successRequest  failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest {
+- (void)readMarkComments:(NSString*)serverPath fileId:(NSString *)fileId onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer))successRequest  failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest {
     
-    serverPath = [NSString stringWithFormat:@"%@/comments/files/%@/%@", serverPath, fileId, messageID];
+    serverPath = [NSString stringWithFormat:@"%@/comments/files/%@", serverPath, fileId];
+
     serverPath = [serverPath encodeString:NSUTF8StringEncoding];
     
     OCWebDAVClient *request = [[OCWebDAVClient alloc] init];

+ 1 - 1
iOSClient/Library/OCCommunicationLib/OCWebDavClient/OCWebDAVClient.m

@@ -1491,7 +1491,7 @@ NSString *const NCResource = @"<d:displayname/>"
             "<d:propertyupdate xmlns:d=\"DAV:\" xmlns:oc=\"http://owncloud.org/ns\" xmlns:nc=\"http://nextcloud.org/ns\">"
             "<d:set>"
             "<d:prop>"
-            "<oc:readMarker>"
+            "<readMarker xmlns=\"http://owncloud.org/ns\"/>"
             "</d:prop>"
             "</d:set>"
             "</d:propertyupdate>"];

+ 1 - 1
iOSClient/Networking/OCNetworking.h

@@ -119,7 +119,7 @@
 - (void)getCommentsWithAccount:(NSString *)account fileId:(NSString *)fileId completion:(void (^)(NSString *account, NSArray *items, NSString *message, NSInteger errorCode))completion;
 - (void)putCommentsWithAccount:(NSString *)account fileId:(NSString *)fileId message:(NSString *)message  completion:(void (^)(NSString *account, NSString *message, NSInteger errorCode))completion;
 - (void)updateCommentsWithAccount:(NSString *)account fileId:(NSString *)fileId messageID:(NSString *)messageID message:(NSString *)message  completion:(void (^)(NSString *account, NSString *message, NSInteger errorCode))completion;
-- (void)readMarkCommentsWithAccount:(NSString *)account fileId:(NSString *)fileId messageID:(NSString *)messageID completion:(void (^)(NSString *account, NSString *message, NSInteger errorCode))completion;
+- (void)readMarkCommentsWithAccount:(NSString *)account fileId:(NSString *)fileId completion:(void (^)(NSString *account, NSString *message, NSInteger errorCode))completion;
 - (void)deleteCommentsWithAccount:(NSString *)account fileId:(NSString *)fileId messageID:(NSString *)messageID completion:(void (^)(NSString *account, NSString *message, NSInteger errorCode))completion;
 
 #pragma mark ===== Third Parts =====

+ 2 - 2
iOSClient/Networking/OCNetworking.m

@@ -2800,7 +2800,7 @@
     }];
 }
 
-- (void)readMarkCommentsWithAccount:(NSString *)account fileId:(NSString *)fileId messageID:(NSString *)messageID completion:(void (^)(NSString *account, NSString *message, NSInteger errorCode))completion
+- (void)readMarkCommentsWithAccount:(NSString *)account fileId:(NSString *)fileId completion:(void (^)(NSString *account, NSString *message, NSInteger errorCode))completion
 {
     tableAccount *tableAccount = [[NCManageDatabase sharedInstance] getAccountWithPredicate:[NSPredicate predicateWithFormat:@"account == %@", account]];
     if (tableAccount == nil) {
@@ -2816,7 +2816,7 @@
     [communication setCredentialsWithUser:tableAccount.user andUserID:tableAccount.userID andPassword:[CCUtility getPassword:account]];
     [communication setUserAgent:[CCUtility getUserAgent]];
     
-    [communication readMarkComments:[NSString stringWithFormat:@"%@%@", tableAccount.url, k_dav] fileId:fileId messageID:messageID onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
+    [communication readMarkComments:[NSString stringWithFormat:@"%@%@", tableAccount.url, k_dav] fileId:fileId onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *redirectedServer) {
         
         completion(account, nil, 0);
         

+ 19 - 1
iOSClient/Share/NCShareComments.swift

@@ -84,12 +84,30 @@ class NCShareComments: UIViewController, NCShareCommentsCellDelegate {
     
     @objc func reloadData() {
         
+        var itemsNCComments = [NCComments]()
         guard let metadata = self.metadata else { return }
 
         OCNetworking.sharedManager()?.getCommentsWithAccount(appDelegate.activeAccount, fileId: metadata.fileId, completion: { (account, items, message, errorCode) in
             if errorCode == 0 {
-                let itemsNCComments = items as! [NCComments]
+                var markCommentAsRead = false
+                itemsNCComments = items as! [NCComments]
                 NCManageDatabase.sharedInstance.addComments(itemsNCComments, account: metadata.account, objectId: metadata.fileId)
+                
+                // Mark comment ad read
+                for comment in itemsNCComments {
+                    if comment.isUnread {
+                        markCommentAsRead = true
+                    }
+                }
+                if markCommentAsRead {
+                    OCNetworking.sharedManager()?.readMarkComments(withAccount: self.appDelegate.activeAccount, fileId: metadata.fileId, completion: { (account, message, errorCode) in
+                        if errorCode == 0 {
+                            NCManageDatabase.sharedInstance.readMarkerComments(account: account!, objectId: metadata.fileId)
+                            NCManageDatabase.sharedInstance.readMarkerMetadata(account: account!, fileId: metadata.fileId)
+                        }
+                    })
+                }
+                
                 self.tableView.reloadData()
             } else {
                 self.appDelegate.messageNotification("_share_", description: message, visible: true, delay: TimeInterval(k_dismissAfterSecond), type: TWMessageBarMessageType.error, errorCode: errorCode)