aboutsummaryrefslogtreecommitdiffstats
path: root/tagit/widgets
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2023-02-03 17:24:40 +0100
committerMatthias Baumgartner <dev@igsor.net>2023-02-03 17:24:40 +0100
commite4b98fb261c83588ca1151a1c3f8891965051b2f (patch)
tree23fc90186db6acab73c1b91dc2c21b044bd5628e /tagit/widgets
parent7bb4c0f40c8666ef94a4dcf7fdf03a9058b64a8e (diff)
downloadtagit-e4b98fb261c83588ca1151a1c3f8891965051b2f.tar.gz
tagit-e4b98fb261c83588ca1151a1c3f8891965051b2f.tar.bz2
tagit-e4b98fb261c83588ca1151a1c3f8891965051b2f.zip
previews in browser
Diffstat (limited to 'tagit/widgets')
-rw-r--r--tagit/widgets/browser.py59
1 files changed, 37 insertions, 22 deletions
diff --git a/tagit/widgets/browser.py b/tagit/widgets/browser.py
index 0cc65f6..4a254ee 100644
--- a/tagit/widgets/browser.py
+++ b/tagit/widgets/browser.py
@@ -26,7 +26,7 @@ import kivy.properties as kp
# tagit imports
from tagit import config
from tagit.external.setproperty import SetProperty
-from tagit.utils import Frame, Resolution, Struct, clamp, ns, ttime
+from tagit.utils import Frame, Resolution, Struct, clamp, ns, ttime, rmatcher
from tagit.utils.bsfs import ast
# inner-module imports
@@ -394,26 +394,39 @@ class Browser(GridLayout, StorageAwareMixin, ConfigAwareMixin):
for _ in range(self.page_size - len(items)):
next(childs).clear()
- # load previews for items
- # FIXME: Only relevant items, not all of them
- #thumbs = items.preview(default=open(resource_find('no_preview.png'), 'rb')) # FIXME: mb/port
- #resolution = self._cell_resolution() # FIXME: mb/port
- #for ent, thumb, child in zip(reversed(items), reversed(thumbs), childs): # FIXME: mb/port
+ if len(items) == 0: # FIXME: mb/port
+ return
+
+ # fetch previews
+ node_preview = reduce(operator.add, items).get(ns.bse.preview, node=True)
+ previews = {p for previews in node_preview.values() for p in previews}
+ previews = reduce(operator.add, previews)
+ # fetch preview resolutions
+ res_preview = previews.get(ns.bsp.width, ns.bsp.height, node=True)
+ # get target resolution
+ resolution = self._cell_resolution()
+ # get default preview
+ default = resource_find('no_preview.png')
+ # select a preview for each item
for ent, child in zip(reversed(items), childs):
- # FIXME: default/no preview handling
- #thumb = best_resolution_match(thumb, resolution) # FIXME: mb/port
- #child.update(ent, thumb, f'{ent.guid}x{resolution}') # FIXME: mb/port
- thumb = open(resource_find('no_preview.png'), 'rb')
- child.update(ent, thumb, f'{ent}x{1234}')
-
- # load previews for items
- #resolution = self._cell_resolution()
- #for obj, child in zip(reversed(items), childs):
- # try:
- # thumb = obj.get('preview').best_match(resolution)
- # except PredicateNotSet:
- # thumb = open(resource_find('no_preview.png'), 'rb')
- # child.update(obj, thumb, f'{obj.guid}x{resolution}')
+ try:
+ # get previews and their resolution for this ent
+ options = []
+ for preview in node_preview[ent]:
+ # unpack resolution
+ res = res_preview[preview]
+ width = res.get(ns.bsp.width, 0)
+ height = res.get(ns.bsp.height, 0)
+ options.append((preview, Resolution(width, height)))
+ # select the best fitting preview
+ chosen = rmatcher.by_area_min(resolution, options)
+ # open the preview file, default if no asset is available
+ thumb = open(chosen.get(ns.bsp.asset, default=default), 'rb') # FIXME: mb/port: asset storage
+ except IndexError:
+ # no viable resolution found
+ thumb = open(default, 'rb')
+ # update the image in the child widget
+ child.update(ent, thumb, f'{ent}x{resolution}')
#def _preload_all(self):
# # prefer loading from start to end
@@ -517,7 +530,8 @@ class BrowserItem(RelativeLayout):
class BrowserImage(BrowserItem):
def update(self, obj, buffer, source):
super(BrowserImage, self).update(obj)
- self.preview.load_image(buffer, source, obj.orientation(default=1))
+ self.preview.load_image(buffer, source, 1)
+ #self.preview.load_image(buffer, source, obj.orientation(default=1)) # FIXME: mb/port
self.preview.set_size(self.size)
@@ -534,7 +548,8 @@ class BrowserDescription(BrowserItem):
def update(self, obj, buffer, source):
super(BrowserDescription, self).update(obj)
- self.preview.load_image(buffer, source, obj.orientation(default=1))
+ self.preview.load_image(buffer, source, 1)
+ #self.preview.load_image(buffer, source, obj.orientation(default=1)) # FIXME: mb/port
self.preview.set_size((self.height, self.height))
def clear(self):