2020-08-05 18:47:29 -07:00
|
|
|
import datetime
|
|
|
|
import inspect
|
|
|
|
|
2022-01-23 16:01:19 -08:00
|
|
|
from flask import Blueprint, abort, current_app, make_response, render_template, request, send_from_directory
|
2020-04-02 19:35:32 -07:00
|
|
|
from flask_login import login_required
|
|
|
|
|
2021-07-10 13:17:28 -07:00
|
|
|
import database
|
2022-01-23 16:01:19 -08:00
|
|
|
import func
|
2020-04-02 19:35:32 -07:00
|
|
|
|
|
|
|
TV_Movies = Blueprint("tv_movies", __name__, template_folder="templates")
|
|
|
|
|
|
|
|
|
|
|
|
@TV_Movies.route("/tv_movies")
|
|
|
|
@login_required
|
|
|
|
def index():
|
2020-08-05 18:47:29 -07:00
|
|
|
try:
|
|
|
|
page = request.args.get("page", 1, type=int)
|
|
|
|
max_items = request.args.get("max_items", 30, type=int)
|
|
|
|
tv = database.get_all_tv_movies()
|
|
|
|
start = max_items * (page - 1)
|
|
|
|
end = len(tv) if len(tv) < max_items * page else max_items * page
|
|
|
|
tv_dict = []
|
|
|
|
for tv_item in tv:
|
|
|
|
item = tv_item[0].__dict__
|
|
|
|
item.pop("_sa_instance_state", None)
|
|
|
|
item.pop("path", None)
|
|
|
|
tv_dict.append((item, tv_item[1]))
|
|
|
|
return render_template(
|
|
|
|
"tv_movies/index.html", title="tv & movies", tv_shows=tv_dict, page=page, max_items=max_items, start=start, end=end, item_count=len(tv)
|
|
|
|
)
|
|
|
|
except Exception as e:
|
2021-07-10 13:17:28 -07:00
|
|
|
current_app.logger.error(inspect.stack()[0][3] + " " + str(type(e)) + " " + str(e))
|
2020-08-05 18:47:29 -07:00
|
|
|
return str(type(e)) + " " + str(e)
|
2020-04-02 19:35:32 -07:00
|
|
|
|
|
|
|
|
|
|
|
@TV_Movies.route("/tv_movies/search")
|
|
|
|
@login_required
|
|
|
|
def search():
|
2020-08-05 18:47:29 -07:00
|
|
|
try:
|
|
|
|
page = request.args.get("page", 1, type=int)
|
|
|
|
max_items = request.args.get("max_items", 30, type=int)
|
|
|
|
start = 0
|
|
|
|
end = 0
|
|
|
|
query = request.args.get("q")
|
|
|
|
tv = []
|
|
|
|
if query:
|
|
|
|
tv = database.db_search_tv_movie(query)
|
|
|
|
start = max_items * (page - 1)
|
|
|
|
end = len(tv) if len(tv) < max_items * page else max_items * page
|
|
|
|
tv_dict = []
|
|
|
|
for tv_item in tv:
|
|
|
|
item = tv_item[0].__dict__
|
|
|
|
item.pop("_sa_instance_state", None)
|
|
|
|
item.pop("path", None)
|
|
|
|
tv_dict.append((item, tv_item[1]))
|
|
|
|
return render_template(
|
|
|
|
"tv_movies/search.html", title="tv_movies", tv_shows=tv_dict, page=page, max_items=max_items, start=start, end=end, item_count=len(tv)
|
|
|
|
)
|
|
|
|
except Exception as e:
|
2021-07-10 13:17:28 -07:00
|
|
|
current_app.logger.error(inspect.stack()[0][3] + " " + str(type(e)) + " " + str(e))
|
2020-08-05 18:47:29 -07:00
|
|
|
return str(type(e)) + " " + str(e)
|
|
|
|
|
|
|
|
|
|
|
|
@TV_Movies.route("/tv_movies/<tmdb_id>", methods=["GET", "POST"])
|
2020-04-02 19:35:32 -07:00
|
|
|
@login_required
|
2020-08-05 18:47:29 -07:00
|
|
|
def tv_movie_viewer(tmdb_id):
|
|
|
|
try:
|
|
|
|
tv_movie = database.get_tv_movie_by_tmdb_id(tmdb_id)
|
|
|
|
if type(tv_movie) is database.Movie:
|
|
|
|
extended = request.args.get("extended", default=False, type=bool)
|
|
|
|
directors_cut = request.args.get("directors_cut", default=False, type=bool)
|
|
|
|
return movie_view(tmdb_id, extended=extended, directors_cut=directors_cut)
|
|
|
|
else:
|
|
|
|
return episode_viewer(tmdb_id)
|
|
|
|
except Exception as e:
|
2021-07-10 13:17:28 -07:00
|
|
|
current_app.logger.error(inspect.stack()[0][3] + " " + str(type(e)) + " " + str(e))
|
2020-08-05 18:47:29 -07:00
|
|
|
return str(type(e)) + " " + str(e)
|
2020-04-02 19:35:32 -07:00
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
2020-08-05 18:47:29 -07:00
|
|
|
def movie_view(tmdb_id, extended=False, directors_cut=False):
|
|
|
|
try:
|
|
|
|
if request.method == "POST":
|
|
|
|
time = int(request.args.get("time", type=float))
|
|
|
|
length = int(request.args.get("length", type=float, default=0))
|
|
|
|
finished = True if request.args.get("finished", default="false") == "true" else False
|
|
|
|
database.update_user_tv_movie_data(tmdb_id, None, time, length, finished, extended, directors_cut)
|
|
|
|
return make_response("", 201)
|
|
|
|
else:
|
|
|
|
movie_data = database.db_get_movie_by_tmdb_id(tmdb_id, extended=extended, directors_cut=directors_cut)
|
|
|
|
user_data = database.db_get_user_tv_movie_data(movie_data.tmdb_id, extended=extended, directors_cut=directors_cut)
|
|
|
|
chapters = func.get_chapters(movie_data.path)
|
|
|
|
if not user_data:
|
|
|
|
user_data = database.update_user_tv_movie_data(movie_data.tmdb_id, None, 0, 0)
|
|
|
|
return render_template(
|
|
|
|
"tv_movies/movieViewer.html", title="Movies: " + movie_data.title, movie=movie_data, user_data=user_data, chapters=chapters
|
|
|
|
)
|
|
|
|
except Exception as e:
|
2021-07-10 13:17:28 -07:00
|
|
|
current_app.logger.error(inspect.stack()[0][3] + " " + str(type(e)) + " " + str(e))
|
2020-08-05 18:47:29 -07:00
|
|
|
return str(type(e)) + " " + str(e)
|
2020-04-02 19:35:32 -07:00
|
|
|
|
|
|
|
|
|
|
|
@login_required
|
2020-08-05 18:47:29 -07:00
|
|
|
def episode_viewer(tmdb_id):
|
|
|
|
try:
|
|
|
|
if request.method == "POST":
|
|
|
|
time = int(request.args.get("time", type=float))
|
|
|
|
parent_id = request.args.get("parent", type=str)
|
|
|
|
length = int(request.args.get("length", type=float, default=0))
|
|
|
|
finished = True if request.args.get("finished", default="false") == "true" else False
|
|
|
|
database.update_user_tv_movie_data(tmdb_id, parent_id, time, length, finished)
|
|
|
|
return make_response("", 201)
|
|
|
|
else:
|
|
|
|
tv_show = database.get_tv_show(tmdb_id)
|
|
|
|
episodes = database.get_tv_show_episodes_by_tmdb_id(tmdb_id)
|
2021-07-10 13:17:28 -07:00
|
|
|
if len(episodes) == 0:
|
|
|
|
abort(404)
|
2020-08-05 18:47:29 -07:00
|
|
|
season_num = request.args.get("season", type=int, default=None)
|
|
|
|
episode_num = request.args.get("episode", type=int, default=None)
|
|
|
|
user_tv_show_data = database.db_get_user_tv_show_episodes_data(tmdb_id)
|
|
|
|
if not season_num and not episode_num:
|
|
|
|
(current_episode, user_data) = database.db_get_current_tv_show_episode_and_data(tmdb_id, episodes)
|
|
|
|
season_num = current_episode.season
|
|
|
|
episode_num = current_episode.episode
|
|
|
|
chapters = func.get_chapters(current_episode.path)
|
|
|
|
if not user_data:
|
|
|
|
user_data = database.update_user_tv_movie_data(current_episode.tmdb_id, tmdb_id, 0, 0)
|
|
|
|
else:
|
|
|
|
current_episode = episodes[0]
|
|
|
|
user_data = database.UserTvMovieData(("", "", "", 0, 0, False, datetime.datetime.min, False, False))
|
|
|
|
for episode in episodes:
|
|
|
|
if episode.season == season_num and episode.episode == episode_num:
|
|
|
|
current_episode = episode
|
|
|
|
user_data = database.db_get_user_tv_movie_data(current_episode.tmdb_id)
|
|
|
|
if not user_data:
|
|
|
|
user_data = database.update_user_tv_movie_data(current_episode.tmdb_id, tmdb_id, 0, 0)
|
|
|
|
break
|
|
|
|
else:
|
|
|
|
for episode in episodes:
|
|
|
|
if episode.season == season_num:
|
|
|
|
current_episode = episode
|
|
|
|
episode_num = episode.episode
|
|
|
|
user_data = database.db_get_user_tv_movie_data(current_episode.tmdb_id)
|
|
|
|
if not user_data:
|
|
|
|
user_data = database.update_user_tv_movie_data(current_episode.tmdb_id, tmdb_id, 0, 0)
|
|
|
|
break
|
|
|
|
chapters = func.get_chapters(current_episode.path)
|
|
|
|
return render_template(
|
|
|
|
"tv_movies/episodeViewer.html",
|
|
|
|
title="Tv: " + tv_show.title,
|
|
|
|
episodes=episodes,
|
|
|
|
season_num=season_num,
|
|
|
|
episode_num=episode_num,
|
|
|
|
episode=current_episode,
|
|
|
|
user_data=user_data,
|
|
|
|
user_tv_show_data=user_tv_show_data,
|
|
|
|
chapters=chapters,
|
|
|
|
)
|
|
|
|
except Exception as e:
|
2021-07-10 13:17:28 -07:00
|
|
|
current_app.logger.error(inspect.stack()[0][3] + " " + str(type(e)) + " " + str(e))
|
2020-08-05 18:47:29 -07:00
|
|
|
return str(type(e)) + " " + str(e)
|
|
|
|
|
|
|
|
|
|
|
|
@TV_Movies.route("/tv_movies/get_movie/<tmdb_id>")
|
2020-04-02 19:35:32 -07:00
|
|
|
@login_required
|
2020-08-05 18:47:29 -07:00
|
|
|
def get_movie(tmdb_id):
|
|
|
|
extended = request.args.get("extended", default=False, type=bool)
|
|
|
|
directors_cut = request.args.get("directors_cut", default=False, type=bool)
|
2021-07-10 13:17:28 -07:00
|
|
|
res_4k = request.args.get("res_4k", default=False, type=bool)
|
2020-08-05 18:47:29 -07:00
|
|
|
movie_data = database.db_get_movie_by_tmdb_id(tmdb_id, extended=extended, directors_cut=directors_cut)
|
2022-01-22 20:37:52 -08:00
|
|
|
filename: str = movie_data.path
|
2021-07-10 13:17:28 -07:00
|
|
|
if res_4k:
|
|
|
|
filename = filename.replace(f"({movie_data.year})", f"({movie_data.year})(4K)")
|
2020-08-05 18:47:29 -07:00
|
|
|
response = make_response(send_from_directory(func.MOVIES_DIRECTORY, filename))
|
|
|
|
response.headers["content-type"] = "video/webm"
|
|
|
|
return response
|
2020-04-02 19:35:32 -07:00
|
|
|
|
|
|
|
|
2020-08-05 18:47:29 -07:00
|
|
|
@TV_Movies.route("/tv_movies/get_episode/<tmdb_id>")
|
2020-04-02 19:35:32 -07:00
|
|
|
@login_required
|
2020-08-05 18:47:29 -07:00
|
|
|
def get_episode(tmdb_id):
|
|
|
|
episode_data = database.db_get_episode_by_tmdb_id(tmdb_id)
|
2022-01-22 20:37:52 -08:00
|
|
|
filename: str = episode_data.path
|
2020-08-05 18:47:29 -07:00
|
|
|
response = make_response(send_from_directory(func.TV_SHOWS_DIRECTORY, filename))
|
|
|
|
response.headers["content-type"] = "video/webm"
|
|
|
|
return response
|