marinofaggiana 5 ani în urmă
părinte
comite
f70124e9f4

+ 1 - 1
iOSClient/CCGlobal.h

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

+ 2 - 0
iOSClient/Database/NCDatabase.swift

@@ -194,6 +194,8 @@ class tableCapabilities: Object {
     @objc dynamic var HCShopUrl = ""
     // Imagemeter
     @objc dynamic var isImagemeterEnabled: Bool = false
+    // Fulltextsearch
+    @objc dynamic var isFulltextsearchEnabled: Bool = false
 }
 
 class tableCertificates: Object {

+ 2 - 0
iOSClient/Database/NCManageDatabase.swift

@@ -825,6 +825,8 @@ class NCManageDatabase: NSObject {
                 resultCapabilities.HCShopUrl = capabilities.hcShopUrl
                 // Imagemeter
                 resultCapabilities.isImagemeterEnabled = capabilities.isImagemeterEnabled
+                // Fulltextsearch
+                resultCapabilities.isFulltextsearchEnabled = capabilities.isFulltextsearchEnabled
                 
                 if result == nil {
                     realm.add(resultCapabilities)

+ 3 - 0
iOSClient/Library/OCCommunicationLib/OCCapabilities.h

@@ -115,4 +115,7 @@
 // Imagemeter
 @property (nonatomic) BOOL isImagemeterEnabled;
 
+// Fulltextsearch
+@property (nonatomic) BOOL isFulltextsearchEnabled;
+
 @end

+ 86 - 0
iOSClient/Library/OCCommunicationLib/OCCommunication.m

@@ -1578,6 +1578,13 @@
                     NSNumber *isImagemeterEnabledNumber = (NSNumber*)[imagemeterDic valueForKey:@"enabled"];
                     capabilities.isImagemeterEnabled = isImagemeterEnabledNumber.boolValue;
                 }
+                
+                //Fulltextsearch
+                NSDictionary *fulltextsearchDic = [capabilitiesDict valueForKey:@"fulltextsearch"];
+                if (fulltextsearchDic) {
+                    NSNumber *isFulltextsearchEnabledNumber = (NSNumber*)[fulltextsearchDic valueForKey:@"remote"];
+                    capabilities.isFulltextsearchEnabled = isFulltextsearchEnabledNumber.boolValue;
+                }
             }
         
             successRequest(response, capabilities, request.redirectedServer);
@@ -3105,6 +3112,85 @@
     }];
 }
 
+#pragma mark - Fulltextsearch
+
+- (void)fullTextSearch:(NSString *)serverPath providers:(NSString *)providers text:(NSString *)text page:(NSInteger)page options:(NSString *)options size:(NSInteger)size onCommunication:(OCCommunication *)sharedOCComunication successRequest:(void(^)(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer))successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest {
+    
+    serverPath = [serverPath stringByAppendingString:k_url_fulltextsearch];
+    //serverPath = [
+    serverPath = [serverPath stringByAppendingString:@"?format=json"];
+    
+    OCWebDAVClient *request = [[OCWebDAVClient alloc] init];
+    request = [self getRequestWithCredentials:request];
+    
+    [request geTemplatesRichdocuments:serverPath onCommunication:sharedOCComunication success:^(NSHTTPURLResponse *operation, id response) {
+        
+        NSData *responseData = (NSData*) response;
+        
+        //Parse
+        NSError *error;
+        NSDictionary *jsongParsed = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingMutableContainers error:&error];
+        NSLog(@"[LOG] Link richdocuments : %@",jsongParsed);
+        
+        if (jsongParsed && jsongParsed.allKeys > 0) {
+            
+            NSMutableArray *list = [NSMutableArray new];
+            
+            NSDictionary *ocs = [jsongParsed valueForKey:@"ocs"];
+            NSDictionary *meta = [ocs valueForKey:@"meta"];
+            NSDictionary *data = [ocs valueForKey:@"data"];
+            
+            NSInteger statusCode = [[meta valueForKey:@"statuscode"] integerValue];
+            
+            if (statusCode == kOCUserProfileAPISuccessful) {
+                
+                for (NSDictionary *dicDatas in data) {
+                    
+                    NCRichDocumentTemplate *template = [NCRichDocumentTemplate new];
+                    
+                    if ([dicDatas valueForKey:@"id"] && ![[dicDatas valueForKey:@"id"] isEqual:[NSNull null]])
+                        template.templateID = [[dicDatas valueForKey:@"id"] integerValue];
+                    
+                    if ([dicDatas valueForKey:@"delete"] && ![[dicDatas valueForKey:@"delete"] isKindOfClass:[NSNull class]])
+                        template.delete = [dicDatas valueForKey:@"delete"];
+                    
+                    if ([dicDatas valueForKey:@"extension"] && ![[dicDatas valueForKey:@"extension"] isKindOfClass:[NSNull class]])
+                        template.extension = [dicDatas valueForKey:@"extension"];
+                    
+                    if ([dicDatas valueForKey:@"name"] && ![[dicDatas valueForKey:@"name"] isKindOfClass:[NSNull class]])
+                        template.name = [dicDatas valueForKey:@"name"];
+                    
+                    if ([dicDatas valueForKey:@"preview"] && ![[dicDatas valueForKey:@"preview"] isKindOfClass:[NSNull class]])
+                        template.preview = [dicDatas valueForKey:@"preview"];
+                    
+                    if ([dicDatas valueForKey:@"type"] && ![[dicDatas valueForKey:@"type"] isKindOfClass:[NSNull class]])
+                        template.type = [dicDatas valueForKey:@"type"];
+                    
+                    [list addObject:template];
+                }
+                
+                successRequest(response, list, request.redirectedServer);
+                
+            } else {
+                
+                NSString *message = (NSString *)[meta objectForKey:@"message"];
+                if ([message isKindOfClass:[NSNull class]]) {
+                    message = NSLocalizedString(@"_server_response_error_", nil);
+                }
+                failureRequest(response, [UtilsFramework getErrorWithCode:statusCode andCustomMessageFromTheServer:message], request.redirectedServer);
+            }
+            
+        } else {
+            failureRequest(response, [UtilsFramework getErrorWithCode:k_CCErrorWebdavResponseError andCustomMessageFromTheServer:NSLocalizedString(@"_server_response_error_", nil)], request.redirectedServer);
+        }
+        
+    } failure:^(NSHTTPURLResponse *response, NSData *responseData, NSError *error) {
+        
+        //Return error
+        failureRequest(response, error, request.redirectedServer);
+    }];
+}
+
 #pragma mark - Third Parts
 
 - (void)getHCUserProfile:(NSString *)serverPath onCommunication:(OCCommunication *)sharedOCCommunication successRequest:(void(^)(NSHTTPURLResponse *response, OCUserProfile *userProfile, NSString *redirectedServer)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *redirectedServer)) failureRequest

+ 3 - 0
iOSClient/Library/OCCommunicationLib/OCFrameworkConstants.h

@@ -83,6 +83,9 @@
 //Url to insert files directly from your Nextcloud to a richdocuments
 #define k_url_insert_assets_to_richdocuments @"apps/richdocuments/assets"
 
+//Url for fulltextsearch
+#define k_url_fulltextsearch @"apps/apps/fulltextsearch/v1/remote"
+
 //Version of the server that have share API
 #define k_version_support_shared [NSArray arrayWithObjects:  @"5", @"0", @"27", nil]