84 lines
3.0 KiB
Python
84 lines
3.0 KiB
Python
#!/usr/bin/python3
|
|
from flask import Flask, render_template
|
|
from flask_sqlalchemy import SQLAlchemy
|
|
from markupsafe import escape
|
|
import requests, json, toml, time
|
|
import views, downloader, ythdd_v, ythdd_api, ythdd_globals
|
|
|
|
config = toml.load("config.toml")
|
|
global app
|
|
ythdd_globals.starttime = int(time.time())
|
|
ythdd_globals.apiRequests = 0
|
|
ythdd_globals.apiFailedRequests = 0
|
|
ythdd_globals.isProxied = config['general']['is_proxied']
|
|
ythdd_globals.outsideApiHits = 0
|
|
|
|
app = Flask(__name__)
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = f"sqlite:///{config["general"]["db_file_path"]}"
|
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
|
app.add_url_rule('/', view_func=views.index)
|
|
app.add_url_rule('/index.html', view_func=views.index)
|
|
app.add_url_rule('/home', view_func=views.home)
|
|
app.add_url_rule('/api/', view_func=ythdd_api.api_greeting)
|
|
app.add_url_rule('/api/<path:received_request>', view_func=ythdd_api.api_global_catchall)
|
|
db = SQLAlchemy(app)
|
|
|
|
class LocalUsers(db.Model):
|
|
uid = db.Column(db.Integer, primary_key=True)
|
|
nick = db.Column(db.String)
|
|
subscriptions = db.Column(db.JSON) # for RSS feed ???
|
|
playlists = db.Column(db.JSON)
|
|
watch_history = db.Column(db.JSON)
|
|
queue_history = db.Column(db.JSON)
|
|
|
|
class Videos(db.Model):
|
|
ytid = db.Column(db.String(11), primary_key=True)
|
|
archive_version = db.Column(db.Integer)
|
|
archive_type = db.Column(db.Integer) # 0 - V+A, 1 - V, 2 - A, 3 - other
|
|
archive_format = db.Column(db.Integer) # 0, 1, 2, 3... from config.toml[postprocessing][presets]
|
|
title = db.Column(db.String)
|
|
description = db.Column(db.String)
|
|
file_path = db.Column(db.String) # with extension
|
|
viewcount = db.Column(db.Integer)
|
|
duration = db.Column(db.Integer)
|
|
like_count = db.Column(db.Integer)
|
|
upload_date = db.Column(db.Integer)
|
|
archive_date = db.Column(db.Integer)
|
|
channel_id = db.Column(db.String(24)) # author, RemoteUser
|
|
requested_by = db.Column(db.Integer) # LocalUser
|
|
comments = db.Column(db.JSON) # TODO: watch frequent commenters
|
|
|
|
class Playlists(db.Model):
|
|
# For archiving videos' list from playlist.
|
|
ytid = db.Column(db.String(11), primary_key=True)
|
|
name = db.Column(db.String)
|
|
videos = db.Column(db.String)
|
|
modify_date = db.Column(db.Integer)
|
|
archive_date = db.Column(db.Integer)
|
|
channel_id = db.Column(db.String(24)) # author, RemoteUser
|
|
requested_by = db.Column(db.Integer) # LocalUser
|
|
|
|
class VideoQueue(db.Model):
|
|
uid = db.Column(db.Integer, primary_key=True)
|
|
ytid = db.Column(db.String(11))
|
|
requested_by = db.Column(db.String)
|
|
|
|
class RemoteUsers(db.Model):
|
|
channel_id = db.Column(db.String(24), primary_key=True) # possibly can change?
|
|
name = db.Column(db.String)
|
|
subscribers = db.Column(db.Integer)
|
|
avatar_path = db.Column(db.String)
|
|
badge = db.Column(db.Integer) # 0 - no badge, 1 - verified, 2 - music
|
|
|
|
with app.app_context():
|
|
db.create_all()
|
|
|
|
@app.route('/<string:val>', methods=['GET'])
|
|
def blank(val):
|
|
return f"{val}: not implemented in ythdd {ythdd_v.version}"
|
|
#users = db.session.query(LocalUsers).all()
|
|
#return users
|
|
|
|
if __name__ == "__main__":
|
|
#app.run(host="127.0.0.1", port=5000)
|
|
app.run(host="0.0.0.0", port=5000) |