This commit is contained in:
Louis Vézina 2019-10-28 00:05:28 -04:00
parent 4a911f43e5
commit 75a0a5ace4
4 changed files with 169 additions and 4 deletions

88
bazarr/create_db.sql Normal file
View File

@ -0,0 +1,88 @@
BEGIN TRANSACTION;
CREATE TABLE "table_shows" (
`tvdbId` INTEGER NOT NULL UNIQUE,
`title` TEXT NOT NULL,
`path` TEXT NOT NULL UNIQUE,
`languages` TEXT,
`hearing_impaired` TEXT,
`sonarrSeriesId` INTEGER NOT NULL UNIQUE,
`overview` TEXT,
`poster` TEXT,
`fanart` TEXT,
`audio_language` "text",
`sortTitle` "text",
PRIMARY KEY(`tvdbId`)
);
CREATE TABLE "table_settings_providers" (
`name` TEXT NOT NULL UNIQUE,
`enabled` INTEGER,
`username` "text",
`password` "text",
PRIMARY KEY(`name`)
);
CREATE TABLE "table_settings_notifier" (
`name` TEXT,
`url` TEXT,
`enabled` INTEGER,
PRIMARY KEY(`name`)
);
CREATE TABLE "table_settings_languages" (
`code3` TEXT NOT NULL UNIQUE,
`code2` TEXT,
`name` TEXT NOT NULL,
`enabled` INTEGER,
`code3b` TEXT,
PRIMARY KEY(`code3`)
);
CREATE TABLE "table_history" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`action` INTEGER NOT NULL,
`sonarrSeriesId` INTEGER NOT NULL,
`sonarrEpisodeId` INTEGER NOT NULL,
`timestamp` INTEGER NOT NULL,
`description` TEXT NOT NULL
);
CREATE TABLE "table_episodes" (
`sonarrSeriesId` INTEGER NOT NULL,
`sonarrEpisodeId` INTEGER NOT NULL UNIQUE,
`title` TEXT NOT NULL,
`path` TEXT NOT NULL,
`season` INTEGER NOT NULL,
`episode` INTEGER NOT NULL,
`subtitles` TEXT,
`missing_subtitles` TEXT,
`scene_name` TEXT,
`monitored` TEXT,
`failedAttempts` "text"
);
CREATE TABLE "table_movies" (
`tmdbId` TEXT NOT NULL UNIQUE,
`title` TEXT NOT NULL,
`path` TEXT NOT NULL UNIQUE,
`languages` TEXT,
`subtitles` TEXT,
`missing_subtitles` TEXT,
`hearing_impaired` TEXT,
`radarrId` INTEGER NOT NULL UNIQUE,
`overview` TEXT,
`poster` TEXT,
`fanart` TEXT,
`audio_language` "text",
`sceneName` TEXT,
`monitored` TEXT,
`failedAttempts` "text",
PRIMARY KEY(`tmdbId`)
);
CREATE TABLE "table_history_movie" (
`id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
`action` INTEGER NOT NULL,
`radarrId` INTEGER NOT NULL,
`timestamp` INTEGER NOT NULL,
`description` TEXT NOT NULL
);
CREATE TABLE "system" (
`configured` TEXT,
`updated` TEXT
);
INSERT INTO `system` (configured, updated) VALUES ('0', '0');
COMMIT;

View File

@ -5,6 +5,30 @@ from six import string_types
from get_args import args
from helper import path_replace, path_replace_movie, path_replace_reverse, path_replace_reverse_movie
def db_init():
import sqlite3
import os
import logging
from get_args import args
if not os.path.exists(os.path.join(args.config_dir, 'db', 'bazarr.db')):
# Get SQL script from file
fd = open(os.path.join(os.path.dirname(__file__), 'create_db.sql'), 'r')
script = fd.read()
# Close SQL script file
fd.close()
# Open database connection
db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
c = db.cursor()
# Execute script and commit change to database
c.executescript(script)
# Close database connection
db.close()
logging.info('BAZARR Database created successfully')
database = Sqlite3Worker(os.path.join(args.config_dir, 'db', 'bazarr.db'), max_queue_size=256, as_dict=True)
@ -57,4 +81,36 @@ class SqliteDictPathMapper:
return path_replace(values_dict)
dict_mapper = SqliteDictPathMapper()
dict_mapper = SqliteDictPathMapper()
def db_upgrade():
columnToAdd = [
['table_shows', 'year', 'text'],
['table_shows', 'alternateTitles', 'text'],
['table_shows', 'forced', 'text', 'False'],
['table_episodes', 'format', 'text'],
['table_episodes', 'resolution', 'text'],
['table_episodes', 'video_codec', 'text'],
['table_episodes', 'audio_codec', 'text'],
['table_episodes', 'episode_file_id', 'integer'],
['table_movies', 'sortTitle', 'text'],
['table_movies', 'year', 'text'],
['table_movies', 'alternativeTitles', 'text'],
['table_movies', 'format', 'text'],
['table_movies', 'resolution', 'text'],
['table_movies', 'video_codec', 'text'],
['table_movies', 'audio_codec', 'text'],
['table_movies', 'imdbId', 'text'],
['table_movies', 'forced', 'text', 'False'],
['table_movies', 'movie_file_id', 'integer']
]
for column in columnToAdd:
try:
if len(column) == 3:
database.execute('''ALTER TABLE {0} ADD COLUMN "{1}" "{2}"'''.format(column[0], column[1], column[2]))
else:
database.execute('''ALTER TABLE {0} ADD COLUMN "{1}" "{2}" DEFAULT "{3}"'''.format(column[0], column[1], column[2], column[3]))
except:
pass

View File

@ -8,9 +8,7 @@ import rarfile
from cork import Cork
from ConfigParser2 import ConfigParser
from config import settings
from check_update import check_releases
from get_args import args
from utils import get_binary
from dogpile.cache.region import register_backend as register_cache_backend
import subliminal
@ -54,6 +52,27 @@ if not os.path.exists(os.path.join(args.config_dir, 'cache')):
os.mkdir(os.path.join(args.config_dir, 'cache'))
logging.debug("BAZARR Created cache folder")
# create database file
if not os.path.exists(os.path.join(args.config_dir, 'db', 'bazarr.db')):
import sqlite3
# Get SQL script from file
fd = open(os.path.join(os.path.dirname(__file__), 'create_db.sql'), 'r')
script = fd.read()
# Close SQL script file
fd.close()
# Open database connection
db = sqlite3.connect(os.path.join(args.config_dir, 'db', 'bazarr.db'), timeout=30)
c = db.cursor()
# Execute script and commit change to database
c.executescript(script)
# Close database connection
db.close()
logging.info('BAZARR Database created successfully')
# upgrade database schema
from database import db_upgrade
db_upgrade()
# Configure dogpile file caching for Subliminal request
register_cache_backend("subzero.cache.file", "subzero.cache_backends.file", "SZFileBackend")
subliminal.region.configure('subzero.cache.file', expiration_time=datetime.timedelta(days=30),
@ -61,6 +80,7 @@ subliminal.region.configure('subzero.cache.file', expiration_time=datetime.timed
subliminal.region.backend.sync()
if not os.path.exists(os.path.join(args.config_dir, 'config', 'releases.txt')):
from check_update import check_releases
check_releases()
logging.debug("BAZARR Created releases file")
@ -87,6 +107,7 @@ if not os.path.exists(os.path.normpath(os.path.join(args.config_dir, 'config', '
def init_binaries():
from utils import get_binary
exe = get_binary("unrar")
rarfile.UNRAR_TOOL = exe

View File

@ -144,7 +144,7 @@ class Sqlite3Worker(threading.Thread):
def close(self):
"""Close down the thread and close the sqlite3 database file."""
self.exit_set = True
self.sql_queue.put((self.exit_token, "", ""), timeout=5)
self.sql_queue.put((self.exit_token, "", "", ""), timeout=5)
# Sleep and check that the thread is done before returning.
while self.thread_running:
time.sleep(.01) # Don't kill the CPU waiting.