diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a64963fca7..7454d48ab3 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -152,7 +152,7 @@
-
+
diff --git a/src/com/owncloud/android/db/UploadDbHandler.java b/src/com/owncloud/android/db/UploadDbHandler.java
index 75e2c3b908..1069653218 100644
--- a/src/com/owncloud/android/db/UploadDbHandler.java
+++ b/src/com/owncloud/android/db/UploadDbHandler.java
@@ -17,8 +17,12 @@
*/
package com.owncloud.android.db;
+import java.util.ArrayList;
+import java.util.List;
+
import com.owncloud.android.MainApp;
import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.operations.UploadFileOperation;
import android.content.ContentValues;
import android.content.Context;
@@ -39,10 +43,22 @@ public class UploadDbHandler {
private final String mDatabaseName;
private final int mDatabaseVersion = 4;
+ static private final String TAG = "UploadDbHandler";
static private final String TABLE_UPLOAD = "list_of_uploads";
+ public void recreateDb() {
+ mDB.beginTransaction();
+ try {
+ mHelper.onUpgrade(mDB, 0, mDatabaseVersion);
+ mDB.setTransactionSuccessful();
+ } finally {
+ mDB.endTransaction();
+ }
+
+ }
+
public enum UploadStatus {
- UPLOAD_STATUS_UPLOAD_LATER(0), UPLOAD_STATUS_UPLOAD_FAILED(1);
+ UPLOAD_LATER(0), UPLOAD_FAILED(1), UPLOAD_IN_PROGRESS(2), UPLOAD_PAUSED(3), UPLOAD_SUCCEEDED(4);
private final int value;
private UploadStatus(int value) {
this.value = value;
@@ -70,14 +86,17 @@ public class UploadDbHandler {
* @return false if an error occurred, else true.
*/
public boolean storeFile(String filepath, String account, String message) {
- ContentValues cv = new ContentValues();
- cv.put("path", filepath);
- cv.put("account", account);
- cv.put("attempt", UploadStatus.UPLOAD_STATUS_UPLOAD_LATER.getValue());
- cv.put("message", message);
- long result = mDB.insert(TABLE_UPLOAD, null, cv);
- Log_OC.d(TABLE_UPLOAD, "putFileForLater returns with: " + result + " for file: " + filepath);
- return result != -1;
+ ///OBSOLETE
+ Log_OC.i(TAG, "obsolete method called");
+ return false;
+// ContentValues cv = new ContentValues();
+// cv.put("path", filepath);
+// cv.put("account", account);
+// cv.put("attempt", UploadStatus.UPLOAD_STATUS_UPLOAD_LATER.getValue());
+// cv.put("message", message);
+// long result = mDB.insert(TABLE_UPLOAD, null, cv);
+// Log_OC.d(TABLE_UPLOAD, "putFileForLater returns with: " + result + " for file: " + filepath);
+// return result != -1;
}
/**
@@ -89,12 +108,15 @@ public class UploadDbHandler {
* @return 1 if file status was updated, else 0.
*/
public int updateFileState(String filepath, UploadStatus status, String message) {
- ContentValues cv = new ContentValues();
- cv.put("attempt", status.getValue());
- cv.put("message", message);
- int result = mDB.update(TABLE_UPLOAD, cv, "path=?", new String[] { filepath });
- Log_OC.d(TABLE_UPLOAD, "updateFileState returns with: " + result + " for file: " + filepath);
- return result;
+ ///OBSOLETE
+ Log_OC.i(TAG, "obsolete method called");
+ return 0;
+// ContentValues cv = new ContentValues();
+// cv.put("attempt", status.getValue());
+// cv.put("message", message);
+// int result = mDB.update(TABLE_UPLOAD, cv, "path=?", new String[] { filepath });
+// Log_OC.d(TABLE_UPLOAD, "updateFileState returns with: " + result + " for file: " + filepath);
+// return result;
}
/**
@@ -102,7 +124,10 @@ public class UploadDbHandler {
* @return
*/
public Cursor getAwaitingFiles() {
- return mDB.query(TABLE_UPLOAD, null, "attempt=" + UploadStatus.UPLOAD_STATUS_UPLOAD_LATER, null, null, null, null);
+ //OBSOLETE
+ Log_OC.i(TAG, "obsolete method called");
+ return null;
+// return mDB.query(TABLE_UPLOAD, null, "attempt=" + UploadStatus.UPLOAD_STATUS_UPLOAD_LATER, null, null, null, null);
}
//ununsed until now. uncomment if needed.
@@ -121,9 +146,12 @@ public class UploadDbHandler {
* @return true when one or more pending files was removed
*/
public boolean removeFile(String localPath) {
- long result = mDB.delete(TABLE_UPLOAD, "path = ?", new String[] { localPath });
- Log_OC.d(TABLE_UPLOAD, "delete returns with: " + result + " for file: " + localPath);
- return result != 0;
+ //OBSOLETE
+ Log_OC.i(TAG, "obsolete method called");
+ return false;
+// long result = mDB.delete(TABLE_UPLOAD, "path = ?", new String[] { localPath });
+// Log_OC.d(TABLE_UPLOAD, "delete returns with: " + result + " for file: " + localPath);
+// return result != 0;
}
@@ -134,35 +162,46 @@ public class UploadDbHandler {
@Override
public void onCreate(SQLiteDatabase db) {
- db.execSQL("CREATE TABLE " + TABLE_UPLOAD + " (" + " _id INTEGER PRIMARY KEY, " + " path TEXT,"
- + " account TEXT,attempt INTEGER,message TEXT,uploadObject TEXT);");
+ db.execSQL("CREATE TABLE " + TABLE_UPLOAD + " (" + " path TEXT PRIMARY KEY,"
+ + " uploadObject TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- if (oldVersion < 2) {
- db.execSQL("ALTER TABLE " + TABLE_UPLOAD + " ADD COLUMN attempt INTEGER;");
- }
- if (oldVersion < 3) {
- db.execSQL("ALTER TABLE " + TABLE_UPLOAD + " ADD COLUMN message TEXT;");
- }
- if (oldVersion < 4) {
- db.execSQL("ALTER TABLE " + TABLE_UPLOAD + " ADD COLUMN uploadObject TEXT;");
+ if (newVersion == 4) {
+ db.execSQL("DROP TABLE IF EXISTS " + "instant_upload" + ";"); //drop old db (name)
+ db.execSQL("DROP TABLE IF EXISTS " + TABLE_UPLOAD + ";");
+ onCreate(db);
}
}
}
- public boolean storeUpload(PersistentUploadObject uploadObject, String message) {
+ public boolean storeUpload(UploadDbObject uploadObject, String message) {
ContentValues cv = new ContentValues();
cv.put("path", uploadObject.getLocalPath());
- cv.put("account", uploadObject.getAccountName());
- cv.put("attempt", UploadStatus.UPLOAD_STATUS_UPLOAD_LATER.getValue());
- cv.put("message", message);
cv.put("uploadObject", uploadObject.toString());
long result = mDB.insert(TABLE_UPLOAD, null, cv);
- Log_OC.d(TABLE_UPLOAD, "putFileForLater returns with: " + result + " for file: " + uploadObject.getLocalPath());
+ Log_OC.d(TAG, "putFileForLater returns with: " + result + " for file: " + uploadObject.getLocalPath());
return result != -1;
}
+
+ public List getAllStoredUploads() {
+ Cursor c = mDB.query(TABLE_UPLOAD, null, null, null, null, null, null);
+ List list = new ArrayList();
+ if (c.moveToFirst()) {
+ do {
+ String file_path = c.getString(c.getColumnIndex("path"));
+ String uploadObjectString = c.getString(c.getColumnIndex("uploadObject"));
+ UploadDbObject uploadObject = UploadDbObject.fromString(uploadObjectString);
+ if(uploadObject == null) {
+ Log_OC.e(TAG, "Could not deserialize UploadDbObject " + uploadObjectString);
+ } else {
+ list.add(uploadObject);
+ }
+ } while (c.moveToNext());
+ }
+ return list;
+ }
}
diff --git a/src/com/owncloud/android/db/PersistentUploadObject.java b/src/com/owncloud/android/db/UploadDbObject.java
similarity index 53%
rename from src/com/owncloud/android/db/PersistentUploadObject.java
rename to src/com/owncloud/android/db/UploadDbObject.java
index 765fd3b038..240f0afab9 100755
--- a/src/com/owncloud/android/db/PersistentUploadObject.java
+++ b/src/com/owncloud/android/db/UploadDbObject.java
@@ -4,8 +4,18 @@ import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.util.Base64;
+import android.util.Log;
+
+import com.owncloud.android.db.UploadDbHandler.UploadStatus;
import com.owncloud.android.files.services.FileUploadService.LocalBehaviour;
+import com.owncloud.android.lib.common.operations.RemoteOperationResult;
+import com.owncloud.android.lib.common.utils.Log_OC;
+
/**
* Stores all information in order to start upload. PersistentUploadObject can
@@ -14,7 +24,12 @@ import com.owncloud.android.files.services.FileUploadService.LocalBehaviour;
* @author LukeOwncloud
*
*/
-public class PersistentUploadObject {
+public class UploadDbObject implements Serializable{
+
+ /** Generated - should be refreshed every time the class changes!! */;
+ private static final long serialVersionUID = -2306246191385279924L;
+
+ private static final String TAG = "UploadDbObject";
/**
* Local path to file which is to be uploaded.
*/
@@ -32,6 +47,34 @@ public class PersistentUploadObject {
* Local action for upload.
*/
LocalBehaviour localAction;
+ /**
+ * @return the uploadStatus
+ */
+ public UploadStatus getUploadStatus() {
+ return uploadStatus;
+ }
+
+ /**
+ * @param uploadStatus the uploadStatus to set
+ */
+ public void setUploadStatus(UploadStatus uploadStatus) {
+ this.uploadStatus = uploadStatus;
+ }
+
+ /**
+ * @return the lastResult
+ */
+ public RemoteOperationResult getLastResult() {
+ return lastResult;
+ }
+
+ /**
+ * @param lastResult the lastResult to set
+ */
+ public void setLastResult(RemoteOperationResult lastResult) {
+ this.lastResult = lastResult;
+ }
+
/**
* Overwrite destination file?
*/
@@ -48,6 +91,16 @@ public class PersistentUploadObject {
* Name of Owncloud account to upload file to.
*/
String accountName;
+
+ /**
+ * Status of upload (later, in_progress, ...).
+ */
+ UploadStatus uploadStatus;
+
+ /**
+ * Result from last upload operation. Can be null.
+ */
+ RemoteOperationResult lastResult;
/**
* @return the localPath
@@ -95,6 +148,7 @@ public class PersistentUploadObject {
* @return the localAction
*/
public LocalBehaviour getLocalAction() {
+// return null;
return localAction;
}
@@ -160,31 +214,72 @@ public class PersistentUploadObject {
public void setAccountName(String accountName) {
this.accountName = accountName;
}
-
+
+ /**
+ * Returns a base64 encoded serialized string of this object.
+ */
@Override
public String toString() {
+ // serialize the object
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
ObjectOutputStream so = new ObjectOutputStream(bo);
so.writeObject(this);
so.flush();
- return bo.toString();
+ String serializedObjectBase64 = Base64.encodeToString(bo.toByteArray(), Base64.DEFAULT);
+ so.close();
+ bo.close();
+ return serializedObjectBase64;
} catch (Exception e) {
- System.out.println(e);
+ Log_OC.e(TAG, "Cannot serialize UploadDbObject with localPath:" + getLocalPath(), e);
}
+//
+// try {
+// ByteArrayOutputStream bo = new ByteArrayOutputStream();
+// ObjectOutputStream so = new ObjectOutputStream(bo);
+// so.writeObject(this);
+// so.flush();
+// String base64 = Base64.encodeToString(bo.toString()
+// .getBytes(), Base64.DEFAULT);
+// return base64;
+// } catch (Exception e) {
+// System.out.println(e);
+// }
return null;
}
- public PersistentUploadObject fromString(String serializedObject) {
+ /**
+ * Accepts a base64 encoded serialized string of an {@link UploadDbObject}
+ * and instantiates and returns an according object.
+ *
+ * @param serializedObjectBase64
+ * @return
+ */
+ static public UploadDbObject fromString(String serializedObjectBase64) {
+ // deserialize the object
try {
- byte b[] = serializedObject.getBytes();
+ byte[] b = Base64.decode(serializedObjectBase64, Base64.DEFAULT);
ByteArrayInputStream bi = new ByteArrayInputStream(b);
ObjectInputStream si = new ObjectInputStream(bi);
- return (PersistentUploadObject) si.readObject();
+ UploadDbObject obj = (UploadDbObject) si.readObject();
+ Log.e(TAG, "SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+ return obj;
} catch (Exception e) {
- System.out.println(e);
+ Log_OC.e(TAG, "Cannot deserialize UploadDbObject " + serializedObjectBase64, e);
}
+// try {
+// byte b[] = Base64.decode(serializedObject, Base64.DEFAULT);
+// ByteArrayInputStream bi = new ByteArrayInputStream(b);
+// ObjectInputStream si = new ObjectInputStream(bi);
+// return (UploadDbObject) si.readObject();
+// } catch (Exception e) {
+// Log_OC.e(TAG, "Cannot deserialize UploadDbObject " + serializedObject, e);
+// }
return null;
}
+
+
}
+
+
diff --git a/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java b/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java
index c72b321830..8cf7f55dda 100644
--- a/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java
+++ b/src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java
@@ -101,7 +101,7 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
i.putExtra(FileUploadService.KEY_ACCOUNT, account);
i.putExtra(FileUploadService.KEY_LOCAL_FILE, file_path);
i.putExtra(FileUploadService.KEY_REMOTE_FILE, FileStorageUtils.getInstantUploadFilePath(context, file_name));
- i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UPLOAD_SINGLE_FILE);
+ i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UploadSingleMulti.UPLOAD_SINGLE_FILE);
i.putExtra(FileUploadService.KEY_MIME_TYPE, mime_type);
i.putExtra(FileUploadService.KEY_CREATE_REMOTE_FOLDER, true);
i.putExtra(FileUploadService.KEY_WIFI_ONLY, instantPictureUploadViaWiFiOnly(context));
@@ -143,7 +143,7 @@ public class InstantUploadBroadcastReceiver extends BroadcastReceiver {
i.putExtra(FileUploadService.KEY_ACCOUNT, account);
i.putExtra(FileUploadService.KEY_LOCAL_FILE, file_path);
i.putExtra(FileUploadService.KEY_REMOTE_FILE, FileStorageUtils.getInstantUploadFilePath(context, file_name));
- i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UPLOAD_SINGLE_FILE);
+ i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UploadSingleMulti.UPLOAD_SINGLE_FILE);
i.putExtra(FileUploadService.KEY_MIME_TYPE, mime_type);
i.putExtra(FileUploadService.KEY_CREATE_REMOTE_FOLDER, true);
i.putExtra(FileUploadService.KEY_WIFI_ONLY, instantVideoUploadViaWiFiOnly(context));
diff --git a/src/com/owncloud/android/files/services/FileUploadService.java b/src/com/owncloud/android/files/services/FileUploadService.java
index 38fffb06f9..ba3339cd67 100644
--- a/src/com/owncloud/android/files/services/FileUploadService.java
+++ b/src/com/owncloud/android/files/services/FileUploadService.java
@@ -18,19 +18,23 @@
package com.owncloud.android.files.services;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.AbstractList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Vector;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import android.accounts.Account;
-import android.accounts.AccountManager;
import android.accounts.AccountsException;
import android.app.NotificationManager;
import android.app.PendingIntent;
@@ -48,6 +52,8 @@ import android.os.Looper;
import android.os.Message;
import android.os.Process;
import android.support.v4.app.NotificationCompat;
+import android.util.Base64;
+import android.util.Log;
import android.webkit.MimeTypeMap;
import com.owncloud.android.R;
@@ -55,12 +61,12 @@ import com.owncloud.android.authentication.AccountUtils;
import com.owncloud.android.authentication.AuthenticatorActivity;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
-import com.owncloud.android.db.PersistentUploadObject;
import com.owncloud.android.db.UploadDbHandler;
+import com.owncloud.android.db.UploadDbHandler.UploadStatus;
+import com.owncloud.android.db.UploadDbObject;
import com.owncloud.android.lib.common.OwnCloudAccount;
import com.owncloud.android.lib.common.OwnCloudClient;
import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
-import com.owncloud.android.lib.common.accounts.AccountUtils.Constants;
import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;
@@ -120,23 +126,26 @@ public class FileUploadService extends Service {
this.value = value;
}
+ public int getValue() {
+ return value;
+ }
+ }
+
+ public enum UploadSingleMulti {
+ UPLOAD_SINGLE_FILE(0), UPLOAD_MULTIPLE_FILES(1);
+ private final int value;
+
+ private UploadSingleMulti(int value) {
+ this.value = value;
+ }
+
public int getValue() {
return value;
}
};
- // public enum UploadSingleMulti {
- // UPLOAD_SINGLE_FILE(0), UPLOAD_MULTIPLE_FILES(1);
- // private final int value;
- // private UploadSingleMulti(int value) {
- // this.value = value;
- // }
- // public int getValue() {
- // return value;
- // }
- // };
- public static final int UPLOAD_SINGLE_FILE = 0;
- public static final int UPLOAD_MULTIPLE_FILES = 1;
+ // public static final int UPLOAD_SINGLE_FILE = 0;
+ // public static final int UPLOAD_MULTIPLE_FILES = 1;
private static final String TAG = FileUploadService.class.getSimpleName();
@@ -223,20 +232,28 @@ public class FileUploadService extends Service {
* New uploads are added calling to startService(), resulting in a call to
* this method. This ensures the service will keep on working although the
* caller activity goes away.
+ *
+ * First, onStartCommand() stores all information associated with the upload
+ * in a {@link UploadDbObject} which is stored persistently using
+ * {@link UploadDbHandler}. Then, {@link ServiceHandler} is invoked which
+ * performs the upload and updates the DB entry (upload success, failure,
+ * retry, ...)
*/
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
- AbstractList requestedUploads = new Vector();
+ AbstractList requestedUploads = new Vector();
if (intent == null) {
// service was restarted by OS (after return START_STICKY and kill
// service) or connectivity change was detected. ==> check persistent upload
// list.
//
- //TODO fill requestedUploads from DB
+ UploadDbHandler db = new UploadDbHandler(this.getBaseContext());
+ List list = db.getAllStoredUploads();
+ requestedUploads.addAll(list);
} else {
- int uploadType = intent.getIntExtra(KEY_UPLOAD_TYPE, -1);
- if (uploadType == -1) {
+ UploadSingleMulti uploadType = (UploadSingleMulti) intent.getSerializableExtra(KEY_UPLOAD_TYPE);
+ if (uploadType == null) {
Log_OC.e(TAG, "Incorrect or no upload type provided");
return Service.START_NOT_STICKY;
}
@@ -250,18 +267,16 @@ public class FileUploadService extends Service {
OCFile[] files = null;
// if KEY_FILE given, use it
if (intent.hasExtra(KEY_FILE)) {
- if (uploadType == UPLOAD_SINGLE_FILE) {
+ if (uploadType == UploadSingleMulti.UPLOAD_SINGLE_FILE) {
files = new OCFile[] { intent.getParcelableExtra(KEY_FILE) };
} else {
// TODO will this casting work fine?
files = (OCFile[]) intent.getParcelableArrayExtra(KEY_FILE);
}
- } else { // else use KEY_LOCAL_FILE, KEY_REMOTE_FILE, and
- // KEY_MIME_TYPE
+ } else { // else use KEY_LOCAL_FILE and KEY_REMOTE_FILE
- if (!intent.hasExtra(KEY_LOCAL_FILE) || !intent.hasExtra(KEY_REMOTE_FILE)
- || !(intent.hasExtra(KEY_MIME_TYPE))) {
+ if (!intent.hasExtra(KEY_LOCAL_FILE) || !intent.hasExtra(KEY_REMOTE_FILE)) {
Log_OC.e(TAG, "Not enough information provided in intent");
return Service.START_NOT_STICKY;
}
@@ -269,7 +284,7 @@ public class FileUploadService extends Service {
String[] localPaths;
String[] remotePaths;
String[] mimeTypes;
- if (uploadType == UPLOAD_SINGLE_FILE) {
+ if (uploadType == UploadSingleMulti.UPLOAD_SINGLE_FILE) {
localPaths = new String[] { intent.getStringExtra(KEY_LOCAL_FILE) };
remotePaths = new String[] { intent.getStringExtra(KEY_REMOTE_FILE) };
mimeTypes = new String[] { intent.getStringExtra(KEY_MIME_TYPE) };
@@ -309,18 +324,62 @@ public class FileUploadService extends Service {
// failed.
UploadDbHandler db = new UploadDbHandler(this.getBaseContext());
for (int i = 0; i < files.length; i++) {
- PersistentUploadObject uploadObject = new PersistentUploadObject();
+ UploadDbObject uploadObject = new UploadDbObject();
uploadObject.setRemotePath(files[i].getRemotePath());
uploadObject.setLocalPath(files[i].getStoragePath());
- uploadObject.setMimeType(files[0].getMimetype());
+ uploadObject.setMimeType(files[i].getMimetype());
uploadObject.setAccountName(account.name);
uploadObject.setForceOverwrite(forceOverwrite);
+ uploadObject.setCreateRemoteFolder(isCreateRemoteFolder);
uploadObject.setLocalAction(localAction);
uploadObject.setUseWifiOnly(isUseWifiOnly);
+ uploadObject.setLastResult(new RemoteOperationResult(ResultCode.OK));
+ uploadObject.setLocalAction(LocalBehaviour.LOCAL_BEHAVIOUR_COPY);
+ uploadObject.setUploadStatus(UploadStatus.UPLOAD_LATER);
+
+
+// String serializedObjectBase64 = "";
+//
+// // serialize the object
+// try {
+// ByteArrayOutputStream bo = new ByteArrayOutputStream();
+// ObjectOutputStream so = new ObjectOutputStream(bo);
+// so.writeObject(uploadObject);
+// so.flush();
+// serializedObjectBase64 = Base64.encodeToString(bo.toByteArray(), Base64.DEFAULT);
+// so.close();
+// bo.close();
+// } catch (Exception e) {
+// System.out.println(e);
+// }
+//
+// // deserialize the object
+// try {
+// byte[] b = Base64.decode(serializedObjectBase64, Base64.DEFAULT);
+// ByteArrayInputStream bi = new ByteArrayInputStream(b);
+// ObjectInputStream si = new ObjectInputStream(bi);
+// UploadDbObject obj = (UploadDbObject) si.readObject();
+// Log.e(TAG, "SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
+// } catch (Exception e) {
+// System.out.println(e);
+// }
+
+// String s = uploadObject.toString();
+// UploadDbObject o = UploadDbObject.fromString(s);
+// o = o;
+
+
db.storeUpload(uploadObject, "upload at " + new Date());
requestedUploads.add(uploadObject);
+
+
}
db.close();
+
+ return Service.START_NOT_STICKY;
+
+ // TODO check if would be clever to read entries from
+ // UploadDbHandler and add to requestedUploads at this point
// AccountManager aMgr = AccountManager.get(this);
// String version = aMgr.getUserData(account,
@@ -335,7 +394,7 @@ public class FileUploadService extends Service {
// try {
// for (int i = 0; i < files.length; i++) {
// uploadKey = buildRemoteName(account, files[i].getRemotePath());
- // newUpload = new UploadFileOperation(account, files[i], chunked,
+// newUpload = new UploadFileOperation(account, files[i], chunked,
// forceOverwrite, localAction,
// getApplicationContext());
// if (isCreateRemoteFolder) {
@@ -527,11 +586,12 @@ public class FileUploadService extends Service {
@Override
public void handleMessage(Message msg) {
@SuppressWarnings("unchecked")
- AbstractList requestedUploads = (AbstractList) msg.obj;
+ AbstractList requestedUploads = (AbstractList) msg.obj;
if (msg.obj != null) {
- Iterator it = requestedUploads.iterator();
+ //TODO iterator returns UploadDbObject! Not a string.
+ Iterator it = requestedUploads.iterator();
while (it.hasNext()) {
- mService.uploadFile(it.next());
+ //mService.uploadFile(it.next());
}
}
mService.stopSelf(msg.arg1);
@@ -834,7 +894,7 @@ public class FileUploadService extends Service {
// message =
// getString(R.string.failed_upload_quota_exceeded_text);
int updatedFiles = db.updateFileState(upload.getOriginalStoragePath(),
- UploadDbHandler.UploadStatus.UPLOAD_STATUS_UPLOAD_FAILED, message);
+ UploadDbHandler.UploadStatus.UPLOAD_FAILED, message);
if (updatedFiles == 0) { // update failed
db.storeFile(upload.getOriginalStoragePath(), upload.getAccount().name, message);
}
diff --git a/src/com/owncloud/android/operations/SynchronizeFileOperation.java b/src/com/owncloud/android/operations/SynchronizeFileOperation.java
index 7e383c06ee..ffa31868fb 100644
--- a/src/com/owncloud/android/operations/SynchronizeFileOperation.java
+++ b/src/com/owncloud/android/operations/SynchronizeFileOperation.java
@@ -212,7 +212,7 @@ public class SynchronizeFileOperation extends SyncOperation {
i.putExtra(FileUploadService.KEY_FILE, file);
/*i.putExtra(FileUploader.KEY_REMOTE_FILE, mRemotePath); // doing this we would lose the value of keepInSync in the road, and maybe it's not updated in the database when the FileUploader service gets it!
i.putExtra(FileUploader.KEY_LOCAL_FILE, localFile.getStoragePath());*/
- i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UPLOAD_SINGLE_FILE);
+ i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UploadSingleMulti.UPLOAD_SINGLE_FILE);
i.putExtra(FileUploadService.KEY_FORCE_OVERWRITE, true);
mContext.startService(i);
mTransferWasRequested = true;
diff --git a/src/com/owncloud/android/ui/activity/ConflictsResolveActivity.java b/src/com/owncloud/android/ui/activity/ConflictsResolveActivity.java
index 2a777d7076..ff269c2883 100644
--- a/src/com/owncloud/android/ui/activity/ConflictsResolveActivity.java
+++ b/src/com/owncloud/android/ui/activity/ConflictsResolveActivity.java
@@ -20,6 +20,7 @@ package com.owncloud.android.ui.activity;
import com.actionbarsherlock.app.ActionBar;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.db.UploadDbObject;
import com.owncloud.android.files.services.FileUploadService;
import com.owncloud.android.lib.common.utils.Log_OC;
import com.owncloud.android.ui.dialog.ConflictsResolveDialog;
@@ -68,7 +69,7 @@ public class ConflictsResolveActivity extends FileActivity implements OnConflict
}
i.putExtra(FileUploadService.KEY_ACCOUNT, getAccount());
i.putExtra(FileUploadService.KEY_FILE, getFile());
- i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UPLOAD_SINGLE_FILE);
+ i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UploadSingleMulti.UPLOAD_SINGLE_FILE);
startService(i);
finish();
diff --git a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
index 963aef179c..1123fa6f4d 100644
--- a/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
+++ b/src/com/owncloud/android/ui/activity/FileDisplayActivity.java
@@ -64,6 +64,7 @@ import com.owncloud.android.BuildConfig;
import com.owncloud.android.MainApp;
import com.owncloud.android.R;
import com.owncloud.android.datamodel.OCFile;
+import com.owncloud.android.db.UploadDbObject;
import com.owncloud.android.files.services.FileDownloader;
import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
import com.owncloud.android.files.services.FileUploadService;
@@ -638,7 +639,7 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
i.putExtra(FileUploadService.KEY_ACCOUNT, getAccount());
i.putExtra(FileUploadService.KEY_LOCAL_FILE, filePaths);
i.putExtra(FileUploadService.KEY_REMOTE_FILE, remotePaths);
- i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UPLOAD_MULTIPLE_FILES);
+ i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UploadSingleMulti.UPLOAD_MULTIPLE_FILES);
if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE)
i.putExtra(FileUploadService.KEY_LOCAL_BEHAVIOUR, FileUploadService.LocalBehaviour.LOCAL_BEHAVIOUR_MOVE);
startService(i);
@@ -691,11 +692,13 @@ OnSslUntrustedCertListener, OnEnforceableRefreshListener {
i.putExtra(FileUploadService.KEY_LOCAL_FILE, filepath);
i.putExtra(FileUploadService.KEY_REMOTE_FILE, remotepath);
- i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UPLOAD_SINGLE_FILE);
+ i.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UploadSingleMulti.UPLOAD_SINGLE_FILE);
if (resultCode == UploadFilesActivity.RESULT_OK_AND_MOVE) {
i.putExtra(FileUploadService.KEY_LOCAL_BEHAVIOUR, FileUploadService.LocalBehaviour.LOCAL_BEHAVIOUR_MOVE);
}
- startService(i);
+ if(startService(i) == null) {
+ Log_OC.e(TAG, "FileUploadService could not be started");
+ }
}
/**
diff --git a/src/com/owncloud/android/ui/activity/Uploader.java b/src/com/owncloud/android/ui/activity/Uploader.java
index d4647a84f9..e6b6e7a012 100644
--- a/src/com/owncloud/android/ui/activity/Uploader.java
+++ b/src/com/owncloud/android/ui/activity/Uploader.java
@@ -403,7 +403,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
}
Intent intent = new Intent(getApplicationContext(), FileUploadService.class);
- intent.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UPLOAD_MULTIPLE_FILES);
+ intent.putExtra(FileUploadService.KEY_UPLOAD_TYPE, FileUploadService.UploadSingleMulti.UPLOAD_MULTIPLE_FILES);
intent.putExtra(FileUploadService.KEY_LOCAL_FILE, local.toArray(new String[local.size()]));
intent.putExtra(FileUploadService.KEY_REMOTE_FILE, remote.toArray(new String[remote.size()]));
intent.putExtra(FileUploadService.KEY_ACCOUNT, mAccount);