comparison src/pages/files/list/page_meta.py @ 1069:2dab7692eae7

pages (files/list): comments handling + size parameters: comments are now handled if comments_url is set. 2 new parameters allows some customization: data['size'] is the size hint to retrieve thumbnails data['retrieve_comments'] indicate if comments must be fetched if the count is > 0.
author Goffi <goffi@goffi.org>
date Sun, 18 Mar 2018 11:36:46 +0100
parents 808ec98de8b3
children cdd389ef97bc
comparison
equal deleted inserted replaced
1068:5e809a49971c 1069:2dab7692eae7
3 3
4 from libervia.server.constants import Const as C 4 from libervia.server.constants import Const as C
5 from sat.core.i18n import _ 5 from sat.core.i18n import _
6 from twisted.internet import defer 6 from twisted.internet import defer
7 from libervia.server import session_iface 7 from libervia.server import session_iface
8 from libervia.server import pages_tools
8 from sat.core.log import getLogger 9 from sat.core.log import getLogger
10 from sat.tools.common import uri
9 import json 11 import json
10 import os 12 import os
11 log = getLogger('pages/file') 13 log = getLogger('pages/files/list')
12 """files handling pages""" 14 """files handling pages"""
13 15
14 name = u'files' 16 name = u'files_list'
15 access = C.PAGES_ACCESS_PROFILE 17 access = C.PAGES_ACCESS_PROFILE
16 template = u"file/overview.html" 18 template = u"file/overview.html"
17 19
18 def parse_url(self, request): 20 def parse_url(self, request):
19 self.getPathArgs(request, ['service', '*path'], min_args=1, service='jid', path='') 21 self.getPathArgs(request, ['service', '*path'], min_args=1, service='jid', path='')
20 22
21 @defer.inlineCallbacks 23 @defer.inlineCallbacks
22 def prepare_render(self, request): 24 def prepare_render(self, request):
23 data = self.getRData(request) 25 data = self.getRData(request)
26 thumb_limit = data.get('thumb_limit', 300)
24 template_data = request.template_data 27 template_data = request.template_data
25 service, path_elts = data[u'service'], data[u'path'] 28 service, path_elts = data[u'service'], data[u'path']
26 path = u'/'.join(path_elts) 29 path = u'/'.join(path_elts)
27 profile = self.getProfile(request) or C.SERVICE_PROFILE 30 profile = self.getProfile(request) or C.SERVICE_PROFILE
28 31
37 dir_path = path_elts + [file_data['name']] 40 dir_path = path_elts + [file_data['name']]
38 if file_data[u'type'] == C.FILE_TYPE_DIRECTORY: 41 if file_data[u'type'] == C.FILE_TYPE_DIRECTORY:
39 page = self 42 page = self
40 elif file_data[u'type'] == C.FILE_TYPE_FILE: 43 elif file_data[u'type'] == C.FILE_TYPE_FILE:
41 page = self.getPageByName('files_view') 44 page = self.getPageByName('files_view')
45
46 ## thumbnails ##
42 try: 47 try:
43 thumbnails = file_data[u'extra']['thumbnails'] 48 thumbnails = file_data[u'extra']['thumbnails']
44 if not thumbnails: 49 if not thumbnails:
45 raise KeyError 50 raise KeyError
46 except KeyError: 51 except KeyError:
47 pass 52 pass
48 else: 53 else:
49 thumbnails.sort(key = lambda t: t['size']) 54 thumbnails.sort(key = lambda t: t['size'])
50 thumb = thumbnails[0] 55 thumb = thumbnails[0]
51 for thumb_data in thumbnails: 56 for thumb_data in thumbnails:
52 if thumb_data['size'][0] > 300: 57 if thumb_data['size'][0] > thumb_limit:
53 break 58 break
54 thumb = thumb_data 59 thumb = thumb_data
55 if u'url' in thumb: 60 if u'url' in thumb:
56 file_data['thumb_url'] = thumb['url'] 61 file_data['thumb_url'] = thumb['url']
57 elif u'id' in thumb: 62 elif u'id' in thumb:
64 session_data = self.host.getSessionData(request, session_iface.ISATSession) 69 session_data = self.host.getSessionData(request, session_iface.ISATSession)
65 file_data['thumb_url'] = os.path.join(session_data.cache_dir, filename) 70 file_data['thumb_url'] = os.path.join(session_data.cache_dir, filename)
66 else: 71 else:
67 raise ValueError(u'unexpected file type: {file_type}'.format(file_type=file_data[u'type'])) 72 raise ValueError(u'unexpected file type: {file_type}'.format(file_type=file_data[u'type']))
68 file_data[u'url'] = page.getURL(service.full(), *dir_path) 73 file_data[u'url'] = page.getURL(service.full(), *dir_path)
74
75 ## comments ##
76 comments_url = file_data.get(u'comments_url')
77 if comments_url:
78 parsed_url = uri.parseXMPPUri(comments_url)
79 comments_service = file_data[u'comments_service'] = parsed_url['path']
80 comments_node = file_data[u'comments_node'] = parsed_url['node']
81 try:
82 comments_count = file_data[u'comments_count'] = int(file_data['comments_count'])
83 except KeyError:
84 comments_count = None
85 if comments_count and data.get('retrieve_comments', False):
86 file_data[u'comments'] = yield pages_tools.retrieveComments(self,
87 comments_service,
88 comments_node,
89 profile=profile)
90
69 template_data[u'files_data'] = files_data 91 template_data[u'files_data'] = files_data
70 template_data[u'path'] = path 92 template_data[u'path'] = path
71 if path_elts: 93 if path_elts:
72 template_data[u'parent_url'] = self.getURL(service.full(), *path_elts[:-1]) 94 template_data[u'parent_url'] = self.getURL(service.full(), *path_elts[:-1])
73 95