degal/folder.py
author Tero Marttila <terom@fixme.fi>
Wed, 01 Jul 2009 20:40:00 +0300
changeset 141 9387da0dc183
parent 138 130fb8a8dbb9
permissions -rw-r--r--
move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
     1
"""
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
     2
    Per-directory gallery state
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
     3
"""
12
c2d8e9a754a1 Major code restructuring. Version is now 0.5, templates use Mako, and the code is split off into several files under lib/
terom
parents:
diff changeset
     4
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
     5
import filesystem, image, html
12
c2d8e9a754a1 Major code restructuring. Version is now 0.5, templates use Mako, and the code is split off into several files under lib/
terom
parents:
diff changeset
     6
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
     7
from utils import lazy_load, lazy_load_iter
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
     8
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
     9
import math
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
    10
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
    11
class Folder (filesystem.Directory) :
12
c2d8e9a754a1 Major code restructuring. Version is now 0.5, templates use Mako, and the code is split off into several files under lib/
terom
parents:
diff changeset
    12
    """
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    13
        A Folder is a filesystem Directory that:
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    14
            * has a title/description (XXX: Page)
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    15
            * contains any number of other sub-Folders and Images.
141
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    16
            * maintains a hierarchial Configuration that can be overrided for sub-nodes
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    17
            * holds sub-dirs for previews/thumbs
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    18
            * has a HTML view
12
c2d8e9a754a1 Major code restructuring. Version is now 0.5, templates use Mako, and the code is split off into several files under lib/
terom
parents:
diff changeset
    19
    """
c2d8e9a754a1 Major code restructuring. Version is now 0.5, templates use Mako, and the code is split off into several files under lib/
terom
parents:
diff changeset
    20
118
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    21
    def iter_config_files (self) :
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    22
        """
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    23
            Iterate over the possible config files for this dir
138
130fb8a8dbb9 remove cfg for .degal from folders
Tero Marttila <terom@fixme.fi>
parents: 133
diff changeset
    24
130fb8a8dbb9 remove cfg for .degal from folders
Tero Marttila <terom@fixme.fi>
parents: 133
diff changeset
    25
            XXX: abstract this
118
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    26
        """
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    27
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    28
        yield self.subfile('degal.cfg')
141
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    29
    
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    30
    def _init_config (self) :
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    31
        """
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    32
            Initialize .config for ourselves.
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    33
        """
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    34
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    35
        # use parent's config
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    36
        return self.parent.config
118
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    37
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
    38
    def __init__ (self, *args, **kwargs) :
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
    39
        super(Folder, self).__init__(*args, **kwargs)
141
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    40
        
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    41
        # load .config
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    42
        self.config = self._init_config()
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    43
 
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    44
        # find custom config?
118
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    45
        for file in self.iter_config_files() :
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    46
            if file.exists() :
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    47
                # yay! More configuration!
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    48
                self.config = self.config.load(file.path)
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    49
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    50
                break
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    51
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    52
        # load some info for title?
118
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    53
        if self.config and self.config.title :
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    54
            # override our default title
118
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    55
            self.title = self.config.title
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    56
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    57
            # disable it so it won't be used by children
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    58
            # XXX: figure out a better way of doing this
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    59
            self.config.title = None
141
9387da0dc183 move .config from filesystem to gallery/folder/image, rename degal_dir to app_dir
Tero Marttila <terom@fixme.fi>
parents: 138
diff changeset
    60
   
