import android.database.Cursor;
import android.net.Uri;
import android.os.RemoteException;
+import android.provider.MediaStore;
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
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
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());
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
}
}
}
} else {
String path = localFile.getAbsolutePath();
success &= localFile.delete();
- triggerMediaScan(path); // notify MediaScanner about removed file
}
}
}
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()) {
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());
+ }
+ }
+
+ }
+
}
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.utils.FileStorageUtils;
import java.io.File;
*/
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() {
* 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) {
private void saveLocalFile() {
mFile.setFileName(mNewName);
-
+
// try to rename the local copy of the file
if (mFile.isDown()) {
String oldPath = mFile.getStoragePath();
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);
}
import android.net.Uri;
import android.os.Environment;
import android.os.StatFs;
+import android.webkit.MimeTypeMap;
/**
/**
* 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){
/**
* Sorts list by Date
- * @param sortAscending true: ascending, false: descending
+ * @param files
*/
public static Vector<OCFile> sortByDate(Vector<OCFile> files){
final Integer val;
/**
* 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;
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 : "";
+ }
}