138 lines
4.4 KiB
Python
138 lines
4.4 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', '')
|
|
}
|
|
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'],
|
|
"kohdekansio": data['kohdekansio']
|
|
})
|
|
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__':
|
|
def automaattinen_ajastin():
|
|
while True:
|
|
time.sleep(900)
|
|
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)
|