From 32f6d0861d2c1baf83ee07ffb4543009d5cf6ac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Louis=20V=C3=A9zina?= <5130500+morpheus65535@users.noreply.github.com> Date: Fri, 28 Aug 2020 22:09:38 -0400 Subject: [PATCH] Improvement to mass editor loading speed. --- bazarr/api.py | 62 +++++++++++++++++++++++++++++++++++++++++ views/movieseditor.html | 4 +-- views/serieseditor.html | 4 +-- 3 files changed, 66 insertions(+), 4 deletions(-) diff --git a/bazarr/api.py b/bazarr/api.py index 9db482869..5189a9bf7 100644 --- a/bazarr/api.py +++ b/bazarr/api.py @@ -389,6 +389,36 @@ class Series(Resource): return '', 204 +class SeriesEditor(Resource): + @authenticate + def get(self, **kwargs): + draw = request.args.get('draw') + + result = database.execute("SELECT sonarrSeriesId, title, languages, hearing_impaired, forced, audio_language " + "FROM table_shows ORDER BY sortTitle") + + row_count = len(result) + + for item in result: + # Add Datatables rowId + item.update({"DT_RowId": 'row_' + str(item['sonarrSeriesId'])}) + + # Parse audio language + item.update({"audio_language": {"name": item['audio_language'], + "code2": alpha2_from_language(item['audio_language']) or None, + "code3": alpha3_from_language(item['audio_language']) or None}}) + + # Parse desired languages + if item['languages'] and item['languages'] != 'None': + item.update({"languages": ast.literal_eval(item['languages'])}) + for i, subs in enumerate(item['languages']): + item['languages'][i] = {"name": language_from_alpha2(subs), + "code2": subs, + "code3": alpha3_from_alpha2(subs)} + + return jsonify(draw=draw, recordsTotal=row_count, recordsFiltered=row_count, data=result) + + class SeriesEditSave(Resource): @authenticate def post(self): @@ -924,6 +954,36 @@ class Movies(Resource): return '', 204 +class MoviesEditor(Resource): + @authenticate + def get(self): + draw = request.args.get('draw') + + result = database.execute("SELECT radarrId, title, languages, hearing_impaired, forced, audio_language " + "FROM table_movies ORDER BY sortTitle") + + row_count = len(result) + + for item in result: + # Add Datatables rowId + item.update({"DT_RowId": 'row_' + str(item['radarrId'])}) + + # Parse audio language + item.update({"audio_language": {"name": item['audio_language'], + "code2": alpha2_from_language(item['audio_language']) or None, + "code3": alpha3_from_language(item['audio_language']) or None}}) + + # Parse desired languages + if item['languages'] and item['languages'] != 'None': + item.update({"languages": ast.literal_eval(item['languages'])}) + for i, subs in enumerate(item['languages']): + item['languages'][i] = {"name": language_from_alpha2(subs), + "code2": subs, + "code3": alpha3_from_alpha2(subs)} + + return jsonify(draw=draw, recordsTotal=row_count, recordsFiltered=row_count, data=result) + + class MoviesEditSave(Resource): @authenticate def post(self): @@ -1843,6 +1903,7 @@ api.add_resource(SystemStatus, '/systemstatus') api.add_resource(SystemReleases, '/systemreleases') api.add_resource(Series, '/series') +api.add_resource(SeriesEditor, '/series_editor') api.add_resource(SeriesEditSave, '/series_edit_save') api.add_resource(Episodes, '/episodes') api.add_resource(EpisodesSubtitlesDelete, '/episodes_subtitles_delete') @@ -1856,6 +1917,7 @@ api.add_resource(EpisodesHistory, '/episodes_history') api.add_resource(EpisodesTools, '/episodes_tools') api.add_resource(Movies, '/movies') +api.add_resource(MoviesEditor, '/movies_editor') api.add_resource(MoviesEditSave, '/movies_edit_save') api.add_resource(MovieSubtitlesDelete, '/movie_subtitles_delete') api.add_resource(MovieSubtitlesDownload, '/movie_subtitles_download') diff --git a/views/movieseditor.html b/views/movieseditor.html index 97bd75a60..f87c9ab0e 100644 --- a/views/movieseditor.html +++ b/views/movieseditor.html @@ -67,7 +67,7 @@ var event_json = JSON.parse(event); if (event_json.type === 'movies_editor' && event_json.action === 'update') { $.ajax({ - url: "{{ url_for('api.movies') }}", + url: "{{ url_for('api.movieseditor') }}", success: function (data) { if (data.data.length) { $('#movies').DataTable().ajax.reload(resetPaging = false); @@ -96,7 +96,7 @@ lengthChange: true, responsive: true, paging: false, - ajax: "{{ url_for('api.movies') }}", + ajax: "{{ url_for('api.movieseditor') }}", columnDefs: [{ orderable: false, className: 'select-checkbox', diff --git a/views/serieseditor.html b/views/serieseditor.html index 016b2371b..058422338 100644 --- a/views/serieseditor.html +++ b/views/serieseditor.html @@ -67,7 +67,7 @@ var event_json = JSON.parse(event); if (event_json.type === 'series_editor' && event_json.action === 'update') { $.ajax({ - url: "{{ url_for('api.series') }}", + url: "{{ url_for('api.serieseditor') }}", success: function (data) { if (data.data.length) { $('#series').DataTable().ajax.reload(resetPaging = false); @@ -96,7 +96,7 @@ lengthChange: true, responsive: true, paging: false, - ajax: "{{ url_for('api.series') }}", + ajax: "{{ url_for('api.serieseditor') }}", columnDefs: [{ orderable: false, className: 'select-checkbox',