render whole pages on refresh and partial on hx rq
This commit is contained in:
parent
464683e9ce
commit
eff7bfa843
1 changed files with 34 additions and 4 deletions
|
@ -1,12 +1,16 @@
|
|||
import functools
|
||||
import urllib.parse
|
||||
|
||||
import transmission_rpc
|
||||
from fastapi import Depends, FastAPI, Request
|
||||
from fastapi.responses import HTMLResponse
|
||||
from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from fastapi.templating import Jinja2Templates
|
||||
|
||||
from torrent_downloader.client import TorrentDownloader
|
||||
|
||||
app = FastAPI()
|
||||
app.mount("/static", StaticFiles(directory="static"), name="static")
|
||||
templates = Jinja2Templates(directory="templates")
|
||||
|
||||
|
||||
|
@ -18,12 +22,36 @@ def get_active_torrents(downloader=get_downloader()) -> list[transmission_rpc.To
|
|||
return [t for t in downloader.get_active_torrents() if t.format_eta() != "not available"]
|
||||
|
||||
|
||||
@app.get("/", response_class=HTMLResponse)
|
||||
async def index(request: Request):
|
||||
return templates.TemplateResponse(request=request, name="index.html")
|
||||
def hx(func):
|
||||
@functools.wraps(func)
|
||||
async def hx_or_http(request: Request, *args, **kwargs):
|
||||
response = await func(request, *args, **kwargs)
|
||||
|
||||
if "HX-Request" not in request.headers:
|
||||
response = templates.TemplateResponse(
|
||||
request,
|
||||
name="index.html",
|
||||
context={"include_template": response.template.name},
|
||||
status_code=200,
|
||||
)
|
||||
return response
|
||||
|
||||
return hx_or_http
|
||||
|
||||
|
||||
@app.get("/")
|
||||
async def index(_: Request):
|
||||
return RedirectResponse("/search")
|
||||
|
||||
|
||||
@app.get("/search", response_class=HTMLResponse)
|
||||
@hx
|
||||
async def search_for_torrents(request: Request):
|
||||
return templates.TemplateResponse(request=request, name="search.html")
|
||||
|
||||
|
||||
@app.get("/list", response_class=HTMLResponse)
|
||||
@hx
|
||||
async def list_torrents(request: Request, query: str, downloader=Depends(get_downloader)):
|
||||
torrents = downloader.search(query)
|
||||
return templates.TemplateResponse(
|
||||
|
@ -32,6 +60,7 @@ async def list_torrents(request: Request, query: str, downloader=Depends(get_dow
|
|||
|
||||
|
||||
@app.get("/download", response_class=HTMLResponse)
|
||||
@hx
|
||||
async def download(request: Request, downloader=Depends(get_downloader)):
|
||||
magnet = urllib.parse.unquote(str(request.query_params))
|
||||
downloader.download_magnet(magnet)
|
||||
|
@ -42,6 +71,7 @@ async def download(request: Request, downloader=Depends(get_downloader)):
|
|||
|
||||
|
||||
@app.get("/active", response_class=HTMLResponse)
|
||||
@hx
|
||||
async def active(request: Request, active=Depends(get_active_torrents)):
|
||||
return templates.TemplateResponse(
|
||||
request=request, name="active_torrents.html", context={"torrents": active}
|
||||
|
|
Loading…
Add table
Reference in a new issue