Jelajahi Sumber

Add the possibility of webDAV search with contentType

Marino Faggiana 7 tahun lalu
induk
melakukan
9952bef405

+ 2 - 2
iOSClient/Actions/CCActions.swift

@@ -296,7 +296,7 @@ class CCActions: NSObject {
     // MARK: Search
     // --------------------------------------------------------------------------------------------
     
-    @objc func search(_ serverUrl: String, fileName: String, depth: String, date: Date?, contentType: String?, selector: String, delegate: AnyObject) {
+    @objc func search(_ serverUrl: String, fileName: String, depth: String, date: Date?, contenType: [String]?, selector: String, delegate: AnyObject) {
         
         guard let directoryID = NCManageDatabase.sharedInstance.getDirectoryID(serverUrl) else {
             return
@@ -307,7 +307,7 @@ class CCActions: NSObject {
         let metadataNet: CCMetadataNet = CCMetadataNet.init(account: appDelegate.activeAccount)
         
         metadataNet.action = actionSearch
-        metadataNet.contentType = contentType
+        metadataNet.contentType = contenType
         metadataNet.date = date
         metadataNet.delegate = delegate
         metadataNet.directoryID = directoryID

+ 2 - 12
iOSClient/AppDelegate.m

@@ -307,18 +307,8 @@
         return;
 
     // Execute : now
-    NSLog(@"[LOG] Update Folder Photo");
-    NSString *autoUploadPath = [[NCManageDatabase sharedInstance] getAccountAutoUploadPath:_activeUrl];
-    if ([autoUploadPath length] > 0) {
-        
-        NSString *fileName = [[NCManageDatabase sharedInstance] getAccountAutoUploadFileName];
-        NSString *serverUrl = [[NCManageDatabase sharedInstance] getAccountAutoUploadDirectory:_activeUrl];
-        
-        [[CCSynchronize sharedSynchronize] readFileForFolder:fileName serverUrl:serverUrl selector:selectorReadFileFolder];        
-    }
-    
-    //TEST
-    [[CCSynchronize sharedSynchronize] searchContentType:@"image/%" selector:selectorSearchContentType];
+    NSLog(@"[LOG] Update contenttype image for Photos Tab");
+    [[CCSynchronize sharedSynchronize] searchContentType:@[@"image/%", @"video/%"] selector:selectorSearchContentType];
     
     // Execute : after 1 sec.
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{

+ 2 - 5
iOSClient/Database/NCManageDatabase.swift

@@ -1842,7 +1842,7 @@ class NCManageDatabase: NSObject {
         return self.getMetadatas(predicate: predicate, sorted: nil, ascending: false)
     }
     
-    @objc func getTableMetadatasPhotos(serverUrl: String) -> [tableMetadata]? {
+    @objc func getTableMetadatasContentTypeImageVideo() -> [tableMetadata]? {
         
         guard let tableAccount = self.getAccountActive() else {
             return nil
@@ -1850,10 +1850,7 @@ class NCManageDatabase: NSObject {
         
         let realm = try! Realm()
 
-        let directories = realm.objects(tableDirectory.self).filter(NSPredicate(format: "account = %@ AND serverUrl BEGINSWITH %@", tableAccount.account, serverUrl)).sorted(byKeyPath: "serverUrl", ascending: true)
-        let directoriesID = Array(directories.map { $0.directoryID })
-        
-        let metadatas = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account = %@ AND session = '' AND (typeFile = %@ OR typeFile = %@) AND directoryID IN %@", tableAccount.account, k_metadataTypeFile_image, k_metadataTypeFile_video, directoriesID)).sorted(byKeyPath: "date", ascending: false)
+        let metadatas = realm.objects(tableMetadata.self).filter(NSPredicate(format: "account = %@ AND session = '' AND (typeFile = %@ OR typeFile = %@)", tableAccount.account, k_metadataTypeFile_image, k_metadataTypeFile_video)).sorted(byKeyPath: "date", ascending: false)
             
         return Array(metadatas.map { tableMetadata.init(value:$0) })
     }

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

@@ -469,7 +469,7 @@ typedef enum {
 /// @name Search
 ///-----------------------------------
 
-- (void)search:(NSString *)path folder:(NSString *)folder fileName:(NSString *)fileName depth:(NSString *)depth dateLastModified:(NSString *)dateLastModified contentType:(NSString *)contentType withUserSessionToken:(NSString *)token onCommunication:(OCCommunication *)sharedOCCommunication successRequest:(void(^)(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer)) failureRequest;
+- (void)search:(NSString *)path folder:(NSString *)folder fileName:(NSString *)fileName depth:(NSString *)depth dateLastModified:(NSString *)dateLastModified contentType:(NSArray *)contentType withUserSessionToken:(NSString *)token onCommunication:(OCCommunication *)sharedOCCommunication successRequest:(void(^)(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer)) failureRequest;
 
 ///-----------------------------------
 /// @name Setting favorite

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

@@ -624,7 +624,7 @@
 ///-----------------------------------
 /// @name search
 ///-----------------------------------
-- (void)search:(NSString *)path folder:(NSString *)folder fileName:(NSString *)fileName depth:(NSString *)depth dateLastModified:(NSString *)dateLastModified contentType:(NSString *)contentType withUserSessionToken:(NSString *)token onCommunication:(OCCommunication *)sharedOCCommunication successRequest:(void(^)(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer)) failureRequest{
+- (void)search:(NSString *)path folder:(NSString *)folder fileName:(NSString *)fileName depth:(NSString *)depth dateLastModified:(NSString *)dateLastModified contentType:(NSArray *)contentType withUserSessionToken:(NSString *)token onCommunication:(OCCommunication *)sharedOCCommunication successRequest:(void(^)(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer)) failureRequest{
     
     if (!token){
         token = @"no token";

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

@@ -196,7 +196,7 @@ extern NSString * _Nullable OCWebDAVModificationDateKey;
  
 */ 
 
-- (void)search:(NSString * _Nonnull)path folder:(NSString * _Nonnull)folder fileName:(NSString * _Nonnull)fileName depth:(NSString * _Nonnull)depth dateLastModified:(NSString * _Nonnull)dateLastModified contentType:(NSString * _Nonnull)contentType user:(NSString * _Nonnull)user userID:(NSString * _Nonnull)userID onCommunication:(OCCommunication * _Nonnull)sharedOCCommunication withUserSessionToken:(NSString * _Nonnull)token success:(void(^ _Nonnull)(NSHTTPURLResponse * _Nonnull, id  _Nonnull, NSString * _Nonnull token))success failure:(void(^ _Nonnull)(NSHTTPURLResponse * _Nonnull, id  _Nullable responseObject, NSError * _Nonnull, NSString * _Nonnull token))failure;
+- (void)search:(NSString * _Nonnull)path folder:(NSString * _Nonnull)folder fileName:(NSString * _Nonnull)fileName depth:(NSString * _Nonnull)depth dateLastModified:(NSString * _Nonnull)dateLastModified contentType:(NSArray * _Nonnull)contentType user:(NSString * _Nonnull)user userID:(NSString * _Nonnull)userID onCommunication:(OCCommunication * _Nonnull)sharedOCCommunication withUserSessionToken:(NSString * _Nonnull)token success:(void(^ _Nonnull)(NSHTTPURLResponse * _Nonnull, id  _Nonnull, NSString * _Nonnull token))success failure:(void(^ _Nonnull)(NSHTTPURLResponse * _Nonnull, id  _Nullable responseObject, NSError * _Nonnull, NSString * _Nonnull token))failure;
 
 /**
  

+ 9 - 10
iOSClient/Library/OCCommunicationLib/OCWebDavClient/OCWebDAVClient.m

@@ -266,9 +266,9 @@ NSString const *OCWebDAVModificationDateKey	= @"modificationdate";
     [self mr_listPath:path depth:depth withUserSessionToken:token onCommunication:sharedOCCommunication success:success failure:failure];
 }
 
-- (void)search:(NSString *)path folder:(NSString *)folder fileName:(NSString *)fileName depth:(NSString *)depth dateLastModified:(NSString *)dateLastModified contentType:(NSString *)contentType user:(NSString *)user userID:(NSString *)userID onCommunication:(OCCommunication *)sharedOCCommunication withUserSessionToken:(NSString *)token success:(void(^)(NSHTTPURLResponse *, id, NSString *token))success failure:(void(^)(NSHTTPURLResponse *, id  _Nullable responseObject, NSError *, NSString *token))failure {
+- (void)search:(NSString *)path folder:(NSString *)folder fileName:(NSString *)fileName depth:(NSString *)depth dateLastModified:(NSString *)dateLastModified contentType:(NSArray *)contentType user:(NSString *)user userID:(NSString *)userID onCommunication:(OCCommunication *)sharedOCCommunication withUserSessionToken:(NSString *)token success:(void(^)(NSHTTPURLResponse *, id, NSString *token))success failure:(void(^)(NSHTTPURLResponse *, id  _Nullable responseObject, NSError *, NSString *token))failure {
     
-    NSString *body;
+    NSString *body, *whereType;
         
     NSParameterAssert(success);
     
@@ -303,15 +303,14 @@ NSString const *OCWebDAVModificationDateKey	= @"modificationdate";
                         "<d:depth>infinity</d:depth>"
                     "</d:scope>"
                 "</d:from>"
-                "<d:where>"
-                    "<d:like>"
-                        "<d:prop><d:getcontenttype/></d:prop>"
-                        "<d:literal>%@</d:literal>"
-                    "</d:like>"
-                "</d:where>"
-            "</d:basicsearch>"
-        "</d:searchrequest>", userID, contentType];
+                "<d:where><d:or>", userID];
+        
+        for (NSString *type in contentType) {
+            whereType = [NSString stringWithFormat: @"%@<d:like><d:prop><d:getcontenttype/></d:prop><d:literal>%@</d:literal></d:like>", whereType, type];
+        }
         
+        body = [NSString stringWithFormat: @"%@%@</d:or></d:where></d:basicsearch></d:searchrequest>", body, whereType];
+      
     } else {
         
         body = [NSString stringWithFormat: @""

+ 1 - 1
iOSClient/Library/OCCommunicationLib/OCWebDavClient/Parsers/OCXMLListParser.m

@@ -162,7 +162,7 @@
     } else if ([elementName hasSuffix:@":getetag"] && [_xmlChars length]) {
         
         //ETAG
-        NSLog(@"getetag: %@", _xmlChars);
+        //NSLog(@"getetag: %@", _xmlChars);
         
         NSString *stringClean = _xmlChars;
         stringClean = [_xmlChars stringByReplacingOccurrencesOfString:@"\"" withString:@""];

+ 2 - 1
iOSClient/Library/OCCommunicationLib/OCWebDavClient/Parsers/OCXMLParser.m

@@ -201,8 +201,9 @@ NSString *OCCWebDAVURIKey           = @"uri";
         _currentFile.ocId = _xmlChars;
         
     } else if ([elementName hasSuffix:@":getetag"] && [_xmlChars length]) {
+        
         //ETAG
-        NSLog(@"getetag: %@", _xmlChars);
+        //NSLog(@"getetag: %@", _xmlChars);
         
         NSString *stringClean = _xmlChars;
         stringClean = [_xmlChars stringByReplacingOccurrencesOfString:@"\"" withString:@""];

+ 1 - 1
iOSClient/Main/CCMain.m

@@ -1932,7 +1932,7 @@
 {
     NSString *home = [CCUtility getHomeServerUrlActiveUrl:appDelegate.activeUrl];
     
-    [[CCActions sharedInstance] search:home fileName:_searchFileName depth:@"infinity" date:nil contentType:nil selector:selectorSearchFiles delegate:self];
+    [[CCActions sharedInstance] search:home fileName:_searchFileName depth:@"infinity" date:nil contenType:nil selector:selectorSearchFiles delegate:self];
 
     _noFilesSearchTitle = @"";
     _noFilesSearchDescription = NSLocalizedString(@"_search_in_progress_", nil);

+ 1 - 1
iOSClient/Networking/CCNetworking.h

@@ -90,7 +90,7 @@
 @property (nonatomic, strong) NSString *account;
 @property (nonatomic, strong) NSString *action;
 @property (nonatomic, strong) NSString *assetLocalIdentifier;
-@property (nonatomic, strong) NSString *contentType;
+@property (nonatomic, strong) NSArray *contentType;
 @property (nonatomic, strong) NSDate *date;
 @property (nonatomic, weak) id delegate;
 @property (nonatomic, strong) NSString *depth;

+ 0 - 1
iOSClient/Photos/CCPhotos.h

@@ -40,7 +40,6 @@
 @interface CCPhotos: UICollectionViewController <UICollectionViewDataSource, UICollectionViewDelegate, UIActionSheetDelegate, DZNEmptyDataSetSource, DZNEmptyDataSetDelegate, OCNetworkingDelegate>
 
 @property (nonatomic, weak) CCDetail *detailViewController;
-@property (nonatomic, strong) NSString *directoryStartDatasource;
 
 - (void)downloadFileSuccessFailure:(NSString *)fileName fileID:(NSString *)fileID serverUrl:(NSString *)serverUrl selector:(NSString *)selector selectorPost:(NSString *)selectorPost errorMessage:(NSString *)errorMessage errorCode:(NSInteger)errorCode;
 

+ 13 - 18
iOSClient/Photos/CCPhotos.m

@@ -38,7 +38,6 @@
     NSMutableArray *_selectedMetadatas;
     NSUInteger _numSelectedMetadatas;
     
-    NSDate *_dateReadDataSource;
     CCSectionDataSourceMetadata *_sectionDataSource;
     
     CCHud *_hud;
@@ -251,6 +250,10 @@
 
 - (void)getGeoLocationForSection:(NSInteger)section
 {
+    // test section
+    if (_sectionDataSource.sectionArrayRow.count <= section)
+        return;
+    
     NSString *addLocation = @"";
     
     NSArray *fileIDsForKey = [_sectionDataSource.sectionArrayRow objectForKey:[_sectionDataSource.sections objectAtIndex:section]];
@@ -292,6 +295,7 @@
     return [[NSAttributedString alloc] initWithString:text attributes:attributes];
 }
 
+/*
 - (NSAttributedString *)descriptionForEmptyDataSet:(UIScrollView *)scrollView
 {
     NSMutableParagraphStyle *paragraph = [NSMutableParagraphStyle new];
@@ -310,6 +314,7 @@
     return [[NSAttributedString alloc] initWithString:text attributes:attributes];
 }
 
+
 - (UIImage *)buttonImageForEmptyDataSet:(UIScrollView *)scrollView forState:(UIControlState)state
 {
     tableAccount *account = [[NCManageDatabase sharedInstance] getAccountActive];
@@ -331,6 +336,7 @@
     [navigationController setModalPresentationStyle:UIModalPresentationFullScreen];
     [self presentViewController:navigationController animated:YES completion:nil];
 }
+*/
 
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ===== openSelectedFiles =====
@@ -526,7 +532,6 @@
 - (void)reloadDatasourceForced
 {
     [CCSectionMetadata removeAllObjectsSectionDataSource:_sectionDataSource];
-    _dateReadDataSource = nil;
     [self reloadDatasource];
 }
 
@@ -536,25 +541,15 @@
     if (appDelegate.activeAccount.length == 0)
         return;
     
-    _directoryStartDatasource = [[NCManageDatabase sharedInstance] getAccountAutoUploadPath:appDelegate.activeUrl];
-    NSDate *dateDateRecordDirectory = nil;
-    
-    NSArray *directories = [[NCManageDatabase sharedInstance] getTablesDirectoryWithPredicate:[NSPredicate predicateWithFormat:@"account = %@ AND serverUrl BEGINSWITH %@", appDelegate.activeAccount, _directoryStartDatasource] sorted:@"dateReadDirectory" ascending:false];
-    if ([directories count] > 0) {
-        tableDirectory *directory = [directories objectAtIndex:0];
-        dateDateRecordDirectory = directory.dateReadDirectory;
-    }
-    
-    if ([dateDateRecordDirectory compare:_dateReadDataSource] == NSOrderedDescending || dateDateRecordDirectory == nil || _dateReadDataSource == nil) {
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
 
-        NSLog(@"[LOG] Photos rebuild Data Source serverUrl : %@", _directoryStartDatasource);
-
-        _dateReadDataSource = [NSDate date];
-        NSArray *results = [[NCManageDatabase sharedInstance] getTableMetadatasPhotosWithServerUrl:_directoryStartDatasource];
+        NSArray *results = [[NCManageDatabase sharedInstance] getTableMetadatasContentTypeImageVideo];
         _sectionDataSource = [CCSectionMetadata creataDataSourseSectionMetadata:results listProgressMetadata:nil e2eEncryptions:nil groupByField:@"date" activeAccount:appDelegate.activeAccount];
         
-        [self reloadCollection];
-    }
+        dispatch_async(dispatch_get_main_queue(), ^{
+            [self reloadCollection];
+        });
+    });
 }
 
 - (void)reloadCollection

+ 1 - 1
iOSClient/Synchronize/CCSynchronize.h

@@ -39,7 +39,7 @@
 - (void)readFolder:(NSString *)serverUrl selector:(NSString *)selector;
 - (void)readFileForFolder:(NSString *)fileName serverUrl:(NSString *)serverUrl selector:(NSString *)selector;
 - (void)readFile:(tableMetadata *)metadata selector:(NSString *)selector;
-- (void)searchContentType:(NSString *)contentType selector:(NSString *)selector;
+- (void)searchContentType:(NSArray *)contentType selector:(NSString *)selector;
 
 - (void)verifyChangeMedatas:(NSArray *)allRecordMetadatas serverUrl:(NSString *)serverUrl account:(NSString *)account withDownload:(BOOL)withDownload;
 

+ 22 - 3
iOSClient/Synchronize/CCSynchronize.m

@@ -334,11 +334,30 @@
     if (![metadataNet.account isEqualToString:appDelegate.activeAccount])
         return;
     
-    //[self readFolderSuccess:metadataNet metadataFolder:nil metadatas:metadatas];
+    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
+        
+        NSMutableArray *addMetadatas = [NSMutableArray new];
+        
+        for (tableMetadata *metadata in metadatas) {
+    
+            // Verify if do not exists this Metadata
+            tableMetadata *result = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", metadata.fileID]];
+                
+            if (!result)
+                [addMetadatas addObject:metadata];
+        }
+        
+        if ([addMetadatas count] > 0) {
+            (void)[[NCManageDatabase sharedInstance] addMetadatas:addMetadatas serverUrl:metadataNet.serverUrl];
+        }
+        
+        dispatch_async(dispatch_get_main_queue(), ^{
+            [appDelegate.activePhotos reloadDatasourceForced];
+        });
+    });
 }
 
-
-- (void)searchContentType:(NSString *)contentType selector:(NSString *)selector
+- (void)searchContentType:(NSArray *)contentType selector:(NSString *)selector
 {
     CCMetadataNet *metadataNet = [[CCMetadataNet alloc] initWithAccount:appDelegate.activeAccount];