7
class EventHandler(object):
8
def __init__(self, basepath, baseurl):
9
self.basepath = basepath
10
self.baseurl = baseurl or self.getBaseUrl()
13
'''Return a file: URL that probably points to the basedir.
15
This is used as a halfway sane default when the base URL is not
16
provided; not perfect, but should work in most cases.'''
17
components = util.splitpath(os.path.abspath(self.basepath))
18
url = '/'.join([urllib.quote(component, '') for component in components])
19
return 'file:///' + url + '/'
21
def getUrlFromFilename(self, filename):
22
components = util.splitpath(util.getRelativePath(self.basepath, filename))
23
url = '/'.join([urllib.quote(component, '') for component in components])
24
return self.baseurl + url
29
def comicDownloaded(self, comic, filename):
35
class TextEventHandler(EventHandler):
38
class RSSEventHandler(EventHandler):
39
def RFC822Date(self, indate):
40
return time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime(indate))
42
def getFilename(self):
43
return os.path.abspath(os.path.join(self.basepath, 'dailydose.rss'))
47
yesterday = today - 86400
48
today = time.localtime(today)
49
yesterday = time.localtime(yesterday)
51
link = 'http://slipgate.za.net/dosage/'
53
self.rssfn = self.getFilename()
55
if os.path.exists(self.rssfn):
57
self.rss = rss.parseFeed(self.rssfn, yesterday)
60
self.rss = rss.Feed('Daily Dosage', link, 'Comics for %s' % time.strftime('%Y/%m/%d', today))
62
def comicDownloaded(self, comic, filename):
63
url = self.getUrlFromFilename(filename)
65
'%s - %s' % (comic, os.path.basename(filename)),
67
'<a href="%s">View Comic</a>' % (url,),
68
self.RFC822Date(time.time())
73
self.rss.addItem(*args)
75
self.rss.insertHead(*args)
78
self.rss.write(self.rssfn)
80
class HtmlEventHandler(EventHandler):
81
def fnFromDate(self, date):
82
fn = time.strftime('comics-%Y%m%d.html', date)
83
fn = os.path.join(self.basepath, 'html', fn)
84
fn = os.path.abspath(fn)
89
yesterday = today - 86400
90
tomorrow = today + 86400
91
today = time.localtime(today)
92
yesterday = time.localtime(yesterday)
93
tomorrow = time.localtime(tomorrow)
95
fn = self.fnFromDate(today)
96
assert not os.path.exists(fn), 'Comic page for today already exists!'
98
d = os.path.dirname(fn)
99
if not os.path.isdir(d):
102
yesterdayUrl = self.getUrlFromFilename(self.fnFromDate(yesterday))
103
tomorrowUrl = self.getUrlFromFilename(self.fnFromDate(tomorrow))
105
self.html = file(fn, 'w')
106
self.html.write('''<html>
108
<title>Comics for %s</title>
111
<a href="%s">Previous Day</a> | <a href="%s">Next Day</a>
113
''' % (time.strftime('%Y/%m/%d', today), yesterdayUrl, tomorrowUrl))
115
self.lastComic = None
117
def comicDownloaded(self, comic, filename):
118
if self.lastComic != comic:
120
url = self.getUrlFromFilename(filename)
121
self.html.write(' <li><a href="%s">%s</a></li>\n' % (url, os.path.basename(filename)))
123
def newComic(self, comic):
124
if self.lastComic is not None:
125
self.html.write(' </ul>\n')
126
self.lastComic = comic
127
self.html.write(''' <li>%s</li>
132
if self.lastComic is not None:
133
self.html.write(' </ul>\n')
134
self.html.write('''</ul>
141
'text': TextEventHandler,
142
'html': HtmlEventHandler,
143
'rss': RSSEventHandler,
151
def installHandler(name=None, basepath=None, baseurl=None):
157
handler = handlers[name](basepath, baseurl)