localrepos = self.localrepos
statusrepos = self.statusrepos
self.ui.syncfolders(remoterepos, localrepos)
-
- (remoteignored,remotenew) = remoterepos.syncfoldersto(localrepos,statusrepos)
- if len(remotenew):
- localrepos.forgetfolders()
-
- (localignored,localnew) = localrepos.syncfoldersto(remoterepos,statusrepos)
- if len(localnew):
- remoterepos.forgetfolders()
+ remoterepos.syncfoldersto(localrepos)
folderthreads = []
for remotefolder in remoterepos.getfolders():
- if remotefolder.getvisiblename() in remoteignored:
- continue
thread = InstanceLimitedThread(\
instancename = 'FOLDER_' + self.remoterepos.getname(),
target = syncfolder,
#
- if ((statusfolder.isnewfolder()) and
- (len(localfolder.getmessagelist()) > 0) and
- (len(remotefolder.getmessagelist()) == 0)):
- # This is a locally created folder. Copy its contents to the
- # remote folder, and to the StatusFolder.
-
- localfolder.syncmessagesto(statusfolder, [remotefolder, statusfolder])
-
if not statusfolder.isnewfolder():
# Delete local copies of remote messages. This way,
# if a message's flag is modified locally but it has been
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
from offlineimap import CustomConfig
-from offlineimap.ui import UIBase
import os.path
def LoadRepository(name, account, reqtype):
def getfolder(self, foldername):
raise NotImplementedError
- def syncfoldersto(self, dest, status):
+ def syncfoldersto(self, dest):
"""Syncs the folders in this repository to those in dest.
It does NOT sync the contents of those folders."""
src = self
srchash = {}
for folder in srcfolders:
- if (folder.getvisiblename()[-2:] == src.getsep() + "."):
- continue
srchash[folder.getvisiblename().replace(src.getsep(), dest.getsep())] = \
folder
desthash = {}
# Find new folders.
#
- ignoredfolders = []
- newfolders = []
-
for key in srchash.keys():
if not key in desthash:
- srckey = key.replace(dest.getsep(),src.getsep())
- if status.getfolder(key.replace(dest.getsep(),status.getsep())).isnewfolder():
- dest.makefolder(key)
- newfolders.append(srckey)
- else:
- UIBase.getglobalui().ignorefolder (key, src, dest)
- ignoredfolders.append(srckey)
+ dest.makefolder(key)
#
# Find deleted folders.
#for key in desthash.keys():
# if not key in srchash:
# dest.deletefolder(key)
-
- return (ignoredfolders,newfolders)
##### Keepalive
def syncfolders(s, srcrepos, destrepos):
if s.verbose >= 0:
- s._msg("Copying folder structure between %s and %s" % \
+ s._msg("Copying folder structure from %s to %s" % \
(s.getnicename(srcrepos), s.getnicename(destrepos)))
############################## Folder syncing
(folder.getname(), folder.getrepository().getname(),
folder.getsaveduidvalidity(), folder.getuidvalidity()))
- def ignorefolder(s, foldername, here, there):
- s.warn("Folder %s disappeared from %s; skipping it" % \
- (foldername, there.getname()))
-
def loadmessagelist(s, repos, folder):
if s.verbose > 0:
s._msg("Loading message list for %s[%s]" % (s.getnicename(repos),