# # Copyright (c) 2024 bartholin # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # from flask import ( Blueprint, current_app, redirect, render_template, request, url_for ) from flask_login import ( login_required, login_user, logout_user ) from kinolist import (imdb, posters) from kinolist.login import User from kinolist.database import ( delete_movie, get_movies, get_movies_to_watch, get_watched_movies, move_movie, new_blank_movie, new_movie, update_plot, update_poster, update_score, update_title, update_watchDate, update_watched, update_year ) bp = Blueprint("pages", __name__) def w(): return current_app.config["IMAGE_WIDTH"] @bp.route("/") def to_watch(): return render_template("pages/to_watch.html", movies=get_movies_to_watch(), to_watch=1, w=w()) @bp.route("/watched") def watched(): return render_template("pages/watched.html", movies=get_watched_movies(), watched=1, w=w()) @bp.route("/manage", methods=("GET", "POST")) @login_required def manage(): if request.method == "POST": if "new" in request.form: choice = request.form["choice"] if choice == "title": movies = imdb.title(request.form["title"]) if movies: return render_template("_choicelist.html", movies=movies, w=w()) else: return "" elif choice == "imdbid": movie = imdb.imdbid(request.form["imdbid"]) if movie: return render_template("_line.html", movie=new_movie(movie), manage=1, w=w()) else: return "" else: return render_template("_line.html", movie=new_blank_movie(), manage=1, w=w()) else: id = request.form["id"] if "move" in request.form: move_movie(id, request.form["move"]) if "title" in request.form: update_title(id, request.form["title"]) elif "year" in request.form: update_year(id, request.form["year"]) elif "poster" in request.files: poster = request.files["poster"] filename = posters.save(poster.filename, poster.read()) update_poster(id, filename) return filename elif "plot" in request.form: update_plot(id, request.form["plot"]) elif "watched" in request.form: update_watched(id, request.form["watched"]) elif "watchDate" in request.form: update_watchDate(id, request.form["watchDate"]) elif "score" in request.form: update_score(id, request.form["score"]) elif "delete" in request.form: delete_movie(id) return "" return render_template("pages/manage.html", movies=get_movies(), manage=1, w=w()) @bp.route("/posters/") def send_uploaded_file(filename): return posters.get(filename) @bp.route("/login", methods=("GET", "POST")) def login_page(): if request.method == "POST": if request.form["password"] == current_app.config["ADMIN_PASSWORD"]: login_user(User("admin")) return redirect(url_for("pages.manage")) return "Bad Login" return render_template("pages/login.html") @bp.route('/logout') def logout(): logout_user() return redirect(url_for("pages.to_watch"))