Included name of the 'lost' folder in the toast warning about current folder removed...
[pub/Android/ownCloud.git] / src / com / owncloud / android / ui / activity / FileDisplayActivity.java
index f62eb07..febcd59 100644 (file)
@@ -601,8 +601,10 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
                     finish();
                     return;
                 }
-                popDirname();
-                listOfFiles.onBrowseUp();
+                int levelsUp = listOfFiles.onBrowseUp();
+                for (int i=0; i < levelsUp && mDirectories.getCount() > 1 ; i++) {
+                    popDirname();
+                }
             }
         }
         if (listOfFiles != null) {  // should never be null, indeed
@@ -862,72 +864,46 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
         public void onReceive(Context context, Intent intent) {
             boolean inProgress = intent.getBooleanExtra(FileSyncService.IN_PROGRESS, false);
             String accountName = intent.getStringExtra(FileSyncService.ACCOUNT_NAME);
+            RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT);
 
             Log_OC.d(TAG, "sync of account " + accountName + " is in_progress: " + inProgress);
             
-            RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncService.SYNC_RESULT);
-            
             if (getAccount() != null && accountName.equals(getAccount().name)) {  
 
                 String synchFolderRemotePath = intent.getStringExtra(FileSyncService.SYNC_FOLDER_REMOTE_PATH); 
 
-                /*
-                boolean fillBlankRoot = false;
-                if (currentDir == null) {
-                    currentDir = mStorageManager.getFileByPath(OCFile.PATH_SEPARATOR);
-                    fillBlankRoot = (currentDir != null);                   
-                }
-                */
+                OCFile currentFile = (getFile() == null) ? null : mStorageManager.getFileByPath(getFile().getRemotePath());
+                OCFile currentDir = (getCurrentDir() == null) ? null : mStorageManager.getFileByPath(getCurrentDir().getRemotePath());
 
-                OCFile currentDir = getCurrentDir();
-                if (synchFolderRemotePath != null) {
-                    
-                    OCFile synchDir = getStorageManager().getFileByPath(synchFolderRemotePath);
-                    boolean needToRefresh = false;
-                    if (synchDir == null) {
-                        Log_OC.e(TAG, "SEARCHING NEW CURRENT");
-                        // after synchronizing the current folder does not exist (was deleted in the server) ; need to move to other
-                        String synchPath = synchFolderRemotePath;
-                        do { 
-                            String synchParentPath = new File(synchPath).getParent();
-                            synchParentPath = synchParentPath.endsWith(OCFile.PATH_SEPARATOR) ? synchParentPath : synchParentPath + OCFile.PATH_SEPARATOR;
-                            synchDir = getStorageManager().getFileByPath(synchParentPath);
-                            popDirname();
-                            synchPath = synchParentPath;
-                        }  while (synchDir == null);    // sooner of later will get ROOT, that never is null
-                        currentDir = synchDir;
-                        
-                        Toast.makeText(FileDisplayActivity.this, 
-                                        String.format(getString(R.string.sync_current_folder_was_removed), synchPath), 
-                                        Toast.LENGTH_LONG).show();
-                        needToRefresh = true;
-                    }
+                if (currentDir == null) {
+                    // current folder was removed from the server 
+                    Toast.makeText( FileDisplayActivity.this, 
+                                    String.format(getString(R.string.sync_current_folder_was_removed), mDirectories.getItem(0)), 
+                                    Toast.LENGTH_LONG)
+                        .show();
+                    onBackPressed();
                     
-                    if (currentDir.getRemotePath().equals(synchFolderRemotePath)) {
-                        needToRefresh = true;
+                } else {
+                    if (currentFile == null && !getFile().isDirectory()) {
+                        // currently selected file was removed in the server, and now we know it
+                        cleanSecondFragment();
+                        currentFile = currentDir;
                     }
-
-                    if (needToRefresh) {
+                
+                    if (synchFolderRemotePath != null && currentDir.getRemotePath().equals(synchFolderRemotePath)) {
                         OCFileListFragment fileListFragment = getListOfFilesFragment();
                         if (fileListFragment != null) {
                             fileListFragment.listDirectory(currentDir);
                         }
-                        boolean existsSecondFragment = (getSecondFragment() != null); 
-                        if (!existsSecondFragment) {
-                            setFile(currentDir);
-                        }
-                        //updateFragmentsVisibility(existsSecondFragment);
-                        updateNavigationElementsInActionBar(existsSecondFragment ? getFile() : null);
                     }
+                    setFile(currentFile);
                 }
                 
                 setSupportProgressBarIndeterminateVisibility(inProgress);
                 removeStickyBroadcast(intent);
-                
                 mSyncInProgress = inProgress;
 
             }
-
             
             if (synchResult != null) {
                 if (synchResult.getCode().equals(RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED)) {
@@ -1013,7 +989,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
         cleanSecondFragment();
         
         // Sync Folder
-        startSyncFolderOperation(directory.getRemotePath(), directory.getFileId());
+        startSyncFolderOperation(directory);
         
     }
 
@@ -1423,21 +1399,20 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
         return null;
     }
     
-    public void startSyncFolderOperation(String remotePath, long parentId) {
+    public void startSyncFolderOperation(OCFile folder) {
         long currentSyncTime = System.currentTimeMillis(); 
         
         mSyncInProgress = true;
                 
         // perform folder synchronization
-        RemoteOperation synchFolderOp = new SynchronizeFolderOperation(  remotePath, 
-                                                                                    currentSyncTime, 
-                                                                                    parentId, 
-                                                                                    false,
-                                                                                    false,
-                                                                                    getStorageManager(), 
-                                                                                    getAccount(), 
-                                                                                    getApplicationContext()
-                                                                                  );
+        RemoteOperation synchFolderOp = new SynchronizeFolderOperation( folder,  
+                                                                        currentSyncTime, 
+                                                                        false,
+                                                                        false,
+                                                                        getStorageManager(), 
+                                                                        getAccount(), 
+                                                                        getApplicationContext()
+                                                                      );
         synchFolderOp.execute(getAccount(), this, null, null, this);
         
         setSupportProgressBarIndeterminateVisibility(true);