96 lines
3.0 KiB
Python
96 lines
3.0 KiB
Python
from quart import Quart, request, make_response, render_template, redirect
|
|
from Animebyter import get_airing
|
|
from Downloader import downloader, store, login_qb, qbLoginException, checker
|
|
from Notifications import dl_watchdog
|
|
from asyncio import get_event_loop,gather
|
|
import os
|
|
from sys import stdout
|
|
import logging
|
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
app = Quart(__name__,"/static")
|
|
base_url = os.getenv("base_url")
|
|
|
|
class LastAiring:
|
|
airing = []
|
|
def get(self):
|
|
return self.airing
|
|
def sett(self,a):
|
|
self.airing = a
|
|
last_airing = LastAiring()
|
|
|
|
class FakeObj:
|
|
def __init__(self,dc):
|
|
for i in dc.keys():
|
|
setattr(self,i,dc[i])
|
|
|
|
@app.route("/")
|
|
async def home():
|
|
airing = await get_airing()
|
|
last_airing.sett(airing)
|
|
watching = store.get("watching")
|
|
dl_path = store.get("downloadPath")
|
|
dl_label = store.get("downloadLabel")
|
|
return await render_template('index.html', airing=airing, watching=[FakeObj(i) for i in watching], dl_path=dl_path, dl_label=dl_label)
|
|
|
|
@app.route("/addAnime")
|
|
async def add_show():
|
|
id = request.args.get("id")
|
|
la = last_airing.get()
|
|
show = None
|
|
for i in la:
|
|
if i.id == id:
|
|
show = i
|
|
break
|
|
if show:
|
|
show.last_episode -=1
|
|
store.ladd("watching",vars(show))
|
|
return redirect(base_url)
|
|
else:
|
|
return await render_template("error.html", message="Show does not exist", base_url=base_url)
|
|
|
|
@app.route("/removeAnime")
|
|
async def remove_show():
|
|
id = request.args.get("id")
|
|
watching = store.get("watching")
|
|
for i in watching:
|
|
if id == i['id']:
|
|
store.lremvalue("watching",i)
|
|
return redirect(base_url)
|
|
return await render_template("error.html",message="Show does not exist", base_url=base_url)
|
|
|
|
@app.route("/updatePath", methods=["POST"])
|
|
async def set_path():
|
|
path = (await request.form).get("path")
|
|
if os.path.isdir(path):
|
|
store.set("downloadPath", path)
|
|
return redirect(base_url)
|
|
else:
|
|
return await render_template("error.html", message="{} is not a valid path".format(path))
|
|
|
|
@app.route("/updateLabel", methods=["POST"])
|
|
async def set_label():
|
|
label = (await request.form).get("label")
|
|
store.set("downloadLabel", label)
|
|
return redirect(base_url)
|
|
|
|
@app.route("/updateCreds", methods=["POST"])
|
|
async def update_creds():
|
|
form = await request.form
|
|
username = form.get("user")
|
|
password = form.get("password")
|
|
try:
|
|
await login_qb(username, password)
|
|
store.set("qbUser", username)
|
|
store.set("qbPass", password)
|
|
return redirect(base_url)
|
|
except qbLoginException:
|
|
return await render_template("error.html", message="Invalid credentials. Try again", base_url=base_url)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
server_task = app.run_task("0.0.0.0")
|
|
loop = get_event_loop()
|
|
|
|
loop.run_until_complete(gather(server_task,downloader(),checker(),dl_watchdog()))
|