mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-22 04:18:23 +00:00
Add magic folder db.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
parent
b37478195f
commit
5153dff291
@ -498,7 +498,9 @@ class Client(node.Node, pollmixin.PollMixin):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
from allmydata.frontends import drop_upload
|
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.setServiceParent(self)
|
||||||
s.startService()
|
s.startService()
|
||||||
except Exception, e:
|
except Exception, e:
|
||||||
|
@ -12,12 +12,13 @@ from allmydata.util.fileutil import abspath_expanduser_unicode, precondition_abs
|
|||||||
from allmydata.util.encodingutil import listdir_unicode, to_filepath, \
|
from allmydata.util.encodingutil import listdir_unicode, to_filepath, \
|
||||||
unicode_from_filepath, quote_local_unicode_path, FilenameEncodingError
|
unicode_from_filepath, quote_local_unicode_path, FilenameEncodingError
|
||||||
from allmydata.immutable.upload import FileName
|
from allmydata.immutable.upload import FileName
|
||||||
|
from allmydata.scripts import backupdb
|
||||||
|
|
||||||
|
|
||||||
class DropUploader(service.MultiService):
|
class DropUploader(service.MultiService):
|
||||||
name = 'drop-upload'
|
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)
|
precondition_abspath(local_dir)
|
||||||
|
|
||||||
service.MultiService.__init__(self)
|
service.MultiService.__init__(self)
|
||||||
@ -26,6 +27,7 @@ class DropUploader(service.MultiService):
|
|||||||
self._stats_provider = client.stats_provider
|
self._stats_provider = client.stats_provider
|
||||||
self._convergence = client.convergence
|
self._convergence = client.convergence
|
||||||
self._local_path = to_filepath(self._local_dir)
|
self._local_path = to_filepath(self._local_dir)
|
||||||
|
self._dbfile = dbfile
|
||||||
|
|
||||||
if inotify is None:
|
if inotify is None:
|
||||||
from twisted.internet import inotify
|
from twisted.internet import inotify
|
||||||
@ -58,7 +60,19 @@ class DropUploader(service.MultiService):
|
|||||||
mask = inotify.IN_CLOSE_WRITE | inotify.IN_MOVED_TO | inotify.IN_ONLYDIR
|
mask = inotify.IN_CLOSE_WRITE | inotify.IN_MOVED_TO | inotify.IN_ONLYDIR
|
||||||
self._notifier.watch(self._local_path, mask=mask, callbacks=[self._notify])
|
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):
|
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)
|
service.MultiService.startService(self)
|
||||||
d = self._notifier.startReading()
|
d = self._notifier.startReading()
|
||||||
self._stats_provider.count('drop_upload.dirs_monitored', 1)
|
self._stats_provider.count('drop_upload.dirs_monitored', 1)
|
||||||
|
@ -306,11 +306,12 @@ class Basic(testutil.ReallyEqualMixin, testutil.NonASCIIPathMixin, unittest.Test
|
|||||||
class MockDropUploader(service.MultiService):
|
class MockDropUploader(service.MultiService):
|
||||||
name = 'drop-upload'
|
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)
|
service.MultiService.__init__(self)
|
||||||
self.client = client
|
self.client = client
|
||||||
self.upload_dircap = upload_dircap
|
self.upload_dircap = upload_dircap
|
||||||
self.local_dir_utf8 = local_dir_utf8
|
self.local_dir = local_dir
|
||||||
|
self.dbfile = dbfile
|
||||||
self.inotify = inotify
|
self.inotify = inotify
|
||||||
|
|
||||||
self.patch(allmydata.frontends.drop_upload, 'DropUploader', MockDropUploader)
|
self.patch(allmydata.frontends.drop_upload, 'DropUploader', MockDropUploader)
|
||||||
|
Loading…
Reference in New Issue
Block a user