Merge branch 'develop' into delete_local_files
authormasensio <masensio@solidgear.es>
Wed, 28 Jan 2015 09:37:08 +0000 (10:37 +0100)
committermasensio <masensio@solidgear.es>
Wed, 28 Jan 2015 09:37:08 +0000 (10:37 +0100)
1  2 
src/com/owncloud/android/datamodel/FileDataStorageManager.java

@@@ -46,7 -46,6 +46,7 @@@ import android.content.OperationApplica
  import android.database.Cursor;
  import android.net.Uri;
  import android.os.RemoteException;
 +import android.provider.MediaStore;
  
  public class FileDataStorageManager {
  
          cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
          cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
          cv.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, file.needsUpdateThumbnail());
+         cv.put(ProviderTableMeta.FILE_IS_DOWNLOADING, file.isDownloading());
          
          boolean sameRemotePath = fileExists(file.getRemotePath());
          if (sameRemotePath ||
       * HERE ONLY DATA CONSISTENCY SHOULD BE GRANTED
       *  
       * @param folder
 -     * @param files
 -     * @param removeNotUpdated
 +     * @param updatedFiles
 +     * @param filesToRemove
       */
      public void saveFolder(
              OCFile folder, Collection<OCFile> updatedFiles, Collection<OCFile> filesToRemove
              cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
              cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
              cv.put(ProviderTableMeta.FILE_UPDATE_THUMBNAIL, file.needsUpdateThumbnail());
+             cv.put(ProviderTableMeta.FILE_IS_DOWNLOADING, file.isDownloading());
  
              boolean existsByPath = fileExists(file.getRemotePath());
              if (existsByPath || fileExists(file.getFileId())) {
                  if (removeLocalCopy && file.isDown() && localPath != null && success) {
                      success = new File(localPath).delete();
                      if (success) {
 -                        triggerMediaScan(localPath);
 +                        deleteFileInMediaScan(file);
                      }
                      if (!removeDBData && success) {
                          // maybe unnecessary, but should be checked TODO remove if unnecessary
  
      private boolean removeLocalFolder(OCFile folder) {
          boolean success = true;
 -        File localFolder = new File(FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder));
 +        String localFolderPath = FileStorageUtils.getDefaultSavePathFor(mAccount.name, folder);
 +        File localFolder = new File(localFolderPath);
          if (localFolder.exists()) {
              // stage 1: remove the local files already registered in the files database
              Vector<OCFile> files = getFolderContent(folder.getFileId());
                          success &= removeLocalFolder(file);
                      } else {
                          if (file.isDown()) {
 -                            String path = file.getStoragePath();
                              File localFile = new File(file.getStoragePath());
                              success &= localFile.delete();
                              if (success) {
 +                                deleteFileInMediaScan(file); // notify MediaScanner about removed file
                                  file.setStoragePath(null);
                                  saveFile(file);
 -                                triggerMediaScan(path); // notify MediaScanner about removed file
                              }
                          }
                      }
                  } else {
                      String path = localFile.getAbsolutePath();
                      success &= localFile.delete();
 -                    triggerMediaScan(path); // notify MediaScanner about removed file
                  }
              }
          }
                  Iterator<String> it = originalPathsToTriggerMediaScan.iterator();
                  while (it.hasNext()) {
                      // Notify MediaScanner about removed file
 +                    deleteFileInMediaScan(file);
                      triggerMediaScan(it.next());
                  }
                  it = newPathsToTriggerMediaScan.iterator();
                  while (it.hasNext()) {
                      // Notify MediaScanner about new file/folder
 +                    deleteFileInMediaScan(file);
                      triggerMediaScan(it.next());
                  }
              }
              file.setRemoteId(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_REMOTE_ID)));
              file.setNeedsUpdateThumbnail(c.getInt(
                      c.getColumnIndex(ProviderTableMeta.FILE_UPDATE_THUMBNAIL)) == 1 ? true : false);
+             file.setDownloading(c.getInt(
+                     c.getColumnIndex(ProviderTableMeta.FILE_IS_DOWNLOADING)) == 1 ? true : false);
                      
          }
          return file;
                      ProviderTableMeta.FILE_UPDATE_THUMBNAIL, 
                      file.needsUpdateThumbnail() ? 1 : 0
                  );
+                 cv.put(
+                         ProviderTableMeta.FILE_IS_DOWNLOADING,
+                         file.isDownloading() ? 1 : 0
+                 );
  
                  boolean existsByPath = fileExists(file.getRemotePath());
                  if (existsByPath || fileExists(file.getFileId())) {
          MainApp.getAppContext().sendBroadcast(intent);
      }
  
 +    public void deleteFileInMediaScan(OCFile file) {
 +
 +        String path = file.getStoragePath();
 +        if (file.isImage()) {
 +            // Images
 +            getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
 +                    MediaStore.Images.Media.DATA + "=?", new String[]{path});
 +        } else if (file.isAudio()) {
 +            // Audio
 +            getContentResolver().delete(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
 +                    MediaStore.Audio.Media.DATA + "=?", new String[]{path});
 +        } else if (file.isVideo()) {
 +            // Video
 +            getContentResolver().delete(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
 +                    MediaStore.Video.Media.DATA + "=?", new String[]{path});
 +        }
 +    }
 +
  }