124 lines
3.9 KiB
Python
124 lines
3.9 KiB
Python
#
|
|
# 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 <https://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
import sqlite3
|
|
import click
|
|
from flask import current_app, g
|
|
from os import getenv
|
|
|
|
def init_app(app):
|
|
app.teardown_appcontext(close_db)
|
|
app.cli.add_command(init_db_command)
|
|
|
|
@click.command("init-db")
|
|
def init_db_command():
|
|
db = get_db()
|
|
with current_app.open_resource("schema.sql") as f:
|
|
db.executescript(f.read().decode("utf-8"))
|
|
click.echo("You successfully initialized the database.")
|
|
|
|
def get_db():
|
|
try:
|
|
return g.db
|
|
except:
|
|
g.db = sqlite3.connect(
|
|
current_app.config["DATABASE"],
|
|
detect_types=sqlite3.PARSE_DECLTYPES
|
|
)
|
|
g.db.row_factory = sqlite3.Row
|
|
return g.db
|
|
|
|
def close_db(e=None):
|
|
db = g.pop("db", None)
|
|
if db is not None:
|
|
db.close()
|
|
|
|
def new_nb():
|
|
res = get_db().execute(
|
|
"SELECT number FROM movies ORDER BY number DESC"
|
|
).fetchone()
|
|
return 1 if res == None else 1 if res["number"] == None else res["number"] + 1
|
|
|
|
def move_movie(dest, src):
|
|
db = get_db()
|
|
if dest == "end":
|
|
num = new_nb()
|
|
else:
|
|
num = int(db.execute("SELECT number from movies WHERE id = ?", (dest, )).fetchone()["number"])
|
|
movies = db.execute("SELECT id FROM movies WHERE number >= ? ORDER BY number", (num, )).fetchall()
|
|
nb = num + 1
|
|
for movie in movies:
|
|
db.execute("UPDATE movies SET number = ? WHERE id = ?", (nb, movie["id"]))
|
|
nb += 1
|
|
db.execute("UPDATE movies SET number = ? WHERE id = ?", (num, src))
|
|
db.commit()
|
|
|
|
def get_movies():
|
|
return get_db().execute("SELECT id, title, year, poster, plot, watched, watchDate, score FROM movies ORDER BY number").fetchall()
|
|
|
|
def get_movies_to_watch():
|
|
return get_db().execute("SELECT id, title, year, poster, plot, watched, watchDate, score FROM movies WHERE watched = 0 ORDER BY number").fetchall()
|
|
|
|
def get_watched_movies():
|
|
return get_db().execute("SELECT id, title, year, poster, plot, watched, watchDate, score FROM movies WHERE watched = 1 ORDER BY watchDate DESC").fetchall()
|
|
|
|
def new_movie(movie):
|
|
db = get_db()
|
|
movie["id"] = db.execute("INSERT INTO movies (title, year, poster, plot, number, watched) VALUES (?,?,?,?,?, 0) RETURNING id",
|
|
(movie["title"], movie["year"], movie["poster"], movie["plot"], new_nb())).fetchone()["id"]
|
|
db.commit()
|
|
return movie
|
|
|
|
def new_blank_movie():
|
|
db = get_db()
|
|
id = db.execute("INSERT INTO movies DEFAULT VALUES RETURNING id").fetchone()["id"]
|
|
nb = new_nb()
|
|
db.execute("UPDATE movies SET number = ? WHERE id = ?", (nb, id))
|
|
db.commit()
|
|
return {"id": id, "nb": nb}
|
|
|
|
def delete_movie(id):
|
|
db = get_db()
|
|
db.execute("DELETE FROM movies WHERE id = ?", (id, ))
|
|
db.commit()
|
|
|
|
def update(id, field, value):
|
|
db = get_db()
|
|
db.execute("UPDATE movies SET " + field + " = ? WHERE id = ?", (value, id))
|
|
db.commit()
|
|
|
|
def update_title(id,title):
|
|
update(id, "title", title)
|
|
|
|
def update_year(id,year):
|
|
update(id, "year", year)
|
|
|
|
def update_poster(id,poster):
|
|
update(id, "poster", poster)
|
|
|
|
def update_plot(id, plot):
|
|
update(id, "plot", plot)
|
|
|
|
def update_watched(id, watched):
|
|
update(id, "watched", watched)
|
|
|
|
def update_watchDate(id, watchDate):
|
|
update(id, "watchDate", watchDate)
|
|
|
|
def update_score(id, score):
|
|
update(id, "score", score)
|