Fix bug: When renaming a folder, in the photos apps both folder are shown
authormasensio <masensio@solidgear.es>
Thu, 29 Jan 2015 10:22:47 +0000 (11:22 +0100)
committermasensio <masensio@solidgear.es>
Thu, 29 Jan 2015 10:22:47 +0000 (11:22 +0100)
src/com/owncloud/android/datamodel/FileDataStorageManager.java
src/com/owncloud/android/datamodel/OCFile.java
src/com/owncloud/android/operations/RenameFileOperation.java
src/com/owncloud/android/utils/FileStorageUtils.java

index 900d59c..c24c94b 100644 (file)
@@ -494,7 +494,7 @@ public class FileDataStorageManager {
                 if (removeLocalCopy && file.isDown() && localPath != null && success) {
                     success = new File(localPath).delete();
                     if (success) {
                 if (removeLocalCopy && file.isDown() && localPath != null && success) {
                     success = new File(localPath).delete();
                     if (success) {
-                        deleteFileInMediaScan(file);
+                        deleteFileInMediaScan(localPath);
                     }
                     if (!removeDBData && success) {
                         // maybe unnecessary, but should be checked TODO remove if unnecessary
                     }
                     if (!removeDBData && success) {
                         // maybe unnecessary, but should be checked TODO remove if unnecessary
@@ -556,7 +556,8 @@ public class FileDataStorageManager {
                             File localFile = new File(file.getStoragePath());
                             success &= localFile.delete();
                             if (success) {
                             File localFile = new File(file.getStoragePath());
                             success &= localFile.delete();
                             if (success) {
-                                deleteFileInMediaScan(file); // notify MediaScanner about removed file
+                                // notify MediaScanner about removed file
+                                deleteFileInMediaScan(file.getStoragePath());
                                 file.setStoragePath(null);
                                 saveFile(file);
                             }
                                 file.setStoragePath(null);
                                 saveFile(file);
                             }
@@ -716,13 +717,11 @@ public class FileDataStorageManager {
                 Iterator<String> it = originalPathsToTriggerMediaScan.iterator();
                 while (it.hasNext()) {
                     // Notify MediaScanner about removed file
                 Iterator<String> it = originalPathsToTriggerMediaScan.iterator();
                 while (it.hasNext()) {
                     // Notify MediaScanner about removed file
-                    deleteFileInMediaScan(file);
-                    triggerMediaScan(it.next());
+                    deleteFileInMediaScan(it.next());
                 }
                 it = newPathsToTriggerMediaScan.iterator();
                 while (it.hasNext()) {
                     // Notify MediaScanner about new file/folder
                 }
                 it = newPathsToTriggerMediaScan.iterator();
                 while (it.hasNext()) {
                     // Notify MediaScanner about new file/folder
-                    deleteFileInMediaScan(file);
                     triggerMediaScan(it.next());
                 }
             }
                     triggerMediaScan(it.next());
                 }
             }
@@ -1500,22 +1499,23 @@ public class FileDataStorageManager {
         MainApp.getAppContext().sendBroadcast(intent);
     }
 
         MainApp.getAppContext().sendBroadcast(intent);
     }
 
-    public void deleteFileInMediaScan(OCFile file) {
+    public void deleteFileInMediaScan(String path) {
 
 
-        String path = file.getStoragePath();
-        if (file.isImage()) {
+        String mimetypeString = FileStorageUtils.getMimeTypeFromName(path);
+        if (mimetypeString.startsWith("image/")) {
             // Images
             getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                     MediaStore.Images.Media.DATA + "=?", new String[]{path});
             // Images
             getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                     MediaStore.Images.Media.DATA + "=?", new String[]{path});
-        } else if (file.isAudio()) {
+        } else if (mimetypeString.startsWith("audio/")) {
             // Audio
             getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                     MediaStore.Audio.Media.DATA + "=?", new String[]{path});
             // Audio
             getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                     MediaStore.Audio.Media.DATA + "=?", new String[]{path});
-        } else if (file.isVideo()) {
+        } else if (mimetypeString.startsWith("video/")) {
             // Video
             getContentResolver().delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                     MediaStore.Video.Media.DATA + "=?", new String[]{path});
         }
             // Video
             getContentResolver().delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
                     MediaStore.Video.Media.DATA + "=?", new String[]{path});
         }
+
     }
 
 }
     }
 
 }
index e6fd414..78bdc84 100644 (file)
@@ -20,9 +20,9 @@ package com.owncloud.android.datamodel;
 
 import android.os.Parcel;
 import android.os.Parcelable;
 
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.webkit.MimeTypeMap;
 
 import com.owncloud.android.lib.common.utils.Log_OC;
 
 import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.utils.FileStorageUtils;
 
 import java.io.File;
 
 
 import java.io.File;
 
