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