Exemple #1
0
def get_profile_list():
    apikey_sonarr = settings.sonarr.apikey
    sonarr_version = get_sonarr_version()
    profiles_list = []
    # Get profiles data from Sonarr

    if sonarr_version.startswith('2'):
        url_sonarr_api_series = url_sonarr() + "/api/profile?apikey=" + apikey_sonarr
    elif sonarr_version.startswith('3'):
        url_sonarr_api_series = url_sonarr() + "/api/v3/languageprofile?apikey=" + apikey_sonarr

    try:
        profiles_json = requests.get(url_sonarr_api_series, timeout=60, verify=False)
    except requests.exceptions.ConnectionError as errc:
        logging.exception("BAZARR Error trying to get profiles from Sonarr. Connection Error.")
    except requests.exceptions.Timeout as errt:
        logging.exception("BAZARR Error trying to get profiles from Sonarr. Timeout Error.")
    except requests.exceptions.RequestException as err:
        logging.exception("BAZARR Error trying to get profiles from Sonarr.")
    else:
        # Parsing data returned from Sonarr
        if sonarr_version.startswith('2'):
            for profile in profiles_json.json():
                profiles_list.append([profile['id'], profile['language'].capitalize()])
        elif sonarr_version.startswith('3'):
            for profile in profiles_json.json():
                profiles_list.append([profile['id'], profile['name'].capitalize()])

        return profiles_list

    return None
