+ notifyDownloadStart(mCurrentDownload);\r
+\r
+ /// prepare client object to send the request to the ownCloud server\r
+ if (mDownloadClient == null || !mLastAccount.equals(mCurrentDownload.getAccount())) {\r
+ mLastAccount = mCurrentDownload.getAccount();\r
+ mStorageManager = new FileDataStorageManager(mLastAccount, getContentResolver());\r
+ mDownloadClient = OwnCloudClientUtils.createOwnCloudClient(mLastAccount, getApplicationContext());\r
+ }\r
+\r
+ /// perform the download\r
+ RemoteOperationResult downloadResult = null;\r
+ try {\r
+ downloadResult = mCurrentDownload.execute(mDownloadClient);\r
+ if (downloadResult.isSuccess()) {\r
+ saveDownloadedFile();\r
+ }\r
+ \r
+ } finally {\r
+ synchronized(mPendingDownloads) {\r
+ mPendingDownloads.remove(downloadKey);\r
+ }\r
+ }\r
+\r
+ \r
+ /// notify result\r
+ notifyDownloadResult(mCurrentDownload, downloadResult);\r
+ \r
+ sendBroadcastDownloadFinished(mCurrentDownload, downloadResult);\r
+ }\r
+ }\r
+\r
+\r
+ /**\r
+ * Updates the OC File after a successful download.\r
+ */\r
+ private void saveDownloadedFile() {\r
+ OCFile file = mCurrentDownload.getFile();\r
+ long syncDate = System.currentTimeMillis();\r
+ file.setLastSyncDateForProperties(syncDate);\r
+ file.setLastSyncDateForData(syncDate);\r
+ file.setModificationTimestamp(mCurrentDownload.getModificationTimestamp());\r
+ // file.setEtag(mCurrentDownload.getEtag()); // TODO Etag, where available\r
+ file.setMimetype(mCurrentDownload.getMimeType());\r
+ file.setStoragePath(mCurrentDownload.getSavePath());\r
+ file.setFileLength((new File(mCurrentDownload.getSavePath()).length()));\r
+ mStorageManager.saveFile(file);\r