Browse Source

Favorite API

Marino Faggiana 8 years ago
parent
commit
d2d01fde72

+ 6 - 0
Libraries external/OCCommunicationLib/OCCommunicationLib/OCCommunication.h

@@ -472,6 +472,12 @@ typedef enum {
 
 - (void)settingFavoriteServer:(NSString *)path andFileOrFolderPath:(NSString *)filePath favorite:(BOOL)favorite withUserSessionToken:(NSString *)token onCommunication:(OCCommunication *)sharedOCCommunication successRequest:(void(^)(NSHTTPURLResponse *response, NSString *redirectedServer, NSString *token)) successRequest failureRequest:(void(^)(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer)) failureRequest;
 
+///-----------------------------------
+/// @name Listing favorites
+///-----------------------------------
+
+- (void)listingFavorites:(NSString *)path folder:(NSString *)folder 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;
+
 
 #pragma mark - OC API Calls
 

+ 34 - 0
Libraries external/OCCommunicationLib/OCCommunicationLib/OCCommunication.m

@@ -678,6 +678,40 @@
     }];
 }
 
+///-----------------------------------
+/// @name Listing favorites
+///-----------------------------------
+- (void)listingFavorites:(NSString *)path folder:(NSString *)folder 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";
+    }
+    
+    path = [path encodeString:NSUTF8StringEncoding];
+    
+    OCWebDAVClient *request = [OCWebDAVClient new];
+    request = [self getRequestWithCredentials:request];
+    
+    [request listingFavorites:path folder:folder user:_user onCommunication:sharedOCCommunication withUserSessionToken:token success:^(NSHTTPURLResponse *response, id responseObject, NSString *token) {
+        
+        if (successRequest) {
+            
+            NSData *responseData = (NSData*) responseObject;
+            
+            OCXMLListParser *parser = [OCXMLListParser new];
+            [parser initParserWithData:responseData];
+            NSMutableArray *searchList = [parser.searchList mutableCopy];
+            
+            //Return success
+            successRequest(response, searchList, request.redirectedServer, token);
+        }
+        
+    } failure:^(NSHTTPURLResponse *response, id responseData, NSError *error, NSString *token) {
+        
+        failureRequest(response, error, token, request.redirectedServer);
+    }];
+}
+
 #pragma mark - OC API Calls
 
 - (NSString *) getCurrentServerVersion {

+ 8 - 0
Libraries external/OCCommunicationLib/OCCommunicationLib/OCWebDavClient/OCWebDAVClient.h

@@ -192,6 +192,14 @@ extern NSString * _Nullable OCWebDAVModificationDateKey;
 
 - (void)settingFavorite:(NSString * _Nonnull)path favorite:(BOOL)favorite 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)listingFavorites:(NSString * _Nonnull)path folder:(NSString * _Nonnull)folder user:(NSString * _Nonnull)user 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;
