Server: PlayerState und PlayerDevice (Migration 0012), /podcasts/player/ (Stand), report/ (das Gerät, das zu spielen anfängt, wird das aktive und bleibt es auch pausiert, solange es online ist), command/ (Fernbedienung, transfer auf ein anderes Gerät) und stream/ (Server-Sent Events, zugleich die Anwesenheit der Geräte). seq steigt in einem UPDATE und nie zurück. Browser: podcasts-web.js meldet Abspielen, Pause, Springen, Folgen- und Senderwechsel (alle 10 s beim Spielen), hört den Stream, hört auf, wenn ein anderes Gerät startet, führt Befehle aus, zeigt das andere Gerät als remote und übernimmt, was ein verschwundenes Gerät zuletzt hatte. Eine pausierte Folge folgt einem neueren Stand von anderswo; im Vordergrund wird nach 15 s neu geholt. Podcast-Seite neu kopiert, sw v58. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
37 lines
2.5 KiB
Python
37 lines
2.5 KiB
Python
from django.urls import path
|
|
from . import 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>/episodes/', views.feed_episodes, name='podcast_feed_episodes'),
|
|
path('episodes/', views.episode_list, name='podcast_episode_list'),
|
|
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>/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'),
|
|
]
|