diff --git a/authoring_server.py b/authoring_server.py index e3acfa3..50d8932 100755 --- a/authoring_server.py +++ b/authoring_server.py @@ -4,7 +4,6 @@ from __future__ import annotations import json -import mimetypes import os import posixpath import re @@ -60,7 +59,8 @@ ROOT = resolve_root() BLOGS_DIR = ROOT / "blogs" POSTS_DIR = ROOT / "posts" LIMA_DIR = ROOT / "lima" -HZONE_ASSETS_DIR = ROOT / "assets" / "images" / "hzone" +IMAGE_ASSETS_DIR = ROOT / "assets" / "images" +HZONE_ASSETS_DIR = IMAGE_ASSETS_DIR / "hzone" EXCLUDED_CONTENT_DIR_NAMES = { ".agents", ".codex", @@ -90,9 +90,6 @@ ALLOWED_UPLOAD_EXTENSIONS = { ".gif", ".webp", ".svg", - ".mp4", - ".webm", - ".mov", } MONTH_NAMES = [ "january", @@ -563,9 +560,7 @@ def image_dimensions(payload: bytes, ext: str) -> tuple[int, int] | None: def relative_asset_path(page_path: str, asset_path: str) -> str: - page = safe_relative_path(page_path) if page_path else LIMA_DIR / "index.md" - if page.suffix != ".md" or not page.is_relative_to(LIMA_DIR): - page = LIMA_DIR / "index.md" + page = safe_relative_path(page_path) if page_path else ROOT / "index.org" page_rel = page.relative_to(ROOT).as_posix() page_output_dir = posixpath.dirname(page_rel) return posixpath.relpath(asset_path, page_output_dir or ".") @@ -584,34 +579,49 @@ def gallery_image_html(filename: str, asset_path: str, page_path: str, payload: ) +def attachment_image_dir(page_path: str) -> Path: + page = safe_relative_path(page_path) if page_path else ROOT / "index.org" + if page.suffix == ".md" and page.is_relative_to(LIMA_DIR): + return HZONE_ASSETS_DIR + if page.is_relative_to(POSTS_DIR): + rel = page.relative_to(POSTS_DIR) + section = rel.parts[0] if len(rel.parts) > 1 else "posts" + return IMAGE_ASSETS_DIR / slugify(section) + if page.is_relative_to(BLOGS_DIR): + return IMAGE_ASSETS_DIR / "blogs" + rel = page.relative_to(ROOT) + if len(rel.parts) > 1: + return IMAGE_ASSETS_DIR / slugify(rel.parts[0]) + return IMAGE_ASSETS_DIR / "pages" + + def save_upload(filename: str, payload: bytes, page_path: str = "") -> dict[str, str]: original = Path(filename or "attachment").name ext = Path(original).suffix.lower() if ext not in ALLOWED_UPLOAD_EXTENSIONS: - raise ValueError("Only common image and video files can be uploaded.") + raise ValueError("Only common image files can be uploaded.") now = datetime.now() - target_dir = HZONE_ASSETS_DIR / f"{now.year}" / f"{now.month:02d}" + target_dir = attachment_image_dir(page_path) target_dir.mkdir(parents=True, exist_ok=True) stem = slugify(Path(original).stem) - target = target_dir / f"{now.strftime('%Y%m%d-%H%M%S')}-{stem}{ext}" + prefix = "" if re.match(r"^\d{4}-\d{2}-\d{2}-", stem) else f"{now.strftime('%Y-%m-%d')}-" + target = target_dir / f"{prefix}{stem}{ext}" counter = 2 while target.exists(): - target = target_dir / f"{now.strftime('%Y%m%d-%H%M%S')}-{stem}-{counter}{ext}" + target = target_dir / f"{prefix}{stem}-{counter}{ext}" counter += 1 target.write_bytes(payload) rel = target.relative_to(ROOT).as_posix() absolute_url = f"https://zainezq.com/{rel}" relative_url = relative_asset_path(page_path, rel) - mime = mimetypes.guess_type(target.name)[0] or "" - if mime.startswith("video/") or ext in {".mp4", ".webm", ".mov"}: - markdown = f'' - else: - markdown = f"![{target.name}]({relative_url})" + is_markdown = page_path.endswith(".md") + insert_text = f"![{target.name}]({relative_url})" if is_markdown else f"[[{relative_url}]]" return { "url": absolute_url, "relativeUrl": relative_url, "path": rel, - "markdown": markdown, + "markdown": insert_text, + "insertText": insert_text, "filename": target.name, } @@ -782,7 +792,7 @@ APP_HTML = r""" - +