diff --git a/video_metadata/schema.sql b/video_metadata/schema.sql
index 7ea2d5c..7813cfc 100644
--- a/video_metadata/schema.sql
+++ b/video_metadata/schema.sql
@@ -8,9 +8,10 @@ CREATE TABLE query_cache(
DROP TABLE IF EXISTS query_details;
CREATE TABLE query_details(
+ detail_id integer primary key,
movie_id integer, -- NOTE: only one of movie_id, tv_id should be set
tv_id integer,
- media_type integer, -- NOTE: 0=UNKNOW, 1=MOVIE, 2=TV_SHOW
+ media_type integer, -- NOTE: 0=UNKNOWN, 1=MOVIE, 2=TV_SHOW
title text,
overview text,
release_date date,
@@ -21,23 +22,17 @@ CREATE TABLE query_details(
DROP TABLE IF EXISTS query_mapping;
CREATE TABLE query_mapping(
query_id integer,
- movie_id integer,
- tv_id integer,
- media_type integer,
+ detail_id integer,
foreign key(query_id) references query_cache(query_id),
- foreign key(movie_id) references query_details(movie_id),
- foreign key(tv_id) references query_details(tv_id)
+ foreign key(detail_id) references query_details(detail_id)
);
DROP TABLE IF EXISTS path_cache;
CREATE TABLE path_cache(
path text unique not null,
- movie_id integer,
- tv_id integer,
- media_type integer,
+ detail_id integer,
add_date datetime, -- NOTE: date the path was mapped
- foreign key(movie_id) references query_details(movie_id),
- foreign key(tv_id) references query_details(tv_id)
+ foreign key(detail_id) references query_details(detail_id)
);
DROP TABLE IF EXISTS movie_genres;
diff --git a/video_metadata/static/file_listing.js b/video_metadata/static/file_listing.js
index 4479632..51cd903 100644
--- a/video_metadata/static/file_listing.js
+++ b/video_metadata/static/file_listing.js
@@ -99,7 +99,7 @@ function openQueryDialog(dataset, element) {
for (let result of json) {
blurb = createBlurb(result);
blurb.querySelector('.mapping_link').addEventListener('click', function(e) {
- submitFileMapping(e, result.id, result.media_type, dataset.rel_path, element);
+ submitFileMapping(e, result.detail_id, dataset.rel_path, element);
});
tclone.querySelector('#query_result_container').appendChild(blurb);
}
@@ -126,14 +126,13 @@ function createBlurb(details) {
return qtclone;
}
-async function submitFileMapping(click_event, id, media_type, rel_path, element) {
+async function submitFileMapping(click_event, detail_id, rel_path, element) {
click_event.preventDefault();
// NOTE: remove the query box
document.querySelector('body').removeChild(document.querySelector('#query_result_container'));
query_str = CREATE_MAPPING_PATH;
params = new FormData();
- params.append('id', id);
- params.append('media_type', media_type);
+ params.append('detail_id', detail_id);
params.append('rel_path', rel_path);
let json = null;
@@ -153,7 +152,7 @@ async function submitFileMapping(click_event, id, media_type, rel_path, element)
body.appendChild(clone);
window.setTimeout(function() {
body.removeChild(document.querySelector('.success_container'));
- }, 1000);
+ }, 500);
// NOTE: update the displayed link class
element.className = 'file_stored';
}
diff --git a/video_metadata/templates/index.html b/video_metadata/templates/index.html
index 9f16948..f16bd6b 100644
--- a/video_metadata/templates/index.html
+++ b/video_metadata/templates/index.html
@@ -5,5 +5,10 @@
{% endblock %}
{% block content %}
-
+
{% endblock %}
diff --git a/video_metadata/views/tmdb.py b/video_metadata/views/tmdb.py
index 79bbf79..cdf3a1f 100644
--- a/video_metadata/views/tmdb.py
+++ b/video_metadata/views/tmdb.py
@@ -16,6 +16,7 @@ from flask import Blueprint, current_app, flash, Flask, jsonify, request, render
from .. import util
from .. import db
+from . import tv_shows
####################
@@ -64,8 +65,10 @@ class response_data:
@dataclass
class view_result:
+ detail_id:int = 0
media_type:str = 'unknown'
- id: int = 0
+ movie_id: int = 0
+ tv_id: int = 0
title: str = ''
release_date: str = ''
overview: str = ''
@@ -101,9 +104,9 @@ class result_encoder(json.JSONEncoder):
@bp.route('/list_movie_test/')
def list_movie_test(sorting = 'title'):
if sorting == 'add-date':
- orderby = 'mp.add_date'
+ orderby = 'pc.add_date'
elif sorting == 'add-date-desc':
- orderby = 'mp.add_date DESC'
+ orderby = 'pc.add_date DESC'
elif sorting == 'release-date':
orderby = 'md.release_date'
elif sorting == 'release-date-desc':
@@ -136,6 +139,25 @@ def list_movie_test(sorting = 'title'):
)
+@bp.route('/tv_show_test', methods=['GET', ])
+def tv_show_test():
+ shows = []
+ errors = []
+
+ if 'query' in request.args:
+ result = tv_shows.doTVQuery(request.args['query'])
+ shows = result['shows']
+ errors = result['errors']
+
+ if (shows):
+ pass
+
+ return render_template('tmdb/tv_show_test.html',
+ shows = shows,
+ debug_str = f'{util.dumpObject(errors)}'
+ )
+
+
@bp.route('/manual_query', methods=['GET', 'POST'])
def manual_query():
query = query_data()
@@ -195,22 +217,17 @@ def query_path_json():
path = request.args['rel_path']
cur = db.get_db().cursor()
- # NOTE: need to make an extra query to see what our id column is, tv_id or movie_id
- mr = cur.execute('SELECT media_type FROM path_cache WHERE path=?', (path, )).fetchone()
- if mr != None:
- id_column = getIDColumn(mr['media_type'])
+ q = f'''SELECT
+ qd.*, pc.*
+ FROM
+ path_cache pc
+ JOIN query_details qd ON qd.detail_id = pc.detail_id
+ WHERE
+ pc.path = ?
+ LIMIT 1'''
- q = f'''SELECT
- qd.*, pc.*
- FROM
- path_cache pc
- JOIN query_details qd ON qd.{id_column} = pc.{id_column}
- WHERE
- pc.path = ?
- LIMIT 1'''
-
- cur.execute(q, (path, ))
- row = cur.fetchone()
+ cur.execute(q, (path, ))
+ row = cur.fetchone()
if errors:
for e in errors:
@@ -227,22 +244,19 @@ def create_path_mapping():
errors = []
if not ('rel_path' in request.form
- and 'media_type' in request.form
- and 'id' in request.form
+ and 'detail_id' in request.form
):
- errors.append(f'required parameters: rel_path, media_type, id')
+ errors.append(f'required parameters: rel_path, id')
else:
- id = request.form['id']
- media_type = request.form['media_type']
+ detail_id = request.form['detail_id']
rel_path = request.form['rel_path']
- id_column = getIDColumn(media_type)
conn = db.get_db()
cur = conn.cursor()
- current_app.logger.debug(f'mapping path "{rel_path}" for id: {id}')
+ current_app.logger.debug(f'mapping path "{rel_path}" for detail_id: {detail_id}')
try:
- cur.execute(f'INSERT INTO path_cache({id_column}, media_type, path, add_date) '
- f'VALUES(?,?,?, datetime())',
- (id, media_type, rel_path ))
+ cur.execute(f'INSERT INTO path_cache(detail_id, path, add_date) '
+ f'VALUES(?,?, datetime())',
+ (detail_id, rel_path ))
except DatabaseError as e:
errors.append(str(e))
@@ -278,7 +292,13 @@ def doQueryAlgorithm(query:query_data) -> dict:
except json.JSONDecodeError as e:
errors.append(e)
- if 'total_results' in response.parsed_response:
+ # TODO: testing ############
+ errors.extend(query.errors)
+ errors.extend(response.errors)
+ return {'errors': errors, 'results': view_results}
+ ###########################
+
+ if response.parsed_response and 'total_results' in response.parsed_response:
response.result_count = response.parsed_response['total_results']
# TODO: it's possible for the query results to span multiple 'pages'
@@ -357,11 +377,11 @@ def makeLocalQuery(query_obj):
query = f'''SELECT
qd.*
FROM
- query_cache mq
- JOIN query_mapping map ON mq.query_id = map.query_id
- JOIN query_details qd ON qd.{id_column} = map.{id_column}
+ query_cache qc
+ JOIN query_mapping map ON qc.query_id = map.query_id
+ JOIN query_details qd ON qd.detail_id = map.detail_id
WHERE
- mq.query = ?'''
+ qc.query = ?'''
for row in cur.execute(query, (query_obj.parsed_query_str, )):
results.append(buildViewResult(row))
@@ -371,17 +391,19 @@ def makeLocalQuery(query_obj):
def buildViewResult(db_row):
vr = view_result()
+ vr.detail_id = db_row['detail_id']
vr.media_type = db_row['media_type']
- vr.id = db_row[getIDColumn(vr.media_type)]
vr.title = db_row['title']
vr.overview = db_row['overview']
vr.release_date = db_row['release_date']
vr.original_language = db_row['original_language']
if vr.media_type == media_type.MOVIE:
- vr.tmdb_link = f'{TMDB_MOVIE_LINK_URL}{vr.id}'
+ vr.movie_id = db_row['movie_id']
+ vr.tmdb_link = f'{TMDB_MOVIE_LINK_URL}{vr.movie_id}'
elif vr.media_type == media_type.TV_SHOW:
- vr.tmdb_link = f'{TMDB_TV_LINK_URL}{vr.id}'
+ vr.tv_id = db_row['tv_id']
+ vr.tmdb_link = f'{TMDB_TV_LINK_URL}{vr.tv_id}'
if db_row['poster_path'] != None:
vr.poster_path = db_row['poster_path']
@@ -508,8 +530,8 @@ def storeTMDBQueryResults(query_obj, result_list):
(r.id, r.media_type, r.title, r.overview, r.release_date, r.original_language, r.poster_path)
)
- cur.execute(f'INSERT INTO query_mapping(query_id, {id_column}, media_type)'
- + ' VALUES (?,?,?)', (query_id, r.id, r.media_type)
+ cur.execute(f'INSERT INTO query_mapping(query_id, detail_id)'
+ + ' VALUES (?,?)', (query_id, cur.lastrowid)
)
except DatabaseError as e:
query_obj.errors.append(f'database error \'{e}\'')