Exemple #2
0
def update_series():
    apikey_sonarr = settings.sonarr.apikey
    if apikey_sonarr is None:
        return

    sonarr_version = get_sonarr_version()
    serie_default_enabled = settings.general.getboolean(
        'serie_default_enabled')

    if serie_default_enabled is True:
        serie_default_profile = settings.general.serie_default_profile
        if serie_default_profile == '':
            serie_default_profile = None
    else:
        serie_default_profile = None

    audio_profiles = get_profile_list()
    tagsDict = get_tags()

    # Get shows data from Sonarr
    url_sonarr_api_series = url_sonarr(
    ) + "/api/series?apikey=" + apikey_sonarr
    try:
        r = requests.get(url_sonarr_api_series, timeout=60, verify=False)
        r.raise_for_status()
    except requests.exceptions.HTTPError:
        logging.exception(
            "BAZARR Error trying to get series from Sonarr. Http error.")
        return
    except requests.exceptions.ConnectionError:
        logging.exception(
            "BAZARR Error trying to get series from Sonarr. Connection Error.")
        return
    except requests.exceptions.Timeout:
        logging.exception(
            "BAZARR Error trying to get series from Sonarr. Timeout Error.")
        return
    except requests.exceptions.RequestException:
        logging.exception("BAZARR Error trying to get series from Sonarr.")
        return

    # Get current shows in DB
    current_shows_db = database.execute(
        "SELECT sonarrSeriesId FROM table_shows")

    current_shows_db_list = [x['sonarrSeriesId'] for x in current_shows_db]
    current_shows_sonarr = []
    series_to_update = []
    series_to_add = []

    series_list_length = len(r.json())
    for i, show in enumerate(r.json(), 1):
        overview = show['overview'] if 'overview' in show else ''
        poster = ''
        fanart = ''
        for image in show['images']:
            if image['coverType'] == 'poster':
                poster_big = image['url'].split('?')[0]
                poster = os.path.splitext(
                    poster_big)[0] + '-250' + os.path.splitext(poster_big)[1]

            if image['coverType'] == 'fanart':
                fanart = image['url'].split('?')[0]

        alternate_titles = None
        if show['alternateTitles'] is not None:
            alternate_titles = str(
                [item['title'] for item in show['alternateTitles']])

        audio_language = []
        if sonarr_version.startswith('2'):
            audio_language = profile_id_to_language(show['qualityProfileId'],
                                                    audio_profiles)
        else:
            audio_language = profile_id_to_language(show['languageProfileId'],
                                                    audio_profiles)

        tags = [d['label'] for d in tagsDict if d['id'] in show['tags']]

        imdbId = show['imdbId'] if 'imdbId' in show else None

        # Add shows in Sonarr to current shows list
        current_shows_sonarr.append(show['id'])

        if show['id'] in current_shows_db_list:
            series_to_update.append({
                'title': show["title"],
                'path': show["path"],
                'tvdbId': int(show["tvdbId"]),
                'sonarrSeriesId': int(show["id"]),
                'overview': overview,
                'poster': poster,
                'fanart': fanart,
                'audio_language': str(audio_language),
                'sortTitle': show['sortTitle'],
                'year': str(show['year']),
                'alternateTitles': alternate_titles,
                'tags': str(tags),
                'seriesType': show['seriesType'],
                'imdbId': imdbId
            })
        else:
            series_to_add.append({
                'title': show["title"],
                'path': show["path"],
                'tvdbId': show["tvdbId"],
                'sonarrSeriesId': show["id"],
                'overview': overview,
                'poster': poster,
                'fanart': fanart,
                'audio_language': str(audio_language),
                'sortTitle': show['sortTitle'],
                'year': str(show['year']),
                'alternateTitles': alternate_titles,
                'tags': str(tags),
                'seriesType': show['seriesType'],
                'imdbId': imdbId,
                'profileId': serie_default_profile
            })

    # Remove old series from DB
    removed_series = list(
        set(current_shows_db_list) - set(current_shows_sonarr))

    for series in removed_series:
        database.execute("DELETE FROM table_shows WHERE sonarrSeriesId=?",
                         (series, ))
        event_stream(type='series', action='delete', series=series)

    # Update existing series in DB
    series_in_db_list = []
    series_in_db = database.execute(
        "SELECT title, path, tvdbId, sonarrSeriesId, overview, poster, fanart, "
        "audio_language, sortTitle, year, alternateTitles, tags, seriesType, imdbId FROM table_shows"
    )

    for item in series_in_db:
        series_in_db_list.append(item)

    series_to_update_list = [
        i for i in series_to_update if i not in series_in_db_list
    ]

    for updated_series in series_to_update_list:
        query = dict_converter.convert(updated_series)
        database.execute(
            '''UPDATE table_shows SET ''' + query.keys_update +
            ''' WHERE sonarrSeriesId = ?''',
            query.values + (updated_series['sonarrSeriesId'], ))
        event_stream(type='series',
                     action='update',
                     series=updated_series['sonarrSeriesId'])

    # Insert new series in DB
    for added_series in series_to_add:
        query = dict_converter.convert(added_series)
        result = database.execute(
            '''INSERT OR IGNORE INTO table_shows(''' + query.keys_insert +
            ''') VALUES(''' + query.question_marks + ''')''', query.values)
        if result:
            list_missing_subtitles(no=added_series['sonarrSeriesId'])
        else:
            logging.debug(
                'BAZARR unable to insert this series into the database:',
                path_mappings.path_replace(added_series['path']))

            event_stream(type='series',
                         action='insert',
                         series=added_series['sonarrSeriesId'])

            logging.debug(
                'BAZARR All series synced from Sonarr into database.')
Exemple #3
0
# coding=utf-8

import cPickle as pickle
import base64
import random
import platform
import os

from pyga.requests import Event, Page, Tracker, Session, Visitor, Config
from pyga.entities import CustomVariable

from get_args import args
from config import settings
from utils import get_sonarr_version, get_radarr_version

sonarr_version = get_sonarr_version()
radarr_version = get_radarr_version()


def track_event(category=None, action=None, label=None):
    if not settings.analytics.getboolean('enabled'):
        return

    anonymousConfig = Config()
    anonymousConfig.anonimize_ip_address = True

    tracker = Tracker('UA-138214134-3', 'none', conf=anonymousConfig)

    try:
        visitor = pickle.loads(base64.b64decode(settings.analytics.visitor))
    except:
