X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/2a04c6ae5da009baa78c243606297b5a039925c2..7f75f13f0c47b5cc4f5fe6a743a6fb8a9281fef7:/src/eu/alefzero/owncloud/files/services/FileDownloader.java diff --git a/src/eu/alefzero/owncloud/files/services/FileDownloader.java b/src/eu/alefzero/owncloud/files/services/FileDownloader.java index cc66e382..cb5d0c8d 100644 --- a/src/eu/alefzero/owncloud/files/services/FileDownloader.java +++ b/src/eu/alefzero/owncloud/files/services/FileDownloader.java @@ -25,6 +25,7 @@ import eu.alefzero.owncloud.R; import eu.alefzero.owncloud.authenticator.AccountAuthenticator; import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta; import eu.alefzero.owncloud.files.interfaces.OnDatatransferProgressListener; +import eu.alefzero.owncloud.syncadapter.FileSyncService; import eu.alefzero.webdav.WebdavClient; public class FileDownloader extends Service implements OnDatatransferProgressListener { @@ -34,6 +35,7 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis public static final String EXTRA_FILE_PATH = "FILE_PATH"; public static final String EXTRA_REMOTE_PATH = "REMOTE_PATH"; public static final String EXTRA_FILE_SIZE = "FILE_SIZE"; + public static final String ACCOUNT_NAME = "ACCOUNT_NAME"; private static final String TAG = "FileDownloader"; private NotificationManager mNotificationMngr; @@ -58,6 +60,16 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis stopSelf(msg.arg1); } } + + public static final String getSavePath() { + File sdCard = Environment.getExternalStorageDirectory(); + return sdCard.getAbsolutePath() + "/owncloud/"; + } + + public static final String getTemporalPath() { + File sdCard = Environment.getExternalStorageDirectory(); + return sdCard.getAbsolutePath() + "/owncloud.tmp/"; + } @Override public void onCreate() { @@ -126,30 +138,42 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis mNotificationMngr.notify(1, mNotification); - File sdCard = Environment.getExternalStorageDirectory(); - File file = new File(sdCard.getAbsolutePath() + "/owncloud/" + mAccount.name + mFilePath); - file.getParentFile().mkdirs(); + // download in a temporal file + File tmpFile = new File(getTemporalPath() + mAccount.name + mFilePath); + tmpFile.getParentFile().mkdirs(); boolean download_result = false; - if (wdc.downloadFile(mRemotePath, file)) { - ContentValues cv = new ContentValues(); - cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getAbsolutePath()); - getContentResolver().update( + File newFile = null; + if (wdc.downloadFile(mRemotePath, tmpFile)) { + newFile = new File(getSavePath() + mAccount.name + mFilePath); + newFile.getParentFile().mkdirs(); + boolean moved = tmpFile.renameTo(newFile); + + if (moved) { + ContentValues cv = new ContentValues(); + cv.put(ProviderTableMeta.FILE_STORAGE_PATH, newFile.getAbsolutePath()); + getContentResolver().update( ProviderTableMeta.CONTENT_URI, cv, ProviderTableMeta.FILE_NAME + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", new String[] { mFilePath.substring(mFilePath.lastIndexOf('/') + 1), - mAccount.name }); - download_result = true; + mAccount.name }); + download_result = true; + } + } + + if (!download_result) { + tmpFile.delete(); } mNotificationMngr.cancel(1); Intent end = new Intent(DOWNLOAD_FINISH_MESSAGE); end.putExtra(EXTRA_REMOTE_PATH, mRemotePath); - end.putExtra(EXTRA_FILE_PATH, file.getAbsolutePath()); + end.putExtra(EXTRA_FILE_PATH, newFile.getAbsolutePath()); end.putExtra(EXTRA_DOWNLOAD_RESULT, download_result); + end.putExtra(ACCOUNT_NAME, mAccount.name); sendBroadcast(end); if (download_result) {