From: David A. Velasco Date: Wed, 17 Apr 2013 16:00:31 +0000 (+0200) Subject: Refactored path to directory for instant uploads; fixed some problems with first... X-Git-Tag: oc-android-1.4.3~33 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/9ad30bdded73d968ad4f67f73a4c2147c82d6c93?ds=inline;hp=--cc Refactored path to directory for instant uploads; fixed some problems with first upload for never-synchronized accounts --- 9ad30bdded73d968ad4f67f73a4c2147c82d6c93 diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8f528541..421880f6 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -154,7 +154,6 @@ - diff --git a/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java b/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java index 1962264c..74d20f0d 100644 --- a/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java +++ b/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java @@ -30,7 +30,6 @@ import android.net.ConnectivityManager; import android.net.NetworkInfo.State; import android.preference.PreferenceManager; import android.provider.MediaStore.Images.Media; -import android.util.Log; import android.webkit.MimeTypeMap; import com.owncloud.android.AccountUtils; @@ -121,7 +120,7 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver { Intent i = new Intent(context, FileUploader.class); i.putExtra(FileUploader.KEY_ACCOUNT, account); i.putExtra(FileUploader.KEY_LOCAL_FILE, file_path); - i.putExtra(FileUploader.KEY_REMOTE_FILE, FileStorageUtils.getInstantUploadFilePath(file_name)); + i.putExtra(FileUploader.KEY_REMOTE_FILE, FileStorageUtils.getInstantUploadFilePath(context, file_name)); i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE); i.putExtra(FileUploader.KEY_MIME_TYPE, mime_type); i.putExtra(FileUploader.KEY_INSTANT_UPLOAD, true); @@ -164,7 +163,7 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver { Intent i = new Intent(context, FileUploader.class); i.putExtra(FileUploader.KEY_ACCOUNT, account); i.putExtra(FileUploader.KEY_LOCAL_FILE, file_path); - i.putExtra(FileUploader.KEY_REMOTE_FILE, FileStorageUtils.getInstantUploadFilePath(f.getName())); + i.putExtra(FileUploader.KEY_REMOTE_FILE, FileStorageUtils.getInstantUploadFilePath(context, f.getName())); i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE); i.putExtra(FileUploader.KEY_INSTANT_UPLOAD, true); context.startService(i); diff --git a/src/com/owncloud/android/files/services/FileUploader.java b/src/com/owncloud/android/files/services/FileUploader.java index fac0d6aa..21bf5ca4 100644 --- a/src/com/owncloud/android/files/services/FileUploader.java +++ b/src/com/owncloud/android/files/services/FileUploader.java @@ -45,7 +45,6 @@ import android.os.IBinder; import android.os.Looper; import android.os.Message; import android.os.Process; -import android.util.Log; import android.webkit.MimeTypeMap; import android.widget.RemoteViews; import android.widget.Toast; @@ -67,6 +66,7 @@ import com.owncloud.android.ui.activity.InstantUploadActivity; import com.owncloud.android.ui.fragment.FileDetailFragment; import com.owncloud.android.ui.preview.PreviewImageActivity; import com.owncloud.android.ui.preview.PreviewImageFragment; +import com.owncloud.android.utils.FileStorageUtils; import com.owncloud.android.utils.OwnCloudVersion; import eu.alefzero.webdav.OnDatatransferProgressListener; @@ -499,7 +499,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe // / create remote folder for instant uploads if (mCurrentUpload.isRemoteFolderToBeCreated()) { - mUploadClient.createDirectory(InstantUploadService.INSTANT_UPLOAD_DIR); + mUploadClient.createDirectory(FileStorageUtils.getInstantUploadFilePath(this, "")); // ignoring result fail could just mean that it already exists, // but local database is not synchronized the upload will be // tried anyway @@ -601,11 +601,12 @@ public class FileUploader extends Service implements OnDatatransferProgressListe } private boolean checkAndFixInstantUploadDirectory(FileDataStorageManager storageManager) { - OCFile instantUploadDir = storageManager.getFileByPath(InstantUploadService.INSTANT_UPLOAD_DIR); + String instantUploadDirPath = FileStorageUtils.getInstantUploadFilePath(this, ""); + OCFile instantUploadDir = storageManager.getFileByPath(instantUploadDirPath); if (instantUploadDir == null) { // first instant upload in the account. never account not // synchronized after the remote InstantUpload folder was created - OCFile newDir = new OCFile(InstantUploadService.INSTANT_UPLOAD_DIR); + OCFile newDir = new OCFile(instantUploadDirPath); newDir.setMimetype("DIR"); OCFile path = storageManager.getFileByPath(OCFile.PATH_SEPARATOR); @@ -613,7 +614,7 @@ public class FileUploader extends Service implements OnDatatransferProgressListe newDir.setParentId(path.getFileId()); storageManager.saveFile(newDir); return true; - } else { + } else { // this should not happen anymore return false; } diff --git a/src/com/owncloud/android/files/services/InstantUploadService.java b/src/com/owncloud/android/files/services/InstantUploadService.java deleted file mode 100644 index 3c1a703e..00000000 --- a/src/com/owncloud/android/files/services/InstantUploadService.java +++ /dev/null @@ -1,137 +0,0 @@ -/* ownCloud Android client application - * Copyright (C) 2012 Bartek Przybylski - * Copyright (C) 2012-2013 ownCloud Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - */ - -package com.owncloud.android.files.services; - -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; - -import com.owncloud.android.Log_OC; -import com.owncloud.android.utils.FileStorageUtils; -import com.owncloud.android.network.OwnCloudClientUtils; - -import eu.alefzero.webdav.WebdavClient; - -import android.accounts.Account; -import android.app.Service; -import android.content.Intent; -import android.os.IBinder; - -public class InstantUploadService extends Service { - - public static String KEY_FILE_PATH = "KEY_FILEPATH"; - public static String KEY_FILE_SIZE = "KEY_FILESIZE"; - public static String KEY_MIME_TYPE = "KEY_MIMETYPE"; - public static String KEY_DISPLAY_NAME = "KEY_FILENAME"; - public static String KEY_ACCOUNT = "KEY_ACCOUNT"; - - private static String TAG = "InstantUploadService"; - // TODO make it configurable over the settings dialog - public static final String INSTANT_UPLOAD_DIR = "/InstantUpload"; - private UploaderRunnable mUploaderRunnable; - - @Override - public IBinder onBind(Intent arg0) { - return null; - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - if (intent == null || !intent.hasExtra(KEY_ACCOUNT) || !intent.hasExtra(KEY_DISPLAY_NAME) - || !intent.hasExtra(KEY_FILE_PATH) || !intent.hasExtra(KEY_FILE_SIZE) - || !intent.hasExtra(KEY_MIME_TYPE)) { - Log_OC.w(TAG, "Not all required information was provided, abording"); - return Service.START_NOT_STICKY; - } - - if (mUploaderRunnable == null) { - mUploaderRunnable = new UploaderRunnable(); - } - - String filename = intent.getStringExtra(KEY_DISPLAY_NAME); - String filepath = intent.getStringExtra(KEY_FILE_PATH); - String mimetype = intent.getStringExtra(KEY_MIME_TYPE); - Account account = intent.getParcelableExtra(KEY_ACCOUNT); - long filesize = intent.getLongExtra(KEY_FILE_SIZE, -1); - - mUploaderRunnable.addElementToQueue(filename, filepath, mimetype, filesize, account); - - // starting new thread for new download doesnt seems like a good idea - // maybe some thread pool or single background thread would be better - Log_OC.d(TAG, "Starting instant upload thread"); - new Thread(mUploaderRunnable).start(); - - return Service.START_STICKY; - } - - private class UploaderRunnable implements Runnable { - - Object mLock; - List> mHashMapList; - - public UploaderRunnable() { - mHashMapList = new LinkedList>(); - mLock = new Object(); - } - - public void addElementToQueue(String filename, String filepath, String mimetype, long length, Account account) { - HashMap new_map = new HashMap(); - new_map.put(KEY_ACCOUNT, account); - new_map.put(KEY_DISPLAY_NAME, filename); - new_map.put(KEY_FILE_PATH, filepath); - new_map.put(KEY_MIME_TYPE, mimetype); - new_map.put(KEY_FILE_SIZE, length); - - synchronized (mLock) { - mHashMapList.add(new_map); - } - } - - private HashMap getFirstObject() { - synchronized (mLock) { - if (mHashMapList.size() == 0) - return null; - HashMap ret = mHashMapList.get(0); - mHashMapList.remove(0); - return ret; - } - } - - public void run() { - HashMap working_map; - - while ((working_map = getFirstObject()) != null) { - Account account = (Account) working_map.get(KEY_ACCOUNT); - String filename = (String) working_map.get(KEY_DISPLAY_NAME); - String filepath = (String) working_map.get(KEY_FILE_PATH); - String mimetype = (String) working_map.get(KEY_MIME_TYPE); - - WebdavClient wdc = OwnCloudClientUtils.createOwnCloudClient(account, getApplicationContext()); - - wdc.createDirectory(INSTANT_UPLOAD_DIR); // fail could just mean that it already exists put will be tried anyway - try { - wdc.putFile(filepath, FileStorageUtils.getInstantUploadFilePath(filename), mimetype); - } catch (Exception e) { - // nothing to do; this service is deprecated, indeed - } - } - } - } - -} diff --git a/src/com/owncloud/android/ui/activity/InstantUploadActivity.java b/src/com/owncloud/android/ui/activity/InstantUploadActivity.java index e868bdae..8f34327b 100644 --- a/src/com/owncloud/android/ui/activity/InstantUploadActivity.java +++ b/src/com/owncloud/android/ui/activity/InstantUploadActivity.java @@ -440,7 +440,7 @@ public class InstantUploadActivity extends Activity { */ private void startUpload(String img_path) { // extract filename - String filename = FileStorageUtils.getInstantUploadFilePath(img_path); + String filename = FileStorageUtils.getInstantUploadFilePath(this, img_path); if (canInstantUpload()) { Account account = AccountUtils.getCurrentOwnCloudAccount(InstantUploadActivity.this); // add file again to upload queue diff --git a/src/com/owncloud/android/utils/FileStorageUtils.java b/src/com/owncloud/android/utils/FileStorageUtils.java index e223052c..1c7acaf9 100644 --- a/src/com/owncloud/android/utils/FileStorageUtils.java +++ b/src/com/owncloud/android/utils/FileStorageUtils.java @@ -20,13 +20,14 @@ package com.owncloud.android.utils; import java.io.File; import android.annotation.SuppressLint; +import android.content.Context; import android.net.Uri; import android.os.Environment; import android.os.StatFs; import android.util.Log; +import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; -import com.owncloud.android.files.services.InstantUploadService; /** * Static methods to help in access to local file system. @@ -69,25 +70,9 @@ public class FileStorageUtils { return Environment.getExternalStorageDirectory() + File.separator + "owncloud" + File.separator + "log"; } - // to ensure we will not add the slash twice between filename and - // folder-name - private static String getFileName(String filepath) { - if (filepath != null && !"".equals(filepath)) { - int psi = filepath.lastIndexOf('/'); - String filename = filepath; - if (psi > -1) { - filename = filepath.substring(psi + 1, filepath.length()); - Log.d(LOG_TAG, "extracted filename :" + filename); - } - return filename; - } else { - // Toast - Log.w(LOG_TAG, "the given filename was null or empty"); - return null; - } - } - - public static String getInstantUploadFilePath(String fileName) { - return InstantUploadService.INSTANT_UPLOAD_DIR + "/" + getFileName(fileName); + public static String getInstantUploadFilePath(Context context, String fileName) { + String uploadPath = context.getString(R.string.instant_upload_path); + String value = uploadPath + OCFile.PATH_SEPARATOR + (fileName == null ? "" : fileName); + return value; } } \ No newline at end of file