Compare commits

..

No commits in common. "master" and "v1.1" have entirely different histories.
master ... v1.1

3 changed files with 7 additions and 56 deletions

1
.gitignore vendored
View File

@ -1,3 +1,2 @@
build build
dist dist
pygtk-imap-chk-v?.?

24
README
View File

@ -1,14 +1,10 @@
PyGTK IMAP Checker v1.3 PyGTK IMAP Checker v1.1
By Josh Holtrop By Josh Holtrop
This script creates an undecorated window containing a number which tracks This script creates an undecorated window containing a number which tracks
the unread message count obtained for a particular mailbox folder via IMAP. the unread message count obtained for a particular mailbox folder via IMAP.
Only IMAP SSL is used. Only IMAP SSL is used.
Window Interaction:
Middle Click: Disconnect/Reconnect to IMAP server
Right Click: Exit program
Usage: pygtk-imap-chk.exe <config-file> Usage: pygtk-imap-chk.exe <config-file>
The config-file argument is required and should be the name of a configuration The config-file argument is required and should be the name of a configuration
@ -38,24 +34,6 @@ Available configuration parameters:
This value will be updated by the program when it closes. This value will be updated by the program when it closes.
'mailbox': String giving the name of the mailbox directory to search for 'mailbox': String giving the name of the mailbox directory to search for
the unread message count (if unspecified, uses "Inbox"). the unread message count (if unspecified, uses "Inbox").
You may specify subfolders such as "Inbox/Folder".
'mouse': A hash which configures the actions for the program to take
in response to a mouse click. The keys of this hash can be
'left', 'middle', or 'right'. The values of the hash can take
the following forms:
'exit' - the program will terminate
'reconnect' - the program will reconnect to the IMAP server
'cmd:COMMAND' - the command COMMAND will be executed
The cmd:COMMAND form can be used to execute arbitrary processes
in response to a mouse click. This can be used to raise a mail
client window, for example:
mouse = {
'middle': 'reconnect',
'right': 'exit',
'left': 'cmd:"C:\\Program Files\\Microsoft Office\\'
'Office12\\OUTLOOK.EXE" /recycle '
'/select "outlook:Sent Items"'
}
'password': String containing the password to use to connect to the server 'password': String containing the password to use to connect to the server
'port': String containing the port number of the IMAP SSL port on 'port': String containing the port number of the IMAP SSL port on
the mail server. the mail server.

View File

@ -1,11 +1,9 @@
import re
import gtk import gtk
import gobject import gobject
import imaplib import imaplib
import math import math
from datetime import datetime, timedelta from datetime import datetime, timedelta
from subprocess import *
class Window(object): class Window(object):
def __init__(self, title, conf): def __init__(self, title, conf):
@ -31,30 +29,18 @@ class Window(object):
self.conf['flash_rate'] = 3000 self.conf['flash_rate'] = 3000
if not 'font_size' in self.conf: if not 'font_size' in self.conf:
self.conf['font_size'] = 18 self.conf['font_size'] = 18
if not 'mouse' in self.conf:
self.conf['mouse'] = {}
if not 'left' in self.conf['mouse']:
self.conf['mouse']['left'] = ''
if not 'middle' in self.conf['mouse']:
self.conf['mouse']['middle'] = 'reconnect'
if not 'right' in self.conf['mouse']:
self.conf['mouse']['right'] = 'exit'
if not 'always_on_top' in self.conf:
self.conf['always_on_top'] = True
if not 'sticky' in self.conf:
self.conf['sticky'] = True
self.font_sz = int(1024 * self.conf['font_size']) self.font_sz = int(1024 * self.conf['font_size'])
self.fgcolor = ''.join(map(lambda x: '%02x' % int(0xFF * x), self.fgcolor = ''.join(map(lambda x: '%02x' % int(0xFF * x),
self.conf['fgcolor'])) self.conf['fgcolor']))
sticky = True
if 'sticky' in self.conf:
sticky = self.conf['sticky']
self.window = gtk.Window() self.window = gtk.Window()
self.window.set_title(title) self.window.set_title(title)
self.window.set_decorated(False) self.window.set_decorated(False)
if self.conf['sticky']: if sticky:
self.window.stick() self.window.stick()
if self.conf['always_on_top']:
self.window.set_keep_above(True)
self.window.connect('destroy', self.destroy_event) self.window.connect('destroy', self.destroy_event)
self.label = gtk.Label('-') self.label = gtk.Label('-')
@ -152,18 +138,6 @@ class Window(object):
return False return False
def button_release(self, widget, event): def button_release(self, widget, event):
try: if event.button == 3:
btn_name = {1: 'left', 2: 'middle', 3: 'right'}[event.button] self.destroy_event()
action = self.conf['mouse'][btn_name]
m = re.match(r'\s*cmd:\s*(.*)', action)
if m is not None:
cmd = m.group(1)
Popen(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
elif action == 'reconnect':
self.disconnect()
self.connect()
elif action == 'exit':
self.destroy_event()
except KeyError:
return False
return True return True