Show Jellyfin handoff jobs in queue
This commit is contained in:
+65
-5
@@ -156,6 +156,66 @@ def browse_filesystem(path_value="", mode="dir", allowed_roots=None):
|
||||
}
|
||||
|
||||
|
||||
def queue_list_payload(runtime, page=1, per_page=10):
|
||||
page = max(1, int(page or 1))
|
||||
per_page = min(50, max(1, int(per_page or 10)))
|
||||
download_queue = runtime["download_queue"]
|
||||
jellyfin_jobs = runtime.get("watchlist_jellyfin_sync")
|
||||
download_payload = download_queue.list(page=1, per_page=50)
|
||||
jobs = list(download_payload.get("jobs") or [])
|
||||
for download_page in range(2, int(download_payload.get("pages") or 1) + 1):
|
||||
jobs.extend(download_queue.list(page=download_page, per_page=50).get("jobs") or [])
|
||||
if jellyfin_jobs is not None:
|
||||
jobs.extend(jellyfin_jobs.list_queue_jobs(limit=200))
|
||||
jobs.sort(key=lambda job: str(job.get("created_at") or ""), reverse=True)
|
||||
total = len(jobs)
|
||||
pages = max(1, (total + per_page - 1) // per_page)
|
||||
offset = (page - 1) * per_page
|
||||
return {
|
||||
"jobs": jobs[offset : offset + per_page],
|
||||
"page": page,
|
||||
"per_page": per_page,
|
||||
"total": total,
|
||||
"pages": pages,
|
||||
}
|
||||
|
||||
|
||||
def queue_get_job(runtime, job_id):
|
||||
try:
|
||||
return runtime["download_queue"].get(job_id)
|
||||
except KeyError:
|
||||
jellyfin_jobs = runtime.get("watchlist_jellyfin_sync")
|
||||
if jellyfin_jobs is None:
|
||||
raise
|
||||
return jellyfin_jobs.get_queue_job(job_id)
|
||||
|
||||
|
||||
def queue_remove_job(runtime, job_id):
|
||||
try:
|
||||
return runtime["download_queue"].remove(job_id)
|
||||
except KeyError:
|
||||
jellyfin_jobs = runtime.get("watchlist_jellyfin_sync")
|
||||
if jellyfin_jobs is None:
|
||||
raise
|
||||
return jellyfin_jobs.remove_queue_job(job_id)
|
||||
|
||||
|
||||
def queue_clear_finished(runtime):
|
||||
result = runtime["download_queue"].clear_finished()
|
||||
jellyfin_jobs = runtime.get("watchlist_jellyfin_sync")
|
||||
if jellyfin_jobs is not None:
|
||||
result["count"] = int(result.get("count") or 0) + int(jellyfin_jobs.clear_finished_queue_jobs().get("count") or 0)
|
||||
return result
|
||||
|
||||
|
||||
def queue_clear_failed(runtime):
|
||||
result = runtime["download_queue"].clear_failed()
|
||||
jellyfin_jobs = runtime.get("watchlist_jellyfin_sync")
|
||||
if jellyfin_jobs is not None:
|
||||
result["count"] = int(result.get("count") or 0) + int(jellyfin_jobs.clear_failed_queue_jobs().get("count") or 0)
|
||||
return result
|
||||
|
||||
|
||||
@lru_cache(maxsize=1)
|
||||
def installed_ani_cli_version():
|
||||
try:
|
||||
@@ -619,7 +679,7 @@ class Handler(BaseHTTPRequestHandler):
|
||||
params = parse_qs(parsed.query)
|
||||
page = (params.get("page") or ["1"])[0]
|
||||
per_page = (params.get("per_page") or ["10"])[0]
|
||||
self.json(runtime["download_queue"].list(page=page, per_page=per_page))
|
||||
self.json(queue_list_payload(runtime, page=page, per_page=per_page))
|
||||
elif parsed.path.startswith("/api/queue/"):
|
||||
runtime = Handler._runtime(self)
|
||||
parts = parsed.path.strip("/").split("/")
|
||||
@@ -627,7 +687,7 @@ class Handler(BaseHTTPRequestHandler):
|
||||
self.error(HTTPStatus.NOT_FOUND, "Not found")
|
||||
return
|
||||
_, _, job_id = parts
|
||||
self.json(runtime["download_queue"].get(job_id))
|
||||
self.json(queue_get_job(runtime, job_id))
|
||||
elif parsed.path.startswith("/api/watchlist/thumb/"):
|
||||
runtime = Handler._runtime(self)
|
||||
show_id = unquote(parsed.path[len("/api/watchlist/thumb/") :]).strip()
|
||||
@@ -712,10 +772,10 @@ class Handler(BaseHTTPRequestHandler):
|
||||
self.json(runtime["download_queue"].retry_all_failed())
|
||||
elif parsed.path == "/api/queue/clear-finished":
|
||||
runtime = Handler._runtime(self)
|
||||
self.json(runtime["download_queue"].clear_finished())
|
||||
self.json(queue_clear_finished(runtime))
|
||||
elif parsed.path == "/api/queue/clear-failed":
|
||||
runtime = Handler._runtime(self)
|
||||
self.json(runtime["download_queue"].clear_failed())
|
||||
self.json(queue_clear_failed(runtime))
|
||||
elif parsed.path.startswith("/api/queue/"):
|
||||
runtime = Handler._runtime(self)
|
||||
parts = parsed.path.strip("/").split("/")
|
||||
@@ -726,7 +786,7 @@ class Handler(BaseHTTPRequestHandler):
|
||||
actions = {
|
||||
"retry": runtime["download_queue"].retry,
|
||||
"cancel": runtime["download_queue"].cancel,
|
||||
"remove": runtime["download_queue"].remove,
|
||||
"remove": lambda job_id: queue_remove_job(runtime, job_id),
|
||||
}
|
||||
if action not in actions:
|
||||
self.error(HTTPStatus.NOT_FOUND, "Not found")
|
||||
|
||||
Reference in New Issue
Block a user