#!/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/', 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('/', 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)