118
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    61
    @lazy_load
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    62
    def title (self) :
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    63
        """
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    64
            Find the default title for this dir.
118
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    65
        """
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    66
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    67
        # default
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    68
        return self.name.title()
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    69
    
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    70
    @lazy_load
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    71
    def description (self) :
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    72
        """
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    73
            Find the descriptive text for this dir
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    74
        """
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    75
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    76
        # default
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    77
        return None
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    78
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    79
    @lazy_load
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    80
    def preview_dir (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    81
        """
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    82
            Load and return the Directory used for for preview Thumbnails
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    83
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    84
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    85
        return self.subdir(self.config.preview_dir, create=True)
12
c2d8e9a754a1 Major code restructuring. Version is now 0.5, templates use Mako, and the code is split off into several files under lib/
terom
parents:
diff changeset
    86
    
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    87
    @lazy_load
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    88
    def thumb_dir (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    89
        """
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    90
            Load and return the Directory used for thumb Thumbnails
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    91
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    92
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    93
        return self.subdir(self.config.thumb_dir, create=True)
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    94
   
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    95
    @lazy_load_iter
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    96
    def subnodes (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    97
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    98
            Load and return an ordered list of child-Nodes
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    99
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   100
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
   101
        return super(Folder, self).subnodes(skip_dotfiles=True, sort=True)
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   102
    
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   103
    @lazy_load_iter
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   104
    def subfolders (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   105
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   106
            Load and return an ordered list of sub-Folders
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   107
        """
90
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   108
        
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   109
        # filter out valid subfolders
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   110
        for node in self.subnodes :
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   111
            # skip non-dirs
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   112
            if not node.is_dir() :
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   113
                continue
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   114
90
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   115
            # skip the previews/thumbs dirs
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   116
            if node.name in (self.config.preview_dir, self.config.thumb_dir) :
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   117
                continue
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   118
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   119
            # ok
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   120
            yield Folder(node)
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   121
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   122
    @lazy_load_iter
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   123
    def images (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   124
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   125
            Load and return an ordered/linked list of sub-Images
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   126
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   127
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   128
        prev = None
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   129
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   130
        for node in self.subnodes :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   131
            # skip non-relevant ones
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
   132
            if not node.is_file() or not self.config.is_image(filesystem.File(node)) :
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   133
                continue
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   134
            
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   135
            # create new
77
2a53c5ade434 misc. fixes, it runs now, but HTML output is corrupt (no flattening)
Tero Marttila <terom@fixme.fi>
parents: 76
diff changeset
   136
            img = image.Image(node)
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   137
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   138
            # link up
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   139
            if prev :
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
   140
                img.prev = prev
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   141
                prev.next = img
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   142
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   143
                # yield the linked-up prev
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   144
                yield prev
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   145
            
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   146
            # continue
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   147
            prev = img
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   148
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   149
        # and the last one
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   150
        if prev :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   151
            yield prev
132
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   152
    
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   153
    @lazy_load
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   154
    def empty (self) :
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   155
        """
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   156
            A Folder is empty if it does not contain any Images, and all of its sub-Folders (if any) are also empty.
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   157
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   158
            This is implemented recursively.
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   159
        """
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   160
        
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   161
        # simple logic, my dear friend Watson
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   162
        return not self.images and all(subfolder.empty for subfolder in self.subfolders)
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   163
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   164
    @property
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   165
    def page_count (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   166
        """
131
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   167
            Returns the number of pages needed to show this folder's images or subfolders. May be zero, one or more.
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   168
        """
131
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   169
        
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   170
        if self.images :
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   171
            return int(math.ceil(len(self.images) / float(self.config.images_per_page)))
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   172
        
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   173
        elif self.subfolders :
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   174
            # paginate these?
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   175
            return 1
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   176
131
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   177
        else :
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   178
            # nothing to render, really
7021d949222c fix commands.main to render HTML for folders that only have subfolders, and no direct images
Tero Marttila <terom@fixme.fi>
parents: 119
diff changeset
   179
            return 0
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   180
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   181
    def images_for_page (self, page) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   182
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   183
            Returns the list of Images to be displayed for the given page, if any
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   184
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   185
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   186
        # offset to first image
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   187
        offset = page * self.config.images_per_page
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   188
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   189
        # slice
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   190
        return self.images[offset : offset + self.config.images_per_page]
119
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   191
    
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   192
    @property
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   193
    def html (self) :
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   194
        """
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   195
            Path to default page
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   196
        """
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   197
119
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   198
        return self.html_page()
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   199
    
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   200
    def html_page (self, page=0) :
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   201
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   202
            Returns the File representing the .html for the given page
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   203
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   204
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   205
        if page :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   206
            return self.subfile("index_%d.html" % page)
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   207
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   208
        else :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   209
            return self.subfile("index.html")
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   210
    
85
7da934333469 move thumbnail rendering from render.py to thumbnail.py, and implement staleness checking for Images, plus index_images for Folder
Tero Marttila <terom@fixme.fi>
parents: 77
diff changeset
   211
    def index_images (self, for_update=True) :
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   212
        """
85
7da934333469 move thumbnail rendering from render.py to thumbnail.py, and implement staleness checking for Images, plus index_images for Folder
Tero Marttila <terom@fixme.fi>
parents: 77
diff changeset
   213
            Return a series of Images inside of this folder.
70
67dd32adf159 remove old Folder, Image code, wrap up both
Tero Marttila <terom@fixme.fi>
parents: 64
diff changeset
   214
85
7da934333469 move thumbnail rendering from render.py to thumbnail.py, and implement staleness checking for Images, plus index_images for Folder
Tero Marttila <terom@fixme.fi>
parents: 77
diff changeset
   215
            If `for_update` is given, only images that are stale will be returned.
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   216
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   217
        
85
7da934333469 move thumbnail rendering from render.py to thumbnail.py, and implement staleness checking for Images, plus index_images for Folder
Tero Marttila <terom@fixme.fi>
parents: 77
diff changeset
   218
        for image in self.images :
7da934333469 move thumbnail rendering from render.py to thumbnail.py, and implement staleness checking for Images, plus index_images for Folder
Tero Marttila <terom@fixme.fi>
parents: 77
diff changeset
   219
            if for_update and not image.stale() :
7da934333469 move thumbnail rendering from render.py to thumbnail.py, and implement staleness checking for Images, plus index_images for Folder
Tero Marttila <terom@fixme.fi>
parents: 77
diff changeset
   220
                # skip 
7da934333469 move thumbnail rendering from render.py to thumbnail.py, and implement staleness checking for Images, plus index_images for Folder
Tero Marttila <terom@fixme.fi>
parents: 77
diff changeset
   221
                continue
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   222
85
7da934333469 move thumbnail rendering from render.py to thumbnail.py, and implement staleness checking for Images, plus index_images for Folder
Tero Marttila <terom@fixme.fi>
parents: 77
diff changeset
   223
            yield image
7da934333469 move thumbnail rendering from render.py to thumbnail.py, and implement staleness checking for Images, plus index_images for Folder
Tero Marttila <terom@fixme.fi>
parents: 77
diff changeset
   224