149 lines
4.8 KiB
Python
149 lines
4.8 KiB
Python
from flask_sqlalchemy import SQLAlchemy
|
|
from flask import Flask, jsonify, render_template, request
|
|
import json
|
|
import os
|
|
import subprocess
|
|
|
|
|
|
PATH = '/download'
|
|
|
|
app = Flask(__name__,
|
|
template_folder="templates")
|
|
|
|
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
|
|
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://mdownload:mdownload@192.168.86.198:3306/Downloads'
|
|
|
|
db = SQLAlchemy(app)
|
|
|
|
|
|
class downloaderSettings(db.Model):
|
|
ID = db.Column(db.Integer, primary_key=True)
|
|
path = db.Column(db.Text)
|
|
|
|
|
|
class manga(db.Model):
|
|
manga_id = db.Column(db.Integer, primary_key=True)
|
|
name = db.Column(db.Text)
|
|
url = db.Column(db.Text)
|
|
url_flag = db.Column(db.Text)
|
|
view_format = db.Column(db.Integer)
|
|
unknown_value = db.Column(db.Integer)
|
|
active = db.Column(db.Boolean, default=1)
|
|
|
|
|
|
class url_metadata(db.Model):
|
|
url_id = db.Column(db.Integer, primary_key=True)
|
|
source_name = db.Column(db.VARCHAR(length=10000))
|
|
flag = db.Column(db.Text)
|
|
base_url = db.Column(db.VARCHAR(length=10000))
|
|
|
|
@app.route('/', methods=['GET'])
|
|
def index():
|
|
return render_template("index.html")
|
|
|
|
@app.route('/download', methods=['GET'])
|
|
def download():
|
|
updated = []
|
|
|
|
result = db.session.query(manga, url_metadata).filter_by(active=1).join(url_metadata, manga.url_flag==url_metadata.flag).all()
|
|
|
|
for each in result:
|
|
book={}
|
|
if 'http' in each.manga.name or 'https' in each.manga.url:
|
|
# execute = """manga-py """ + each.manga.url + """ -n \"""" + each.manga.name + """\" -d \"""" + PATH + """\" -z -N --print-json"""
|
|
exec_command = subprocess.Popen(['manga-py', each.manga.url, '-n', each.manga.name, '-d ' + PATH, '-z', '-N', '--print-json'], stdout=subprocess.PIPE)
|
|
else:
|
|
print('nothing')
|
|
# execute = """manga-py """ + each.url_metadata.base_url+each.manga.url + """ -n \"""" + each.manga.name.strip('?') + """\" -d \"""" + PATH + """\" -z -N --print-json"""
|
|
exec_command = subprocess.Popen(['manga-py', each.url_metadata.base_url, each.manga.url, '-n', each.manga.name.strip('?'), '-d ' + PATH, '-z', '-N', '--print-json'], stdout=subprocess.PIPE)
|
|
book['title'] = each.manga.name
|
|
# book['command'] = 'nothing'
|
|
|
|
# os.system(execute)
|
|
# exec_command = subprocess.Popen(execute, stdout=subprocess.PIPE)
|
|
book['output'] = exec_command.communicate()
|
|
updated.append(book)
|
|
|
|
missing = check(passin=1)
|
|
return jsonify(manga=updated, missingFlags=missing[0], missingManga=missing[1])
|
|
|
|
@app.route('/upload', methods=['GET'])
|
|
def upload_jason():
|
|
url = []
|
|
base = []
|
|
name = []
|
|
y = 0
|
|
z = 0
|
|
added = []
|
|
|
|
with open(PATH+"/tach.json", "r") as tf:
|
|
# with open("tach.json", "r") as tf:
|
|
data = json.load(tf)
|
|
for x in data["mangas"]:
|
|
# Manga Name
|
|
name.append(data["mangas"][y]["manga"][1])
|
|
# Mange URL
|
|
url.append(data["mangas"][y]["manga"][0])
|
|
# Mange Base URL
|
|
base.append(data["mangas"][y]["manga"][2])
|
|
y=y+1
|
|
|
|
for each in name:
|
|
# print('start')
|
|
if not manga.query.filter_by(name=name[z]).first():
|
|
new_manga={}
|
|
query = manga(name=name[z], url=url[z], url_flag=str(base[z]), view_format=0, unknown_value=0)
|
|
new_manga['title'] = name[z]
|
|
added.append(new_manga)
|
|
db.session.add(query)
|
|
z = z + 1
|
|
db.session.commit()
|
|
return jsonify(added=added)
|
|
|
|
|
|
@app.route('/active', methods=['GET'])
|
|
def active():
|
|
activbooks=[]
|
|
|
|
result = manga.query.filter_by(active=1).all()
|
|
|
|
for each in result:
|
|
book={}
|
|
book['id'] = each.manga_id
|
|
book['title'] = each.name
|
|
book['url'] = each.url
|
|
book['url_flag'] = each.url_flag
|
|
activbooks.append(book)
|
|
|
|
return jsonify(active=activbooks)
|
|
|
|
@app.route('/check/', methods=['GET'])
|
|
def check(passin=0):
|
|
passin=passin
|
|
missingManga = []
|
|
missingFlags = []
|
|
providerFlags = []
|
|
mangaFlags = manga.query.with_entities(manga.url_flag).distinct()
|
|
providerFlagResult = url_metadata.query.all()
|
|
for each in providerFlagResult:
|
|
providerFlags.append(each.flag)
|
|
for each in mangaFlags:
|
|
if each.url_flag not in providerFlags:
|
|
missingFlags.append(each.url_flag)
|
|
for each in missingFlags:
|
|
mangaInfo = {}
|
|
badManga = manga.query.filter_by(url_flag=each).all()
|
|
for each in badManga:
|
|
mangaInfo['name'] = each.name
|
|
mangaInfo['url_flag'] = each.url_flag
|
|
mangaInfo['active'] = each.active
|
|
missingManga.append(mangaInfo)
|
|
|
|
if passin == 1:
|
|
return missingFlags, missingManga
|
|
else:
|
|
return jsonify(missingFlags=missingFlags, missingManga=missingManga)
|
|
|
|
if __name__ == "__main__":
|
|
app.run(host='0.0.0.0', debug=True)
|