diff --git a/head/offlineimap.py b/head/offlineimap.py index b16db86..dd46caf 100644 --- a/head/offlineimap.py +++ b/head/offlineimap.py @@ -51,12 +51,18 @@ for accountname in accounts: else: password = getpass.getpass("Password for %s: " % accountname) ssl = config.getboolean(accountname, "ssl") + + # Connect to the remote server. server = imapserver.IMAPServer(user, password, host, port, ssl) - #print "Connecting to server...", - #imapobj = server.makeconnection() - #print "Done." remoterepos = repository.IMAP.IMAPRepository(server) + + # Connect to the Maildirs. localrepos = repository.Maildir.MaildirRepository(os.path.expanduser(config.get(accountname, "localfolders"))) + + # Connect to the local cache. + statusrepos = repository.LocalStatus.LocalStatusRepository(accountmetadata) + + print "Synchronizing folder list..." remoterepos.syncfoldersto(localrepos) print "Done." diff --git a/head/offlineimap/repository/LocalStatus.py b/head/offlineimap/repository/LocalStatus.py new file mode 100644 index 0000000..3a91922 --- /dev/null +++ b/head/offlineimap/repository/LocalStatus.py @@ -0,0 +1,53 @@ +# Local status cache repository support +# Copyright (C) 2002 John Goerzen +# +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +from Base import BaseRepository +from imapsync import folder +import os + +class LocalStatusRepository(BaseRepository): + def __init__(self, directory): + self.directory = directory + self.folders = None + + def getsep(self): + return '.' + + def getfolderfilename(self, foldername): + return os.path.join(self.directory, foldername) + + def makefolder(self, foldername): + # "touch" the file. + file = open(self.getfolderfilename(foldername), "ab") + file.close() + # Invalidate the cache. + self.folders = None + + def getfolders(self): + retval = [] + for folder in os.listdir(self.directory): + retval.append(folder.LocalStatus.LocalStatusFolder(\ + self.getfolderfilename(folder))) + return retval + + def getfolder(self, foldername): + return folder.LocalStatus.LocalStatusFolder(self.getfolderfilename(foldername)) + + + + diff --git a/head/offlineimap/repository/Maildir.py b/head/offlineimap/repository/Maildir.py index 3859e24..6ba0874 100644 --- a/head/offlineimap/repository/Maildir.py +++ b/head/offlineimap/repository/Maildir.py @@ -39,6 +39,8 @@ class MaildirRepository(BaseRepository): os.mkdir(folderdir, 0700) for subdir in ['cur', 'new', 'tmp']: os.mkdir(os.path.join(folderdir, subdir), 0700) + # Invalidate the cache + self.folders = None def deletefolder(self, foldername): print "NOT YET IMPLEMENTED: DELETE FOLDER %s" % foldername diff --git a/head/offlineimap/repository/__init__.py b/head/offlineimap/repository/__init__.py index 2ed25b3..43b2169 100644 --- a/head/offlineimap/repository/__init__.py +++ b/head/offlineimap/repository/__init__.py @@ -1 +1 @@ -import IMAP, Base, Maildir +import IMAP, Base, Maildir, LocalStatus