Trigger MediaScan for every downloaded file in a renamed or moved folder

This commit is contained in:
David A. Velasco 2014-12-02 14:23:49 +01:00
parent 5167e646ad
commit 1e9ff8c5fa
3 changed files with 22 additions and 20 deletions

View file

@ -23,6 +23,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;
import com.owncloud.android.MainApp;
@ -644,6 +645,8 @@ public class FileDataStorageManager {
ArrayList<ContentProviderOperation> operations =
new ArrayList<ContentProviderOperation>(c.getCount());
String defaultSavePath = FileStorageUtils.getSavePath(mAccount.name);
List<String> originalPathsToTriggerMediaScan = new ArrayList<String>();
List<String> newPathsToTriggerMediaScan = new ArrayList<String>();
if (c.moveToFirst()) {
int lengthOfOldPath = file.getRemotePath().length();
int lengthOfOldStoragePath = defaultSavePath.length() + lengthOfOldPath;
@ -657,11 +660,14 @@ public class FileDataStorageManager {
if (child.getStoragePath() != null &&
child.getStoragePath().startsWith(defaultSavePath)) {
// update link to downloaded content - but local move is not done here!
cv.put(
ProviderTableMeta.FILE_STORAGE_PATH,
defaultSavePath + targetPath +
child.getStoragePath().substring(lengthOfOldStoragePath)
);
String targetLocalPath = defaultSavePath + targetPath +
child.getStoragePath().substring(lengthOfOldStoragePath);
cv.put(ProviderTableMeta.FILE_STORAGE_PATH, targetLocalPath);
originalPathsToTriggerMediaScan.add(child.getStoragePath());
newPathsToTriggerMediaScan.add(targetLocalPath);
}
if (child.getRemotePath().equals(file.getRemotePath())) {
cv.put(
@ -696,11 +702,12 @@ public class FileDataStorageManager {
}
/// 4. move in local file system
String localPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, file);
File localFile = new File(localPath);
String originalLocalPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, file);
String targetLocalPath = defaultSavePath + targetPath;
File localFile = new File(originalLocalPath);
boolean renamed = false;
if (localFile.exists()) {
File targetFile = new File(defaultSavePath + targetPath);
File targetFile = new File(targetLocalPath);
File targetFolder = targetFile.getParentFile();
if (!targetFolder.exists()) {
targetFolder.mkdirs();
@ -709,19 +716,17 @@ public class FileDataStorageManager {
}
if (renamed) {
if (file.isFolder()) {
} else {
Iterator<String> it = originalPathsToTriggerMediaScan.iterator();
while (it.hasNext()) {
// Notify MediaScanner about removed file
triggerMediaScan(file.getStoragePath());
triggerMediaScan(it.next());
}
it = newPathsToTriggerMediaScan.iterator();
while (it.hasNext()) {
// Notify MediaScanner about new file/folder
triggerMediaScan(defaultSavePath + targetPath);
triggerMediaScan(it.next());
}
}
Log_OC.d(TAG, "uri old: " + file.getStoragePath());
Log_OC.d(TAG, "uri new: " + defaultSavePath + targetPath);
}
}

View file

@ -36,7 +36,6 @@ import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;
import android.content.Context;
import android.net.Uri;
import android.util.Log;
/**
* Operation to find out what authentication method requires

View file

@ -29,8 +29,6 @@ import com.owncloud.android.lib.resources.files.RenameRemoteFileOperation;
import com.owncloud.android.operations.common.SyncOperation;
import com.owncloud.android.utils.FileStorageUtils;
import android.accounts.Account;
/**
* Remote operation performing the rename of a remote file (or folder?) in the ownCloud server.