|
@@ -46,6 +46,7 @@ import android.content.OperationApplicationException;
|
|
|
import android.database.Cursor;
|
|
|
import android.net.Uri;
|
|
|
import android.os.RemoteException;
|
|
|
+import android.provider.MediaStore;
|
|
|
|
|
|
public class FileDataStorageManager {
|
|
|
|
|
@@ -262,8 +263,8 @@ public class FileDataStorageManager {
|
|
|
* HERE ONLY DATA CONSISTENCY SHOULD BE GRANTED
|
|
|
*
|
|
|
* @param folder
|
|
|
- * @param files
|
|
|
- * @param removeNotUpdated
|
|
|
+ * @param updatedFiles
|
|
|
+ * @param filesToRemove
|
|
|
*/
|
|
|
public void saveFolder(
|
|
|
OCFile folder, Collection<OCFile> updatedFiles, Collection<OCFile> filesToRemove
|
|
@@ -493,7 +494,7 @@ public class FileDataStorageManager {
|
|
|
if (removeLocalCopy && file.isDown() && localPath != null && success) {
|
|
|
success = new File(localPath).delete();
|
|
|
if (success) {
|
|
|
- triggerMediaScan(localPath);
|
|
|
+ deleteFileInMediaScan(localPath);
|
|
|
}
|
|
|
if (!removeDBData && success) {
|
|
|
// maybe unnecessary, but should be checked TODO remove if unnecessary
|
|
@@ -541,7 +542,8 @@ public class FileDataStorageManager {
|
|
|
|
|
|
private boolean removeLocalFolder(OCFile folder) {
|
|
|
boolean success = true;
|
|
|
- File localFolder = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder));
|
|
|
+ String localFolderPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder);
|
|
|
+ File localFolder = new File(localFolderPath);
|
|
|
if (localFolder.exists()) {
|
|
|
// stage 1: remove the local files already registered in the files database
|
|
|
Vector<OCFile> files = getFolderContent(folder.getFileId());
|
|
@@ -551,13 +553,13 @@ public class FileDataStorageManager {
|
|
|
success &= removeLocalFolder(file);
|
|
|
} else {
|
|
|
if (file.isDown()) {
|
|
|
- String path = file.getStoragePath();
|
|
|
File localFile = new File(file.getStoragePath());
|
|
|
success &= localFile.delete();
|
|
|
if (success) {
|
|
|
+ // notify MediaScanner about removed file
|
|
|
+ deleteFileInMediaScan(file.getStoragePath());
|
|
|
file.setStoragePath(null);
|
|
|
saveFile(file);
|
|
|
- triggerMediaScan(path); // notify MediaScanner about removed file
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -581,7 +583,6 @@ public class FileDataStorageManager {
|
|
|
} else {
|
|
|
String path = localFile.getAbsolutePath();
|
|
|
success &= localFile.delete();
|
|
|
- triggerMediaScan(path); // notify MediaScanner about removed file
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -716,7 +717,7 @@ public class FileDataStorageManager {
|
|
|
Iterator<String> it = originalPathsToTriggerMediaScan.iterator();
|
|
|
while (it.hasNext()) {
|
|
|
// Notify MediaScanner about removed file
|
|
|
- triggerMediaScan(it.next());
|
|
|
+ deleteFileInMediaScan(it.next());
|
|
|
}
|
|
|
it = newPathsToTriggerMediaScan.iterator();
|
|
|
while (it.hasNext()) {
|
|
@@ -1498,4 +1499,46 @@ public class FileDataStorageManager {
|
|
|
MainApp.getAppContext().sendBroadcast(intent);
|
|
|
}
|
|
|
|
|
|
+ public void deleteFileInMediaScan(String path) {
|
|
|
+
|
|
|
+ String mimetypeString = FileStorageUtils.getMimeTypeFromName(path);
|
|
|
+ ContentResolver contentResolver = getContentResolver();
|
|
|
+
|
|
|
+ if (contentResolver != null) {
|
|
|
+ if (mimetypeString.startsWith("image/")) {
|
|
|
+ // Images
|
|
|
+ contentResolver.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
|
|
+ MediaStore.Images.Media.DATA + "=?", new String[]{path});
|
|
|
+ } else if (mimetypeString.startsWith("audio/")) {
|
|
|
+ // Audio
|
|
|
+ contentResolver.delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
|
|
|
+ MediaStore.Audio.Media.DATA + "=?", new String[]{path});
|
|
|
+ } else if (mimetypeString.startsWith("video/")) {
|
|
|
+ // Video
|
|
|
+ contentResolver.delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
|
|
+ MediaStore.Video.Media.DATA + "=?", new String[]{path});
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ ContentProviderClient contentProviderClient = getContentProviderClient();
|
|
|
+ try {
|
|
|
+ if (mimetypeString.startsWith("image/")) {
|
|
|
+ // Images
|
|
|
+ contentProviderClient.delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
|
|
+ MediaStore.Images.Media.DATA + "=?", new String[]{path});
|
|
|
+ } else if (mimetypeString.startsWith("audio/")) {
|
|
|
+ // Audio
|
|
|
+ contentProviderClient.delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
|
|
|
+ MediaStore.Audio.Media.DATA + "=?", new String[]{path});
|
|
|
+ } else if (mimetypeString.startsWith("video/")) {
|
|
|
+ // Video
|
|
|
+ contentProviderClient.delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
|
|
+ MediaStore.Video.Media.DATA + "=?", new String[]{path});
|
|
|
+ }
|
|
|
+ } catch (RemoteException e) {
|
|
|
+ Log_OC.e(TAG, "Exception deleting media file in MediaStore " + e.getMessage());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|