X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/cec7baba5b77f7acb39fefbe6c6e6bd259130472..e6fc5d13ad8aff2f70a84d9cf96b253a108b836d:/src/com/owncloud/android/services/OperationsService.java diff --git a/src/com/owncloud/android/services/OperationsService.java b/src/com/owncloud/android/services/OperationsService.java index 5f5e86f5..2b51660d 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -52,6 +52,7 @@ import com.owncloud.android.operations.RenameFileOperation; 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; @@ -181,6 +182,7 @@ public class OperationsService extends Service { 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; @@ -205,6 +207,19 @@ public class OperationsService extends Service { 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 +376,19 @@ public class OperationsService extends Service { //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 +419,16 @@ public class OperationsService extends Service { 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; @@ -411,6 +449,7 @@ public class OperationsService extends Service { } if (mCurrentSyncOperation != null) { + RemoteOperationResult result = null; try { @@ -422,7 +461,7 @@ public class OperationsService extends Service { mService.getContentResolver() ); - mCurrentSyncOperation.execute(mOwnCloudClient, mStorageManager); + result = mCurrentSyncOperation.execute(mOwnCloudClient, mStorageManager); } catch (AccountsException e) { Log_OC.e(TAG, "Error while trying to get autorization", e); @@ -432,6 +471,8 @@ public class OperationsService extends Service { synchronized(mPendingOperations) { mPendingOperations.remove(syncKey); } + + mService.dispatchResultToOperationListeners(null, mCurrentSyncOperation, result); } } } @@ -457,12 +498,13 @@ public class OperationsService extends Service { syncOperation.cancel(); } - Intent intent = new Intent( MainApp.getAppContext(), FileDownloader.class); + /// cancellation of download needs to be done separately in any case; a SynchronizeFolderOperation + // may finish much sooner than the real download of the files in the folder + Intent intent = new Intent(mService, 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); - + mService.startService(intent); } /** @@ -649,7 +691,7 @@ public class OperationsService extends Service { String remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH); Intent sendIntent = operationIntent.getParcelableExtra(EXTRA_SEND_INTENT); if (remotePath.length() > 0) { - operation = new CreateShareOperation(remotePath, ShareType.PUBLIC_LINK, + operation = new CreateShareOperation(OperationsService.this, remotePath, ShareType.PUBLIC_LINK, "", false, "", 1, sendIntent); } @@ -791,7 +833,7 @@ public class OperationsService extends Service { /** * Notifies the currently subscribed listeners about the end of an operation. - * + * * @param target Account or URL pointing to an OC server. * @param operation Finished operation. * @param result Result of the operation.