sync progress indicator
[pub/Android/ownCloud.git] / src / eu / alefzero / owncloud / datamodel / FileDataStorageManager.java
index 827435f..7ecb491 100644 (file)
@@ -53,17 +53,23 @@ public class FileDataStorageManager implements DataStorageManager {
   @Override
   public OCFile getFileByPath(String path) {
     Cursor c = getCursorForValue(ProviderTableMeta.FILE_PATH, path);
-    if (c.moveToFirst())
-      return createFileInstance(c);
-    return null;
+    OCFile file = null;
+    if (c.moveToFirst()) {
+      file = createFileInstance(c);
+      c.close();
+    }
+    return file;
   }
 
   @Override
   public OCFile getFileById(long id) {
     Cursor c = getCursorForValue(ProviderTableMeta._ID, String.valueOf(id));
-    if (c.moveToFirst())
-      return createFileInstance(c);
-    return null;
+    OCFile file = null;
+    if (c.moveToFirst()) {
+      file = createFileInstance(c);
+      c.close();
+    }
+    return file;
   }
 
   @Override
@@ -90,8 +96,9 @@ public class FileDataStorageManager implements DataStorageManager {
     cv.put(ProviderTableMeta.FILE_PATH, file.getPath());
     cv.put(ProviderTableMeta.FILE_STORAGE_PATH, file.getStoragePath());
     cv.put(ProviderTableMeta.FILE_ACCOUNT_OWNER, mAccount.name);
-    
+
     if (fileExists(file.getPath())) {
+      file.setFileId(getFileByPath(file.getPath()).getFileId());
       overriden = true;
       if (getContentResolver() != null) {
         getContentResolver().update(ProviderTableMeta.CONTENT_URI,
@@ -109,17 +116,22 @@ public class FileDataStorageManager implements DataStorageManager {
         }
       }
     } else {
+      Uri result_uri = null;
       if (getContentResolver() != null) {
-        getContentResolver().insert(ProviderTableMeta.CONTENT_URI_FILE, cv);
+        result_uri = getContentResolver().insert(ProviderTableMeta.CONTENT_URI_FILE, cv);
       } else {
         try {
-          getContentProvider().insert(ProviderTableMeta.CONTENT_URI_FILE, cv);
+          result_uri = getContentProvider().insert(ProviderTableMeta.CONTENT_URI_FILE, cv);
         } catch (RemoteException e) {
           Log.e(TAG, "Fail to insert insert file to database " + e.getMessage());
         }
       }
+      if (result_uri != null) {
+        long new_id = Long.parseLong(result_uri.getPathSegments().get(1));
+        file.setFileId(new_id);
+      }
     }
-    
+
     if (file.isDirectory() && file.needsUpdatingWhileSaving())
       for (OCFile f : getDirectoryContent(file))
         saveFile(f);
@@ -152,12 +164,13 @@ public class FileDataStorageManager implements DataStorageManager {
   }
 
   public Vector<OCFile> getDirectoryContent(OCFile f) {
-    if (f.isDirectory() && f.getFileId() != -1) {
+    if (f != null && f.isDirectory() && f.getFileId() != -1) {
       Vector<OCFile> ret = new Vector<OCFile>();
 
       Uri req_uri = Uri.withAppendedPath(
           ProviderTableMeta.CONTENT_URI_DIR, String.valueOf(f.getFileId()));
       Cursor c = null;
+      
       if (getContentProvider() != null) {
         try {
           c = getContentProvider().query(req_uri, null, null, null, null);
@@ -169,12 +182,13 @@ public class FileDataStorageManager implements DataStorageManager {
         c = getContentResolver().query(req_uri, null, null, null, null);
       }
 
-      if (c.moveToFirst())
+      if (c.moveToFirst()) {
         do {
           OCFile child = createFileInstance(c);
           ret.add(child);
         } while (c.moveToNext());
-
+      }
+      
       c.close();
       return ret;
     }