Search in sources :

Example 1 with DownloadFileOperation

use of com.owncloud.android.operations.DownloadFileOperation in project android by owncloud.

the class FileDownloader method downloadFile.

/**
     * Core download method: requests a file to download and stores it.
     *
     * @param downloadKey Key to access the download to perform, contained in mPendingDownloads
     */
private void downloadFile(String downloadKey) {
    mCurrentDownload = mPendingDownloads.get(downloadKey);
    if (mCurrentDownload != null) {
        // Detect if the account exists
        if (AccountUtils.exists(mCurrentDownload.getAccount(), getApplicationContext())) {
            Log_OC.d(TAG, "Account " + mCurrentDownload.getAccount().name + " exists");
            notifyDownloadStart(mCurrentDownload);
            RemoteOperationResult downloadResult = null;
            try {
                /// prepare client object to send the request to the ownCloud server
                if (mCurrentAccount == null || !mCurrentAccount.equals(mCurrentDownload.getAccount())) {
                    mCurrentAccount = mCurrentDownload.getAccount();
                    mStorageManager = new FileDataStorageManager(mCurrentAccount, getContentResolver());
                }
                // else, reuse storage manager from previous operation
                // always get client from client manager, to get fresh credentials in case
                // of update
                OwnCloudAccount ocAccount = new OwnCloudAccount(mCurrentAccount, this);
                mDownloadClient = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(ocAccount, this);
                /// perform the download
                downloadResult = mCurrentDownload.execute(mDownloadClient);
                if (downloadResult.isSuccess()) {
                    saveDownloadedFile();
                }
            } catch (Exception e) {
                Log_OC.e(TAG, "Error downloading", e);
                downloadResult = new RemoteOperationResult(e);
            } finally {
                Pair<DownloadFileOperation, String> removeResult = mPendingDownloads.removePayload(mCurrentAccount.name, mCurrentDownload.getRemotePath());
                /// notify result
                notifyDownloadResult(mCurrentDownload, downloadResult);
                sendBroadcastDownloadFinished(mCurrentDownload, downloadResult, removeResult.second);
            }
        } else {
            // Cancel the transfer
            Log_OC.d(TAG, "Account " + mCurrentDownload.getAccount().toString() + " doesn't exist");
            cancelDownloadsForAccount(mCurrentDownload.getAccount());
        }
    }
}
Also used : DownloadFileOperation(com.owncloud.android.operations.DownloadFileOperation) RemoteOperationResult(com.owncloud.android.lib.common.operations.RemoteOperationResult) FileDataStorageManager(com.owncloud.android.datamodel.FileDataStorageManager) OwnCloudAccount(com.owncloud.android.lib.common.OwnCloudAccount)

Example 2 with DownloadFileOperation

use of com.owncloud.android.operations.DownloadFileOperation in project android by owncloud.

the class FileDownloader method onStartCommand.

/**
     * Entry point to add one or several files to the queue of downloads.
     *
     * New downloads are added calling to startService(), resulting in a call to this method.
     * This ensures the service will keep on working although the caller activity goes away.
     */
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log_OC.d(TAG, "Starting command with id " + startId);
    if (!intent.hasExtra(EXTRA_ACCOUNT) || !intent.hasExtra(EXTRA_FILE)) {
        Log_OC.e(TAG, "Not enough information provided in intent");
        return START_NOT_STICKY;
    } else {
        final Account account = intent.getParcelableExtra(EXTRA_ACCOUNT);
        final OCFile file = intent.getParcelableExtra(EXTRA_FILE);
        AbstractList<String> requestedDownloads = new Vector<String>();
        try {
            DownloadFileOperation newDownload = new DownloadFileOperation(account, file);
            newDownload.addDatatransferProgressListener(this);
            newDownload.addDatatransferProgressListener((FileDownloaderBinder) mBinder);
            Pair<String, String> putResult = mPendingDownloads.putIfAbsent(account.name, file.getRemotePath(), newDownload);
            if (putResult != null) {
                String downloadKey = putResult.first;
                requestedDownloads.add(downloadKey);
                sendBroadcastNewDownload(newDownload, putResult.second);
            }
        // else, file already in the queue of downloads; don't repeat the request
        } catch (IllegalArgumentException e) {
            Log_OC.e(TAG, "Not enough information provided in intent: " + e.getMessage());
            return START_NOT_STICKY;
        }
        if (requestedDownloads.size() > 0) {
            Message msg = mServiceHandler.obtainMessage();
            msg.arg1 = startId;
            msg.obj = requestedDownloads;
            mServiceHandler.sendMessage(msg);
        }
    }
    return START_NOT_STICKY;
}
Also used : OCFile(com.owncloud.android.datamodel.OCFile) Account(android.accounts.Account) OwnCloudAccount(com.owncloud.android.lib.common.OwnCloudAccount) DownloadFileOperation(com.owncloud.android.operations.DownloadFileOperation) Message(android.os.Message) Vector(java.util.Vector)

Aggregations

OwnCloudAccount (com.owncloud.android.lib.common.OwnCloudAccount)2 DownloadFileOperation (com.owncloud.android.operations.DownloadFileOperation)2 Account (android.accounts.Account)1 Message (android.os.Message)1 FileDataStorageManager (com.owncloud.android.datamodel.FileDataStorageManager)1 OCFile (com.owncloud.android.datamodel.OCFile)1 RemoteOperationResult (com.owncloud.android.lib.common.operations.RemoteOperationResult)1 Vector (java.util.Vector)1