make uploader acrtivity use uploader service
authorBartek Przybylski <bart.p.pl@gmail.com>
Thu, 17 May 2012 20:27:29 +0000 (22:27 +0200)
committerBartek Przybylski <bart.p.pl@gmail.com>
Thu, 17 May 2012 20:27:29 +0000 (22:27 +0200)
src/eu/alefzero/owncloud/Uploader.java

index ca2ff24..10d16ab 100644 (file)
@@ -57,6 +57,8 @@ import android.widget.AdapterView.OnItemClickListener;
 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
@@ -78,6 +80,12 @@ public class Uploader extends ListActivity implements OnItemClickListener,
     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
@@ -234,11 +242,9 @@ public class Uploader extends ListActivity implements OnItemClickListener,
         }\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
@@ -307,10 +313,9 @@ public class Uploader extends ListActivity implements OnItemClickListener,
             }\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
@@ -394,6 +399,7 @@ public class Uploader extends ListActivity implements OnItemClickListener,
             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
@@ -403,7 +409,7 @@ public class Uploader extends ListActivity implements OnItemClickListener,
                 ((LinearLayout) findViewById(R.id.linearLayout1)).addView(\r
                         createDirBtn, LayoutParams.FILL_PARENT,\r
                         LayoutParams.WRAP_CONTENT);\r
-            }\r
+            }*/\r
         }\r
     }\r
 \r
@@ -447,32 +453,14 @@ public class Uploader extends ListActivity implements OnItemClickListener,
         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
@@ -480,50 +468,26 @@ public class Uploader extends ListActivity implements OnItemClickListener,
             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
@@ -547,13 +511,15 @@ public class Uploader extends ListActivity implements OnItemClickListener,
                 }\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