diff --git a/bazarr/analytics.py b/bazarr/analytics.py index 64c147bc2..df6fe6adb 100644 --- a/bazarr/analytics.py +++ b/bazarr/analytics.py @@ -28,11 +28,13 @@ def track_event(category=None, action=None, label=None): tracker = Tracker('UA-138214134-3', 'none', conf=anonymousConfig) try: - visitor = pickle.loads(base64.b64decode(settings.analytics.visitor)) + if settings.analytics.visitor: + visitor = pickle.loads(base64.b64decode(settings.analytics.visitor)) + if visitor.unique_id > int(0x7fffffff): + visitor.unique_id = random.randint(0, 0x7fffffff) except: visitor = Visitor() - unique_id = int(random.getrandbits(32)) - visitor.unique_id = unique_id + visitor.unique_id = long(random.randint(0, 0x7fffffff)) session = Session() event = Event(category=category, action=action, label=label, value=1) diff --git a/bazarr/database.py b/bazarr/database.py index 8ec8b02b9..d72df36e1 100644 --- a/bazarr/database.py +++ b/bazarr/database.py @@ -9,9 +9,9 @@ from playhouse.sqliteq import SqliteQueueDatabase from helper import path_replace, path_replace_movie, path_replace_reverse, path_replace_reverse_movie database = SqliteQueueDatabase( - os.path.join(args.config_dir, 'db', 'bazarr.db'), + None, use_gevent=False, - autostart=True, + autostart=False, queue_max_size=256, # Max. # of pending writes that can accumulate. results_timeout=30.0) # Max. time to wait for query to be executed. @@ -169,6 +169,8 @@ class TableSettingsNotifier(BaseModel): def database_init(): + database.init(os.path.join(args.config_dir, 'db', 'bazarr.db')) + database.start() database.connect() database.pragma('wal_checkpoint', 'TRUNCATE') # Run a checkpoint and merge remaining wal-journal. @@ -181,22 +183,7 @@ def database_init(): database.create_tables(models_list, safe=True) - # Insert default values - if System.select().count() == 0: - System.insert( - { - System.updated: 0, - System.configured: 0 - } - ).execute() - def wal_cleaning(): database.pragma('wal_checkpoint', 'TRUNCATE') # Run a checkpoint and merge remaining wal-journal. database.wal_autocheckpoint = 50 # Run an automatic checkpoint every 50 write transactions. - - -@atexit.register -def _stop_worker_threads(): - database.close() - database.stop() diff --git a/bazarr/embedded_subs_reader.py b/bazarr/embedded_subs_reader.py index 4d4819d38..44cd26b1b 100644 --- a/bazarr/embedded_subs_reader.py +++ b/bazarr/embedded_subs_reader.py @@ -28,7 +28,7 @@ class EmbeddedSubsReader: detected_languages = [] for detected_language in data['subtitles']: - subtitles_list.append([detected_language['language'], detected_language['forced']]) + subtitles_list.append([detected_language['language'], detected_language['forced'], detected_language["codec"]]) else: if os.path.splitext(file)[1] == '.mkv': with open(file, 'rb') as f: diff --git a/bazarr/get_series.py b/bazarr/get_series.py index a453f65ca..4d3dd65c8 100644 --- a/bazarr/get_series.py +++ b/bazarr/get_series.py @@ -20,6 +20,7 @@ import six def update_series(): notifications.write(msg="Update series list from Sonarr is running...", queue='get_series') apikey_sonarr = settings.sonarr.apikey + sonarr_version = get_sonarr_version() serie_default_enabled = settings.general.getboolean('serie_default_enabled') serie_default_language = settings.general.serie_default_language serie_default_hi = settings.general.serie_default_hi @@ -107,7 +108,7 @@ def update_series(): 'overview': overview, 'poster': poster, 'fanart': fanart, - 'audio_language': profile_id_to_language((show['qualityProfileId'] if get_sonarr_version().startswith('2') else show['languageProfileId']), audio_profiles), + 'audio_language': profile_id_to_language((show['qualityProfileId'] if sonarr_version.startswith('2') else show['languageProfileId']), audio_profiles), 'sort_title': show['sortTitle'], 'year': show['year'], 'alternate_titles': alternateTitles, @@ -120,7 +121,7 @@ def update_series(): 'overview': overview, 'poster': poster, 'fanart': fanart, - 'audio_language': profile_id_to_language((show['qualityProfileId'] if get_sonarr_version().startswith('2') else show['languageProfileId']), audio_profiles), + 'audio_language': profile_id_to_language((show['qualityProfileId'] if sonarr_version.startswith('2') else show['languageProfileId']), audio_profiles), 'sort_title': show['sortTitle'], 'year': show['year'], 'alternate_title': alternateTitles}) diff --git a/bazarr/get_subtitle.py b/bazarr/get_subtitle.py index c2567ead4..db5705762 100644 --- a/bazarr/get_subtitle.py +++ b/bazarr/get_subtitle.py @@ -78,7 +78,7 @@ def get_video(path, title, sceneName, use_scenename, providers=None, media_type= logging.debug('BAZARR is using those video object properties: %s', vars(video)) return video - except: + except Exception as e: logging.exception("BAZARR Error trying to get video information for this file: " + path) diff --git a/bazarr/init.py b/bazarr/init.py index a0cc711a5..b4e479c68 100644 --- a/bazarr/init.py +++ b/bazarr/init.py @@ -69,6 +69,23 @@ config_file = os.path.normpath(os.path.join(args.config_dir, 'config', 'config.i cfg = configparser2.ConfigParser() +if not os.path.exists(os.path.normpath(os.path.join(args.config_dir, 'config', 'users.json'))): + cork = Cork(os.path.normpath(os.path.join(args.config_dir, 'config')), initialize=True) + + cork._store.roles[''] = 100 + cork._store.save_roles() + + tstamp = str(time.time()) + username = password = '' + cork._store.users[username] = { + 'role': '', + 'hash': cork._hash(username, password), + 'email_addr': username, + 'desc': username, + 'creation_date': tstamp + } + cork._store.save_users() + def init_binaries(): exe = get_binary("unrar") diff --git a/bazarr/list_subtitles.py b/bazarr/list_subtitles.py index cc8432dcf..9e211c180 100644 --- a/bazarr/list_subtitles.py +++ b/bazarr/list_subtitles.py @@ -38,8 +38,12 @@ def store_subtitles(file): logging.debug("BAZARR is trying to index embedded subtitles.") try: subtitle_languages = embedded_subs_reader.list_languages(file) - for subtitle_language, subtitle_forced in subtitle_languages: + for subtitle_language, subtitle_forced, subtitle_codec in subtitle_languages: try: + if settings.general.getboolean("ignore_pgs_subs") and subtitle_codec == "hdmv_pgs_subtitle": + logging.debug("BAZARR skipping pgs sub for language: " + str(alpha2_from_alpha3(subtitle_language))) + continue + if alpha2_from_alpha3(subtitle_language) is not None: lang = str(alpha2_from_alpha3(subtitle_language)) if subtitle_forced: @@ -130,8 +134,12 @@ def store_subtitles_movie(file): logging.debug("BAZARR is trying to index embedded subtitles.") try: subtitle_languages = embedded_subs_reader.list_languages(file) - for subtitle_language, subtitle_forced in subtitle_languages: + for subtitle_language, subtitle_forced, subtitle_codec in subtitle_languages: try: + if settings.general.getboolean("ignore_pgs_subs") and subtitle_codec == "hdmv_pgs_subtitle": + logging.debug("BAZARR skipping pgs sub for language: " + str(alpha2_from_alpha3(subtitle_language))) + continue + if alpha2_from_alpha3(subtitle_language) is not None: lang = str(alpha2_from_alpha3(subtitle_language)) if subtitle_forced: diff --git a/bazarr/main.py b/bazarr/main.py index 819c16bd6..003502759 100644 --- a/bazarr/main.py +++ b/bazarr/main.py @@ -91,10 +91,16 @@ else: bottle.ERROR_PAGE_TEMPLATE = bottle.ERROR_PAGE_TEMPLATE.replace('if DEBUG and', 'if') # Reset restart required warning on start -System.update({ - System.configured: 0, - System.updated: 0 -}).execute() +if System.select().count(): + System.update({ + System.configured: 0, + System.updated: 0 + }).execute() +else: + System.insert({ + System.configured: 0, + System.updated: 0 + }).execute() # Load languages in database load_language_in_db() @@ -191,32 +197,29 @@ def shutdown(): except Exception as e: logging.error('BAZARR Cannot create bazarr.stop file.') else: - stop_file.write('') - stop_file.close() + server.stop() database.close() database.stop() - server.stop() + stop_file.write('') + stop_file.close() sys.exit(0) @route(base_url + 'restart') def restart(): try: - server.stop() - except: - logging.error('BAZARR Cannot stop CherryPy.') + restart_file = open(os.path.join(args.config_dir, "bazarr.restart"), "w") + except Exception as e: + logging.error('BAZARR Cannot create bazarr.restart file.') else: - try: - restart_file = open(os.path.join(args.config_dir, "bazarr.restart"), "w") - except Exception as e: - logging.error('BAZARR Cannot create bazarr.restart file.') - else: - # print 'Bazarr is being restarted...' - logging.info('Bazarr is being restarted...') - restart_file.write('') - restart_file.close() - database.close() - database.stop() + # print 'Bazarr is being restarted...' + logging.info('Bazarr is being restarted...') + server.stop() + database.close() + database.stop() + restart_file.write('') + restart_file.close() + sys.exit(0) @route(base_url + 'wizard') @@ -442,7 +445,7 @@ def save_wizard(): settings_movie_default_hi = 'True' settings.general.movie_default_hi = text_type(settings_movie_default_hi) - settings_movie_default_forced = str(request.forms.getall('settings_movie_default_forced')) + settings_movie_default_forced = str(request.forms.get('settings_movie_default_forced')) settings.general.movie_default_forced = text_type(settings_movie_default_forced) with open(os.path.join(args.config_dir, 'config', 'config.ini'), 'w+') as handle: @@ -1124,7 +1127,13 @@ def history(): def historyseries(): authorize() - row_count = TableHistory.select().count() + row_count = TableHistory.select( + + ).join_from( + TableHistory, TableShows, JOIN.LEFT_OUTER + ).where( + TableShows.title.is_null(False) + ).count() page = request.GET.page if page == "": page = "1" @@ -1168,6 +1177,8 @@ def historyseries(): TableHistory, TableShows, JOIN.LEFT_OUTER ).join_from( TableHistory, TableEpisodes, JOIN.LEFT_OUTER + ).where( + TableShows.title.is_null(False) ).order_by( TableHistory.timestamp.desc() ).paginate( @@ -1229,7 +1240,13 @@ def historyseries(): def historymovies(): authorize() - row_count = TableHistoryMovie.select().count() + row_count = TableHistoryMovie.select( + + ).join_from( + TableHistoryMovie, TableMovies, JOIN.LEFT_OUTER + ).where( + TableMovies.title.is_null(False) + ).count() page = request.GET.page if page == "": page = "1" @@ -1269,6 +1286,8 @@ def historymovies(): TableMovies.forced ).join_from( TableHistoryMovie, TableMovies, JOIN.LEFT_OUTER + ).where( + TableMovies.title.is_null(False) ).order_by( TableHistoryMovie.timestamp.desc() ).paginate( diff --git a/views/settings_subtitles.tpl b/views/settings_subtitles.tpl index b07c37afc..e5abf4406 100644 --- a/views/settings_subtitles.tpl +++ b/views/settings_subtitles.tpl @@ -9,7 +9,7 @@
diff --git a/views/wizard_subtitles.tpl b/views/wizard_subtitles.tpl index 74f6d2de9..71e075a23 100644 --- a/views/wizard_subtitles.tpl +++ b/views/wizard_subtitles.tpl @@ -105,9 +105,9 @@ %enabled_languages = [] %for language in settings_languages: - - %if language[3] == True: - % enabled_languages.append(str(language[1])) + + %if language.enabled == True: + % enabled_languages.append(str(language.code2)) %end %end