Exemple #4
0
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
    serie_default_forced = settings.general.serie_default_forced

    if apikey_sonarr is None:
        pass
    else:
        audio_profiles = get_profile_list()

        # Get shows data from Sonarr
        url_sonarr_api_series = url_sonarr(
        ) + "/api/series?apikey=" + apikey_sonarr
        try:
            r = requests.get(url_sonarr_api_series, timeout=60, verify=False)
            r.raise_for_status()
        except requests.exceptions.HTTPError as errh:
            logging.exception(
                "BAZARR Error trying to get series from Sonarr. Http error.")
            return
        except requests.exceptions.ConnectionError as errc:
            logging.exception(
                "BAZARR Error trying to get series from Sonarr. Connection Error."
            )
            return
        except requests.exceptions.Timeout as errt:
            logging.exception(
                "BAZARR Error trying to get series from Sonarr. Timeout Error."
            )
            return
        except requests.exceptions.RequestException as err:
            logging.exception("BAZARR Error trying to get series from Sonarr.")
            return
        else:
            # Get current shows in DB
            current_shows_db = database.execute(
                "SELECT sonarrSeriesId FROM table_shows")

            current_shows_db_list = [
                x['sonarrSeriesId'] for x in current_shows_db
            ]
            current_shows_sonarr = []
            series_to_update = []
            series_to_add = []
            altered_series = []

            seriesListLength = len(r.json())
            for i, show in enumerate(r.json(), 1):
                notifications.write(msg="Getting series data from Sonarr...",
                                    queue='get_series',
                                    item=i,
                                    length=seriesListLength)
                try:
                    overview = six.text_type(show['overview'])
                except:
                    overview = ""
                try:
                    poster_big = show['images'][2]['url'].split('?')[0]
                    poster = os.path.splitext(poster_big)[
                        0] + '-250' + os.path.splitext(poster_big)[1]
                except:
                    poster = ""
                try:
                    fanart = show['images'][0]['url'].split('?')[0]
                except:
                    fanart = ""

                if show['alternateTitles'] != None:
                    alternateTitles = str(
                        [item['title'] for item in show['alternateTitles']])
                else:
                    alternateTitles = None

                # Add shows in Sonarr to current shows list
                current_shows_sonarr.append(show['id'])

                if show['tvdbId'] in current_shows_db_list:
                    series_to_update.append({
                        'title':
                        six.text_type(show["title"]),
                        'path':
                        six.text_type(show["path"]),
                        'tvdbId':
                        int(show["tvdbId"]),
                        'sonarrSeriesId':
                        int(show["id"]),
                        'overview':
                        six.text_type(overview),
                        'poster':
                        six.text_type(poster),
                        'fanart':
                        six.text_type(fanart),
                        'audio_language':
                        six.text_type(
                            profile_id_to_language(
                                (show['qualityProfileId']
                                 if get_sonarr_version().startswith('2') else
                                 show['languageProfileId']), audio_profiles)),
                        'sortTitle':
                        six.text_type(show['sortTitle']),
                        'year':
                        six.text_type(show['year']),
                        'alternateTitles':
                        six.text_type(alternateTitles)
                    })
                else:
                    if serie_default_enabled is True:
                        series_to_add.append({
                            'title':
                            show["title"],
                            'path':
                            show["path"],
                            'tvdbId':
                            show["tvdbId"],
                            'languages':
                            serie_default_language,
                            'hearing_impaired':
                            serie_default_hi,
                            'sonarrSeriesId':
                            show["id"],
                            'overview':
                            overview,
                            'poster':
                            poster,
                            'fanart':
                            fanart,
                            'audio_language':
                            profile_id_to_language(
                                (show['qualityProfileId']
                                 if sonarr_version.startswith('2') else
                                 show['languageProfileId']), audio_profiles),
                            'sortTitle':
                            show['sortTitle'],
                            'year':
                            show['year'],
                            'alternateTitles':
                            alternateTitles,
                            'forced':
                            serie_default_forced
                        })
                    else:
                        series_to_add.append({
                            'title':
                            show["title"],
                            'path':
                            show["path"],
                            'tvdbId':
                            show["tvdbId"],
                            'sonarrSeriesId':
                            show["id"],
                            'overview':
                            overview,
                            'poster':
                            poster,
                            'fanart':
                            fanart,
                            'audio_language':
                            profile_id_to_language(
                                (show['qualityProfileId']
                                 if sonarr_version.startswith('2') else
                                 show['languageProfileId']), audio_profiles),
                            'sortTitle':
                            show['sortTitle'],
                            'year':
                            show['year'],
                            'alternateTitles':
                            alternateTitles
                        })

            # Remove old series from DB
            removed_series = list(
                set(current_shows_db_list) - set(current_shows_sonarr))

            for series in removed_series:
                database.execute(
                    "DELETE FROM table_shows WHERE sonarrSEriesId=?",
                    (series, ))

            # Update existing series in DB
            series_in_db_list = []
            series_in_db = database.execute(
                "SELECT title, path, tvdbId, sonarrSeriesId, overview, poster, fanart, "
                "audio_language, sortTitle, year, alternateTitles FROM table_shows"
            )

            for item in series_in_db:
                series_in_db_list.append(item)

            series_to_update_list = [
                i for i in series_to_update if i not in series_in_db_list
            ]

            for updated_series in series_to_update_list:
                query = dict_converter.convert(updated_series)
                database.execute(
                    '''UPDATE table_shows SET ''' + query.keys_update +
                    ''' WHERE sonarrSeriesId = ?''',
                    query.values + (updated_series['sonarrSeriesId'], ))

            # Insert new series in DB
            for added_series in series_to_add:
                query = dict_converter.convert(added_series)
                result = database.execute(
                    '''INSERT OR IGNORE INTO table_shows(''' +
                    query.keys_insert + ''') VALUES(''' +
                    query.question_marks + ''')''', query.values)
                if result:
                    list_missing_subtitles(no=added_series['sonarrSeriesId'])
                else:
                    logging.debug(
                        'BAZARR unable to insert this series into the database:',
                        path_replace(added_series['path']))

            logging.debug(
                'BAZARR All series synced from Sonarr into database.')
