Pārlūkot izejas kodu

Hopefully fix double upload issue

Mario Danic 8 gadi atpakaļ
vecāks
revīzija
697b05f031

+ 56 - 31
src/com/owncloud/android/services/observer/SyncedFolderObserverService.java

@@ -6,17 +6,17 @@
  * @author Mario Danic
  * @author Mario Danic
  * Copyright (C) 2016 Tobias Kaminsky, Andy Scherzinger
  * Copyright (C) 2016 Tobias Kaminsky, Andy Scherzinger
  * Copyright (C) 2017 Mario Danic
  * Copyright (C) 2017 Mario Danic
- *
+ * <p>
  * This program is free software: you can redistribute it and/or modify
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as published by
  * it under the terms of the GNU Affero General Public License as published by
  * the Free Software Foundation, either version 3 of the License, or
  * the Free Software Foundation, either version 3 of the License, or
  * at your option) any later version.
  * at your option) any later version.
- *
+ * <p>
  * This program is distributed in the hope that it will be useful,
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU Affero General Public License for more details.
  * GNU Affero General Public License for more details.
- *
+ * <p>
  * You should have received a copy of the GNU Affero General Public License
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
  */
@@ -77,15 +77,15 @@ public class SyncedFolderObserverService extends Service {
 
 
         boolean readPerstistanceEntries = false;
         boolean readPerstistanceEntries = false;
 
 
-        if (file.exists() ) {
+        if (file.exists()) {
             FileInputStream fis = null;
             FileInputStream fis = null;
             try {
             try {
                 fis = new FileInputStream(file);
                 fis = new FileInputStream(file);
                 ObjectInputStream ois = new ObjectInputStream(fis);
                 ObjectInputStream ois = new ObjectInputStream(fis);
                 boolean cont = true;
                 boolean cont = true;
-                while(cont){
+                while (cont) {
                     Object obj = ois.readObject();
                     Object obj = ois.readObject();
-                    if(obj != null)
+                    if (obj != null)
                         pairArrayList.add((SerializablePair<SyncedFolder, FileEntry>) obj);
                         pairArrayList.add((SerializablePair<SyncedFolder, FileEntry>) obj);
                     else
                     else
                         cont = false;
                         cont = false;
@@ -136,9 +136,9 @@ public class SyncedFolderObserverService extends Service {
                 }
                 }
             }
             }
         } else {
         } else {
-            for(int i = 0; i < pairArrayList.size(); i++) {
+            for (int i = 0; i < pairArrayList.size(); i++) {
                 SyncedFolder syncFolder = pairArrayList.get(i).getKey();
                 SyncedFolder syncFolder = pairArrayList.get(i).getKey();
-                for(SyncedFolder syncedFolder : mProvider.getSyncedFolders()) {
+                for (SyncedFolder syncedFolder : mProvider.getSyncedFolders()) {
                     if (syncFolder.getId() == syncedFolder.getId()) {
                     if (syncFolder.getId() == syncedFolder.getId()) {
                         syncFolder = syncedFolder;
                         syncFolder = syncedFolder;
                         pairArrayList.set(i, new SerializablePair<SyncedFolder, FileEntry>(syncFolder,
                         pairArrayList.set(i, new SerializablePair<SyncedFolder, FileEntry>(syncFolder,
@@ -182,7 +182,7 @@ public class SyncedFolderObserverService extends Service {
                 if (!newFile.exists()) {
                 if (!newFile.exists()) {
                     newFile.createNewFile();
                     newFile.createNewFile();
                 }
                 }
-                fos = new FileOutputStream (new File(file.getAbsolutePath()), false);
+                fos = new FileOutputStream(new File(file.getAbsolutePath()), false);
                 ObjectOutputStream os = new ObjectOutputStream(fos);
                 ObjectOutputStream os = new ObjectOutputStream(fos);
                 for (int i = 0; i < pairArrayList.size(); i++) {
                 for (int i = 0; i < pairArrayList.size(); i++) {
                     os.writeObject(pairArrayList.get(i));
                     os.writeObject(pairArrayList.get(i));
@@ -254,35 +254,42 @@ public class SyncedFolderObserverService extends Service {
 
 
     public void restartObserver(SyncedFolder syncedFolder) {
     public void restartObserver(SyncedFolder syncedFolder) {
         FileAlterationMagicObserver fileAlterationObserver;
         FileAlterationMagicObserver fileAlterationObserver;
-        if (syncedFolderMap.containsKey(syncedFolder)) {
-            Log_OC.d(TAG, "stop observer: " + syncedFolder.getLocalPath());
-            fileAlterationObserver = syncedFolderMap.get(syncedFolder);
-            monitor.removeObserver(fileAlterationObserver);
-            try {
-                fileAlterationObserver.destroy();
-            } catch (Exception e) {
-                Log_OC.d(TAG, "Something went very wrong at onDestroy");
-            }
+        Log_OC.d(TAG, "stop observer: " + syncedFolder.getLocalPath());
 
 
-            // remove it from the paired array list
-            for (int i = 0; i < pairArrayList.size(); i++) {
-                if (syncedFolder.equals(pairArrayList.get(i).getKey())) {
-                    pairArrayList.remove(i);
-                    break;
-                }
+        SyncedFolder syncy = null;
+        for (SyncedFolder syncyFolder : syncedFolderMap.keySet()) {
+            if (syncyFolder.getId() == syncedFolder.getId()) {
+                syncy = syncyFolder;
+                break;
             }
             }
-            syncedFolderMap.remove(syncedFolder);
         }
         }
 
 
+
         if (syncedFolder.isEnabled()) {
         if (syncedFolder.isEnabled()) {
-            Log_OC.d(TAG, "start observer: " + syncedFolder.getLocalPath());
-            if (syncedFolderMap.containsKey(syncedFolder)) {
-                fileAlterationObserver = syncedFolderMap.get(syncedFolder);
-                if (fileAlterationObserver.getListeners() == null) {
-                    fileAlterationObserver.addListener(new FileAlterationMagicListener(syncedFolder));
-                }
+            if (syncy != null) {
+                Log_OC.d(TAG, "start observer Restart: " + syncedFolder.getLocalPath() + " " + syncedFolder.getAccount());
+                fileAlterationObserver = syncedFolderMap.get(syncy);
+                monitor.removeObserver(fileAlterationObserver);
+                fileAlterationObserver.removeListener(null);
+                fileAlterationObserver.addListener(new FileAlterationMagicListener(syncedFolder));
+                syncedFolderMap.remove(syncy);
+                syncedFolderMap.put(syncedFolder, fileAlterationObserver);
                 monitor.addObserver(fileAlterationObserver);
                 monitor.addObserver(fileAlterationObserver);
+
+                // remove it from the paired array list
+                for (int i = 0; i < pairArrayList.size(); i++) {
+                    if (syncy.getId() == pairArrayList.get(i).getKey().getId()) {
+                        pairArrayList.remove(i);
+                        break;
+                    }
+                }
+
+                pairArrayList.add(new SerializablePair<SyncedFolder, FileEntry>(syncedFolder,
+                        fileAlterationObserver.getRootEntry()));
+
             } else {
             } else {
+                Log_OC.d(TAG, "start observer Restart noMap: " + syncedFolder.getLocalPath() + " " + syncedFolder.getAccount());
+
                 fileAlterationObserver = new FileAlterationMagicObserver(new File(syncedFolder.getLocalPath()),
                 fileAlterationObserver = new FileAlterationMagicObserver(new File(syncedFolder.getLocalPath()),
                         fileFilter);
                         fileFilter);
 
 
@@ -304,6 +311,24 @@ public class SyncedFolderObserverService extends Service {
                 }
                 }
 
 
             }
             }
+        } else {
+            fileAlterationObserver = syncedFolderMap.get(syncy);
+            monitor.removeObserver(fileAlterationObserver);
+
+            try {
+                fileAlterationObserver.destroy();
+            } catch (Exception e) {
+                Log_OC.d(TAG, "Something went very wrong at onDestroy");
+            }
+
+            // remove it from the paired array list
+            for (int i = 0; i < pairArrayList.size(); i++) {
+                if (syncy.getId() == pairArrayList.get(i).getKey().getId()) {
+                    pairArrayList.remove(i);
+                    break;
+                }
+            }
+            syncedFolderMap.remove(syncy);
         }
         }
 
 
         writePersistenceEntries(false, file);
         writePersistenceEntries(false, file);