series.cgi
changeset 17 adde6ad8731e
parent 16 980825f2aeed
child 18 46536daf9e04
--- 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 = '<a href="../clear/" rel="nofollow">Clear your series</a>'
-            else :
-                self.descr = '<a href="load" rel="nofollow">Load as your series</a>'
-
-            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 = '<span style="font-size: x-small">Standalone image: <a href="%s.html">%s</a></span>' % (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, "<img src='%s' alt='%s' title='%s'>" % (self._path(degal.THUMB_DIR), '', self.title))
-
-        def previewImgTag (self) :
-            return degal.link(self._path(), "<img src='%s' alt='%s' title='%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]
-