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 threading import Event
import os
from subprocess import Popen, PIPE
def getaccountlist(customconfig):
return customconfig.getsectionlist('Account')
@ -121,6 +122,9 @@ class AccountSynchronizationMixin:
# We don't need an account lock because syncitall() goes through
# each account once, then waits for all to finish.
hook = self.getconf('presynchook', '')
self.callhook(hook)
quickconfig = self.getconfint('quick', 0)
if quickconfig < 0:
quick = True
@ -161,6 +165,23 @@ class AccountSynchronizationMixin:
remoterepos.holdordropconnections()
finally:
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):
pass

View File

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

View File

@ -175,3 +175,5 @@ class MachineUI(UIBase):
def init_banner(s):
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.unregisterthread(thread)
################################################## Hooks
def callhook(s, msg):
if s.verbose >= 0:
s._msg(msg)
################################################## Other
def sleep(s, sleepsecs):