diff --git a/video_metadata/schema.sql b/video_metadata/schema.sql index 51bf6f9..74c76f7 100644 --- a/video_metadata/schema.sql +++ b/video_metadata/schema.sql @@ -41,6 +41,13 @@ CREATE TABLE movie_query_mapping( foreign key(movie_id) references movie_details(movie_id) ); +DROP TABLE IF EXISTS movie_paths; +CREATE TABLE movie_paths( + movie_id int not null, + movie_path text unique not null, + foreign key(movie_id) references movie_details(movie_id) +); + DROP TABLE IF EXISTS movie_genres; CREATE TABLE movie_genres( genre_id integer primary key not null, diff --git a/video_metadata/templates/file_listing/index.html b/video_metadata/templates/file_listing/index.html index b6a94fe..1128a9f 100644 --- a/video_metadata/templates/file_listing/index.html +++ b/video_metadata/templates/file_listing/index.html @@ -11,10 +11,8 @@ {% if path.is_dir %} {{ path.base_name }} {% else %} - {{ - path.base_name }} + + {{ path.base_name }} {% endif %} {% if path.contents %} diff --git a/video_metadata/templates/index.html b/video_metadata/templates/index.html index e8351d9..4ea7118 100644 --- a/video_metadata/templates/index.html +++ b/video_metadata/templates/index.html @@ -2,6 +2,7 @@ {% block header %}

{% block title %}INDEX PAGE!{% endblock %}

+
Movie Listing
{% endblock %} {% block content %} diff --git a/video_metadata/templates/tmdb/create_mapping.html.jinja b/video_metadata/templates/tmdb/create_mapping.html.jinja new file mode 100644 index 0000000..e723590 --- /dev/null +++ b/video_metadata/templates/tmdb/create_mapping.html.jinja @@ -0,0 +1,15 @@ +{% extends 'base.html' %} + +{% block header %} +

{% block title %}Set Mapping{% endblock %}

+{% endblock %} + +{% block content %} + {% if success %} +

Successfully added file mapping for {{ rel_path }}

+ {% endif %} + +
+
movie_id: {{ movie_id }}, rel_path: {{ rel_path }}
+
+{% endblock %} diff --git a/video_metadata/templates/tmdb/list_movie_test.html.jinja b/video_metadata/templates/tmdb/list_movie_test.html.jinja new file mode 100644 index 0000000..6bca59d --- /dev/null +++ b/video_metadata/templates/tmdb/list_movie_test.html.jinja @@ -0,0 +1,26 @@ +{% extends 'base.html' %} + +{% block header %} +

{% block title %}movie list test{% endblock %}

+{% endblock %} + +{% block content %} +
+ {% for r in view_results %} +
+

{{ r.title }}

+ +
+ {% endfor %} +
+ +
+

+	
+{% endblock %} diff --git a/video_metadata/templates/tmdb/query.html b/video_metadata/templates/tmdb/query.html index af011b1..c5f0210 100644 --- a/video_metadata/templates/tmdb/query.html +++ b/video_metadata/templates/tmdb/query.html @@ -11,14 +11,17 @@ - {% endif %} - + {% else %}

Query Results

+

Choose the description that matches the file

+

{{ rel_path }}

{% for r in view_data %}

{{ r.title }}

{% endfor %}
+ {% endif %}

Debug Info

diff --git a/video_metadata/views/tmdb.py b/video_metadata/views/tmdb.py index 0303315..d766d36 100644 --- a/video_metadata/views/tmdb.py +++ b/video_metadata/views/tmdb.py @@ -78,6 +78,26 @@ class view_result(object): #################### # flask routes +@bp.route('/list_movie_test') +def list_movie_test(): + conn = db.get_db() + cur = conn.cursor() + view_results = [] + query = '''SELECT + movie_details.*, movie_paths.movie_path + FROM + movie_details + JOIN movie_paths ON movie_paths.movie_id=movie_details.movie_id''' + + # TODO: should probably loop on movie_id, and add a list of movie_paths because + # there can be multiple paths associated with a movie_id + for row in cur.execute(query): + vr = buildViewResult(row) + vr.rel_path = row['movie_path'] + view_results.append(vr) + + return render_template('tmdb/list_movie_test.html.jinja', view_results = view_results) + @bp.route('/query_movie', methods=['GET', 'POST']) def query_movie(): errors = [] @@ -95,6 +115,8 @@ def query_movie(): query.raw_query_str = request.args['query'] query.rel_path = request.args['rel_path'] + # TODO: if query_obj.query_type is still 'UNKNOWN' from parseQueryStr(), make queries to + # both tmdb endpoints (movie and tv) if query.raw_query_str and parseQueryStr(query): if isQueryCached(query.parsed_query_str): view_results = makeLocalQuery(query) @@ -126,6 +148,7 @@ def query_movie(): return render_template( 'tmdb/query.html', view_data = view_results, + rel_path = query.rel_path, debug_str = '{} \n {} \n {} \n'.format( yaml.dump(query, indent=4), yaml.dump(response, indent=4), @@ -133,6 +156,36 @@ def query_movie(): ) ) +@bp.route('/create_mapping') +def create_mapping(): + # TODO: add option for tv shows + movie_id = request.args.get('movie_id') + rel_path = request.args.get('rel_path') + errors = [] + + if not movie_id or not rel_path: + errors.append('invalid parameter') + else: + conn = db.get_db() + cur = conn.cursor() + try: + cur.execute('INSERT INTO movie_paths(movie_id, movie_path) VALUES(?, ?)', + (movie_id, rel_path)) + except DatabaseError as e: + errors.append(e) + + if len(errors) == 0: + conn.commit() + + if errors: + flash(errors) + + return render_template('tmdb/create_mapping.html.jinja', + movie_id = movie_id, + rel_path = rel_path, + success = (len(errors) == 0) + ) + ################### # helpers @@ -190,20 +243,23 @@ def makeLocalQuery(query_obj): mq.query = ?''' for row in cur.execute(fancy_query, (query_obj.parsed_query_str, )): - vr = view_result() - vr.id = row['movie_id'] - vr.title = row['title'] - vr.overview = row['overview'] - vr.release_date = row['release_date'] - vr.original_language = row['original_language'] - vr.tmdb_link = "{}{}{}".format(TMDB_MOVIE_LINK_URL, '/', vr.id) + results.append(buildViewResult(row)) - if row['poster_path'] != None: - vr.poster_path = row['poster_path'] + return results - results.append(vr) +def buildViewResult(db_row): + vr = view_result() + vr.id = db_row['movie_id'] + vr.title = db_row['title'] + vr.overview = db_row['overview'] + vr.release_date = db_row['release_date'] + vr.original_language = db_row['original_language'] + vr.tmdb_link = "{}{}{}".format(TMDB_MOVIE_LINK_URL, '/', vr.id) - return results + if db_row['poster_path'] != None: + vr.poster_path = db_row['poster_path'] + + return vr def makeTMDBQuery(query_obj, response_obj): if query_obj.query_type == query_type.MOVIE: