[Spambayes-checkins] spambayes/windows pop3proxy_tray.py,1.8,1.9
Adam Walker
xenogeist at users.sourceforge.net
Sun Sep 14 21:35:06 EDT 2003
Update of /cvsroot/spambayes/spambayes/windows
In directory sc8-pr-cvs1:/tmp/cvs-serv16419/windows
Modified Files:
pop3proxy_tray.py
Log Message:
Support for service from Romain GUY.
Index: pop3proxy_tray.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/windows/pop3proxy_tray.py,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** pop3proxy_tray.py 15 Sep 2003 01:00:18 -0000 1.8
--- pop3proxy_tray.py 15 Sep 2003 01:35:04 -0000 1.9
***************
*** 43,46 ****
--- 43,47 ----
from win32gui import *
from win32api import error as win32api_error
+ from win32service import *
# If we are not running in a console, redirect all print statements to the
***************
*** 102,105 ****
--- 103,109 ----
START_STOP_ID = 1024
+ runningStatus = (SERVICE_START_PENDING, SERVICE_RUNNING, SERVICE_CONTINUE_PENDING)
+ stoppedStatus = (SERVICE_PAUSED, SERVICE_STOP_PENDING, SERVICE_STOPPED)
+ serviceName = "pop3proxy"
class MainWindow(object):
***************
*** 113,118 ****
1026 : ("View information ...", self.OpenInterface),
1027 : ("Configure ...", self.OpenConfig),
! 1027 : ("Check for latest version", self.CheckVersion),
! 1028 : ("-", None),
1099 : ("Exit SpamBayes", self.OnExit),
}
--- 117,122 ----
1026 : ("View information ...", self.OpenInterface),
1027 : ("Configure ...", self.OpenConfig),
! 1028 : ("Check for latest version", self.CheckVersion),
! 1029 : ("-", None),
1099 : ("Exit SpamBayes", self.OnExit),
}
***************
*** 122,125 ****
--- 126,131 ----
WM_TASKBAR_NOTIFY : self.OnTaskbarNotify,
}
+ self.use_service = True
+ #self.use_service = False
# Create the Window.
***************
*** 160,167 ****
flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
! nid = (self.hwnd, 0, flags, WM_TASKBAR_NOTIFY, self.hstartedicon, "SpamBayes")
Shell_NotifyIcon(NIM_ADD, nid)
self.started = False
self.tip = None
# Start up sb_server
--- 166,187 ----
flags = NIF_ICON | NIF_MESSAGE | NIF_TIP
! nid = (self.hwnd, 0, flags, WM_TASKBAR_NOTIFY, self.hstartedicon,
! "SpamBayes")
Shell_NotifyIcon(NIM_ADD, nid)
self.started = False
self.tip = None
+
+ try:
+ if self.use_service and self.IsServiceAvailable():
+ if self.GetServiceStatus() in runningStatus:
+ self.started = True
+ else:
+ print "Service not availible. Using thread."
+ self.use_service = False
+ self.started = False
+ except:
+ print "Usage of service failed. Reverting to thread."
+ self.use_service = False
+ self.started = False
# Start up sb_server
***************
*** 169,182 ****
# XXX This should determine if we are using the service, and if so
# XXX start that, and if not kick sb_server off in a separate thread.
! sb_server.prepare(state=sb_server.state)
! self.StartStop()
def BuildToolTip(self):
tip = None
! if self.started == True:
! #%i spam %i unsure %i session %i active
! tip = "SpamBayes %i spam %i ham %i unsure %i sessions %i active" %\
! (sb_server.state.numSpams, sb_server.state.numHams, sb_server.state.numUnsure,
! sb_server.state.totalSessions, sb_server.state.activeSessions)
else:
tip = "SpamBayes is not running"
--- 189,207 ----
# XXX This should determine if we are using the service, and if so
# XXX start that, and if not kick sb_server off in a separate thread.
! if not self.use_service:
! sb_server.prepare(state=sb_server.state)
! if not self.started:
! self.StartStop()
def BuildToolTip(self):
tip = None
! if self.started:
! if self.use_service:
! tip = "SpamBayes running."
! else:
! tip = "SpamBayes %i spam %i ham %i unsure %i sessions %i active" %\
! (sb_server.state.numSpams, sb_server.state.numHams,
! sb_server.state.numUnsure, sb_server.state.totalSessions,
! sb_server.state.activeSessions)
else:
tip = "SpamBayes is not running"
***************
*** 184,197 ****
! def UpdateIcon(self, hicon=None):
! flags = NIF_TIP
! if hicon is not None:
! flags |= NIF_ICON
else:
! hicon = 0
self.tip = self.BuildToolTip()
nid = (self.hwnd, 0, flags, WM_TASKBAR_NOTIFY, hicon, self.tip)
Shell_NotifyIcon(NIM_MODIFY, nid)
def OnDestroy(self, hwnd, msg, wparam, lparam):
nid = (self.hwnd, 0)
--- 209,315 ----
! def UpdateIcon(self):
! flags = NIF_TIP | NIF_ICON
! if self.started:
! hicon = self.hstartedicon
else:
! hicon = self.hstoppedicon
self.tip = self.BuildToolTip()
nid = (self.hwnd, 0, flags, WM_TASKBAR_NOTIFY, hicon, self.tip)
Shell_NotifyIcon(NIM_MODIFY, nid)
+ def IsServiceAvailable(self):
+ schSCManager = OpenSCManager(None, None, SC_MANAGER_CONNECT)
+ schService = OpenService(schSCManager, serviceName,
+ SERVICE_QUERY_STATUS)
+ if schService:
+ CloseServiceHandle(schService)
+ return schService != None
+
+ def GetServiceStatus(self):
+ schSCManager = OpenSCManager(None, None, SC_MANAGER_CONNECT)
+ schService = OpenService(schSCManager, serviceName,
+ SERVICE_QUERY_STATUS)
+ ssStatus = QueryServiceStatus(schService)
+ CloseServiceHandle(schService)
+ return ssStatus[1]
+
+ def StartService(self):
+ schSCManager = OpenSCManager(None, None, SC_MANAGER_CONNECT)
+ schService = OpenService(schSCManager, serviceName, SERVICE_START |
+ SERVICE_QUERY_STATUS)
+ # we assume IsServiceAvailable() was called before
+ ssStatus = QueryServiceStatus(schService)
+ if ssStatus[1] in runningStatus:
+ self.started = True
+ CloseServiceHandle(schService)
+ return
+
+ StartService(schService, None)
+
+ ssStatus = QueryServiceStatus(schService)
+ dwStartTickCount = GetTickCount()
+ dwOldCheckPoint = ssStatus[5]
+
+ while ssStatus[1] == SERVICE_START_PENDING:
+ dwWaitTime = ssStatus[6] / 10;
+
+ if dwWaitTime < 1000:
+ dwWaitTime = 1000
+ elif dwWaitTime > 10000:
+ dwWaitTime = 10000
+
+ Sleep(dwWaitTime);
+ ssStatus = QueryServiceStatus(schService)
+
+ if ssStatus[5] > dwOldCheckPoint:
+ dwStartTickCount = GetTickCount()
+ dwOldCheckPoint = ssStatus[5]
+ else:
+ if GetTickCount() - dwStartTickCount > ssStatus[6]:
+ break
+
+ self.started = ssStatus[1] == SERVICE_RUNNING
+ CloseServiceHandle(schService)
+ self.started = True
+
+ def StopService(self):
+ schSCManager = OpenSCManager(None, None, SC_MANAGER_CONNECT)
+ schService = OpenService(schSCManager, serviceName, SERVICE_STOP |
+ SERVICE_QUERY_STATUS)
+ # we assume IsServiceAvailable() was called before
+ ssStatus = QueryServiceStatus(schService)
+ if ssStatus[1] in stoppedStatus:
+ self.started = False
+ CloseServiceHandle(schService)
+ return
+
+ ControlService(schService, SERVICE_CONTROL_STOP)
+
+ ssStatus = QueryServiceStatus(schService)
+ dwStartTickCount = GetTickCount()
+ dwOldCheckPoint = ssStatus[5]
+
+ while ssStatus[1] == SERVICE_STOP_PENDING:
+ dwWaitTime = ssStatus[6] / 10;
+
+ if dwWaitTime < 1000:
+ dwWaitTime = 1000
+ elif dwWaitTime > 10000:
+ dwWaitTime = 10000
+
+ Sleep(dwWaitTime);
+ ssStatus = QueryServiceStatus(schService)
+
+ if ssStatus[5] > dwOldCheckPoint:
+ dwStartTickCount = GetTickCount()
+ dwOldCheckPoint = ssStatus[5]
+ else:
+ if GetTickCount() - dwStartTickCount > ssStatus[6]:
+ break
+
+ CloseServiceHandle(schService)
+ self.started = False
+
def OnDestroy(self, hwnd, msg, wparam, lparam):
nid = (self.hwnd, 0)
***************
*** 239,243 ****
def OnExit(self):
! if self.started:
sb_server.stop(sb_server.state)
self.started = False
--- 357,361 ----
def OnExit(self):
! if self.started and not self.use_service:
sb_server.stop(sb_server.state)
self.started = False
***************
*** 255,278 ****
# XXX start/stop that, and if not kick sb_server off in a separate
# XXX thread, or stop the thread that was started.
! if self.started:
! sb_server.stop(sb_server.state)
! self.started = False
! self.control_functions[START_STOP_ID] = ("Start SpamBayes",
! self.StartStop)
! self.UpdateIcon(self.hstoppedicon)
else:
! self.StartProxyThread()
self.control_functions[START_STOP_ID] = ("Stop SpamBayes",
self.StartStop)
! self.UpdateIcon(self.hstartedicon)
def OpenInterface(self):
! webbrowser.open_new("http://localhost:%d/" % \
! (options["html_ui", "port"],))
def OpenConfig(self):
! webbrowser.open_new("http://localhost:%d/config" % \
! (options["html_ui", "port"],))
!
def CheckVersion(self):
# Stolen, with few modifications, from addin.py
--- 373,411 ----
# XXX start/stop that, and if not kick sb_server off in a separate
# XXX thread, or stop the thread that was started.
! if self.use_service:
! if self.GetServiceStatus() in stoppedStatus:
! self.StartService()
! else:
! self.StopService()
else:
! if self.started:
! sb_server.stop(sb_server.state)
! self.started = False
! else:
! self.StartProxyThread()
! self.UpdateIcon()
! if self.started:
self.control_functions[START_STOP_ID] = ("Stop SpamBayes",
self.StartStop)
! else:
! self.control_functions[START_STOP_ID] = ("Start SpamBayes",
! self.StartStop)
!
!
def OpenInterface(self):
! if self.started:
! webbrowser.open_new("http://localhost:%d/" % \
! (options["html_ui", "port"],))
! else:
! self.ShowMessage("SpamBayes is not running.")
def OpenConfig(self):
! if self.started:
! webbrowser.open_new("http://localhost:%d/config" % \
! (options["html_ui", "port"],))
! else:
! self.ShowMessage("SpamBayes is not running.")
!
def CheckVersion(self):
# Stolen, with few modifications, from addin.py
***************
*** 299,307 ****
version_dict=latest)
except:
! print "Error checking the latest version"
traceback.print_exc()
return
! print "Current version is %s, latest is %s." % (cur_ver_num, latest_ver_num)
if latest_ver_num > cur_ver_num:
url = get_version_string(app_name, "Download Page", version_dict=latest)
--- 432,440 ----
version_dict=latest)
except:
! self.ShowMessage("Error checking the latest version")
traceback.print_exc()
return
! self.ShowMessage("Current version is %s, latest is %s." % (cur_ver_num, latest_ver_num))
if latest_ver_num > cur_ver_num:
url = get_version_string(app_name, "Download Page", version_dict=latest)
***************
*** 309,312 ****
--- 442,448 ----
## os.startfile(url)
+ def ShowMessage(self, msg):
+ MessageBox(self.hwnd, msg, "SpamBayes", win32con.MB_OK)
+
def main():
More information about the Spambayes-checkins
mailing list