mirror of
https://github.com/nextcloud/android.git
synced 2024-11-21 20:55:31 +03:00
make uploader acrtivity use uploader service
This commit is contained in:
parent
54909e5372
commit
9931f93b9a
1 changed files with 49 additions and 83 deletions
|
@ -57,6 +57,8 @@ import android.widget.AdapterView.OnItemClickListener;
|
|||
import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
|
||||
import eu.alefzero.owncloud.db.ProviderMeta;
|
||||
import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;
|
||||
import eu.alefzero.owncloud.files.services.FileUploader;
|
||||
import eu.alefzero.owncloud.utils.OwnCloudVersion;
|
||||
import eu.alefzero.webdav.WebdavClient;
|
||||
import eu.alefzero.webdav.WebdavUtils;
|
||||
|
||||
|
@ -78,6 +80,12 @@ public class Uploader extends ListActivity implements OnItemClickListener,
|
|||
private Thread mUploadThread;
|
||||
private Handler mHandler;
|
||||
private ArrayList<Parcelable> mStreamsToUpload;
|
||||
private boolean mCreateDir;
|
||||
private String mUploadPath;
|
||||
private static final String[] CONTENT_PROJECTION = {Media.DATA,
|
||||
Media.DISPLAY_NAME,
|
||||
Media.MIME_TYPE,
|
||||
Media.SIZE};
|
||||
|
||||
private final static int DIALOG_NO_ACCOUNT = 0;
|
||||
private final static int DIALOG_WAITING = 1;
|
||||
|
@ -234,11 +242,9 @@ public class Uploader extends ListActivity implements OnItemClickListener,
|
|||
}
|
||||
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
showDialog(DIALOG_WAITING);
|
||||
mUploadThread = new Thread(new BackgroundUploader(mPath
|
||||
+ mDirname.getText().toString(), mStreamsToUpload,
|
||||
mHandler, true));
|
||||
mUploadThread.start();
|
||||
Uploader.this.mUploadPath = mPath + mDirname.getText().toString();
|
||||
Uploader.this.mCreateDir = true;
|
||||
uploadFiles();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -307,10 +313,9 @@ public class Uploader extends ListActivity implements OnItemClickListener,
|
|||
}
|
||||
Log.d(TAG, "Uploading file to dir " + pathToUpload);
|
||||
|
||||
showDialog(DIALOG_WAITING);
|
||||
mUploadThread = new Thread(new BackgroundUploader(pathToUpload,
|
||||
mStreamsToUpload, mHandler));
|
||||
mUploadThread.start();
|
||||
mUploadPath = pathToUpload;
|
||||
mCreateDir = false;
|
||||
uploadFiles();
|
||||
|
||||
break;
|
||||
case android.R.id.button1: // dynamic action for create aditional dir
|
||||
|
@ -394,6 +399,7 @@ public class Uploader extends ListActivity implements OnItemClickListener,
|
|||
setListAdapter(sca);
|
||||
Button btn = (Button) findViewById(R.id.uploader_choose_folder);
|
||||
btn.setOnClickListener(this);
|
||||
/* disable this until new server interaction service wont be created
|
||||
// insert create new directory for multiple items uploading
|
||||
if (getIntent().getAction().equals(Intent.ACTION_SEND_MULTIPLE)) {
|
||||
Button createDirBtn = new Button(this);
|
||||
|
@ -403,7 +409,7 @@ public class Uploader extends ListActivity implements OnItemClickListener,
|
|||
((LinearLayout) findViewById(R.id.linearLayout1)).addView(
|
||||
createDirBtn, LayoutParams.FILL_PARENT,
|
||||
LayoutParams.WRAP_CONTENT);
|
||||
}
|
||||
}*/
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -447,32 +453,14 @@ public class Uploader extends ListActivity implements OnItemClickListener,
|
|||
getContentResolver().insert(ProviderTableMeta.CONTENT_URI_FILE, cv);
|
||||
}
|
||||
|
||||
class BackgroundUploader implements Runnable {
|
||||
private ArrayList<Parcelable> mUploadStreams;
|
||||
private Handler mHandler;
|
||||
private String mUploadPath;
|
||||
private boolean mCreateDir;
|
||||
|
||||
public BackgroundUploader(String pathToUpload,
|
||||
ArrayList<Parcelable> streamsToUpload, Handler handler) {
|
||||
mUploadStreams = streamsToUpload;
|
||||
mHandler = handler;
|
||||
mUploadPath = pathToUpload.replace(" ", "%20");
|
||||
mCreateDir = false;
|
||||
}
|
||||
|
||||
public BackgroundUploader(String pathToUpload,
|
||||
ArrayList<Parcelable> streamsToUpload, Handler handler,
|
||||
boolean createDir) {
|
||||
mUploadStreams = streamsToUpload;
|
||||
mHandler = handler;
|
||||
mUploadPath = pathToUpload.replace(" ", "%20");
|
||||
mCreateDir = createDir;
|
||||
}
|
||||
|
||||
public void run() {
|
||||
WebdavClient wdc = new WebdavClient(Uri.parse(mAccountManager
|
||||
.getUserData(mAccount, AccountAuthenticator.KEY_OC_URL)));
|
||||
public void uploadFiles() {
|
||||
OwnCloudVersion ocv = new OwnCloudVersion(mAccountManager
|
||||
.getUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION));
|
||||
String base_url = mAccountManager.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL);
|
||||
String webdav_path = AccountUtils.getWebdavPath(ocv);
|
||||
Uri oc_uri = Uri.parse(base_url+webdav_path);
|
||||
|
||||
WebdavClient wdc = new WebdavClient(oc_uri);
|
||||
wdc.setCredentials(mUsername, mPassword);
|
||||
wdc.allowUnsignedCertificates();
|
||||
|
||||
|
@ -480,50 +468,26 @@ public class Uploader extends ListActivity implements OnItemClickListener,
|
|||
if (mCreateDir) {
|
||||
wdc.createDirectory(mUploadPath);
|
||||
}
|
||||
|
||||
String[] local = new String[mStreamsToUpload.size()],
|
||||
remote = new String[mStreamsToUpload.size()];
|
||||
|
||||
for (int i = 0; i < mUploadStreams.size(); ++i) {
|
||||
Uri uri = (Uri) mUploadStreams.get(i);
|
||||
for (int i = 0; i < mStreamsToUpload.size(); ++i) {
|
||||
Uri uri = (Uri) mStreamsToUpload.get(i);
|
||||
if (uri.getScheme().equals("content")) {
|
||||
final Cursor c = getContentResolver()
|
||||
.query((Uri) mUploadStreams.get(i), null, null,
|
||||
null, null);
|
||||
Cursor c = getContentResolver().query((Uri) mStreamsToUpload.get(i),
|
||||
CONTENT_PROJECTION,
|
||||
null,
|
||||
null,
|
||||
null);
|
||||
|
||||
if (!c.moveToFirst()) continue;
|
||||
|
||||
final String display_name = c.getString(c.getColumnIndex(Media.DISPLAY_NAME)),
|
||||
data = c.getString(c.getColumnIndex(Media.DATA));
|
||||
local[i] = data;
|
||||
remote[i] = mUploadPath + "/" + display_name;
|
||||
|
||||
if (!wdc.putFile(
|
||||
c.getString(c.getColumnIndex(Media.DATA)),
|
||||
mUploadPath
|
||||
+ "/"
|
||||
+ c.getString(c
|
||||
.getColumnIndex(Media.DISPLAY_NAME)),
|
||||
c.getString(c.getColumnIndex(Media.MIME_TYPE)))) {
|
||||
mHandler.post(new Runnable() {
|
||||
public void run() {
|
||||
Uploader.this
|
||||
.onUploadComplete(
|
||||
false,
|
||||
"Error while uploading file: "
|
||||
+ c.getString(c
|
||||
.getColumnIndex(Media.DISPLAY_NAME)));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
mHandler.post(new Runnable() {
|
||||
public void run() {
|
||||
Uploader.this.PartialupdateUpload(
|
||||
c.getString(c
|
||||
.getColumnIndex(Media.DATA)),
|
||||
c.getString(c
|
||||
.getColumnIndex(Media.DISPLAY_NAME)),
|
||||
mUploadPath
|
||||
+ "/"
|
||||
+ c.getString(c
|
||||
.getColumnIndex(Media.DISPLAY_NAME)),
|
||||
c.getString(c
|
||||
.getColumnIndex(Media.MIME_TYPE)),
|
||||
c.getString(c
|
||||
.getColumnIndex(Media.SIZE)));
|
||||
}
|
||||
});
|
||||
}
|
||||
} else if (uri.getScheme().equals("file")) {
|
||||
final File file = new File(Uri.decode(uri.toString())
|
||||
.replace(uri.getScheme() + "://", ""));
|
||||
|
@ -547,13 +511,15 @@ public class Uploader extends ListActivity implements OnItemClickListener,
|
|||
}
|
||||
|
||||
}
|
||||
mHandler.post(new Runnable() {
|
||||
public void run() {
|
||||
Uploader.this.onUploadComplete(true, null);
|
||||
}
|
||||
});
|
||||
Intent intent = new Intent(getApplicationContext(), FileUploader.class);
|
||||
intent.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_MULTIPLE_FILES);
|
||||
intent.putExtra(FileUploader.KEY_LOCAL_FILE, local);
|
||||
intent.putExtra(FileUploader.KEY_REMOTE_FILE, remote);
|
||||
intent.putExtra(FileUploader.KEY_ACCOUNT, mAccount);
|
||||
startService(intent);
|
||||
finish();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue