]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
Add magic folder db.
authorDaira Hopwood <daira@jacaranda.org>
Tue, 28 Apr 2015 19:52:05 +0000 (20:52 +0100)
committerDaira Hopwood <daira@jacaranda.org>
Mon, 28 Dec 2015 16:18:51 +0000 (16:18 +0000)
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
src/allmydata/client.py
src/allmydata/frontends/drop_upload.py
src/allmydata/test/test_client.py

index 703acab24ff1f95cd8835ec089685fafb202ee22..1adc1d17da2855057c563e3804dc739ee59934a8 100644 (file)
@@ -506,7 +506,9 @@ class Client(node.Node, pollmixin.PollMixin):
 
             try:
                 from allmydata.frontends import drop_upload
-                s = drop_upload.DropUploader(self, upload_dircap, local_dir)
+                dbfile = os.path.join(self.basedir, "private", "magicfolderdb.sqlite")
+                dbfile = abspath_expanduser_unicode(dbfile)
+                s = drop_upload.DropUploader(self, upload_dircap, local_dir, dbfile)
                 s.setServiceParent(self)
                 s.startService()
 
index 046a49fd356654daa66d5935b2bcca8237330d8c..06f2273a8d3340767e0c6d64e8ec2e45c4438ce4 100644 (file)
@@ -12,12 +12,13 @@ from allmydata.util.fileutil import abspath_expanduser_unicode, precondition_abs
 from allmydata.util.encodingutil import listdir_unicode, to_filepath, \
      unicode_from_filepath, quote_local_unicode_path, FilenameEncodingError
 from allmydata.immutable.upload import FileName
+from allmydata.scripts import backupdb
 
 
 class DropUploader(service.MultiService):
     name = 'drop-upload'
 
-    def __init__(self, client, upload_dircap, local_dir, inotify=None):
+    def __init__(self, client, upload_dircap, local_dir, dbfile, inotify=None):
         precondition_abspath(local_dir)
 
         service.MultiService.__init__(self)
@@ -26,6 +27,7 @@ class DropUploader(service.MultiService):
         self._stats_provider = client.stats_provider
         self._convergence = client.convergence
         self._local_path = to_filepath(self._local_dir)
+        self._dbfile = dbfile
 
         self.is_upload_ready = False
 
@@ -60,7 +62,19 @@ class DropUploader(service.MultiService):
         mask = inotify.IN_CLOSE_WRITE | inotify.IN_MOVED_TO | inotify.IN_ONLYDIR
         self._notifier.watch(self._local_path, mask=mask, callbacks=[self._notify])
 
+    def _check_db_file(self, childpath):
+        # returns True if the file must be uploaded.
+        assert self._db != None
+        r = self._db.check_file(childpath)
+        filecap = r.was_uploaded()
+        if filecap is False:
+            return True
+
     def startService(self):
+        self._db = backupdb.get_backupdb(self._dbfile)
+        if self._db is None:
+            return Failure(Exception('ERROR: Unable to load magic folder db.'))
+
         service.MultiService.startService(self)
         d = self._notifier.startReading()
         self._stats_provider.count('drop_upload.dirs_monitored', 1)
index 43f193f434afdf41beda77cb143cc125d45eb560..2ae2b5850cfc02f364220f8d402551eb60b6a60b 100644 (file)
@@ -318,11 +318,12 @@ class Basic(testutil.ReallyEqualMixin, testutil.NonASCIIPathMixin, unittest.Test
         class MockDropUploader(service.MultiService):
             name = 'drop-upload'
 
-            def __init__(self, client, upload_dircap, local_dir_utf8, inotify=None):
+            def __init__(self, client, upload_dircap, local_dir, dbfile, inotify=None):
                 service.MultiService.__init__(self)
                 self.client = client
                 self.upload_dircap = upload_dircap
-                self.local_dir_utf8 = local_dir_utf8
+                self.local_dir = local_dir
+                self.dbfile = dbfile
                 self.inotify = inotify
 
         self.patch(allmydata.frontends.drop_upload, 'DropUploader', MockDropUploader)