OC-2755: Refresh account shows empty icon sometimes
[pub/Android/ownCloud.git] / src / com / owncloud / android / operations / GetSharesOperation.java
index 4e3441c..3b879c0 100644 (file)
@@ -17,6 +17,8 @@
 
 package com.owncloud.android.operations;
 
+import java.util.ArrayList;
+
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.network.OwnCloudClient;
@@ -36,56 +38,65 @@ import com.owncloud.android.utils.Log_OC;
  */
 
 public class GetSharesOperation extends RemoteOperation {
-    
+
     private static final String TAG = GetSharesOperation.class.getSimpleName();
 
-    private String mUrlServer;
     protected FileDataStorageManager mStorageManager;
-    
 
-    public GetSharesOperation(String urlServer, FileDataStorageManager storageManager) {
-        mUrlServer = urlServer;
+
+    public GetSharesOperation(FileDataStorageManager storageManager) {
         mStorageManager = storageManager;
     }
 
     @Override
     protected RemoteOperationResult run(OwnCloudClient client) {
-        GetRemoteSharesOperation operation = new GetRemoteSharesOperation(mUrlServer);
+        GetRemoteSharesOperation operation = new GetRemoteSharesOperation();
         RemoteOperationResult result = operation.execute(client);
-        
+
         if (result.isSuccess()) {
-            
-            // Clean Share data in filelist table
-            mStorageManager.cleanShare();
-            
+
             // Update DB with the response
             Log_OC.d(TAG, "Share list size = " + result.getData().size());
+            ArrayList<OCShare> shares = new ArrayList<OCShare>();
             for(Object obj: result.getData()) {
-                saveShareDB((OCShare) obj);
+                shares.add((OCShare) obj);
             }
+
+            saveSharesDB(shares);
         }
-        
+
         return result;
     }
 
-    private void saveShareDB(OCShare shareFile) {
-        // Save share file
-        mStorageManager.saveShare(shareFile);
-        
-        // Get the path
-        String path = shareFile.getPath();
-        if (shareFile.isDirectory()) {
-            path = path + FileUtils.PATH_SEPARATOR;
-        }           
+    private void saveSharesDB(ArrayList<OCShare> shares) {
+
+        if (shares.size() > 0) {
+            // Save share file
+            mStorageManager.saveShares(shares);
+
+            ArrayList<OCFile> sharedFiles = new ArrayList<OCFile>();
+
+            for (OCShare share : shares) {
+                // Get the path
+                String path = share.getPath();
+                if (share.isDirectory()) {
+                    path = path + FileUtils.PATH_SEPARATOR;
+                }           
+
+                // Update OCFile with data from share: ShareByLink  ¿and publicLink?
+                OCFile file = mStorageManager.getFileByPath(path);
+                if (file != null) {
+                    if (share.getShareType().equals(ShareType.PUBLIC_LINK)) {
+                        file.setShareByLink(true);
+                        sharedFiles.add(file);
+                    }
+                } 
+            }
             
-        // Update OCFile with data from share: ShareByLink  ¿and publicLink?
-        OCFile file = mStorageManager.getFileByPath(path);
-        if (file != null) {
-            if (shareFile.getShareType().equals(ShareType.PUBLIC_LINK)) {
-                file.setShareByLink(true);
-                mStorageManager.saveFile(file);
+            if (sharedFiles.size() > 0) {
+                mStorageManager.updateSharedFiles(sharedFiles);
             }
-        } 
+        }
     }
 
 }