Files
motorsports/app.py
T

144 lines
4.8 KiB
Python

from flask import Flask, render_template, jsonify, request
import subprocess
import threading
import time
import os
import logging
import torrent_vahti
app = Flask(__name__)
log = logging.getLogger('werkzeug')
log.setLevel(logging.ERROR)
vahti_prosessia = None
loki_sisalto = []
def lue_lokit(process):
global loki_sisalto
for line in iter(process.stdout.readline, ''):
if line:
loki_sisalto.append(line)
if len(loki_sisalto) > 500:
loki_sisalto.pop(0)
def suorita_haku_prosessi():
global vahti_prosessia
if vahti_prosessia is None or vahti_prosessia.poll() is not None:
loki_sisalto.append(f"\n--- Haku käynnistetty: {time.strftime('%H:%M:%S')} ---\n")
vahti_prosessia = subprocess.Popen(
['python', '-u', 'torrent_vahti.py'],
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True
)
t = threading.Thread(target=lue_lokit, args=(vahti_prosessia,))
t.daemon = True
t.start()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/status')
def status():
kaikki_data = torrent_vahti.lataa_kaikki_data()
loki_teksti = ''.join(loki_sisalto)
try:
with open(torrent_vahti.LOKI_TIEDOSTO, "r", encoding="utf-8") as f:
loki_torrentit = f.read()
except:
loki_torrentit = "Historiaa ei löytynyt."
return jsonify({
'status': 'ok',
'hakukohteet': kaikki_data.get("hakukohteet", []),
'asetukset': kaikki_data.get("asetukset", {}),
'indeksorit': kaikki_data.get("indeksorit", []),
'loki_skripti': loki_teksti,
'loki_torrentit': loki_torrentit
})
@app.route('/tallenna_asetukset', methods=['POST'])
def tallenna_asetukset():
data = request.json
kaikki_data = torrent_vahti.lataa_kaikki_data()
kaikki_data["asetukset"] = {
"jackett_url": data.get('jackett_url', ''),
"jackett_api_key": data.get('jackett_api_key', ''),
"qbit_url": data.get('qbit_url', ''),
"qbit_user": data.get('qbit_user', 'admin'),
"qbit_pass": data.get('qbit_pass', ''),
"haku_vali": int(data.get('haku_vali', 900))
}
torrent_vahti.tallenna_kaikki_data(kaikki_data)
return jsonify({'status': 'ok'})
@app.route('/paivita_indeksorit', methods=['POST'])
def paivita_indeksorit():
uusi_lista = request.json.get("indeksorit", [])
kaikki_data = torrent_vahti.lataa_kaikki_data()
kaikki_data["indeksorit"] = uusi_lista
torrent_vahti.tallenna_kaikki_data(kaikki_data)
return jsonify({'status': 'ok'})
@app.route('/lisaa_kohde', methods=['POST'])
def lisaa_kohde():
data = request.json
kaikki_data = torrent_vahti.lataa_kaikki_data()
kaikki_data["hakukohteet"].append({
"jackett_haku": data['jackett_haku'],
"regex_suodatin": data.get('regex_suodatin', '.*'),
"kohdekansio": data['kohdekansio'],
"paivat": data.get('paivat', [0, 1, 2, 3, 4, 5, 6])
})
torrent_vahti.tallenna_kaikki_data(kaikki_data)
return jsonify({'status': 'ok'})
@app.route('/poista_kohde/<int:index>', methods=['DELETE'])
def poista_kohde(index):
kaikki_data = torrent_vahti.lataa_kaikki_data()
if 0 <= index < len(kaikki_data["hakukohteet"]):
kaikki_data["hakukohteet"].pop(index)
torrent_vahti.tallenna_kaikki_data(kaikki_data)
return jsonify({'status': 'ok'})
@app.route('/poista_historiarivi', methods=['POST'])
def poista_historiarivi():
data = request.json
rivi_poistettavaksi = data.get('rivi')
if os.path.exists(torrent_vahti.LOKI_TIEDOSTO):
with open(torrent_vahti.LOKI_TIEDOSTO, "r", encoding="utf-8") as f:
rivit = f.readlines()
uudet_rivit = [r for r in rivit if r.strip() != rivi_poistettavaksi.strip()]
with open(torrent_vahti.LOKI_TIEDOSTO, "w", encoding="utf-8") as f:
f.writelines(uudet_rivit)
return jsonify({'status': 'ok'})
return jsonify({'status': 'error'}), 404
@app.route('/suorita_haku', methods=['POST'])
def suorita_haku():
suorita_haku_prosessi()
return jsonify({'status': 'ok'})
@app.route('/tyhjenna_loki', methods=['POST'])
def tyhjenna_loki():
if os.path.exists(torrent_vahti.LOKI_TIEDOSTO):
os.remove(torrent_vahti.LOKI_TIEDOSTO)
return jsonify({'status': 'ok'})
if __name__ == '__main__':
# Käytetään dynaamista ajastinta asetuksista
def automaattinen_ajastin():
while True:
kaikki_data = torrent_vahti.lataa_kaikki_data()
vali = kaikki_data["asetukset"].get("haku_vali", 900)
time.sleep(vali)
suorita_haku_prosessi()
ajastin_saie = threading.Thread(target=automaattinen_ajastin)
ajastin_saie.daemon = True
ajastin_saie.start()
app.run(host='0.0.0.0', port=5000)