X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/a6a010440d881d3f9dbd2fa50d6345275c0d0a0d..0c8d508a61de7fe698c1f87e2a8415bea2efb1f0:/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 008ea2ef..5f5e86f5 100644 --- a/src/com/owncloud/android/services/OperationsService.java +++ b/src/com/owncloud/android/services/OperationsService.java @@ -27,6 +27,7 @@ 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; import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; @@ -83,7 +84,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"; @@ -174,26 +176,23 @@ public class OperationsService extends Service { Account account = intent.getParcelableExtra(EXTRA_ACCOUNT); String remotePath = intent.getStringExtra(EXTRA_REMOTE_PATH); - OCFile file = new OCFile(remotePath); - Pair itemSyncKey = new Pair(account, file); + Pair itemSyncKey = new Pair(account, remotePath); Pair itemToQueue = newOperation(intent); if (itemToQueue != null) { - mSyncFolderHandler.add(account, file, (SynchronizeFolderOperation)itemToQueue.second); + mSyncFolderHandler.add(account, remotePath, (SynchronizeFolderOperation)itemToQueue.second); 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 = new OCFile(remotePath); + OCFile file = intent.getParcelableExtra(EXTRA_FILE); // Cancel operation mSyncFolderHandler.cancel(account,file); @@ -394,8 +393,8 @@ public class OperationsService extends Service { @Override public void handleMessage(Message msg) { - Pair itemSyncKey = (Pair) msg.obj; - nextOperation(itemSyncKey.first,itemSyncKey.second); + Pair itemSyncKey = (Pair) msg.obj; + doOperation(itemSyncKey.first, itemSyncKey.second); mService.stopSelf(msg.arg1); } @@ -403,9 +402,9 @@ public class OperationsService extends Service { /** * Performs the next operation in the queue */ - private void nextOperation(Account account, OCFile file) { + private void doOperation(Account account, String remotePath) { - String syncKey = buildRemoteName(account,file); + String syncKey = buildRemoteName(account,remotePath); synchronized(mPendingOperations) { mCurrentSyncOperation = mPendingOperations.get(syncKey); @@ -413,7 +412,6 @@ public class OperationsService extends Service { if (mCurrentSyncOperation != null) { - RemoteOperationResult operationResult = null; try { OwnCloudAccount ocAccount = new OwnCloudAccount(account, mService); @@ -424,61 +422,57 @@ public class OperationsService extends Service { mService.getContentResolver() ); - - /// perform the operation - if (mCurrentSyncOperation instanceof SyncOperation) { - operationResult = ((SyncOperation)mCurrentSyncOperation).execute(mOwnCloudClient, mStorageManager); - } else { - operationResult = mCurrentSyncOperation.execute(mOwnCloudClient); - } + mCurrentSyncOperation.execute(mOwnCloudClient, mStorageManager); } catch (AccountsException e) { Log_OC.e(TAG, "Error while trying to get autorization", e); - operationResult = new RemoteOperationResult(e); } catch (IOException e) { Log_OC.e(TAG, "Error while trying to get autorization", e); - operationResult = new RemoteOperationResult(e); - } finally { synchronized(mPendingOperations) { mPendingOperations.remove(syncKey); } } - - /// TODO notify operation result if needed - } } - public void add(Account account, OCFile file, SynchronizeFolderOperation syncFolderOperation){ - String syncKey = buildRemoteName(account,file); + public void add(Account account, String remotePath, SynchronizeFolderOperation syncFolderOperation){ + String syncKey = buildRemoteName(account,remotePath); mPendingOperations.putIfAbsent(syncKey,syncFolderOperation); } + /** * Cancels a pending or current sync operation. * * @param account Owncloud account where the remote file is stored. - * @param file A file in the queue of pending downloads + * @param file File */ public void cancel(Account account, OCFile file) { SynchronizeFolderOperation syncOperation = null; synchronized (mPendingOperations) { - syncOperation = mPendingOperations.remove(buildRemoteName(account, file)); + 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); + } /** * Builds a key from the account and file to download * * @param account Account where the file to download is stored - * @param file File to download + * @param path File path */ - private String buildRemoteName(Account account, OCFile file) { - return account.name + file.getRemotePath(); + private String buildRemoteName(Account account, String path) { + return account.name + path; } }