Exemple #5
0
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
    serie_default_forced = settings.general.serie_default_forced
    
    if apikey_sonarr is None:
        pass
    else:
        audio_profiles = get_profile_list()
        
        # Get shows data from Sonarr
        url_sonarr_api_series = url_sonarr + "/api/series?apikey=" + apikey_sonarr
        try:
            r = requests.get(url_sonarr_api_series, timeout=60, verify=False)
            r.raise_for_status()
        except requests.exceptions.HTTPError as errh:
            logging.exception("BAZARR Error trying to get series from Sonarr. Http error.")
            return
        except requests.exceptions.ConnectionError as errc:
            logging.exception("BAZARR Error trying to get series from Sonarr. Connection Error.")
            return
        except requests.exceptions.Timeout as errt:
            logging.exception("BAZARR Error trying to get series from Sonarr. Timeout Error.")
            return
        except requests.exceptions.RequestException as err:
            logging.exception("BAZARR Error trying to get series from Sonarr.")
            return
        else:
            # Get current shows in DB
            current_shows_db = TableShows.select(
                TableShows.tvdb_id
            )
            
            current_shows_db_list = [x.tvdb_id for x in current_shows_db]
            current_shows_sonarr = []
            series_to_update = []
            series_to_add = []
            altered_series = []

            seriesListLength = len(r.json())
            for i, show in enumerate(r.json(), 1):
                notifications.write(msg="Getting series data from Sonarr...", queue='get_series', item=i, length=seriesListLength)
                try:
                    overview = unicode(show['overview'])
                except:
                    overview = ""
                try:
                    poster_big = show['images'][2]['url'].split('?')[0]
                    poster = os.path.splitext(poster_big)[0] + '-250' + os.path.splitext(poster_big)[1]
                except:
                    poster = ""
                try:
                    fanart = show['images'][0]['url'].split('?')[0]
                except:
                    fanart = ""

                if show['alternateTitles'] != None:
                    alternateTitles = str([item['title'] for item in show['alternateTitles']])
                else:
                    alternateTitles = None

                # Add shows in Sonarr to current shows list
                current_shows_sonarr.append(show['tvdbId'])
                
                if show['tvdbId'] in current_shows_db_list:
                    series_to_update.append({'title': unicode(show["title"]),
                                             'path': unicode(show["path"]),
                                             'tvdb_id': int(show["tvdbId"]),
                                             'sonarr_series_id': int(show["id"]),
                                             'overview': unicode(overview),
                                             'poster': unicode(poster),
                                             'fanart': unicode(fanart),
                                             'audio_language': unicode(profile_id_to_language((show['qualityProfileId'] if sonarr_version.startswith('2') else show['languageProfileId']), audio_profiles)),
                                             'sort_title': unicode(show['sortTitle']),
                                             'year': unicode(show['year']),
                                             'alternate_titles': unicode(alternateTitles)})
                else:
                    if serie_default_enabled is True:
                        series_to_add.append({'title': show["title"],
                                              'path': show["path"],
                                              'tvdb_id': show["tvdbId"],
                                              'languages': serie_default_language,
                                              'hearing_impaired': serie_default_hi,
                                              'sonarr_series_id': show["id"],
                                              'overview': overview,
                                              'poster': poster,
                                              'fanart': fanart,
                                              '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,
                                              'forced': serie_default_forced})
                    else:
                        series_to_add.append({'title': show["title"],
                                              'path': show["path"],
                                              'tvdb_id': show["tvdbId"],
                                              'sonarr_series_id': show["id"],
                                              'overview': overview,
                                              'poster': poster,
                                              'fanart': fanart,
                                              '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})
            
            # Update existing series in DB
            series_in_db_list = []
            series_in_db = TableShows.select(
                TableShows.title,
                TableShows.path,
                TableShows.tvdb_id,
                TableShows.sonarr_series_id,
                TableShows.overview,
                TableShows.poster,
                TableShows.fanart,
                TableShows.audio_language,
                TableShows.sort_title,
                TableShows.year,
                TableShows.alternate_titles
            ).dicts()

            for item in series_in_db:
                series_in_db_list.append(item)

            series_to_update_list = [i for i in series_to_update if i not in series_in_db_list]

            for updated_series in series_to_update_list:
                TableShows.update(
                    updated_series
                ).where(
                    TableShows.sonarr_series_id == updated_series['sonarr_series_id']
                ).execute()

            # Insert new series in DB
            for added_series in series_to_add:
                TableShows.insert(
                    added_series
                ).on_conflict_ignore().execute()
                list_missing_subtitles(added_series['sonarr_series_id'])

            # Remove old series from DB
            removed_series = list(set(current_shows_db_list) - set(current_shows_sonarr))

            for series in removed_series:
                TableShows.delete().where(
                    TableShows.tvdb_id == series
                ).execute()

            logging.debug('BAZARR All series synced from Sonarr into database.')
Exemple #6
0
def update_series():
    notifications.write(msg="Update series list from Sonarr is running...",
                        queue='get_series')
    apikey_sonarr = settings.sonarr.apikey
    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
    serie_default_forced = settings.general.serie_default_forced

    if apikey_sonarr is None:
        pass
    else:
        audio_profiles = get_profile_list()

        # Get shows data from Sonarr
        url_sonarr_api_series = url_sonarr + "/api/series?apikey=" + apikey_sonarr
        try:
            r = requests.get(url_sonarr_api_series, timeout=60, verify=False)
            r.raise_for_status()
        except requests.exceptions.HTTPError as errh:
            logging.exception(
                "BAZARR Error trying to get series from Sonarr. Http error.")
        except requests.exceptions.ConnectionError as errc:
            logging.exception(
                "BAZARR Error trying to get series from Sonarr. Connection Error."
            )
        except requests.exceptions.Timeout as errt:
            logging.exception(
                "BAZARR Error trying to get series from Sonarr. Timeout Error."
            )
        except requests.exceptions.RequestException as err:
            logging.exception("BAZARR Error trying to get series from Sonarr.")
        else:
            # Open database connection
            db = sqlite3.connect(os.path.join(args.config_dir, 'db',
                                              'bazarr.db'),
                                 timeout=30)
            c = db.cursor()

            # Get current shows in DB
            current_shows_db = c.execute(
                'SELECT tvdbId FROM table_shows').fetchall()

            # Close database connection
            db.close()

            current_shows_db_list = [x[0] for x in current_shows_db]
            current_shows_sonarr = []
            series_to_update = []
            series_to_add = []

            seriesListLength = len(r.json())
            for i, show in enumerate(r.json(), 1):
                notifications.write(msg="Getting series data from Sonarr...",
                                    queue='get_series',
                                    item=i,
                                    length=seriesListLength)
                try:
                    overview = unicode(show['overview'])
                except:
                    overview = ""
                try:
                    poster_big = show['images'][2]['url'].split('?')[0]
                    poster = os.path.splitext(poster_big)[
                        0] + '-250' + os.path.splitext(poster_big)[1]
                except:
                    poster = ""
                try:
                    fanart = show['images'][0]['url'].split('?')[0]
                except:
                    fanart = ""

                if show['alternateTitles'] != None:
                    alternateTitles = str(
                        [item['title'] for item in show['alternateTitles']])

                # Add shows in Sonarr to current shows list
                current_shows_sonarr.append(show['tvdbId'])

                if show['tvdbId'] in current_shows_db_list:
                    series_to_update.append(
                        (show["title"], show["path"], show["tvdbId"],
                         show["id"], overview, poster, fanart,
                         profile_id_to_language(
                             (show['qualityProfileId']
                              if get_sonarr_version().startswith('2') else
                              show['languageProfileId']),
                             audio_profiles), show['sortTitle'], show['year'],
                         alternateTitles, show["tvdbId"]))
                else:
                    if serie_default_enabled is True:
                        series_to_add.append(
                            (show["title"], show["path"], show["tvdbId"],
                             serie_default_language, serie_default_hi,
                             show["id"], overview, poster, fanart,
                             profile_id_to_language(
                                 (show['qualityProfileId']
                                  if get_sonarr_version().startswith('2') else
                                  show['languageProfileId']), audio_profiles),
                             show['sortTitle'], show['year'], alternateTitles,
                             serie_default_forced))
                    else:
                        series_to_add.append(
                            (show["title"], show["path"], show["tvdbId"],
                             show["tvdbId"], show["tvdbId"], show["id"],
                             overview, poster, fanart,
                             profile_id_to_language(
                                 (show['qualityProfileId']
                                  if get_sonarr_version().startswith('2') else
                                  show['languageProfileId']),
                                 audio_profiles), show['sortTitle'],
                             show['year'], alternateTitles, show["id"]))

            # Update or insert series in DB
            db = sqlite3.connect(os.path.join(args.config_dir, 'db',
                                              'bazarr.db'),
                                 timeout=30)
            c = db.cursor()

            updated_result = c.executemany(
                '''UPDATE table_shows SET title = ?, path = ?, tvdbId = ?, sonarrSeriesId = ?, overview = ?, poster = ?, fanart = ?, `audio_language` = ? , sortTitle = ?, year = ?, alternateTitles = ? WHERE tvdbid = ?''',
                series_to_update)
            db.commit()

            if serie_default_enabled is True:
                added_result = c.executemany(
                    '''INSERT OR IGNORE INTO table_shows(title, path, tvdbId, languages,`hearing_impaired`, sonarrSeriesId, overview, poster, fanart, `audio_language`, sortTitle, year, alternateTitles, forced) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)''',
                    series_to_add)
                db.commit()
            else:
                added_result = c.executemany(
                    '''INSERT OR IGNORE INTO table_shows(title, path, tvdbId, languages,`hearing_impaired`, sonarrSeriesId, overview, poster, fanart, `audio_language`, sortTitle, year, alternateTitles, forced) VALUES (?,?,?,(SELECT languages FROM table_shows WHERE tvdbId = ?),(SELECT `hearing_impaired` FROM table_shows WHERE tvdbId = ?), ?, ?, ?, ?, ?, ?, ?, ?, (SELECT `forced` FROM table_shows WHERE tvdbId = ?))''',
                    series_to_add)
                db.commit()
            db.close()

            for show in series_to_add:
                list_missing_subtitles(show[5])

            # Delete shows not in Sonarr anymore
            deleted_items = []
            for item in current_shows_db_list:
                if item not in current_shows_sonarr:
                    deleted_items.append(tuple([item]))
            db = sqlite3.connect(os.path.join(args.config_dir, 'db',
                                              'bazarr.db'),
                                 timeout=30)
            c = db.cursor()
            c.executemany('DELETE FROM table_shows WHERE tvdbId = ?',
                          deleted_items)
            db.commit()
            db.close()