import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
import eu.alefzero.owncloud.files.interfaces.OnDatatransferProgressListener;\r
+import eu.alefzero.owncloud.syncadapter.FileSyncService;\r
import eu.alefzero.webdav.WebdavClient;\r
\r
public class FileDownloader extends Service implements OnDatatransferProgressListener {\r
public static final String EXTRA_FILE_PATH = "FILE_PATH";\r
public static final String EXTRA_REMOTE_PATH = "REMOTE_PATH";\r
public static final String EXTRA_FILE_SIZE = "FILE_SIZE";\r
+ public static final String ACCOUNT_NAME = "ACCOUNT_NAME"; \r
private static final String TAG = "FileDownloader";\r
\r
private NotificationManager mNotificationMngr;\r
stopSelf(msg.arg1);\r
}\r
}\r
+ \r
+ public static final String getSavePath() {\r
+ File sdCard = Environment.getExternalStorageDirectory();\r
+ return sdCard.getAbsolutePath() + "/owncloud/";\r
+ }\r
+ \r
+ public static final String getTemporalPath() {\r
+ File sdCard = Environment.getExternalStorageDirectory();\r
+ return sdCard.getAbsolutePath() + "/owncloud.tmp/";\r
+ }\r
\r
@Override\r
public void onCreate() {\r
\r
mNotificationMngr.notify(1, mNotification);\r
\r
- File sdCard = Environment.getExternalStorageDirectory();\r
- File file = new File(sdCard.getAbsolutePath() + "/owncloud/" + mAccount.name + mFilePath);\r
- file.getParentFile().mkdirs();\r
+ // download in a temporal file\r
+ File tmpFile = new File(getTemporalPath() + mAccount.name + mFilePath);\r
+ tmpFile.getParentFile().mkdirs();\r
\r
boolean download_result = false;\r
- if (wdc.downloadFile(mRemotePath, file)) {\r
- ContentValues cv = new ContentValues();\r
- cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getAbsolutePath());\r
- getContentResolver().update(\r
+ File newFile = null;\r
+ if (wdc.downloadFile(mRemotePath, tmpFile)) {\r
+ newFile = new File(getSavePath() + mAccount.name + mFilePath);\r
+ newFile.getParentFile().mkdirs();\r
+ boolean moved = tmpFile.renameTo(newFile);\r
+ \r
+ if (moved) {\r
+ ContentValues cv = new ContentValues();\r
+ cv.put(ProviderTableMeta.FILE_STORAGE_PATH, newFile.getAbsolutePath());\r
+ getContentResolver().update(\r
ProviderTableMeta.CONTENT_URI,\r
cv,\r
ProviderTableMeta.FILE_NAME + "=? AND "\r
+ ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?",\r
new String[] {\r
mFilePath.substring(mFilePath.lastIndexOf('/') + 1),\r
- mAccount.name }); \r
- download_result = true;\r
+ mAccount.name });\r
+ download_result = true;\r
+ }\r
+ }\r
+ \r
+ if (!download_result) {\r
+ tmpFile.delete();\r
}\r
\r
mNotificationMngr.cancel(1);\r
Intent end = new Intent(DOWNLOAD_FINISH_MESSAGE);\r
end.putExtra(EXTRA_REMOTE_PATH, mRemotePath);\r
- end.putExtra(EXTRA_FILE_PATH, file.getAbsolutePath());\r
+ end.putExtra(EXTRA_FILE_PATH, newFile.getAbsolutePath());\r
end.putExtra(EXTRA_DOWNLOAD_RESULT, download_result);\r
+ end.putExtra(ACCOUNT_NAME, mAccount.name);\r
sendBroadcast(end);\r
\r
if (download_result) {\r