Applied pre/post sync hooks

Patch from Sylvain FORET in refs #71
This commit is contained in:
John Goerzen 2008-10-01 00:03:04 -05:00
parent c886987a5b
commit ab43d74549
4 changed files with 33 additions and 0 deletions

View File

@ -21,6 +21,7 @@ from offlineimap.ui import UIBase
from offlineimap.threadutil import InstanceLimitedThread, ExitNotifyThread from offlineimap.threadutil import InstanceLimitedThread, ExitNotifyThread
from threading import Event from threading import Event
import os import os
from subprocess import Popen, PIPE
def getaccountlist(customconfig): def getaccountlist(customconfig):
return customconfig.getsectionlist('Account') return customconfig.getsectionlist('Account')
@ -121,6 +122,9 @@ class AccountSynchronizationMixin:
# We don't need an account lock because syncitall() goes through # We don't need an account lock because syncitall() goes through
# each account once, then waits for all to finish. # each account once, then waits for all to finish.
hook = self.getconf('presynchook', '')
self.callhook(hook)
quickconfig = self.getconfint('quick', 0) quickconfig = self.getconfint('quick', 0)
if quickconfig < 0: if quickconfig < 0:
quick = True quick = True
@ -162,6 +166,23 @@ class AccountSynchronizationMixin:
finally: finally:
pass pass
hook = self.getconf('postsynchook', '')
self.callhook(hook)
def callhook(self, cmd):
if not cmd:
return
try:
self.ui.callhook("Calling hook: " + cmd)
p = Popen(cmd, shell=True,
stdin=PIPE, stdout=PIPE, stderr=PIPE,
close_fds=True)
r = p.communicate()
self.ui.callhook("Hook stdout: %s\nHook stderr:%s\n" % r)
self.ui.callhook("Hook return code: %d" % p.returncode)
except:
self.ui.warn("Exception occured while calling hook")
class SyncableAccount(Account, AccountSynchronizationMixin): class SyncableAccount(Account, AccountSynchronizationMixin):
pass pass

View File

@ -128,6 +128,10 @@ class BlinkenBase:
finally: finally:
s.tflock.release() s.tflock.release()
def callhook(s, msg):
s.gettf().setcolor('white')
s.__class__.__bases__[-1].callhook(s, msg)
def sleep(s, sleepsecs): def sleep(s, sleepsecs):
s.gettf().setcolor('red') s.gettf().setcolor('red')
s.getaccountframe().startsleep(sleepsecs) s.getaccountframe().startsleep(sleepsecs)

View File

@ -175,3 +175,5 @@ class MachineUI(UIBase):
def init_banner(s): def init_banner(s):
s._printData('initbanner', offlineimap.version.banner) s._printData('initbanner', offlineimap.version.banner)
def callhook(s, msg):
s._printData('callhook', msg)

View File

@ -322,6 +322,12 @@ class UIBase:
s.delThreadDebugLog(thread) s.delThreadDebugLog(thread)
s.unregisterthread(thread) s.unregisterthread(thread)
################################################## Hooks
def callhook(s, msg):
if s.verbose >= 0:
s._msg(msg)
################################################## Other ################################################## Other
def sleep(s, sleepsecs): def sleep(s, sleepsecs):