Files
movies-diary/crates/adapters/template-askama/templates/profile_settings.html
Gabriel Kaszewski aadad3cfb0
Some checks failed
CI / Check / Test (push) Failing after 6m5s
feat: Jellyfin/Plex auto-import via watch queue
Webhook ingestion from media servers — movies land in a pending
watch queue, user rates and confirms to create diary entries.

- domain: WatchEvent, WebhookToken models, MediaServerParser port
- adapters: jellyfin + plex parser crates, SQLite + Postgres repos
- application: ingest/confirm/dismiss/cleanup use cases, token mgmt
- presentation: webhook endpoints (bearer + query param auth),
  watch queue + integrations settings HTML pages, OpenAPI docs
- worker: WatchEventCleanupJob (daily, 30d retention)

Movie resolution deferred to confirm — single canonical path
through log_review for enrichment, poster fetch, federation.
2026-06-02 17:34:16 +02:00

60 lines
1.8 KiB
HTML

{% extends "base.html" %}
{% block content %}
<h1>Profile Settings</h1>
<p style="font-size:.85em;opacity:.7;margin-bottom:1rem">
<a href="/settings/integrations">Integrations (Jellyfin/Plex)</a>
</p>
{% if saved %}
<p class="success">Saved.</p>
{% endif %}
<form method="post" action="/settings/profile" enctype="multipart/form-data">
<input type="hidden" name="_csrf" value="{{ ctx.csrf_token }}">
<label>
Bio<br>
<textarea name="bio">{% if let Some(b) = bio %}{{ b }}{% endif %}</textarea>
</label>
<label>
Also known as (actor URL for account migration)<br>
<input type="text" name="also_known_as" value="{% if let Some(v) = also_known_as %}{{ v }}{% endif %}">
</label>
{% if let Some(url) = avatar_url %}
<div>
<p>Current avatar:</p>
<img src="{{ url }}" alt="Current avatar" style="max-width:128px;max-height:128px;">
</div>
{% endif %}
<label>
Avatar image<br>
<input type="file" name="avatar" accept="image/jpeg,image/png,image/webp">
</label>
{% if let Some(url) = banner_url %}
<div>
<p>Current banner:</p>
<img src="{{ url }}" alt="Current banner" style="max-width:600px;max-height:200px;">
</div>
{% endif %}
<label>
Banner image<br>
<input type="file" name="banner" accept="image/jpeg,image/png,image/webp">
</label>
<fieldset>
<legend>Profile fields (max 4)</legend>
{% for i in 0..4usize %}
<div>
<input type="text" name="field_name_{{ i }}" placeholder="Label"
value="{% if let Some((n, _)) = profile_fields.get(*i) %}{{ n }}{% endif %}">
<input type="text" name="field_value_{{ i }}" placeholder="Value"
value="{% if let Some((_, v)) = profile_fields.get(*i) %}{{ v }}{% endif %}">
</div>
{% endfor %}
</fieldset>
<button type="submit">Save</button>
</form>
{% endblock %}