diff -r 980825f2aeed -r adde6ad8731e series.cgi --- a/series.cgi Fri Dec 21 22:14:01 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,215 +0,0 @@ -#!/usr/bin/env python2.4 -# -# DeGAL - A pretty simple web image gallery -# Copyright (C) 2007 Tero Marttila -# http://marttila.de/~terom/degal/ -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the -# Free Software Foundation, Inc., -# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# - -import shelve -import cgi -import Cookie -import os, os.path - -import degal - -# -# load request params -# -vars = cgi.FieldStorage() - -# these are interpeted different ways, hence the generic naming -arg1 = vars["keys"].value -if 'index' in vars : - arg2 = vars["index"].value -else : - arg2 = None - -# the cookie with the user's current series -cookie = Cookie.SimpleCookie(os.environ.get('HTTP_COOKIE', None)) - -# a special action? -if arg1 and arg1 in ('add', 'del', 'clear', 'view') or arg2 == 'load' : - # load the keys from the cookie - if 'series' in cookie : - keys = cookie["series"].value.split() - else : - keys = [] - - if arg2 == 'load' : - # set the keys in the user's cookie to those in the URL - keys = arg1.split() - - elif arg1 == 'add' and arg2 not in keys : - # add a code to the list of keys - keys.append(arg2) - - elif arg1 == 'del' and arg2 in keys : - # remove a key from the list of keys - keys.remove(arg2) - - elif arg1 == 'clear' : - # clear out the set of keys - keys = [] - - elif arg1 == 'view' : - # just view them - pass - - # set the series cookie value - cookie['series'] = ' '.join(keys) - cookie['series']['path'] = '/' - - # if we have keys, redirect to them, otherwise, back to index we go - if keys : - redirect_to = "../%s/" % ('+'.join(keys)) - else : - redirect_to = "../.." - - # do the redirect - print "Status: 302" - print "Location: %s" % redirect_to - print cookie - print - print "Redirect..." -else : - # we're just viewing - keys = arg1.split() - - # is this "My Series"? - my_series = 'series' in cookie and cookie['series'].value.split() == keys - - if arg2 : - index = int(arg2) - else : - index = None - - # load DB - db = shelve.open('shorturls2', 'r') - - # get the Image objects - photos = [] - - # - # Start ugly code-misreuse - # - - # monkey-patch the templates - rendered_templates = [] - - def _myRenderTo (self, path, **vars) : - rendered_templates.append(self.render(**vars)) - - # lalalalala... ooh, look; - - degal.Template.renderTo = _myRenderTo - # - # vvvvvvvvvvvvvvvvvvvv - # vvvvvvvvvvvvvvvvvvvv - # - # >>>> SHINY PINK ELEPHANT! <<<< - # - # ^^^^^^^^^^^^^^^^^^^^ - # ^^^^^^^^^^^^^^^^^^^^ - - # 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) - - class Image (degal.Image) : - def __init__ (self, series, key, i) : - type, self.dir_name, self.image_name = db[key] - - super(Image, self).__init__(series, self.image_name) - - self.path = self._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" % (self._path(degal.THUMB_DIR), '', self.title)) - - def previewImgTag (self) : - return degal.link(self._path(), "%s" % (self._path(degal.PREVIEW_DIR), '', 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.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] -