annotate libervia/pages/files/list/page_meta.py @ 1346:cda5537c71d6

browser (photos/album): videos integrations: videos can now be added to an album, the alternative media player is then used to display them. Slides options are used to remove pagination and slidebar from slideshow (they don't play well with media player), and video are reset when its slide is exited.
author Goffi <goffi@goffi.org>
date Tue, 25 Aug 2020 08:31:56 +0200
parents 089742e065e3
children 886d1856e9de
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
1 #!/usr/bin/env python3
1239
f511f8fbbf8a fixed shebangs
Goffi <goffi@goffi.org>
parents: 1216
diff changeset
2
1290
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
3 import json
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
4 import os
1313
12aa95eeb409 pages (files/list): set `directory_affiliation` template data:
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
5 from pathlib import Path
1290
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
6 from sat.core.log import getLogger
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
7 from sat.tools.common import uri
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
8 from sat_frontends.bridge.bridge_frontend import BridgeException
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 from libervia.server.constants import Const as C
1067
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
10 from libervia.server import session_iface
1069
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
11 from libervia.server import pages_tools
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
12
1145
29eb15062416 pages: set __name__ for imported pages
Goffi <goffi@goffi.org>
parents: 1124
diff changeset
13 log = getLogger(__name__)
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 """files handling pages"""
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
16 name = "files_list"
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 access = C.PAGES_ACCESS_PROFILE
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
18 template = "file/overview.html"
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
20
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
21 def parse_url(self, request):
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
22 self.getPathArgs(request, ["service", "*path"], min_args=1, service="jid", path="")
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
23
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
24
1290
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
25 async def prepare_render(self, request):
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
26 data = self.getRData(request)
1326
089742e065e3 pages (files/list, photos/album): updated thumbnails size limits
Goffi <goffi@goffi.org>
parents: 1325
diff changeset
27 thumb_limit = data.get("thumb_limit", 400)
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 template_data = request.template_data
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
29 service, path_elts = data["service"], data["path"]
1313
12aa95eeb409 pages (files/list): set `directory_affiliation` template data:
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
30 path = Path('/', *path_elts)
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
31 profile = self.getProfile(request) or C.SERVICE_PROFILE
1316
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
32 session_data = self.host.getSessionData(
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
33 request, session_iface.ISATSession
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
34 )
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
35
1290
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
36 try:
1313
12aa95eeb409 pages (files/list): set `directory_affiliation` template data:
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
37 files_data = await self.host.bridgeCall(
12aa95eeb409 pages (files/list): set `directory_affiliation` template data:
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
38 "FISList", service.full(), str(path), {}, profile)
1290
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
39 except BridgeException as e:
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
40 if e.condition == 'item-not-found':
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
41 log.debug(
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
42 f'"item-not-found" received for {path} at {service}, this may indicate '
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
43 f'that the location is new')
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
44 files_data = []
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
45 else:
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
46 raise e
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
47 for file_data in files_data:
1067
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
48 try:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
49 extra_raw = file_data["extra"]
1067
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
50 except KeyError:
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
51 pass
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
52 else:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
53 file_data["extra"] = json.loads(extra_raw) if extra_raw else {}
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
54 dir_path = path_elts + [file_data["name"]]
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
55 if file_data["type"] == C.FILE_TYPE_DIRECTORY:
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
56 page = self
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
57 elif file_data["type"] == C.FILE_TYPE_FILE:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
58 page = self.getPageByName("files_view")
1069
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
59
1325
009542289bc9 pages (files/list): removed/updated code to download thumbnails and sort them as it is now done by the backend
Goffi <goffi@goffi.org>
parents: 1316
diff changeset
60 # we set URL for the last thumbnail which has a size below thumb_limit
1067
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
61 try:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
62 thumbnails = file_data["extra"]["thumbnails"]
1067
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
63 thumb = thumbnails[0]
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
64 for thumb_data in thumbnails:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
65 if thumb_data["size"][0] > thumb_limit:
1067
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
66 break
808ec98de8b3 pages (files/list): retrieve thumbnail:
Goffi <goffi@goffi.org>
parents: 1064
diff changeset
67 thumb = thumb_data
1325
009542289bc9 pages (files/list): removed/updated code to download thumbnails and sort them as it is now done by the backend
Goffi <goffi@goffi.org>
parents: 1316
diff changeset
68 file_data["thumb_url"] = (
009542289bc9 pages (files/list): removed/updated code to download thumbnails and sort them as it is now done by the backend
Goffi <goffi@goffi.org>
parents: 1316
diff changeset
69 thumb.get("url")
009542289bc9 pages (files/list): removed/updated code to download thumbnails and sort them as it is now done by the backend
Goffi <goffi@goffi.org>
parents: 1316
diff changeset
70 or os.path.join(session_data.cache_dir, thumb["filename"])
009542289bc9 pages (files/list): removed/updated code to download thumbnails and sort them as it is now done by the backend
Goffi <goffi@goffi.org>
parents: 1316
diff changeset
71 )
009542289bc9 pages (files/list): removed/updated code to download thumbnails and sort them as it is now done by the backend
Goffi <goffi@goffi.org>
parents: 1316
diff changeset
72 except (KeyError, IndexError):
009542289bc9 pages (files/list): removed/updated code to download thumbnails and sort them as it is now done by the backend
Goffi <goffi@goffi.org>
parents: 1316
diff changeset
73 pass
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
74 else:
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
75 raise ValueError(
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
76 "unexpected file type: {file_type}".format(file_type=file_data["type"])
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
77 )
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
78 file_data["url"] = page.getURL(service.full(), *dir_path)
1069
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
79
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
80 ## comments ##
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
81 comments_url = file_data.get("comments_url")
1069
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
82 if comments_url:
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
83 parsed_url = uri.parseXMPPUri(comments_url)
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
84 comments_service = file_data["comments_service"] = parsed_url["path"]
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
85 comments_node = file_data["comments_node"] = parsed_url["node"]
1069
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
86 try:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
87 comments_count = file_data["comments_count"] = int(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
88 file_data["comments_count"]
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
89 )
1069
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
90 except KeyError:
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
91 comments_count = None
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
92 if comments_count and data.get("retrieve_comments", False):
1290
ee984eefc787 pages (files/list): return empty list of files when `item-not-found` is received
Goffi <goffi@goffi.org>
parents: 1289
diff changeset
93 file_data["comments"] = await pages_tools.retrieveComments(
1113
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
94 self, comments_service, comments_node, profile=profile
cdd389ef97bc server: code style reformatting using black
Goffi <goffi@goffi.org>
parents: 1069
diff changeset
95 )
1069
2dab7692eae7 pages (files/list): comments handling + size parameters:
Goffi <goffi@goffi.org>
parents: 1067
diff changeset
96
1313
12aa95eeb409 pages (files/list): set `directory_affiliation` template data:
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
97 # parent dir affiliation
12aa95eeb409 pages (files/list): set `directory_affiliation` template data:
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
98 # TODO: some caching? What if affiliation changes?
12aa95eeb409 pages (files/list): set `directory_affiliation` template data:
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
99
1316
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
100 affiliations = await self.host.bridgeCall(
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
101 "FISAffiliationsGet", service.full(), "", str(path), profile
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
102 )
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
103 directory_affiliation = affiliations.get(session_data.jid.userhost())
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
104 if directory_affiliation == "owner":
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
105 # we need to transtype dict items to str because with some bridges (D-Bus)
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
106 # we have a specific type which can't be exposed
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
107 self.exposeToScripts(
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
108 request,
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
109 affiliations={str(e): str(a) for e, a in affiliations.items()}
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
110 )
1313
12aa95eeb409 pages (files/list): set `directory_affiliation` template data:
Goffi <goffi@goffi.org>
parents: 1290
diff changeset
111
1316
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
112 template_data["directory_affiliation"] = directory_affiliation
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
113 template_data["files_data"] = files_data
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
114 template_data["path"] = path
1316
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
115 self.exposeToScripts(
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
116 request,
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
117 directory_affiliation=str(directory_affiliation),
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
118 files_service=service.full(),
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
119 files_path=str(path),
d0575e9abf7d pages (files/list): use new `FISAffiliationsGet` to get `directory_affiliation`
Goffi <goffi@goffi.org>
parents: 1313
diff changeset
120 )
1064
abc5d545dbaa pages (files): files sharing first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
121 if path_elts:
1216
b2d067339de3 python 3 port:
Goffi <goffi@goffi.org>
parents: 1145
diff changeset
122 template_data["parent_url"] = self.getURL(service.full(), *path_elts[:-1])