degal/folder.py
changeset 76 e22d9f699081
parent 70 67dd32adf159
child 77 2a53c5ade434
equal deleted inserted replaced
75:18b3b1926720 76:e22d9f699081
     2     Per-directory gallery state
     2     Per-directory gallery state
     3 """
     3 """
     4 
     4 
     5 import filesystem, image, html
     5 import filesystem, image, html
     6 
     6 
     7 from utils import lazy_load
     7 from utils import lazy_load, lazy_load_iter
     8 
     8 
     9 class Folder (filesyste.Directory) :
     9 import math
       
    10 
       
    11 class Folder (filesystem.Directory) :
    10     """
    12     """
    11         A Folder is a filesystem Directory that contains any number of other Folders and Images.
    13         A Folder is a filesystem Directory that contains any number of other Folders and Images.
    12     """
    14     """
    13 
    15 
    14     def __init__ (self, node) :
    16     def __init__ (self, *args, **kwargs) :
    15         super(Folder, self).__init__(node)
    17         super(Folder, self).__init__(*args, **kwargs)
    16 
    18 
    17         # info
    19         # info
    18         self.title = None
    20         self.title = None
    19         self.description = None
    21         self.description = None
    20 
    22 
    38     def subnodes (self) :
    40     def subnodes (self) :
    39         """
    41         """
    40             Load and return an ordered list of child-Nodes
    42             Load and return an ordered list of child-Nodes
    41         """
    43         """
    42 
    44 
    43         return super(Folder, self).subnodes(skip_dotfiles=True, sorted=True)
    45         return super(Folder, self).subnodes(skip_dotfiles=True, sort=True)
    44     
    46     
    45     @lazy_load_iter
    47     @lazy_load_iter
    46     def subfolders (self) :
    48     def subfolders (self) :
    47         """
    49         """
    48             Load and return an ordered list of sub-Folders
    50             Load and return an ordered list of sub-Folders
    59         prev = None
    61         prev = None
    60 
    62 
    61         for node in self.subnodes :
    63         for node in self.subnodes :
    62             # skip non-relevant ones
    64             # skip non-relevant ones
    63             # XXX: node should need to be a File
    65             # XXX: node should need to be a File
    64             if not isinstance(node, filesystem.File) or not self.config.is_image(node) :
    66             if not node.is_file() or not self.config.is_image(filesystem.File(node)) :
    65                 continue
    67                 continue
    66             
    68             
    67             # create new
    69             # create new
    68             img = image.Image(node, prev)
    70             img = image.Image(node, prev)
    69 
    71 
    70             # link up
    72             # link up
    71             if prev :
    73             if prev :
       
    74                 img.prev = prev
    72                 prev.next = img
    75                 prev.next = img
    73 
    76 
    74                 # yield the linked-up prev
    77                 # yield the linked-up prev
    75                 yield prev
    78                 yield prev
    76             
    79             
    85     def page_count (self) :
    88     def page_count (self) :
    86         """
    89         """
    87             Returns the number of pages needed to show this folder's images
    90             Returns the number of pages needed to show this folder's images
    88         """
    91         """
    89 
    92 
    90         return math.ceil(len(self.images) / float(self.config.images_per_page))
    93         return int(math.ceil(len(self.images) / float(self.config.images_per_page)))
    91 
    94 
    92     def images_for_page (self, page) :
    95     def images_for_page (self, page) :
    93         """
    96         """
    94             Returns the list of Images to be displayed for the given page, if any
    97             Returns the list of Images to be displayed for the given page, if any
    95         """
    98         """