diora-web/podcasts/urls.py

70 lines
5.2 KiB
Python
Raw Normal View History

from django.urls import path
from . import article, audiobooks, discover, folders, radio, transcription, views
urlpatterns = [
path('search/', views.podcast_search, name='podcast_search'),
path('feeds/', views.feed_list, name='podcast_feed_list'),
path('feeds/add/', views.add_feed, name='podcast_add_feed'),
path('feeds/import/', views.import_opml, name='podcast_import_opml'),
path('feeds/export.opml', views.export_opml, name='podcast_export_opml'),
path('feeds/refresh/', views.refresh_feed_now, name='podcast_refresh_feed'),
path('feeds/refresh-all/', views.refresh_all_feeds, name='podcast_refresh_all_feeds'),
path('state/', views.podcast_state, name='podcast_state'),
path('feeds/<int:pk>/remove/', views.remove_feed, name='podcast_remove_feed'),
path('feeds/<int:pk>/set-auto-queue/', views.set_auto_queue, name='podcast_set_auto_queue'),
path('feeds/<int:pk>/settings/', views.feed_settings, name='podcast_feed_settings'),
path('feeds/<int:pk>/move/', views.move_feed, name='podcast_move_feed'),
path('audiobooks/', audiobooks.audiobook_list, name='podcast_audiobooks'),
path('audiobooks/<int:feed_id>/', audiobooks.audiobook_detail, name='podcast_audiobook'),
Bibliothek neu: Ordner als Filter-Chips überall, Cover-Raster, Cover verschlüsselt und generiert (noch nicht veröffentlicht) - Ordner wie Tags (docs/library.md): folders.js zeichnet die Chip-Reihe, das Blatt „In Ordner …“ (Häkchen, Neuer Ordner) und „Ordner verwalten“ (umbenennen = zusammenlegen, löschen, Reihenfolge). E-Books: `folders` im verschlüsselten Meta, Reihenfolge in verschlüsselten Bibliotheks-Einstellungen (/books/prefs/). Podcasts/Hörbücher: PodcastFeed.folders (Migration 0021, übernimmt `folder`), /podcasts/folders/ (+rename, +delete). Blogs: Reihenfolge (/feeds/folders/order/). - Bibliothek (53-library.js): Kopf mit Suche, Sortierung, Raster/Liste und +; Chips Angefangen · Ungelesen · Gelesen · Ordner; eine „Weiterlesen“-Karte; Mehrfachauswahl (lange drücken). E-Ink und diora Reader beginnen als Liste. - Cover Ende-zu-Ende verschlüsselt (covers.js, /books/<id>/cover/): aus dem E-Book (EPUB-Coverbild, PDF Seite 1), 300 px, mit dem Nutzerschlüssel verschlüsselt, einmal hochgeladen; sparsam im Leerlauf, nie beim Lesen, nie auf E-Ink. - Bücher ohne Cover bekommen eins (gencover.js): Stichwörter aus Titel, Autor, Regal und Ordnern wählen ein Gestaltungskonzept (Konstruktivismus, Geometrie, Psyche, Wellen, Karte, Kosmos, Ornament, Botanik, Berge, Zellen, Raster, Schatten, Typo, sonst Bauhaus); ein Hash aus Titel und Autor Palette, Aufbau und Details – einzigartig, überall gleich, nichts gespeichert. - Hörbücher: Ordner-Chips statt Kacheln, „In Ordner …“ mit mehreren Ordnern. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 20:44:23 +02:00
path('folders/', folders.folders, name='podcast_folders'),
path('folders/rename/', folders.rename_folder, name='podcast_folder_rename'),
path('folders/delete/', folders.delete_folder, name='podcast_folder_delete'),
path('bookmarks/', audiobooks.bookmark_add, name='podcast_bookmark_add'),
path('bookmarks/<int:pk>/', audiobooks.bookmark_update, name='podcast_bookmark_update'),
path('bookmarks/<int:pk>/delete/', audiobooks.bookmark_delete, name='podcast_bookmark_delete'),
path('feeds/<int:pk>/episodes/', views.feed_episodes, name='podcast_feed_episodes'),
path('episodes/', views.episode_list, name='podcast_episode_list'),
path('episodes/favorite/', views.set_favorites, name='podcast_set_favorites'),
path('episodes/discard/', views.discard_episodes, name='podcast_discard_episodes'),
path('episodes/<int:pk>/', views.episode_detail, name='podcast_episode_detail'),
path('episodes/<int:pk>/transcript/', views.episode_transcript, name='podcast_episode_transcript'),
path('episodes/<int:pk>/article/', article.episode_article, name='podcast_episode_article'),
path('episodes/<int:pk>/silences/', views.episode_silences, name='podcast_episode_silences'),
path('episodes/<int:pk>/sponsor/', views.episode_sponsor, name='podcast_episode_sponsor'),
path('episodes/<int:pk>/favorite/', views.set_favorite, name='podcast_set_favorite'),
path('transcription/settings/', transcription.transcription_settings, name='podcast_transcription_settings'),
path('transcription/test/', transcription.transcription_test, name='podcast_transcription_test'),
path('stats/', views.podcast_stats, name='podcast_stats'),
path('queue/', views.queue_get, name='podcast_queue_get'),
path('queue/add/', views.queue_add, name='podcast_queue_add'),
path('queue/remove/', views.queue_remove, name='podcast_queue_remove'),
path('queue/reorder/', views.queue_reorder, name='podcast_queue_reorder'),
path('later/add/', views.later_add, name='podcast_later_add'),
path('later/remove/', views.later_remove, name='podcast_later_remove'),
path('lists/', views.lists_switch, name='podcast_lists_switch'),
path('stream/seen/', views.stream_seen, name='podcast_stream_seen'),
path('radio/', radio.radio, name='podcast_radio'),
path('radio/heard/', radio.radio_heard, name='podcast_radio_heard'),
# Stöbern (docs/podcasts.md, podcasts/discover.py)
path('discover/search/', discover.search_view, name='podcast_discover_search'),
path('discover/similar/<int:pk>/', discover.similar_view, name='podcast_discover_similar'),
path('discover/people/', discover.people_view, name='podcast_discover_people'),
path('discover/person/', discover.person_view, name='podcast_discover_person'),
path('discover/elsewhere/', discover.elsewhere_view, name='podcast_discover_elsewhere'),
path('discover/topics/', discover.topics_view, name='podcast_discover_topics'),
path('discover/forgotten/', discover.forgotten_view, name='podcast_discover_forgotten'),
path('discover/recommend/', discover.recommend_view, name='podcast_discover_recommend'),
path('discover/take/', discover.take_view, name='podcast_discover_take'),
path('settings/', views.podcast_settings, name='podcast_settings'),
path('progress/save/', views.save_progress, name='podcast_save_progress'),
path('progress/mark-played/', views.mark_played, name='podcast_mark_played'),
path('progress/dismiss/', views.dismiss_episodes, name='podcast_dismiss_episodes'),
path('inbox/', views.inbox, name='podcast_inbox'),
path('import-downloads/', views.import_downloads, name='podcast_import_downloads'),
path('import-downloads/clear/', views.clear_import_downloads, name='podcast_clear_import_downloads'),
path('player/', views.player_state, name='podcast_player_state'),
path('player/report/', views.player_report, name='podcast_player_report'),
path('player/command/', views.player_command, name='podcast_player_command'),
path('player/stream/', views.player_stream, name='podcast_player_stream'),
]