X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/727a941b3cd0d8401b0c87aa14b9d8ef9551426e..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 6e70a8c9..2b51660d 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -26,6 +26,7 @@ import java.util.concurrent.ConcurrentMap; 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; @@ -84,7 +85,8 @@ public class OperationsService extends Service { 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"; @@ -187,15 +189,15 @@ public class OperationsService extends Service { 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; @@ -447,6 +449,7 @@ public class OperationsService extends Service { } if (mCurrentSyncOperation != null) { + RemoteOperationResult result = null; try { @@ -458,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); @@ -468,6 +471,8 @@ public class OperationsService extends Service { synchronized(mPendingOperations) { mPendingOperations.remove(syncKey); } + + mService.dispatchResultToOperationListeners(null, mCurrentSyncOperation, result); } } } @@ -482,16 +487,24 @@ public class OperationsService extends Service { * 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(); } + + /// 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); + mService.startService(intent); } /** @@ -678,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); } @@ -820,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.