using ocfile in uploader, fixing upload crash
authorBartek Przybylski <bart.p.pl@gmail.com>
Sun, 3 Jun 2012 10:35:03 +0000 (12:35 +0200)
committerBartek Przybylski <bart.p.pl@gmail.com>
Sun, 3 Jun 2012 10:35:03 +0000 (12:35 +0200)
src/eu/alefzero/owncloud/Uploader.java
src/eu/alefzero/owncloud/files/services/FileUploader.java

index 13b2269..3599579 100644 (file)
@@ -20,7 +20,11 @@ package eu.alefzero.owncloud;
 import java.io.File;\r
 import java.net.URLEncoder;\r
 import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.LinkedList;\r
+import java.util.List;\r
 import java.util.Stack;\r
+import java.util.Vector;\r
 \r
 import android.accounts.Account;\r
 import android.accounts.AccountManager;\r
@@ -46,9 +50,14 @@ import android.widget.AdapterView;
 import android.widget.Button;\r
 import android.widget.EditText;\r
 import android.widget.ListView;\r
+import android.widget.SimpleAdapter;\r
 import android.widget.SimpleCursorAdapter;\r
 import android.widget.AdapterView.OnItemClickListener;\r
+import android.widget.Toast;\r
 import eu.alefzero.owncloud.authenticator.AccountAuthenticator;\r
+import eu.alefzero.owncloud.datamodel.DataStorageManager;\r
+import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
+import eu.alefzero.owncloud.datamodel.OCFile;\r
 import eu.alefzero.owncloud.db.ProviderMeta;\r
 import eu.alefzero.owncloud.db.ProviderMeta.ProviderTableMeta;\r
 import eu.alefzero.owncloud.files.services.FileUploader;\r
@@ -67,12 +76,13 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
     private Account mAccount;\r
     private AccountManager mAccountManager;\r
     private String mUsername, mPassword;\r
-    private Cursor mCursor;\r
     private Stack<String> mParents;\r
     private ArrayList<Parcelable> mStreamsToUpload;\r
     private boolean mCreateDir;\r
     private String mUploadPath;\r
     private static final String[] CONTENT_PROJECTION = { Media.DATA, Media.DISPLAY_NAME, Media.MIME_TYPE, Media.SIZE };\r
+    private DataStorageManager mStorageManager;\r
+    private OCFile mFile;\r
 \r
     private final static int DIALOG_NO_ACCOUNT = 0;\r
     private final static int DIALOG_WAITING = 1;\r
@@ -87,6 +97,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
         super.onCreate(savedInstanceState);\r
         getWindow().requestFeature(Window.FEATURE_NO_TITLE);\r
         mParents = new Stack<String>();\r
+        mParents.add("");\r
         if (getIntent().hasExtra(Intent.EXTRA_STREAM)) {\r
             prepareStreamsToUpload();\r
             mAccountManager = (AccountManager) getSystemService(Context.ACCOUNT_SERVICE);\r
@@ -100,13 +111,14 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
             } else {\r
                 mAccount = accounts[0];\r
                 setContentView(R.layout.uploader_layout);\r
+                mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());\r
                 populateDirectoryList();\r
             }\r
         } else {\r
             showDialog(DIALOG_NO_STREAM);\r
         }\r
     }\r
-\r
+    \r
     @Override\r
     protected Dialog onCreateDialog(final int id) {\r
         final AlertDialog.Builder builder = new Builder(this);\r
@@ -150,7 +162,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
                 }\r
             });\r
             return builder.create();\r
-        case DIALOG_GET_DIRNAME:\r
+        /*case DIALOG_GET_DIRNAME:\r
             final EditText dirName = new EditText(getBaseContext());\r
             builder.setView(dirName);\r
             builder.setTitle(R.string.uploader_info_dirname);\r
@@ -171,7 +183,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
                     dialog.cancel();\r
                 }\r
             });\r
-            return builder.create();\r
+            return builder.create();*/\r
         case DIALOG_MULTIPLE_ACCOUNT:\r
             CharSequence ac[] = new CharSequence[mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE).length];\r
             for (int i = 0; i < ac.length; ++i) {\r
@@ -181,6 +193,7 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
             builder.setItems(ac, new OnClickListener() {\r
                 public void onClick(DialogInterface dialog, int which) {\r
                     mAccount = mAccountManager.getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE)[which];\r
+                    mStorageManager = new FileDataStorageManager(mAccount, getContentResolver());\r
                     populateDirectoryList();\r
                 }\r
             });\r
@@ -216,60 +229,39 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
     @Override\r
     public void onBackPressed() {\r
 \r
-        if (mParents.size() == 0) {\r
+        if (mParents.size() <= 1) {\r
             super.onBackPressed();\r
             return;\r
-        } else if (mParents.size() == 1) {\r
-            mParents.pop();\r
-            mCursor = managedQuery(ProviderTableMeta.CONTENT_URI, null, ProviderTableMeta.FILE_CONTENT_TYPE + "=?",\r
-                    new String[] { "DIR" }, null);\r
         } else {\r
             mParents.pop();\r
-            mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, mParents.peek()), null,\r
-                    ProviderTableMeta.FILE_CONTENT_TYPE + "=?", new String[] { "DIR" }, null);\r
+            populateDirectoryList();\r
         }\r
