From: jabarros Date: Tue, 16 Dec 2014 14:04:39 +0000 (+0100) Subject: Merge branch 'download_folder' into download_folder_cancel_downloads X-Git-Tag: oc-android-1.7.0_signed~23^2~24^2 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/98929a9c8ff9d64936e728d3d660af242269773d?hp=-c Merge branch 'download_folder' into download_folder_cancel_downloads --- 98929a9c8ff9d64936e728d3d660af242269773d diff --combined src/com/owncloud/android/services/OperationsService.java index 5f5e86f5,6e70a8c9..6c6f24c4 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@@ -26,7 -26,6 +26,7 @@@ import java.util.concurrent.ConcurrentM import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.datamodel.FileDataStorageManager; +import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.services.FileDownloader; import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.OwnCloudClient; @@@ -52,6 -51,7 +52,7 @@@ import com.owncloud.android.operations. import com.owncloud.android.operations.SynchronizeFileOperation; import com.owncloud.android.operations.SynchronizeFolderOperation; import com.owncloud.android.operations.UnshareLinkOperation; + import com.owncloud.android.utils.FileStorageUtils; import android.accounts.Account; import android.accounts.AccountsException; @@@ -84,8 -84,7 +85,8 @@@ public class OperationsService extends public static final String EXTRA_SYNC_FILE_CONTENTS = "SYNC_FILE_CONTENTS"; public static final String EXTRA_RESULT = "RESULT"; public static final String EXTRA_NEW_PARENT_PATH = "NEW_PARENT_PATH"; - + public static final String EXTRA_FILE = "FILE"; + // TODO review if ALL OF THEM are necessary public static final String EXTRA_SUCCESS_IF_ABSENT = "SUCCESS_IF_ABSENT"; public static final String EXTRA_USERNAME = "USERNAME"; @@@ -181,21 -180,22 +182,22 @@@ Pair itemToQueue = newOperation(intent); if (itemToQueue != null) { mSyncFolderHandler.add(account, remotePath, (SynchronizeFolderOperation)itemToQueue.second); + sendBroadcastNewSyncFolder(account, remotePath); Message msg = mSyncFolderHandler.obtainMessage(); msg.arg1 = startId; msg.obj = itemSyncKey; mSyncFolderHandler.sendMessage(msg); } } else if (ACTION_CANCEL_SYNC_FOLDER.equals(intent.getAction())) { - if (!intent.hasExtra(EXTRA_ACCOUNT) || !intent.hasExtra(EXTRA_REMOTE_PATH)) { + if (!intent.hasExtra(EXTRA_ACCOUNT) || !intent.hasExtra(EXTRA_FILE)) { Log_OC.e(TAG, "Not enough information provided in intent"); return START_NOT_STICKY; } Account account = intent.getParcelableExtra(EXTRA_ACCOUNT); - String remotePath = intent.getStringExtra(EXTRA_REMOTE_PATH); + OCFile file = intent.getParcelableExtra(EXTRA_FILE); // Cancel operation - mSyncFolderHandler.cancel(account,remotePath); + mSyncFolderHandler.cancel(account,file); } else { Message msg = mOperationsHandler.obtainMessage(); msg.arg1 = startId; @@@ -205,6 -205,19 +207,19 @@@ return START_NOT_STICKY; } + /** + * TODO remove this method when "folder synchronization" replaces "folder download"; this is a fast and ugly + * patch. + */ + private void sendBroadcastNewSyncFolder(Account account, String remotePath) { + Intent added = new Intent(FileDownloader.getDownloadAddedMessage()); + added.putExtra(FileDownloader.ACCOUNT_NAME, account.name); + added.putExtra(FileDownloader.EXTRA_REMOTE_PATH, remotePath); + added.putExtra(FileDownloader.EXTRA_FILE_PATH, FileStorageUtils.getSavePath(account.name) + remotePath); + sendStickyBroadcast(added); + } + + @Override public void onDestroy() { //Log_OC.wtf(TAG, "onDestroy init" ); @@@ -361,6 -374,19 +376,19 @@@ //Log_OC.wtf(TAG, "Not finished yet"); } } + + + /** + * Returns True when the file described by 'file' in the ownCloud account 'account' is downloading or waiting to download. + * + * If 'file' is a directory, returns 'true' if some of its descendant files is downloading or waiting to download. + * + * @param account ownCloud account where the remote file is stored. + * @param file A file that could be affected + */ + public boolean isSynchronizing(Account account, String remotePath) { + return mSyncFolderHandler.isSynchronizing(account, remotePath); + } } @@@ -391,6 -417,16 +419,16 @@@ mService = service; } + + public boolean isSynchronizing(Account account, String remotePath) { + if (account == null || remotePath == null) return false; + String targetKey = buildRemoteName(account, remotePath); + synchronized (mPendingOperations) { + return (mPendingOperations.containsKey(targetKey)); + } + } + + @Override public void handleMessage(Message msg) { Pair itemSyncKey = (Pair) msg.obj; @@@ -446,23 -482,16 +484,23 @@@ * Cancels a pending or current sync operation. * * @param account Owncloud account where the remote file is stored. - * @param remotePath A remote file path + * @param file File */ - public void cancel(Account account, String remotePath) { + public void cancel(Account account, OCFile file) { SynchronizeFolderOperation syncOperation = null; synchronized (mPendingOperations) { - syncOperation = mPendingOperations.remove(buildRemoteName(account, remotePath)); + syncOperation = mPendingOperations.remove(buildRemoteName(account, file.getRemotePath())); } if (syncOperation != null) { syncOperation.cancel(); } + + Intent intent = new Intent( MainApp.getAppContext(), FileDownloader.class); + intent.setAction(FileDownloader.ACTION_CANCEL_FILE_DOWNLOAD); + intent.putExtra(FileDownloader.EXTRA_ACCOUNT, account); + intent.putExtra(FileDownloader.EXTRA_FILE, file); + MainApp.getAppContext().startService(intent); + } /**