Skip to content

Commit

Permalink
Added thumbnail parsing for simple files view
Browse files Browse the repository at this point in the history
  • Loading branch information
Michal Zoubek authored and TojikCZ committed Oct 26, 2023
1 parent 18be594 commit 27e7859
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 15 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/python-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ jobs:
pip install pylint~=2.17.7
pip install -U ruff pytest pytest-doctestplus pytest-pylint pytest-mypy mock
pip install -U types-pkg_resources
pip install --force-reinstall git+https://github.com/prusa3d/prusa-connect-sdk-printer.git
pip install --force-reinstall git+https://github.com/prusa3d/gcode-metadata.git
- name: Lint with ruff
run: |
ruff check .
Expand Down
22 changes: 12 additions & 10 deletions prusa/link/web/files_legacy.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
from shutil import move, rmtree

import validators # type: ignore
from gcode_metadata import FDMMetaData, get_metadata
from gcode_metadata import FDMMetaData, get_metadata, get_preview
from poorwsgi import state
from poorwsgi.request import FieldStorage
from poorwsgi.response import FileResponse, JSONResponse, Response
Expand Down Expand Up @@ -298,7 +298,7 @@ def api_file_info(req, storage, path):
meta.load_from_path(path)
else:
meta = get_metadata(os_path)
result['refs'] = local_refs(path)
result['refs'] = local_refs(path, meta)
if not meta.thumbnails:
result['refs']['thumbnail'] = None

Expand Down Expand Up @@ -492,9 +492,9 @@ def api_download_abort(req):
return Response(status_code=state.HTTP_NO_CONTENT)


@app.route('/api/thumbnails/<path:re:.+>.orig.png')
@app.route('/api/thumbnails/<path:re:.+>.orig.<wanted_format:re:.{1,5}>')
@check_api_digest
def api_thumbnails(req, path):
def api_thumbnails(req, path, wanted_format):
"""Returns preview from cache file."""
# pylint: disable=unused-argument
headers = {'Cache-Control': 'private, max-age=604800'}
Expand All @@ -508,9 +508,11 @@ def api_thumbnails(req, path):
if not meta.thumbnails:
raise conditions.ThumbnailUnavailable()

biggest = b''
for data in meta.thumbnails.values():
if len(data) > len(biggest):
biggest = data
return Response(decodebytes(biggest), headers=headers,
content_type="image/png")
info = get_preview(meta.thumbnails)
img_format = info.format.lower()
if wanted_format.lower() != img_format:
raise conditions.ThumbnailUnavailable()

data = meta.thumbnails[info.to_thumbnail_info()]
return Response(decodebytes(data), headers=headers,
content_type=f"image/{img_format}")
26 changes: 21 additions & 5 deletions prusa/link/web/lib/files.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,12 @@
from os.path import abspath, dirname, exists, join
from time import sleep, time

from gcode_metadata import FDMMetaData, estimated_to_seconds, get_metadata
from gcode_metadata import (
FDMMetaData,
estimated_to_seconds,
get_metadata,
get_preview,
)
from poorwsgi.request import Headers, Request

from prusa.connect.printer import Filesystem
Expand Down Expand Up @@ -67,12 +72,19 @@ def sdcard_simple_refs():
}


def local_refs(path: str):
def local_refs(path: str, meta: FDMMetaData):
"""Make refs structure for print file on local storage."""
thumbnail = None

info = get_preview(meta.thumbnails)

if info is not None:
img_format = info.format.lower()
thumbnail = f"/api/thumbnails{path}.orig.{img_format}"
return {
'download': f"/api/files/local{path}/raw",
'icon': None,
'thumbnail': f"/api/thumbnails{path}.orig.png",
'thumbnail': thumbnail,
}


Expand Down Expand Up @@ -124,7 +136,11 @@ def fill_printfile_data(path: str, os_path: str, storage: str,

# local
if storage == "local":
result['refs'] = local_refs(path)
meta = FDMMetaData(os_path or path)

if os_path and meta.is_cache_fresh():
meta.load_cache()
result['refs'] = local_refs(path, meta)
if simple:
return result
meta = FDMMetaData(os_path)
Expand Down Expand Up @@ -240,7 +256,7 @@ def file_to_api(node, origin: str = 'local', path: str = '/',
os_path = get_os_path(path)
if os_path and meta.is_cache_fresh():
meta.load_cache()
result['refs'] = local_refs(path)
result['refs'] = local_refs(path, meta)
if not meta.thumbnails:
result['refs']['thumbnail'] = None

Expand Down

0 comments on commit 27e7859

Please sign in to comment.