diff --git a/bazarr/SSE.py b/bazarr/SSE.py index fb0f0e50e..d7777e6e9 100644 --- a/bazarr/SSE.py +++ b/bazarr/SSE.py @@ -12,7 +12,7 @@ class EventStream: def __init__(self): self.queue = deque(maxlen=100) - def write(self, type=None, series=None, episode=None, movie=None): + def write(self, type=None, action=None, series=None, episode=None, movie=None): """ :param type: The type of element. :type type: str @@ -23,7 +23,7 @@ class EventStream: :param type: The movie id. :type type: str """ - msg = {"type": type, "series": series, "episode": episode, "movie": movie} + msg = {"type": type, "action": action, "series": series, "episode": episode, "movie": movie} self.queue.append("data:" + json.dumps(msg) + "\n\n") def read(self): diff --git a/bazarr/get_series.py b/bazarr/get_series.py index d34a509b5..dda3de622 100644 --- a/bazarr/get_series.py +++ b/bazarr/get_series.py @@ -16,6 +16,7 @@ from database import database, dict_converter from utils import get_sonarr_version import six from helper import path_replace +from SSE import event_stream def update_series(): @@ -96,7 +97,7 @@ def update_series(): 'fanart': fanart, 'audio_language': profile_id_to_language((show['qualityProfileId'] if get_sonarr_version().startswith('2') else show['languageProfileId']), audio_profiles), 'sortTitle': show['sortTitle'], - 'year': show['year'], + 'year': str(show['year']), 'alternateTitles': alternateTitles}) else: if serie_default_enabled is True: @@ -148,6 +149,8 @@ def update_series(): database.execute('''UPDATE table_shows SET ''' + query.keys_update + ''' WHERE sonarrSeriesId = ?''', query.values + (updated_series['sonarrSeriesId'],)) + event_stream.write(type='series', series=updated_series['sonarrSeriesId']) + # Insert new series in DB for added_series in series_to_add: query = dict_converter.convert(added_series) @@ -160,6 +163,8 @@ def update_series(): logging.debug('BAZARR unable to insert this series into the database:', path_replace(added_series['path'])) + event_stream.write(type='series', series=added_series['sonarrSeriesId']) + logging.debug('BAZARR All series synced from Sonarr into database.') diff --git a/bazarr/list_subtitles.py b/bazarr/list_subtitles.py index 9684cc1ec..21dcf913d 100644 --- a/bazarr/list_subtitles.py +++ b/bazarr/list_subtitles.py @@ -178,6 +178,8 @@ def store_subtitles_movie(original_path, reversed_path): logging.debug('BAZARR ended subtitles indexing for this file: ' + reversed_path) + event_stream.write(type='movie', movie=movie['radarrId']) + return actual_subtitles diff --git a/views/_main.html b/views/_main.html index fe6dda959..e79920c5e 100644 --- a/views/_main.html +++ b/views/_main.html @@ -265,7 +265,7 @@ events.onmessage = function (event) { var event_json = JSON.parse(event.data); if (event_json.type === 'episode') { - rowId = $('#episodes').DataTable().row('#row_'+event_json.episode); + var rowId = $('#episodes').DataTable().row('#row_'+event_json.episode); if (rowId.length) { $.ajax({ url: "{{ url_for('api.episodes') }}?seriesid="+event_json.series+"&episodeid="+event_json.episode, @@ -277,6 +277,25 @@ }) } } + if (event_json.type === 'series') { + if (event_json.series === {{id}}) { + seriesDetailsRefresh(); + } + /* + var rowId = $('#episodes').DataTable().row('#row_'+event_json.episode); + if (rowId.length) { + $.ajax({ + url: "{{ url_for('api.episodes') }}?seriesid="+event_json.series+"&episodeid="+event_json.episode, + async: true, + success: function (data) { + $('#episodes').DataTable().row(rowId).data(data.data[0]); + $('[data-toggle="tooltip"]').tooltip({html: true}); + } + }) + } + + */ + } }; function BadgesAjax() { diff --git a/views/episodes.html b/views/episodes.html index baaefea04..620e0511c 100644 --- a/views/episodes.html +++ b/views/episodes.html @@ -211,41 +211,7 @@ nextSibling.innerText = fileName; }); - $.ajax({ - url: "{{ url_for('api.series') }}?id={{id}}" - }) - .done(function( data ) { - seriesDetails = data.data[0]; - $(document).prop('title', seriesDetails['title'] + ' - Bazarr'); - $('#seriesFanart').css('background-image', "url('{{ url_for('image_proxy', url='MediaCover/'+id+'/fanart.jpg') }}')"); - $('#seriesPoster').attr("src","{{ url_for('image_proxy', url='MediaCover/'+id+'/poster-250.jpg') }}"); - $('#seriesTitle').text(seriesDetails['title']); - - if (seriesDetails['alternateTitles'].length > 0) { - $('#seriesAlternateTitles').attr("title", "Alternative Titles:
"+seriesDetails['alternateTitles']); - $('#seriesAlternateTitles').tooltip({html:true}); - } else { - $('#seriesAlternateTitles').hide(); - } - - $('#seriesAudioLanguage').text(seriesDetails['audio_language'].name); - $('#seriesMappedPath').text(seriesDetails['mapped_path']); - $('#seriesFileCount').text(seriesDetails['episodeFileCount']+' files'); - - var languages = ''; - if (seriesDetails['languages'] !== 'None') { - seriesDetails['languages'].forEach(appendFunc); - } - - function appendFunc(value) { - languages = languages + '' + value.code2 + ' '; - } - - $('#seriesSubtitlesLanguages').html(languages); - $('#seriesHearingImpaired').text('Hearing-Impaired: '+seriesDetails['hearing_impaired']); - $('#seriesForced').text('Forced: '+seriesDetails['forced']); - $('#seriesDescription').text(seriesDetails['overview']); - }); + seriesDetailsRefresh(); var table = $('#episodes').DataTable({ "processing": true, @@ -566,5 +532,42 @@ $(this).find('form')[0].reset(); }); }); + + function seriesDetailsRefresh() { + $.ajax({ + url: "{{ url_for('api.series') }}?id={{id}}" + }).done(function (data) { + seriesDetails = data.data[0]; + $(document).prop('title', seriesDetails['title'] + ' - Bazarr'); + $('#seriesFanart').css('background-image', "url('{{ url_for('image_proxy', url='MediaCover/'+id+'/fanart.jpg') }}')"); + $('#seriesPoster').attr("src", "{{ url_for('image_proxy', url='MediaCover/'+id+'/poster-250.jpg') }}"); + $('#seriesTitle').text(seriesDetails['title']); + + if (seriesDetails['alternateTitles'].length > 0) { + $('#seriesAlternateTitles').attr("title", "Alternative Titles:
" + seriesDetails['alternateTitles']); + $('#seriesAlternateTitles').tooltip({html: true}); + } else { + $('#seriesAlternateTitles').hide(); + } + + $('#seriesAudioLanguage').text(seriesDetails['audio_language'].name); + $('#seriesMappedPath').text(seriesDetails['mapped_path']); + $('#seriesFileCount').text(seriesDetails['episodeFileCount'] + ' files'); + + var languages = ''; + if (seriesDetails['languages'] !== 'None') { + seriesDetails['languages'].forEach(appendFunc); + } + + function appendFunc(value) { + languages = languages + '' + value.code2 + ' '; + } + + $('#seriesSubtitlesLanguages').html(languages); + $('#seriesHearingImpaired').text('Hearing-Impaired: ' + seriesDetails['hearing_impaired']); + $('#seriesForced').text('Forced: ' + seriesDetails['forced']); + $('#seriesDescription').text(seriesDetails['overview']); + }); + } {% endblock tail %}