Ein Abo lässt sich als Hörbuch (oder Hörspiel) markieren (PodcastFeed.kind). Es verlässt dann die Podcast-Welt: keine „Neu“-Folgen, keine Warteschlangen- Automatik, nicht in „Folgen“. In der Bibliothek steht es neben den E-Books (static/js/audiobooks.js, eine Datei für Web, Desktop und Android): „Weiterhören“, ein Fortschritt pro Buch, die Kapitel in Reihenfolge, Lesezeichen mit Notiz, Schlummer bis Kapitelende. Server: /podcasts/audiobooks/ (+<id>/), /podcasts/bookmarks/…, Migration 0019. Player (podcasts-web.js): podcastPlayBook spielt die Kapitel nacheinander außerhalb der Warteschlange; ⏭ markiert nicht als gehört. Vertrag: docs/audiobooks.md. native-podcast.js aus diora-android 7b1d500. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
46 lines
3.3 KiB
Python
46 lines
3.3 KiB
Python
from django.urls import path
|
|
from . import audiobooks, 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'),
|
|
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>/silences/', views.episode_silences, name='podcast_episode_silences'),
|
|
path('episodes/<int:pk>/favorite/', views.set_favorite, name='podcast_set_favorite'),
|
|
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('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'),
|
|
]
|