import java.net.MalformedURLException;
import java.net.URL;
+import eu.alefzero.owncloud.files.services.FileDownloader;
+
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
/**
* Use this to check if this file is available locally
*
- * TODO use a better condition not dependent upon mLenght being synchronized; to change when downloads are done through a temporal file
- *
* @return true if it is
*/
public boolean isDown() {
if (mLocalPath != null && mLocalPath.length() > 0) {
File file = new File(mLocalPath);
- return (file.exists() && file.length() == mLength);
+ return (file.exists());
}
return false;
}
/**
* Use this to check if this file is downloading
*
- * TODO use a better condition not dependent upon mLenght being synchronized; to change when downloads are done through a temporal file
- *
* @return true if it is in a download in progress
*/
public boolean isDownloading() {
if (mLocalPath != null && mLocalPath.length() > 0) {
- File file = new File(mLocalPath);
- return (file.exists() && file.length() < mLength);
+ String savePath = FileDownloader.getSavePath();
+ File file = new File(FileDownloader.getTemporalPath() + mLocalPath.substring(savePath.length()));
+ return (file.exists());
}
return false;
}
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
ImageView downloaded = (ImageView) view.findViewById(R.id.imageView2);\r
ImageView downloading = (ImageView) view.findViewById(R.id.imageView4);\r
- if (file.isDown()) {\r
- downloaded.setVisibility(View.VISIBLE);\r
- downloading.setVisibility(View.INVISIBLE);\r
- } else if (file.isDownloading()) {\r
+ if (file.isDownloading()) {\r
downloaded.setVisibility(View.INVISIBLE);\r
downloading.setVisibility(View.VISIBLE);\r
+ } else if (file.isDown()) {\r
+ downloaded.setVisibility(View.VISIBLE);\r
+ downloading.setVisibility(View.INVISIBLE);\r
} else {\r
downloaded.setVisibility(View.INVISIBLE);\r
downloading.setVisibility(View.INVISIBLE);\r