-\r
-        SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.uploader_list_item_layout, mCursor,\r
-                new String[] { ProviderTableMeta.FILE_NAME }, new int[] { R.id.textView1 });\r
-        setListAdapter(sca);\r
     }\r
 \r
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {\r
-        if (!mCursor.moveToPosition(position)) {\r
+        Log.d(TAG, "on item click");\r
+        Vector<OCFile> tmpfiles = mStorageManager.getDirectoryContent(mFile);\r
+        if (tmpfiles == null) return;\r
+        // filter on dirtype\r
+        Vector<OCFile> files = new Vector<OCFile>();\r
+        for (OCFile f : tmpfiles)\r
+            if (f.isDirectory())\r
+                files.add(f);\r
+        if (files.size() < position) {\r
             throw new IndexOutOfBoundsException("Incorrect item selected");\r
         }\r
-        String _id = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta._ID));\r
-        mParents.push(_id);\r
-\r
-        mCursor.close();\r
-        mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_DIR, _id), null,\r
-                ProviderTableMeta.FILE_CONTENT_TYPE + "=?", new String[] { "DIR" }, null);\r
-        SimpleCursorAdapter sca = new SimpleCursorAdapter(this, R.layout.uploader_list_item_layout, mCursor,\r
-                new String[] { ProviderTableMeta.FILE_NAME }, new int[] { R.id.textView1 });\r
-        setListAdapter(sca);\r
-        getListView().invalidate();\r
+        mParents.push(files.get(position).getFileName());\r
+        populateDirectoryList();\r
     }\r
 \r
     public void onClick(View v) {\r
         switch (v.getId()) {\r
         case R.id.uploader_choose_folder:\r
-            String pathToUpload = null;\r
-            if (mParents.empty()) {\r
-                pathToUpload = "/";\r
-            } else {\r
-                mCursor = managedQuery(Uri.withAppendedPath(ProviderTableMeta.CONTENT_URI_FILE, mParents.peek()), null,\r
-                        null, null, null);\r
-                mCursor.moveToFirst();\r
-                pathToUpload = mCursor.getString(mCursor.getColumnIndex(ProviderTableMeta.FILE_PATH)).replace(" ",\r
-                        "%20");\r
-            }\r
-            Log.d(TAG, "Uploading file to dir " + pathToUpload);\r
-\r
             mUploadPath = "";\r
-            for (String s : pathToUpload.split("/"))\r
-                mUploadPath = "/" + URLEncoder.encode(s);\r
-            if (!mUploadPath.endsWith("/")) mUploadPath += "/";\r
-            mCreateDir = false;\r
+            for (String p : mParents)\r
+                mUploadPath += URLEncoder.encode(p) + "/";\r
+            Log.d(TAG, "Uploading file to dir " + mUploadPath);\r
+\r
             uploadFiles();\r
 \r
             break;\r
@@ -308,6 +300,36 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
         mPassword = mAccountManager.getPassword(mAccount);\r
         setContentView(R.layout.uploader_layout);\r
 \r
+        String full_path = "";\r
+        for (String a : mParents)\r
+            full_path += a + "/";\r
+        \r
+        Log.d(TAG, "Populating view with content of : " + full_path);\r
+        \r
+        mFile = mStorageManager.getFileByPath(full_path);\r
+        if (mFile != null) {\r
+            Vector<OCFile> files = mStorageManager.getDirectoryContent(mFile);\r
+            if (files != null) {\r
+                List<HashMap<String, Object>> data = new LinkedList<HashMap<String,Object>>();\r
+                for (OCFile f : files) {\r
+                    HashMap<String, Object> h = new HashMap<String, Object>();\r
+                    if (f.isDirectory()) {\r
+                        h.put("dirname", f.getFileName());\r
+                        data.add(h);\r
+                    }\r
+                }\r
+                SimpleAdapter sa = new SimpleAdapter(this,\r
+                                                     data,\r
+                                                     R.layout.uploader_list_item_layout,\r
+                                                     new String[] {"dirname"},\r
+                                                     new int[] {R.id.textView1});\r
+                setListAdapter(sa);\r
+                Button btn = (Button) findViewById(R.id.uploader_choose_folder);\r
+                btn.setOnClickListener(this);\r
+                getListView().setOnItemClickListener(this);\r
+            }\r
+        }\r
+        /*\r
         mCursor = managedQuery(ProviderMeta.ProviderTableMeta.CONTENT_URI, null, ProviderTableMeta.FILE_NAME\r
                 + "=? AND " + ProviderTableMeta.FILE_ACCOUNT_OWNER + "=?", new String[] { "/", mAccount.name }, null);\r
 \r
@@ -337,8 +359,8 @@ public class Uploader extends ListActivity implements OnItemClickListener, andro
              * createDirBtn.setOnClickListener(this); ((LinearLayout)\r
              * findViewById(R.id.linearLayout1)).addView( createDirBtn,\r
              * LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); }\r
-             */\r
-        }\r
+             *\r
+        }*/\r
     }\r
 \r
     private void prepareStreamsToUpload() {\r
index d34034d..ee63d8b 100644 (file)
@@ -178,8 +178,8 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
                 new_file.setModificationTimestamp(System.currentTimeMillis());
                 new_file.setLastSyncDate(0);
                 new_file.setStoragePath(mLocalPaths[i]);
-                File f = new File(mRemotePaths[i]);
-                new_file.setParentId(storageManager.getFileByPath(URLDecoder.decode(f.getParent().endsWith("/")?f.getParent():f.getParent()+"/")).getFileId());
+                File f = new File(URLDecoder.decode(mRemotePaths[i]));
+                new_file.setParentId(storageManager.getFileByPath(f.getParent().endsWith("/")?f.getParent():f.getParent()+"/").getFileId());
                 storageManager.saveFile(new_file);
             }
         }