diff -r 5dbdcb79024b -r 740133ab6353 series.cgi --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/series.cgi Thu Nov 08 17:06:03 2007 +0000 @@ -0,0 +1,182 @@ +#!/usr/bin/env python2.4 + +import dbm +import cgi +import Cookie +import os, os.path +#import pprint + +import degal + +# +# load request params +# +vars = cgi.FieldStorage() + +# keys = what photos are in the series +keys = vars["keys"].value.split() + +# index = what photo to show, or the index +if 'index' in vars : + index = vars["index"].value +else : + index = None + +if keys and keys[0] in ('add', 'del', 'clear', 'view') or index == 'load' : + cookie = Cookie.SimpleCookie(os.environ.get('HTTP_COOKIE', None)) + act = keys[0] + _keys = keys + + if 'series' in cookie : + keys = cookie["series"].value.split() + else : + keys = [] + + if index == 'load' : + keys = _keys + elif act == 'add' and index not in keys : + keys.append(index) + elif act == 'del' : + keys.remove(index) + elif act == 'clear' : + keys = [] + elif act == 'view' : + pass + + cookie['series'] = ' '.join(keys) + cookie['series']['path'] = '/' + + if keys : + redirect_to = "../%s/" % ('+'.join(keys)) + else : + redirect_to = "../.." + + print "Status: 302" + print "Location: %s" % redirect_to + print cookie + print + print "Redirect..." +else : + cookie = Cookie.SimpleCookie(os.environ.get('HTTP_COOKIE', None)) + + my_series = 'series' in cookie and cookie['series'].value.split() == keys + + if index : + index = int(index) + + # + # load DB + # + db = dbm.open('shorturls', 'r') + + # + # get the Image objects + # + photos = [] + + INDEX_URL = "/series/%s/" + IMAGE_URL = "/series/%s/%d" + + # monkey-patch the templates + rendered_templates = [] + + def _myRenderTo (self, path, **vars) : + rendered_templates.append(self.render(**vars)) + + degal.Template.renderTo = _myRenderTo + + # our own version of Folder + class Series (degal.Folder) : + def __init__ (self) : + super(Series, self).__init__() + + self.alive = True + self.filtered = False + self.subdirs = {} + self.images = {} + self.sorted_images = [] + self.title = "Series" + + if my_series : + self.descr = 'Clear your series' + else : + self.descr = 'Load as your series' + + self.shorturl_code = '' + + def breadcrumb (self) : + return [('../..', 'Gallery'), ('.', 'Series')] + + def inRoot (self, *fnames) : + return os.path.join('../..', *fnames) + + # def pathFor (self, *fnames) : + # return os.path.join(fnames) + + class Image (degal.Image) : + def __init__ (self, series, key, i) : + path = db[key] + path = path.rstrip(".html") + self.dir_name, self.image_name = os.path.split(path) + + super(Image, self).__init__(series, self.image_name) + + self.path = path + self.shorturl_code = key + self.html_path = self.html_name = str(i + 1) + self.title = 'Image %d' % (i + 1, ) + self.descr = 'Standalone image: %s' % (self._path(), self._path().lstrip('./')) + self.img_size = (-1, -1) + self.filesize = 0 + self.timestamp = 0 + + if my_series : + self.series_act = "del" + self.series_verb = "Remove from" + else : + self.series_act = self.series_verb = "" + + def breadcrumb (self) : + return [('../..', 'Gallery'), ('.', 'Series'), (self.html_name, self.title)] + + def _path (self, blaa='') : + return os.path.join('../..', self.dir_name, blaa, self.image_name) + + def thumbImgTag (self) : + return degal.link(self.html_name, "%s" % (os.path.join('../..', self.dir_name, degal.THUMB_DIR, self.image_name), '', self.title)) + + def previewImgTag (self) : + return degal.link(os.path.join('../..', self.dir_name, self.image_name), "%s" % (os.path.join('../..', self.dir_name, degal.PREVIEW_DIR, self.image_name), '', self.title)) + + + + series = Series() + + try : + prev = None + + for i, key in enumerate(keys) : + img = Image(series, key, i) + + if prev : + prev.next = img + + img.prev = prev + prev = img + + # series.images[str(i + 1)] = img + series.sorted_images.append(img) + finally : + db.close() + + if index : + img = series.sorted_images[index - 1] + + img.render() + else : + series.render() + + print "Content-Type: text/html" + print + print rendered_templates[0] +