From a9bf511be9a007441d3e8940b644884cc1fec8f0 Mon Sep 17 00:00:00 2001
From: David Stainton <dstainton415@gmail.com>
Date: Thu, 29 Oct 2015 16:05:32 +0100
Subject: [PATCH] Fix pending upload conflict detection

---
 src/allmydata/frontends/magic_folder.py | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/allmydata/frontends/magic_folder.py b/src/allmydata/frontends/magic_folder.py
index 8ef4e97a..5c1e1fd0 100644
--- a/src/allmydata/frontends/magic_folder.py
+++ b/src/allmydata/frontends/magic_folder.py
@@ -64,6 +64,8 @@ class MagicFolder(service.MultiService):
         self.uploader = Uploader(client, local_path_u, db, upload_dircap, pending_delay, clock)
         self.downloader = Downloader(client, local_path_u, db, collective_dircap, clock, self.uploader.is_pending)
 
+        #self.downloader = Downloader(client, local_path_u, db, collective_dircap, clock, lambda x: self.uploader.is_pending(x))
+
     def startService(self):
         # TODO: why is this being called more than once?
         if self.running:
@@ -271,7 +273,7 @@ class Uploader(QueueMixin):
 
         return d
 
-    def is_pending(relpath_u):
+    def is_pending(self, relpath_u):
         if relpath_u in self._pending:
             return True
         else:
@@ -712,18 +714,18 @@ class Downloader(QueueMixin, WriteFileMixin):
                     if dmd_last_downloaded_uri != local_last_downloaded_uri:
                         is_conflict = True
                         self._count('objects_conflicted')
+                else:
+                    dmd_last_uploaded_uri = metadata.get('last_uploaded_uri', None)
+                    local_last_uploaded_uri = self._db.get_last_uploaded_uri(relpath_u)
+                    print ">>>>  if %r != %r" % (dmd_last_uploaded_uri, local_last_uploaded_uri)
+                    if dmd_last_uploaded_uri is not None and dmd_last_uploaded_uri != local_last_uploaded_uri:
+                        is_conflict = True
+                        self._count('objects_conflicted')
                     else:
-                        dmd_last_uploaded_uri = metadata.get('last_uploaded_uri', None)
-                        local_last_uploaded_uri = self._db.get_last_uploaded_uri(relpath_u)
-                        print ">>>>  if %r != %r" % (dmd_last_uploaded_uri, local_last_uploaded_uri)
-                        if dmd_last_uploaded_uri != local_last_uploaded_uri:
+                        # XXX todo: mark as conflict if file is in pending upload set
+                        if self._is_upload_pending(relpath_u):
                             is_conflict = True
                             self._count('objects_conflicted')
-                        else:
-                            # XXX todo: mark as conflict if file is in pending upload set
-                            if self._is_upload_pending(relpath_u):
-                                is_conflict = True
-                                self._count('objects_conflicted')
 
             if relpath_u.endswith(u"/"):
                 if metadata.get('deleted', False):
-- 
2.45.2