import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
import eu.alefzero.owncloud.db.ProviderMeta;\r
import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
+import eu.alefzero.owncloud.files.services.FileUploader;\r
+import eu.alefzero.owncloud.utils.OwnCloudVersion;\r
import eu.alefzero.webdav.WebdavClient;\r
import eu.alefzero.webdav.WebdavUtils;\r
\r
private Thread mUploadThread;\r
private Handler mHandler;\r
private ArrayList<Parcelable> mStreamsToUpload;\r
+ private boolean mCreateDir;\r
+ private String mUploadPath;\r
+ private static final String[] CONTENT_PROJECTION = {Media.DATA,\r
+ Media.DISPLAY_NAME,\r
+ Media.MIME_TYPE,\r
+ Media.SIZE};\r
\r
private final static int DIALOG_NO_ACCOUNT = 0;\r
private final static int DIALOG_WAITING = 1;\r
}\r
\r
public void onClick(DialogInterface dialog, int which) {\r
- showDialog(DIALOG_WAITING);\r
- mUploadThread = new Thread(new BackgroundUploader(mPath\r
- + mDirname.getText().toString(), mStreamsToUpload,\r
- mHandler, true));\r
- mUploadThread.start();\r
+ Uploader.this.mUploadPath = mPath + mDirname.getText().toString();\r
+ Uploader.this.mCreateDir = true;\r
+ uploadFiles();\r
}\r
}\r
\r
}\r
Log.d(TAG, "Uploading file to dir " + pathToUpload);\r
\r
- showDialog(DIALOG_WAITING);\r
- mUploadThread = new Thread(new BackgroundUploader(pathToUpload,\r
- mStreamsToUpload, mHandler));\r
- mUploadThread.start();\r
+ mUploadPath = pathToUpload;\r
+ mCreateDir = false;\r
+ uploadFiles();\r
\r
break;\r
case android.R.id.button1: // dynamic action for create aditional dir\r
setListAdapter(sca);\r
Button btn = (Button) findViewById(R.id.uploader_choose_folder);\r
btn.setOnClickListener(this);\r
+ /* disable this until new server interaction service wont be created\r
// insert create new directory for multiple items uploading\r
if (getIntent().getAction().equals(Intent.ACTION_SEND_MULTIPLE)) {\r
Button createDirBtn = new Button(this);\r
((LinearLayout) findViewById(R.id.linearLayout1)).addView(\r
createDirBtn, LayoutParams.FILL_PARENT,\r
LayoutParams.WRAP_CONTENT);\r
- }\r
+ }*/\r
}\r
}\r
\r
getContentResolver().insert(ProviderTableMeta.CONTENT_URI_FILE, cv);\r
}\r
\r
- class BackgroundUploader implements Runnable {\r
- private ArrayList<Parcelable> mUploadStreams;\r
- private Handler mHandler;\r
- private String mUploadPath;\r
- private boolean mCreateDir;\r
-\r
- public BackgroundUploader(String pathToUpload,\r
- ArrayList<Parcelable> streamsToUpload, Handler handler) {\r
- mUploadStreams = streamsToUpload;\r
- mHandler = handler;\r
- mUploadPath = pathToUpload.replace(" ", "%20");\r
- mCreateDir = false;\r
- }\r
-\r
- public BackgroundUploader(String pathToUpload,\r
- ArrayList<Parcelable> streamsToUpload, Handler handler,\r
- boolean createDir) {\r
- mUploadStreams = streamsToUpload;\r
- mHandler = handler;\r
- mUploadPath = pathToUpload.replace(" ", "%20");\r
- mCreateDir = createDir;\r
- }\r
-\r
- public void run() {\r
- WebdavClient wdc = new WebdavClient(Uri.parse(mAccountManager\r
- .getUserData(mAccount, AccountAuthenticator.KEY_OC_URL)));\r
+ public void uploadFiles() {\r
+ OwnCloudVersion ocv = new OwnCloudVersion(mAccountManager\r
+ .getUserData(mAccount, AccountAuthenticator.KEY_OC_VERSION));\r
+ String base_url = mAccountManager.getUserData(mAccount, AccountAuthenticator.KEY_OC_BASE_URL);\r
+ String webdav_path = AccountUtils.getWebdavPath(ocv);\r
+ Uri oc_uri = Uri.parse(base_url+webdav_path);\r
+ \r
+ WebdavClient wdc = new WebdavClient(oc_uri);\r
wdc.setCredentials(mUsername, mPassword);\r
wdc.allowUnsignedCertificates();\r
\r
if (mCreateDir) {\r
wdc.createDirectory(mUploadPath);\r
}\r
+ \r
+ String[] local = new String[mStreamsToUpload.size()],\r
+ remote = new String[mStreamsToUpload.size()];\r
\r
- for (int i = 0; i < mUploadStreams.size(); ++i) {\r
- Uri uri = (Uri) mUploadStreams.get(i);\r
+ for (int i = 0; i < mStreamsToUpload.size(); ++i) {\r
+ Uri uri = (Uri) mStreamsToUpload.get(i);\r
if (uri.getScheme().equals("content")) {\r
- final Cursor c = getContentResolver()\r
- .query((Uri) mUploadStreams.get(i), null, null,\r
- null, null);\r
-\r
- if (!wdc.putFile(\r
- c.getString(c.getColumnIndex(Media.DATA)),\r
- mUploadPath\r
- + "/"\r
- + c.getString(c\r
- .getColumnIndex(Media.DISPLAY_NAME)),\r
- c.getString(c.getColumnIndex(Media.MIME_TYPE)))) {\r
- mHandler.post(new Runnable() {\r
- public void run() {\r
- Uploader.this\r
- .onUploadComplete(\r
- false,\r
- "Error while uploading file: "\r
- + c.getString(c\r
- .getColumnIndex(Media.DISPLAY_NAME)));\r
- }\r
- });\r
- } else {\r
- mHandler.post(new Runnable() {\r
- public void run() {\r
- Uploader.this.PartialupdateUpload(\r
- c.getString(c\r
- .getColumnIndex(Media.DATA)),\r
- c.getString(c\r
- .getColumnIndex(Media.DISPLAY_NAME)),\r
- mUploadPath\r
- + "/"\r
- + c.getString(c\r
- .getColumnIndex(Media.DISPLAY_NAME)),\r
- c.getString(c\r
- .getColumnIndex(Media.MIME_TYPE)),\r
- c.getString(c\r
- .getColumnIndex(Media.SIZE)));\r
- }\r
- });\r
- }\r
+ Cursor c = getContentResolver().query((Uri) mStreamsToUpload.get(i),\r
+ CONTENT_PROJECTION,\r
+ null,\r
+ null,\r
+ null);\r
+\r
+ if (!c.moveToFirst()) continue;\r
+ \r
+ final String display_name = c.getString(c.getColumnIndex(Media.DISPLAY_NAME)),\r
+ data = c.getString(c.getColumnIndex(Media.DATA));\r
+ local[i] = data;\r
+ remote[i] = mUploadPath + "/" + display_name;\r
+\r
} else if (uri.getScheme().equals("file")) {\r
final File file = new File(Uri.decode(uri.toString())\r
.replace(uri.getScheme() + "://", ""));\r
}\r
\r
}\r
- mHandler.post(new Runnable() {\r
- public void run() {\r
- Uploader.this.onUploadComplete(true, null);\r
- }\r
- });\r
+ Intent intent = new Intent(getApplicationContext(), FileUploader.class);\r
+ intent.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_MULTIPLE_FILES);\r
+ intent.putExtra(FileUploader.KEY_LOCAL_FILE, local);\r
+ intent.putExtra(FileUploader.KEY_REMOTE_FILE, remote);\r
+ intent.putExtra(FileUploader.KEY_ACCOUNT, mAccount);\r
+ startService(intent);\r
+ finish();\r
}\r
\r
- }\r
+\r
\r
}\r