make confirmation dialog more universal
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / files / services / FileDownloader.java
index d08e727..cb5d0c8 100644 (file)
@@ -60,6 +60,16 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
             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
@@ -128,29 +138,40 @@ public class FileDownloader extends Service implements OnDatatransferProgressLis
         \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