@@ -538,17 +538,7 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
      */
     public boolean isImage() {
         return ((mMimeType != null && mMimeType.startsWith("image/")) ||
      */
     public boolean isImage() {
         return ((mMimeType != null && mMimeType.startsWith("image/")) ||
-                getMimeTypeFromName().startsWith("image/"));
-    }
-
-    public String getMimeTypeFromName() {
-        String extension = "";
-        int pos = mRemotePath.lastIndexOf('.');
-        if (pos >= 0) {
-            extension = mRemotePath.substring(pos + 1);
-        }
-        String result = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
-        return (result != null) ? result : "";
+                FileStorageUtils.getMimeTypeFromName(mRemotePath).startsWith("image/"));
     }
 
     public String getPermissions() {
     }
 
     public String getPermissions() {
index 2fdc8f1..aa98607 100644 (file)
@@ -51,7 +51,6 @@ public class RenameFileOperation extends SyncOperation {
      * Constructor
      * 
      * @param remotePath            RemotePath of the OCFile instance describing the remote file or folder to rename
      * Constructor
      * 
      * @param remotePath            RemotePath of the OCFile instance describing the remote file or folder to rename
-     * @param account               OwnCloud account containing the remote file 
      * @param newName               New name to set as the name of file.
      */
     public RenameFileOperation(String remotePath, String newName) {
      * @param newName               New name to set as the name of file.
      */
     public RenameFileOperation(String remotePath, String newName) {
@@ -117,7 +116,7 @@ public class RenameFileOperation extends SyncOperation {
 
     private void saveLocalFile() {
         mFile.setFileName(mNewName);
 
     private void saveLocalFile() {
         mFile.setFileName(mNewName);
-        
+
         // try to rename the local copy of the file
         if (mFile.isDown()) {
             String oldPath = mFile.getStoragePath();
         // try to rename the local copy of the file
         if (mFile.isDown()) {
             String oldPath = mFile.getStoragePath();
@@ -129,8 +128,8 @@ public class RenameFileOperation extends SyncOperation {
                 String newPath = parentStoragePath + mNewName;
                 mFile.setStoragePath(newPath);
 
                 String newPath = parentStoragePath + mNewName;
                 mFile.setStoragePath(newPath);
 
-                // notify MediaScanner about removed file - TODO really works?
-                getStorageManager().triggerMediaScan(oldPath);
+                // notify MediaScanner about removed file
+                getStorageManager().deleteFileInMediaScan(oldPath);
                 // notify to scan about new file
                 getStorageManager().triggerMediaScan(newPath);
             }
                 // notify to scan about new file
                 getStorageManager().triggerMediaScan(newPath);
             }
index b462cd9..b0c337d 100644 (file)
@@ -36,6 +36,7 @@ import android.preference.PreferenceManager;
 import android.net.Uri;
 import android.os.Environment;
 import android.os.StatFs;
 import android.net.Uri;
 import android.os.Environment;
 import android.os.StatFs;
+import android.webkit.MimeTypeMap;
 
 
 /**
 
 
 /**
@@ -135,7 +136,7 @@ public class FileStorageUtils {
     /**
      * Creates and populates a new {@link RemoteFile} object with the data read from an {@link OCFile}.
      * 
     /**
      * Creates and populates a new {@link RemoteFile} object with the data read from an {@link OCFile}.
      * 
-     * @param oCFile    OCFile 
+     * @param ocFile    OCFile
      * @return          New RemoteFile instance representing the resource described by ocFile.
      */
     public static RemoteFile fillRemoteFile(OCFile ocFile){
      * @return          New RemoteFile instance representing the resource described by ocFile.
      */
     public static RemoteFile fillRemoteFile(OCFile ocFile){
@@ -171,7 +172,7 @@ public class FileStorageUtils {
     
     /**
      * Sorts list by Date
     
     /**
      * Sorts list by Date
-     * @param sortAscending true: ascending, false: descending
+     * @param files
      */
     public static Vector<OCFile> sortByDate(Vector<OCFile> files){
         final Integer val;
      */
     public static Vector<OCFile> sortByDate(Vector<OCFile> files){
         final Integer val;
@@ -239,7 +240,7 @@ public class FileStorageUtils {
 
     /**
      * Sorts list by Name
 
     /**
      * Sorts list by Name
-     * @param sortAscending true: ascending, false: descending
+     * @param files     files to sort
      */
     public static Vector<OCFile> sortByName(Vector<OCFile> files){
         final Integer val;
      */
     public static Vector<OCFile> sortByName(Vector<OCFile> files){
         final Integer val;
@@ -284,6 +285,21 @@ public class FileStorageUtils {
             return result;
         }
         return 0;
             return result;
         }
         return 0;
-    } 
+    }
+
+    /**
+     * Mimetype String of a file
+     * @param path
+     * @return
+     */
+    public static String getMimeTypeFromName(String path) {
+        String extension = "";
+        int pos = path.lastIndexOf('.');
+        if (pos >= 0) {
+            extension = path.substring(pos + 1);
+        }
+        String result = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
+        return (result != null) ? result : "";
+    }
   
 }
   
 }