core: simplify code

This commit is contained in:
starnakin 2025-04-15 14:41:06 +02:00
parent e27bfe74ea
commit 196ae57b2c
6 changed files with 61 additions and 43 deletions

View File

@ -19,14 +19,14 @@ def scan_pages(folders: list[Path]) -> list[Page]:
for folder in folders:
files: list[Path] = folder.get_files()
page: Page = Page(folder.get_absolute_path(), folder.get_name(), None, prev, None)
page: Page = Page(folder.get_absolute_path(), folder.get_name(), prev=prev)
raw: Path = Path(folder.get_absolute_path(), folder.get_name() + ".NEF")
images: list[Path] = [Picture(file, page=prev, raw=raw) for file in files if file.get_name().endswith(".png")]
for file in files:
if file.get_name().endswith(".png"):
page.add_picture(Picture(file, page=prev, raw=raw))
page.images = images
if len(images) == 0:
if len(page.get_picture()) == 0:
bar.next()
continue

View File

@ -17,17 +17,23 @@ page_template = env.get_template('page.jinja')
class Page():
def __init__(self, path: Path, name: str, images: list[Picture], prev: Page|None, next: Page|None):
def __init__(self, path: Path, name: str, pictures: list[Picture] = None, prev: Page|None = None, next: Page|None = None):
self.name: str = name
self.path: Path = path
self.images: list[Picture] = images
self._exif: Path = Path(self.path, "exif.txt")
self._readme: Path = Path(self.path, "readme.md")
self._raw: Path = Path(self.path, name + ".NEF")
self.html: Path = Path(self.path, "page.html")
self._path: Path = path
self._pictures: list[Picture] = [] if pictures is None else pictures
self._exif: Path = Path(self._path, "exif.txt")
self._readme: Path = Path(self._path, "readme.md")
self._raw: Path = Path(self._path, name + ".NEF")
self.html: Path = Path(self._path, "page.html")
self.prev: Page = prev
self.next: Page = next
def add_picture(self, picture: Picture) -> None:
self._pictures.append(picture)
def get_picture(self) -> list[Picture]:
return self._pictures
def _render_raw(self):
if not self._raw.exist():
return None
@ -44,7 +50,8 @@ class Page():
return f"../{self.next.name}/page.html"
def _to_html(self) -> str|None:
html_rendered = page_template.render(exif=self._render_exif(), raw=self._render_raw(), images=self._render_images(), readme=self._render_readme(), prev=self._render_prev(), next=self._render_next())
print(self._pictures)
html_rendered = page_template.render(page=self)
return html_rendered
def create(self) -> Path:
@ -60,9 +67,6 @@ class Page():
html = markdown.markdown(text)
return html
def _render_images(self):
return [image.render() for image in self.images]
def _gen_exif(self):
if self._raw.exist():
if os.system(f"exiftool {self._raw.get_absolute_path()} > {self._exif.get_absolute_path()} 2>/dev/null") == 0:

View File

@ -11,6 +11,9 @@ class Path():
self._name: str = os.path.basename(self._absolute_path)
self._dirpath: str = os.path.dirname(self._absolute_path)
def __str__(self) -> str:
return self._name
def get_dirpath(self):
return self._dirpath

View File

@ -1,3 +1,5 @@
from __future__ import annotations
from PIL import Image
import os
@ -7,22 +9,31 @@ from typing import TYPE_CHECKING
if TYPE_CHECKING:
from page import Page
from album import Album
class Picture():
def __init__(self, picture_path: Path, page = None, raw: Path|None = None):
self.large: Path = picture_path
self.small: Path = Path(picture_path.get_dirpath(), picture_path.get_name()[:-4] + "_small.jpg")
self.export_file: Path = Path(picture_path, ".out.pp3")
self.raw: Path|None = raw
self.page: Page = page
def __init__(self, picture_path: Path, page = None, raw: Path|None = None, albums: list[Album] = [], is_repertoried: bool = True):
self._large: Path = picture_path
self._small: Path = Path(picture_path.get_absolute_path()[:-4] + "_small.jpg")
self._export_file: Path = Path(picture_path.get_absolute_path() + ".out.pp3")
self._raw: Path|None = raw
self._page: Page = page
self._albums: list[Album] = albums
self._is_reperoried: bool = is_repertoried
def render(self) -> tuple[str, str, str]:
if not self.small.exist():
def get_small(self):
if not self._small.exist():
self.gen_small()
return self.large.get_name(), self.small.get_name(), self.export_file.get_name() if self.export_file.exist() else None
return self._small
def get_large(self):
return self._large
def get_export_file(self):
return self._export_file
def gen_small(self):
im = Image.open(self.large.get_absolute_path()).convert("RGB")
im.save(self.small.get_absolute_path(), quality=95, optimize=True)
im.save(self._small.get_absolute_path(), quality=95, optimize=True)

View File

@ -25,11 +25,11 @@ body * {
width: 100%;
}
.image-container {
.picture-container {
margin-top: 10px;
}
.image-container-element {
.picture-container-element {
margin-top: 0px;
}
@ -57,7 +57,7 @@ body * {
}
.navigation,
.meta-image {
.meta-picture {
display: flex;
flex-direction: row;
justify-content: space-between;

View File

@ -7,28 +7,28 @@
<body>
<div class="navigation">
{% if prev %}
<a href={{ prev }}>Prev</a>
{% if page.prev %}
<a href="../{{ page.prev.name }}/page.html">Prev</a>
{% endif %}
{% if next %}
<a class="next" href={{ next }}>Next</a>
{% if page.next %}
<a class="next" href="../{{ page.next.name }}/page.html">Next</a>
{% endif %}
</div>
{% if readme %}
{% if page._readme.exist() %}
<div class="readme">
<div class="readme-content">
{{readme}}
{{page._render_readme()}}
</div>
</div>
{% endif %}
{% for image in images %}
<div class="image-container">
<div class="image-container-element">
<img src='{{ image[1] }}'>
<div class="meta-image">
<a href="{{ image[0] }}">Large</a>
{% if image|length > 2 %}
<a class="export" href="{{ image[2] }}">export file</a>
{% for picture in page._pictures %}
<div class="picture-container">
<div class="picture-container-element">
<img src='{{ picture.get_small().get_name() }}'>
<div class="meta-picture">
<a href="{{ picture._large }}">Large</a>
{% if picture._export_file.exist() %}
<a class="export" href="{{ picture._export_file }}">export file</a>
{% endif %}
</div>
</div>