+
+
+
 /**
  Creates an `NSURLSessionDownloadTask` with the specified request for a local file.
  

+ 29 - 0
Libraries external/OCCommunicationLib/OCCommunicationLib/OCWebDavClient/OCWebDAVClient.m

@@ -326,6 +326,35 @@ NSString const *OCWebDAVModificationDateKey	= @"modificationdate";
     [operation resume];
 }
 
+- (void)listingFavorites:(NSString *)path folder:(NSString *)folder user:(NSString *)user 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;
+    
+    NSParameterAssert(success);
+    
+    _requestMethod = @"REPORT";
+    
+    //REPORT remote.php/dav/files/user/path/to/folder
+
+    path = [NSString stringWithFormat:@"%@/files/%@%@", path, user, folder];
+    
+    NSMutableURLRequest *request = [self requestWithMethod:_requestMethod path:path parameters:nil];
+    
+    body = @"<?xml version=\"1.0\"?><oc:filter-files xmlns:d=\"DAV:\" xmlns:oc=\"http://owncloud.org/ns\" xmlns:nc=\"http://nextcloud.org/ns\"><oc:filter-rules><oc:favorite>1</oc:favorite></oc:filter-rules><d:prop>"; //<oc:id/></d:prop></oc:filter-files>";
+    
+    // OCFileDto
+    body = [body stringByAppendingString:@"<d:resourcetype/><oc:fileid/><d:getcontenttype/><d:getetag/><d:creationdate/><oc:size/><d:getcontentlength/><d:getlastmodified/><oc:id/><oc:permissions/><d:quota-available-bytes/><d:quota-used-bytes/><oc:favorite/>"];
+    
+    body = [NSString stringWithFormat:@"%@</d:prop></oc:filter-files>", body];
+    
+    [request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
+    [request setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
+    
+    OCHTTPRequestOperation *operation = [self mr_operationWithRequest:request onCommunication:sharedOCCommunication withUserSessionToken:token success:success failure:failure];
+    [self setRedirectionBlockOnDatataskWithOCCommunication:sharedOCCommunication andSessionManager:sharedOCCommunication.networkSessionManager];
+    [operation resume];
+}
+
 - (NSURLSessionDownloadTask *)downloadWithSessionPath:(NSString *)remoteSource toPath:(NSString *)localDestination defaultPriority:(BOOL)defaultPriority onCommunication:(OCCommunication *)sharedOCCommunication progress:(void(^)(NSProgress *progress))downloadProgress success:(void(^)(NSURLResponse *response, NSURL *filePath))success failure:(void(^)(NSURLResponse *response, NSError *error))failure{
     
     NSMutableURLRequest *request = [self requestWithMethod:@"GET" path:remoteSource parameters:nil];

+ 35 - 0
iOSClient/Actions/CCActions.swift

@@ -53,6 +53,9 @@ import Foundation
     
     func settingFavoriteSuccess(_ metadataNet: CCMetadataNet)
     func settingFavoriteFailure(_ metadataNet: CCMetadataNet, message: NSString, errorCode: NSInteger)
+    
+    func listingFavoritesSuccess(_ metadataNet: CCMetadataNet, metadatas: [Any])
+    func listingFavoritesFailure(_ metadataNet: CCMetadataNet, message: NSString, errorCode: NSInteger)
 }
 
 class CCActions: NSObject {
@@ -410,8 +413,40 @@ class CCActions: NSObject {
         metadataNet.delegate?.settingFavoriteFailure(metadataNet, message: message, errorCode: errorCode)
     }
 
+    // --------------------------------------------------------------------------------------------
+    // MARK: Linsting Favorites
+    // --------------------------------------------------------------------------------------------
+    
+    func listingFavorites(_ serverUrl : String, delegate: AnyObject) {
+        
+        let metadataNet: CCMetadataNet = CCMetadataNet.init(account: appDelegate.activeAccount)
+        
+        metadataNet.action = actionListingFavorites
+        metadataNet.delegate = delegate
+        metadataNet.priority = Operation.QueuePriority.normal.rawValue
+        //metadataNet.selector = selectorAddFavorite
+        metadataNet.serverUrl = serverUrl
+        
+        appDelegate.addNetworkingOperationQueue(appDelegate.netQueue, delegate: self, metadataNet: metadataNet)
+    }
+    
+    func listingFavoritesSuccess(_ metadataNet: CCMetadataNet, metadatas: [CCMetadata]) {
+        
+        metadataNet.delegate?.settingFavoriteSuccess(metadataNet)
+    }
+    
+    func listingFavoritesFailure(_ metadataNet: CCMetadataNet, message: NSString, errorCode: NSInteger) {
+        
+        appDelegate.messageNotification("_favorite_", description: message as String, visible: true, delay:TimeInterval(k_dismissAfterSecond), type:TWMessageBarMessageType.error)
+        
+        metadataNet.delegate?.settingFavoriteFailure(metadataNet, message: message, errorCode: errorCode)
+    }
+
+    
 }
 
 
 
 
+
+

+ 2 - 0
iOSClient/AppDelegate.m

@@ -361,6 +361,8 @@
         NSLog(@"[LOG] read folder offline");
         [[CCSynchronize sharedSynchronize] readFolderOffline];
         
+        NSLog(@"[LOG] Listning Favorites");
+        [[CCActions sharedInstance] listingFavorites:@"" delegate:self];
     });
     
     // Initialize Camera Upload

+ 1 - 0
iOSClient/CCGlobal.h

@@ -209,6 +209,7 @@ extern NSString *const BKPasscodeKeychainServiceName;
 #define actionGetUserProfile                            @"getUserProfile"
 #define actionGetNotificationServer                     @"getNotificationServer"
 #define actionSetNotificationServer                     @"setNotificationServer"
+#define actionListingFavorites                          @"listingFavorites"
 #define actionMoveFileOrFolder                          @"moveFileOrFolder"
 #define actionReadFile                                  @"readFile"
 #define actionReadFolder                                @"readFolder"

+ 2 - 0
iOSClient/Networking/OCNetworking.h

@@ -111,6 +111,8 @@
 
 - (void)settingFavoriteSuccess:(CCMetadataNet *)metadataNet;
 - (void)settingFavoriteFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode;
+- (void)listingFavoritesSuccess:(CCMetadataNet *)metadataNet metadatas:(NSArray *)metadatas;
+- (void)listingFavoritesFailure:(CCMetadataNet *)metadataNet message:(NSString *)message errorCode:(NSInteger)errorCode;
 
 // HUD
 - (void)progressTask:(NSString *)fileID serverUrl:(NSString *)serverUrl cryptated:(BOOL)cryptated progress:(float)progress;

+ 82 - 0
iOSClient/Networking/OCNetworking.m

@@ -534,6 +534,88 @@
 
 }
 
+#pragma --------------------------------------------------------------------------------------------
+#pragma mark ===== Listing Favorites =====
+#pragma --------------------------------------------------------------------------------------------
+
+- (void)listingFavorites
+{
+    OCCommunication *communication = [CCNetworking sharedNetworking].sharedOCCommunication;
+    
+    [communication setCredentialsWithUser:_activeUser andPassword:_activePassword];
+    [communication setUserAgent:[CCUtility getUserAgent]];
+    
+    NSString *path = [_activeUrl stringByAppendingString:dav];
+    NSString *folder = [_metadataNet.serverUrl stringByReplacingOccurrencesOfString:[CCUtility getHomeServerUrlActiveUrl:_activeUrl] withString:@""];
+    
+    [communication listingFavorites:path folder:folder withUserSessionToken:nil onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSArray *items, NSString *redirectedServer, NSString *token) {
+        
+        NSMutableArray *metadatas = [NSMutableArray new];
+        
+        NSString *cameraFolderName = [CCCoreData getCameraUploadFolderNameActiveAccount:_metadataNet.account];
+        NSString *cameraFolderPath = [CCCoreData getCameraUploadFolderPathActiveAccount:_metadataNet.account activeUrl:_activeUrl];
+        NSString *directoryUser = [CCUtility getDirectoryActiveUser:_activeUser activeUrl:_activeUrl];
+        
+        for(OCFileDto *itemDto in items) {
+            
+            itemDto.fileName = [itemDto.fileName stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
+            
+            // Not in Crypto Cloud file
+            NSString *fileName = itemDto.fileName;
+            if (itemDto.isDirectory)
+                fileName = [fileName substringToIndex:[fileName length] - 1];
+            
+            if ([CCUtility isFileCryptated:fileName])
+                continue;
+            
+            // ----- BUG #942 ---------
+            if ([itemDto.etag length] == 0) {
+#ifndef EXTENSION
+                [app messageNotification:@"Server error" description:@"Metadata etag absent, record excluded, please fix" visible:YES delay:k_dismissAfterSecond type:TWMessageBarMessageTypeError];
+#endif
+                continue;
+            }
+            // ------------------------
+            
+            NSString *serverUrl = [NSString stringWithFormat:@"%@/files/%@", dav, _activeUser];
+            serverUrl = [itemDto.filePath stringByReplacingOccurrencesOfString:serverUrl withString:@""];
+            
+            /* TRIM */
+            if ([serverUrl hasPrefix:@"/"])
+                serverUrl = [serverUrl substringFromIndex:1];
+            if ([serverUrl hasSuffix:@"/"])
+                serverUrl = [serverUrl substringToIndex:[serverUrl length] - 1];
+            /*      */
+            
+            serverUrl = [CCUtility stringAppendServerUrl:[_activeUrl stringByAppendingString:webDAV] addServerUrl:serverUrl];
+            
+            NSString *directoryID = [CCCoreData addDirectory:serverUrl date:[NSDate date] permissions:itemDto.permissions activeAccount:_metadataNet.account];
+            
+            [metadatas addObject:[CCUtility trasformedOCFileToCCMetadata:itemDto fileNamePrint:itemDto.fileName serverUrl:serverUrl directoryID:directoryID cameraFolderName:cameraFolderName cameraFolderPath:cameraFolderPath activeAccount:_metadataNet.account directoryUser:directoryUser]];
+        }
+        
+        if ([self.delegate respondsToSelector:@selector(listingFavoritesSuccess:metadatas:)])
+            [self.delegate listingFavoritesSuccess:_metadataNet metadatas:metadatas];
+        
+        [self complete];
+        
+    } failureRequest:^(NSHTTPURLResponse *response, NSError *error, NSString *token, NSString *redirectedServer) {
+        
+        NSInteger errorCode = response.statusCode;
+        if (errorCode == 0)
+            errorCode = error.code;
+        
+        if ([self.delegate respondsToSelector:@selector(listingFavoritesFailure:message:errorCode:)])
+            [self.delegate listingFavoritesFailure:_metadataNet message:[error.userInfo valueForKey:@"NSLocalizedDescription"] errorCode:errorCode];
+        
+        // Request trusted certificated
+        if ([error code] == NSURLErrorServerCertificateUntrusted)
+            [[CCCertificate sharedManager] presentViewControllerCertificateWithTitle:[error localizedDescription] viewController:(UIViewController *)self.delegate delegate:self];
+        
+        [self complete];
+    }];
+}
+
 #pragma --------------------------------------------------------------------------------------------
 #pragma mark ===== Create Folder =====
 #pragma --------------------------------------------------------------------------------------------