degal/folder.py
author Tero Marttila <terom@fixme.fi>
Wed, 17 Jun 2009 18:08:49 +0300
changeset 133 0c1c092bbc5d
parent 132 c2b2f4b6fe6d
child 138 130fb8a8dbb9
permissions -rw-r--r--
slight doc tweaks for Folder
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.
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    16
            * can load custom configuration for itself and sub-nodes to override the base config
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
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    24
        """
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    25
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
        yield self.subfile('degal.cfg')
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
        yield self.subdir('.degal').subfile('cfg')
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
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
    29
    def __init__ (self, *args, **kwargs) :
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
    30
        super(Folder, self).__init__(*args, **kwargs)
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
    31
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
    32
        # find config
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    33
        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
    34
            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
    35
                # 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
    36
                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
    37
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    38
                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
    39
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    40
        # 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
    41
        if self.config and self.config.title :
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    42
            # 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
    43
            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
    44
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
            # 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
    46
            # 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
    47
            self.config.title = 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
    48
    
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
    @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
    50
    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
    51
        """
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    52
            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
    53
        """
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    54
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
        # 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
    56
        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
    57
    
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
    @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
    59
    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
    60
        """
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
            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
    62
        """
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
60b126ff0b74 configuration magic - can now load configuration data from ./degal.cfg, --config, folder/degal.cfg
Tero Marttila <terom@fixme.fi>
parents: 99
diff changeset
    64
        # 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
    65
        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
    66
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    67
    @lazy_load
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    68
    def preview_dir (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    69
        """
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    70
            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
    71
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    72
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    73
        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
    74
    
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    75
    @lazy_load
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    76
    def thumb_dir (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    77
        """
133
0c1c092bbc5d slight doc tweaks for Folder
Tero Marttila <terom@fixme.fi>
parents: 132
diff changeset
    78
            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
    79
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    80
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    81
        return self.subdir(self.config.thumb_dir, create=True)
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    82
   
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    83
    @lazy_load_iter
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    84
    def subnodes (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    85
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    86
            Load and return an ordered list of child-Nodes
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    87
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    88
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
    89
        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
    90
    
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    91
    @lazy_load_iter
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    92
    def subfolders (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    93
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    94
            Load and return an ordered list of sub-Folders
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    95
        """
90
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
    96
        
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
    97
        # filter out valid subfolders
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
    98
        for node in self.subnodes :
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
    99
            # skip non-dirs
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   100
            if not node.is_dir() :
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   101
                continue
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   102
90
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   103
            # skip the previews/thumbs dirs
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   104
            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
   105
                continue
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   106
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   107
            # ok
606bae04f79b fix Folder.subdirs
Tero Marttila <terom@fixme.fi>
parents: 85
diff changeset
   108
            yield Folder(node)
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   109
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   110
    @lazy_load_iter
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   111
    def images (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   112
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   113
            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
   114
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   115
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   116
        prev = None
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   117
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   118
        for node in self.subnodes :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   119
            # skip non-relevant ones
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
   120
            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
   121
                continue
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   122
            
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   123
            # 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
   124
            img = image.Image(node)
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   125
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   126
            # link up
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   127
            if prev :
76
e22d9f699081 misc. fixes
Tero Marttila <terom@fixme.fi>
parents: 70
diff changeset
   128
                img.prev = prev
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   129
                prev.next = img
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   130
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   131
                # yield the linked-up prev
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   132
                yield prev
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   133
            
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   134
            # continue
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   135
            prev = img
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   136
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   137
        # and the last one
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   138
        if prev :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   139
            yield prev
132
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   140
    
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   141
    @lazy_load
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   142
    def empty (self) :
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   143
        """
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   144
            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
   145
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   146
            This is implemented recursively.
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   147
        """
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   148
        
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   149
        # simple logic, my dear friend Watson
c2b2f4b6fe6d clear up commands.main logic a bit
Tero Marttila <terom@fixme.fi>
parents: 131
diff changeset
   150
        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
   151
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   152
    @property
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   153
    def page_count (self) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   154
        """
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
   155
            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
   156
        """
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
   157
        
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
   158
        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
   159
            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
   160
        
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
   161
        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
   162
            # 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
   163
            return 1
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   164
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
   165
        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
   166
            # 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
   167
            return 0
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   168
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   169
    def images_for_page (self, page) :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   170
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   171
            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
   172
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   173
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   174
        # offset to first image
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   175
        offset = page * self.config.images_per_page
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   176
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   177
        # slice
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   178
        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
   179
    
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   180
    @property
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   181
    def html (self) :
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   182
        """
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   183
            Path to default page
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   184
        """
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   185
119
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   186
        return self.html_page()
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   187
    
e7855eefb4c7 fix breadcrumb/title stuff
Tero Marttila <terom@fixme.fi>
parents: 118
diff changeset
   188
    def html_page (self, page=0) :
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   189
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   190
            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
   191
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   192
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   193
        if page :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   194
            return self.subfile("index_%d.html" % page)
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   195
        
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   196
        else :
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   197
            return self.subfile("index.html")
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   198
    
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
   199
    def index_images (self, for_update=True) :
64
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   200
        """
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
   201
            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
   202
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
   203
            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
   204
        """
4ebd563214d2 begin implementation of folder, gallery
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   205
        
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
   206
        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
   207
            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
   208
                # 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
   209
                continue
64
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
            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
   212