87 lines
2.9 KiB
Python
87 lines
2.9 KiB
Python
from app.library.downloads import DownloadQueue
|
|
from app.library.Events import EventBus, Events
|
|
from app.library.ItemDTO import Item
|
|
from app.library.log import get_logger
|
|
from app.library.router import RouteType, route
|
|
|
|
LOG = get_logger()
|
|
|
|
|
|
@route(RouteType.SOCKET, "add_url", "add_url")
|
|
async def add_url(queue: DownloadQueue, notify: EventBus, sid: str, data: dict):
|
|
data = data if isinstance(data, dict) else {}
|
|
if not (url := data.get("url", None)):
|
|
notify.emit(Events.LOG_ERROR, title="Invalid request", message="No URL provided.", to=sid)
|
|
return
|
|
|
|
item: Item = Item.format(data)
|
|
try:
|
|
status = await queue.add(item=item)
|
|
notify.emit(
|
|
event=Events.ITEM_STATUS,
|
|
title="Adding URL",
|
|
message=f"Adding URL '{url}' to the download queue.",
|
|
data={**status, "preset": item.preset} if status else {"preset": item.preset},
|
|
to=sid,
|
|
)
|
|
except ValueError as e:
|
|
LOG.exception(
|
|
"Failed to add URL '%s' from socket request.",
|
|
url,
|
|
extra={"route": "socket.add_url", "url": url, "preset": item.preset, "sid": sid},
|
|
)
|
|
notify.emit(Events.LOG_ERROR, data={"preset": item.preset}, title="Error Adding URL", message=str(e), to=sid)
|
|
|
|
|
|
@route(RouteType.SOCKET, "item_cancel", "item_cancel")
|
|
async def item_cancel(queue: DownloadQueue, notify: EventBus, sid: str, data: str):
|
|
if not (data := data if isinstance(data, str) else None):
|
|
notify.emit(Events.LOG_ERROR, title="Invalid Request", message="No item ID provided.", to=sid)
|
|
return
|
|
|
|
await queue.cancel([data])
|
|
|
|
|
|
@route(RouteType.SOCKET, "item_delete", "item_delete")
|
|
async def item_delete(queue: DownloadQueue, notify: EventBus, sid: str, data: dict):
|
|
data = data if isinstance(data, dict) else {}
|
|
|
|
if not (id := data.get("id", None)):
|
|
notify.emit(Events.LOG_ERROR, title="Invalid Request", message="No item ID provided.", to=sid)
|
|
return
|
|
|
|
await queue.clear([id], remove_file=bool(data.get("remove_file", False)))
|
|
|
|
|
|
@route(RouteType.SOCKET, "item_start", "item_start")
|
|
async def item_start(queue: DownloadQueue, notify: EventBus, sid: str, data: list | str) -> None:
|
|
if not data:
|
|
notify.emit(
|
|
Events.LOG_ERROR,
|
|
title="Invalid Request",
|
|
message="No items provided to start.",
|
|
to=sid,
|
|
)
|
|
return
|
|
|
|
if isinstance(data, str):
|
|
data = [data]
|
|
|
|
await queue.start_items(data)
|
|
|
|
|
|
@route(RouteType.SOCKET, "item_pause", "item_pause")
|
|
async def item_pause(queue: DownloadQueue, notify: EventBus, sid: str, data: list | str) -> None:
|
|
if not data:
|
|
notify.emit(
|
|
Events.LOG_ERROR,
|
|
title="Invalid Request",
|
|
message="No items provided to pause.",
|
|
to=sid,
|
|
)
|
|
return
|
|
|
|
if isinstance(data, str):
|
|
data = [data]
|
|
|
|
await queue.pause_items(data)
|