|
|
|
#!/usr/bin/env python2
|
|
|
|
#
|
|
|
|
# This file is part of SickGear.
|
|
|
|
#
|
|
|
|
# SickGear is free software: you can redistribute it and/or modify
|
|
|
|
# it under the terms of the GNU General Public License as published by
|
|
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
|
|
# (at your option) any later version.
|
|
|
|
#
|
|
|
|
# SickGear is distributed in the hope that it will be useful,
|
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
# GNU General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU General Public License
|
|
|
|
# along with SickGear. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
# Check needed software dependencies to nudge users to fix their setup
|
|
|
|
from __future__ import print_function
|
|
|
|
from __future__ import with_statement
|
|
|
|
|
|
|
|
import codecs
|
|
|
|
import datetime
|
|
|
|
import errno
|
|
|
|
import getopt
|
|
|
|
import os
|
|
|
|
import signal
|
|
|
|
import sys
|
|
|
|
import shutil
|
|
|
|
import time
|
|
|
|
import threading
|
|
|
|
import warnings
|
|
|
|
|
|
|
|
warnings.filterwarnings('ignore', module=r'.*bs4_parser.*', message='.*No parser was explicitly specified.*')
|
|
|
|
warnings.filterwarnings('ignore', module=r'.*Cheetah.*')
|
|
|
|
warnings.filterwarnings('ignore', module=r'.*connectionpool.*', message='.*certificate verification.*')
|
|
|
|
warnings.filterwarnings('ignore', module=r'.*fuzzywuzzy.*')
|
|
|
|
warnings.filterwarnings('ignore', module=r'.*ssl_.*', message='.*SSLContext object.*')
|
|
|
|
warnings.filterwarnings('ignore', module=r'.*zoneinfo.*', message='.*file or directory.*')
|
|
|
|
warnings.filterwarnings('ignore', message='.*deprecated in cryptography.*')
|
|
|
|
|
|
|
|
versions = [((2, 7, 9), (2, 7, 18)), ((3, 7, 1), (3, 8, 11)),
|
|
|
|
((3, 9, 0), (3, 9, 2)), ((3, 9, 4), (3, 9, 6))] # inclusive version ranges
|
|
|
|
if not any(list(map(lambda v: v[0] <= sys.version_info[:3] <= v[1], versions))) and not int(os.environ.get('PYT', 0)):
|
|
|
|
print('Python %s.%s.%s detected.' % sys.version_info[:3])
|
|
|
|
print('Sorry, SickGear requires a Python version %s' % ', '.join(map(
|
|
|
|
lambda r: '%s - %s' % tuple(map(lambda v: str(v).replace(',', '.')[1:-1], r)), versions)))
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
sys.path.insert(1, os.path.abspath(os.path.join(os.path.dirname(__file__), 'lib')))
|
|
|
|
is_win = 'win' == sys.platform[0:3]
|
|
|
|
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
py_cache_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '__pycache__'))
|
|
|
|
for pf in ['_cleaner.pyc', '_cleaner.pyo']:
|
|
|
|
cleaner_file = os.path.normpath(os.path.join(os.path.normpath(os.path.dirname(__file__)), pf))
|
|
|
|
if os.path.isfile(cleaner_file):
|
|
|
|
os.remove(cleaner_file)
|
|
|
|
if os.path.isdir(py_cache_path):
|
|
|
|
shutil.rmtree(py_cache_path)
|
|
|
|
except (BaseException, Exception):
|
|
|
|
pass
|
|
|
|
import _cleaner
|
|
|
|
from sickbeard import piper
|
|
|
|
except (BaseException, Exception):
|
|
|
|
pass
|
|
|
|
|
|
|
|
try:
|
|
|
|
import Cheetah
|
|
|
|
except (BaseException, Exception):
|
|
|
|
print('The Python module Cheetah is required')
|
|
|
|
if is_win:
|
|
|
|
print('(1) However, this first run may have just installed it, so try to simply rerun sickgear.py again')
|
|
|
|
print('(2) If this output is a rerun of (1) then open a command line prompt and manually install using...')
|
|
|
|
else:
|
|
|
|
print('Manually install using...')
|
|
|
|
print('cd <sickgear_installed_folder>')
|
|
|
|
print('python -m pip install --user -r requirements.txt')
|
|
|
|
print('python sickgear.py')
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
# Compatibility fixes for Windows
|
|
|
|
if is_win:
|
|
|
|
codecs.register(lambda name: codecs.lookup('utf-8') if name == 'cp65001' else None)
|
|
|
|
|
|
|
|
# We only need this for compiling an EXE
|
|
|
|
from multiprocessing import freeze_support
|
|
|
|
|
|
|
|
from configobj import ConfigObj
|
|
|
|
# noinspection PyPep8Naming
|
|
|
|
from encodingKludge import EXIT_BAD_ENCODING, SYS_ENCODING
|
|
|
|
from exceptions_helper import ex
|
|
|
|
import sickbeard
|
|
|
|
from sickbeard import db, logger, name_cache, network_timezones
|
|
|
|
from sickbeard.event_queue import Events
|
|
|
|
from sickbeard.tv import TVShow
|
|
|
|
from sickbeard.webserveInit import WebServer
|
|
|
|
|
|
|
|
from six import integer_types, iteritems
|
|
|
|
|
|
|
|
throwaway = datetime.datetime.strptime('20110101', '%Y%m%d')
|
|
|
|
rollback_loaded = None
|
|
|
|
|
|
|
|
for signal_type in [signal.SIGTERM, signal.SIGINT] + ([] if not is_win else [signal.SIGBREAK]):
|
|
|
|
signal.signal(signal_type, lambda signum, void: sickbeard.sig_handler(signum=signum, _=void))
|
|
|
|
|
|
|
|
|
|
|
|
class SickGear(object):
|
|
|
|
def __init__(self):
|
|
|
|
# system event callback for shutdown/restart
|
|
|
|
sickbeard.events = Events(self.shutdown)
|
|
|
|
|
|
|
|
# daemon constants
|
|
|
|
self.run_as_daemon = False
|
|
|
|
self.create_pid = False
|
|
|
|
self.pid_file = ''
|
|
|
|
|
|
|
|
self.run_as_systemd = False
|
|
|
|
self.console_logging = False
|
|
|
|
|
|
|
|
# webserver constants
|
|
|
|
self.webserver = None
|
|
|
|
self.force_update = False
|
|
|
|
self.forced_port = None
|
|
|
|
self.no_launch = False
|
|
|
|
|
|
|
|
self.web_options = None
|
|
|
|
self.webhost = None
|
|
|
|
self.start_port = None
|
|
|
|
self.log_dir = None
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def help_message():
|
|
|
|
"""
|
|
|
|
print help message for commandline options
|
|
|
|
"""
|
|
|
|
global is_win
|
|
|
|
help_msg = ['']
|
|
|
|
help_msg += ['Usage: %s <option> <another option>\n' % sickbeard.MY_FULLNAME]
|
|
|
|
help_msg += ['Options:\n']
|
|
|
|
|
|
|
|
help_tmpl = ' %-10s%-17s%s'
|
|
|
|
for ln in [
|
|
|
|
('-h', '--help', 'Prints this message'),
|
|
|
|
('-f', '--forceupdate', 'Force update all shows in the DB (from tvdb) on startup'),
|
|
|
|
('-q', '--quiet', 'Disables logging to console'),
|
|
|
|
('', '--nolaunch', 'Suppress launching web browser on startup')
|
|
|
|
]:
|
|
|
|
help_msg += [help_tmpl % ln]
|
|
|
|
|
|
|
|
if is_win:
|
|
|
|
for ln in [
|
|
|
|
('-d', '--daemon', 'Running as daemon is not supported on Windows'),
|
|
|
|
('', '', 'On Windows, --daemon is substituted with: --quiet --nolaunch')
|
|
|
|
]:
|
|
|
|
help_msg += [help_tmpl % ln]
|
|
|
|
else:
|
|
|
|
for ln in [
|
|
|
|
('-d', '--daemon', 'Run as double forked daemon (includes options --quiet --nolaunch)'),
|
|
|
|
('-s', '--systemd', 'Run as systemd service (includes options --quiet --nolaunch)'),
|
|
|
|
('', '--pidfile=<path>', 'Combined with --daemon creates a pidfile (full path including filename)')
|
|
|
|
]:
|
|
|
|
help_msg += [help_tmpl % ln]
|
|
|
|
|
|
|
|
for ln in [
|
|
|
|
('-p <port>', '--port=<port>', 'Override default/configured port to listen on'),
|
|
|
|
('', '--datadir=<path>', 'Override folder (full path) as location for'),
|
|
|
|
('', '', 'storing database, configfile, cache, logfiles'),
|
|
|
|
('', '', 'Default: %s' % sickbeard.PROG_DIR),
|
|
|
|
('', '--config=<path>', 'Override config filename (full path including filename)'),
|
|
|
|
('', '', 'to load configuration from'),
|
|
|
|
('', '', 'Default: config.ini in %s or --datadir location' % sickbeard.PROG_DIR),
|
|
|
|
('', '--noresize', 'Prevent resizing of the banner/posters even if PIL is installed')
|
|
|
|
]:
|
|
|
|
help_msg += [help_tmpl % ln]
|
|
|
|
|
|
|
|
return '\n'.join(help_msg)
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def execute_rollback(mo, max_v, load_msg):
|
|
|
|
global rollback_loaded
|
|
|
|
try:
|
|
|
|
if None is rollback_loaded:
|
|
|
|
rollback_loaded = db.get_rollback_module()
|
|
|
|
if None is not rollback_loaded:
|
|
|
|
rc = rollback_loaded.__dict__[mo]()
|
|
|
|
rc.load_msg = load_msg
|
|
|
|
rc.run(max_v)
|
|
|
|
else:
|
|
|
|
print(u'ERROR: Could not download Rollback Module.')
|
|
|
|
except (BaseException, Exception):
|
|
|
|
pass
|
|
|
|
|
|
|
|
def start(self):
|
|
|
|
global is_win
|
|
|
|
# do some preliminary stuff
|
|
|
|
sickbeard.MY_FULLNAME = os.path.normpath(os.path.abspath(__file__))
|
|
|
|
sickbeard.MY_NAME = os.path.basename(sickbeard.MY_FULLNAME)
|
|
|
|
sickbeard.PROG_DIR = os.path.dirname(sickbeard.MY_FULLNAME)
|
|
|
|
sickbeard.DATA_DIR = sickbeard.PROG_DIR
|
|
|
|
sickbeard.MY_ARGS = sys.argv[1:]
|
|
|
|
if EXIT_BAD_ENCODING:
|
|
|
|
print('Sorry, you MUST add the SickGear folder to the PYTHONPATH environment variable')
|
|
|
|
print('or find another way to force Python to use %s for string encoding.' % SYS_ENCODING)
|
|
|
|
sys.exit(1)
|
|
|
|
sickbeard.SYS_ENCODING = SYS_ENCODING
|
|
|
|
|
|
|
|
# Need console logging for sickgear.py and SickBeard-console.exe
|
|
|
|
self.console_logging = (not hasattr(sys, 'frozen')) or (0 < sickbeard.MY_NAME.lower().find('-console'))
|
|
|
|
|
|
|
|
# Rename the main thread
|
|
|
|
threading.current_thread().name = 'MAIN'
|
|
|
|
|
|
|
|
try:
|
|
|
|
opts, args = getopt.getopt(sys.argv[1:], 'hfqdsp::',
|
|
|
|
['help', 'forceupdate', 'quiet', 'nolaunch', 'daemon', 'systemd', 'pidfile=',
|
|
|
|
'port=', 'datadir=', 'config=', 'noresize', 'update-restart', 'update-pkg'])
|
|
|
|
except getopt.GetoptError:
|
|
|
|
sys.exit(self.help_message())
|
|
|
|
|
|
|
|
for o, a in opts:
|
|
|
|
# Prints help message
|
|
|
|
if o in ('-h', '--help'):
|
|
|
|
sys.exit(self.help_message())
|
|
|
|
|
|
|
|
# For now we'll just silence the logging
|
|
|
|
if o in ('-q', '--quiet'):
|
|
|
|
self.console_logging = False
|
|
|
|
|
|
|
|
# Should we update (from indexer) all shows in the DB right away?
|
|
|
|
if o in ('-f', '--forceupdate'):
|
|
|
|
self.force_update = True
|
|
|
|
|
|
|
|
# Suppress launching web browser
|
|
|
|
# Needed for OSes without default browser assigned
|
|
|
|
# Prevent duplicate browser window when restarting in the app
|
|
|
|
if o in ('--nolaunch',):
|
|
|
|
self.no_launch = True
|
|
|
|
|
|
|
|
# Override default/configured port
|
|
|
|
if o in ('-p', '--port'):
|
|
|
|
try:
|
|
|
|
self.forced_port = int(a)
|
|
|
|
except ValueError:
|
|
|
|
sys.exit('Port: %s is not a number. Exiting.' % a)
|
|
|
|
|
|
|
|
# Run as a double forked daemon
|
|
|
|
if o in ('-d', '--daemon'):
|
|
|
|
self.run_as_daemon = True
|
|
|
|
# When running as daemon disable console_logging and don't start browser
|
|
|
|
self.console_logging = False
|
|
|
|
self.no_launch = True
|
|
|
|
|
|
|
|
if is_win:
|
|
|
|
self.run_as_daemon = False
|
|
|
|
|
|
|
|
# Run as a systemd service
|
|
|
|
if o in ('-s', '--systemd') and not is_win:
|
|
|
|
self.run_as_systemd = True
|
|
|
|
self.run_as_daemon = False
|
|
|
|
self.console_logging = False
|
|
|
|
self.no_launch = True
|
|
|
|
|
|
|
|
# Write a pidfile if requested
|
|
|
|
if o in ('--pidfile',):
|
|
|
|
self.create_pid = True
|
|
|
|
self.pid_file = str(a)
|
|
|
|
|
|
|
|
# If the pidfile already exists, sickbeard may still be running, so exit
|
|
|
|
if os.path.exists(self.pid_file):
|
|
|
|
sys.exit('PID file: %s already exists. Exiting.' % self.pid_file)
|
|
|
|
|
|
|
|
# Specify folder to load the config file from
|
|
|
|
if o in ('--config',):
|
|
|
|
sickbeard.CONFIG_FILE = os.path.abspath(a)
|
|
|
|
|
|
|
|
# Specify folder to use as the data dir
|
|
|
|
if o in ('--datadir',):
|
|
|
|
sickbeard.DATA_DIR = os.path.abspath(a)
|
|
|
|
|
|
|
|
# Prevent resizing of the banner/posters even if PIL is installed
|
|
|
|
if o in ('--noresize',):
|
|
|
|
sickbeard.NO_RESIZE = True
|
|
|
|
|
|
|
|
# The pidfile is only useful in daemon mode, make sure we can write the file properly
|
|
|
|
if self.create_pid:
|
|
|
|
if self.run_as_daemon:
|
|
|
|
pid_dir = os.path.dirname(self.pid_file)
|
|
|
|
if not os.access(pid_dir, os.F_OK):
|
|
|
|
sys.exit(u"PID dir: %s doesn't exist. Exiting." % pid_dir)
|
|
|
|
if not os.access(pid_dir, os.W_OK):
|
|
|
|
sys.exit(u'PID dir: %s must be writable (write permissions). Exiting.' % pid_dir)
|
|
|
|
|
|
|
|
else:
|
|
|
|
if self.console_logging:
|
|
|
|
print(u'Not running in daemon mode. PID file creation disabled')
|
|
|
|
|
|
|
|
self.create_pid = False
|
|
|
|
|
|
|
|
# If they don't specify a config file then put it in the data dir
|
|
|
|
if not sickbeard.CONFIG_FILE:
|
|
|
|
sickbeard.CONFIG_FILE = os.path.join(sickbeard.DATA_DIR, 'config.ini')
|
|
|
|
|
|
|
|
# Make sure that we can create the data dir
|
|
|
|
if not os.access(sickbeard.DATA_DIR, os.F_OK):
|
|
|
|
try:
|
|
|
|
os.makedirs(sickbeard.DATA_DIR, 0o744)
|
|
|
|
except os.error:
|
|
|
|
sys.exit(u'Unable to create data directory: %s Exiting.' % sickbeard.DATA_DIR)
|
|
|
|
|
|
|
|
# Make sure we can write to the data dir
|
|
|
|
if not os.access(sickbeard.DATA_DIR, os.W_OK):
|
|
|
|
sys.exit(u'Data directory: %s must be writable (write permissions). Exiting.' % sickbeard.DATA_DIR)
|
|
|
|
|
|
|
|
# Make sure we can write to the config file
|
|
|
|
if not os.access(sickbeard.CONFIG_FILE, os.W_OK):
|
|
|
|
if os.path.isfile(sickbeard.CONFIG_FILE):
|
|
|
|
sys.exit(u'Config file: %s must be writeable (write permissions). Exiting.' % sickbeard.CONFIG_FILE)
|
|
|
|
elif not os.access(os.path.dirname(sickbeard.CONFIG_FILE), os.W_OK):
|
|
|
|
sys.exit(u'Config file directory: %s must be writeable (write permissions). Exiting'
|
|
|
|
% os.path.dirname(sickbeard.CONFIG_FILE))
|
|
|
|
os.chdir(sickbeard.DATA_DIR)
|
|
|
|
|
|
|
|
if self.console_logging:
|
|
|
|
print(u'Starting up SickGear from %s' % sickbeard.CONFIG_FILE)
|
|
|
|
|
|
|
|
# Load the config and publish it to the sickbeard package
|
|
|
|
if not os.path.isfile(sickbeard.CONFIG_FILE):
|
|
|
|
print(u'Unable to find "%s", all settings will be default!' % sickbeard.CONFIG_FILE)
|
|
|
|
|
|
|
|
sickbeard.CFG = ConfigObj(sickbeard.CONFIG_FILE)
|
|
|
|
try:
|
|
|
|
stack_size = int(sickbeard.CFG['General']['stack_size'])
|
|
|
|
except (BaseException, Exception):
|
|
|
|
stack_size = None
|
|
|
|
|
|
|
|
if stack_size:
|
|
|
|
try:
|
|
|
|
threading.stack_size(stack_size)
|
|
|
|
except (BaseException, Exception) as er:
|
|
|
|
print('Stack Size %s not set: %s' % (stack_size, ex(er)))
|
|
|
|
|
|
|
|
if self.run_as_daemon:
|
|
|
|
self.daemonize()
|
|
|
|
|
|
|
|
# Get PID
|
|
|
|
sickbeard.PID = os.getpid()
|
|
|
|
|
|
|
|
# Initialize the config
|
|
|
|
sickbeard.initialize(console_logging=self.console_logging)
|
|
|
|
|
|
|
|
if self.forced_port:
|
|
|
|
logger.log(u'Forcing web server to port %s' % self.forced_port)
|
|
|
|
self.start_port = self.forced_port
|
|
|
|
else:
|
|
|
|
self.start_port = sickbeard.WEB_PORT
|
|
|
|
|
|
|
|
if sickbeard.WEB_LOG:
|
|
|
|
self.log_dir = sickbeard.LOG_DIR
|
|
|
|
else:
|
|
|
|
self.log_dir = None
|
|
|
|
|
|
|
|
# sickbeard.WEB_HOST is available as a configuration value in various
|
|
|
|
# places but is not configurable. It is supported here for historic reasons.
|
|
|
|
if sickbeard.WEB_HOST and '0.0.0.0' != sickbeard.WEB_HOST:
|
|
|
|
self.webhost = sickbeard.WEB_HOST
|
|
|
|
else:
|
|
|
|
self.webhost = (('0.0.0.0', '::')[sickbeard.WEB_IPV6], '')[sickbeard.WEB_IPV64]
|
|
|
|
|
|
|
|
# web server options
|
|
|
|
self.web_options = dict(
|
|
|
|
host=self.webhost,
|
|
|
|
port=int(self.start_port),
|
|
|
|
web_root=sickbeard.WEB_ROOT,
|
|
|
|
data_root=os.path.join(sickbeard.PROG_DIR, 'gui', sickbeard.GUI_NAME),
|
|
|
|
log_dir=self.log_dir,
|
|
|
|
username=sickbeard.WEB_USERNAME,
|
|
|
|
password=sickbeard.WEB_PASSWORD,
|
|
|
|
handle_reverse_proxy=sickbeard.HANDLE_REVERSE_PROXY,
|
|
|
|
enable_https=False,
|
|
|
|
https_cert=None,
|
|
|
|
https_key=None,
|
|
|
|
)
|
|
|
|
if sickbeard.ENABLE_HTTPS:
|
|
|
|
self.web_options.update(dict(
|
|
|
|
enable_https=sickbeard.ENABLE_HTTPS,
|
|
|
|
https_cert=os.path.join(sickbeard.PROG_DIR, sickbeard.HTTPS_CERT),
|
|
|
|
https_key=os.path.join(sickbeard.PROG_DIR, sickbeard.HTTPS_KEY)
|
|
|
|
))
|
|
|
|
|
|
|
|
# start web server
|
|
|
|
try:
|
|
|
|
# used to check if existing SG instances have been started
|
|
|
|
sickbeard.helpers.wait_for_free_port(
|
|
|
|
sickbeard.WEB_IPV6 and '::1' or self.web_options['host'], self.web_options['port'])
|
|
|
|
|
|
|
|
self.webserver = WebServer(options=self.web_options)
|
|
|
|
self.webserver.start()
|
|
|
|
# wait for server thread to be started
|
|
|
|
self.webserver.wait_server_start()
|
|
|
|
sickbeard.started = True
|
|
|
|
except (BaseException, Exception):
|
|
|
|
logger.log(u'Unable to start web server, is something else running on port %d?' % self.start_port,
|
|
|
|
logger.ERROR)
|
|
|
|
if self.run_as_systemd:
|
|
|
|
self.exit(0)
|
|
|
|
if sickbeard.LAUNCH_BROWSER and not self.no_launch:
|
|
|
|
logger.log(u'Launching browser and exiting', logger.ERROR)
|
|
|
|
sickbeard.launch_browser(self.start_port)
|
|
|
|
self.exit(1)
|
|
|
|
|
|
|
|
# Launch browser
|
|
|
|
if sickbeard.LAUNCH_BROWSER and not self.no_launch:
|
|
|
|
sickbeard.launch_browser(self.start_port)
|
|
|
|
|
|
|
|
# send pid of sg instance to ui
|
|
|
|
sickbeard.classes.loading_msg.set_msg_progress('Process-id', sickbeard.PID)
|
|
|
|
|
|
|
|
# check all db versions
|
|
|
|
for d, min_v, max_v, base_v, mo in [
|
|
|
|
('failed.db', sickbeard.failed_db.MIN_DB_VERSION, sickbeard.failed_db.MAX_DB_VERSION,
|
|
|
|
sickbeard.failed_db.TEST_BASE_VERSION, 'FailedDb'),
|
|
|
|
('cache.db', sickbeard.cache_db.MIN_DB_VERSION, sickbeard.cache_db.MAX_DB_VERSION,
|
|
|
|
sickbeard.cache_db.TEST_BASE_VERSION, 'CacheDb'),
|
|
|
|
('sickbeard.db', sickbeard.mainDB.MIN_DB_VERSION, sickbeard.mainDB.MAX_DB_VERSION,
|
|
|
|
sickbeard.mainDB.TEST_BASE_VERSION, 'MainDb')
|
|
|
|
]:
|
|
|
|
cur_db_version = db.DBConnection(d).checkDBVersion()
|
|
|
|
|
|
|
|
# handling of standalone TEST db versions
|
|
|
|
load_msg = 'Downgrading %s to production version' % d
|
|
|
|
if 100000 <= cur_db_version != max_v:
|
|
|
|
sickbeard.classes.loading_msg.set_msg_progress(load_msg, 'Rollback')
|
|
|
|
print('Your [%s] database version (%s) is a test db version and doesn\'t match SickGear required '
|
|
|
|
'version (%s), downgrading to production db' % (d, cur_db_version, max_v))
|
|
|
|
self.execute_rollback(mo, max_v, load_msg)
|
|
|
|
cur_db_version = db.DBConnection(d).checkDBVersion()
|
|
|
|
if 100000 <= cur_db_version:
|
|
|
|
print(u'Rollback to production failed.')
|
|
|
|
sys.exit(u'If you have used other forks, your database may be unusable due to their changes')
|
|
|
|
if 100000 <= max_v and None is not base_v:
|
|
|
|
max_v = base_v # set max_v to the needed base production db for test_db
|
|
|
|
print(u'Rollback to production of [%s] successful.' % d)
|
|
|
|
sickbeard.classes.loading_msg.set_msg_progress(load_msg, 'Finished')
|
|
|
|
|
|
|
|
# handling of production version higher then current base of test db
|
|
|
|
if isinstance(base_v, integer_types) and max_v >= 100000 > cur_db_version > base_v:
|
|
|
|
sickbeard.classes.loading_msg.set_msg_progress(load_msg, 'Rollback')
|
|
|
|
print('Your [%s] database version (%s) is a db version and doesn\'t match SickGear required '
|
|
|
|
'version (%s), downgrading to production base db' % (d, cur_db_version, max_v))
|
|
|
|
self.execute_rollback(mo, base_v, load_msg)
|
|
|
|
cur_db_version = db.DBConnection(d).checkDBVersion()
|
|
|
|
if 100000 <= cur_db_version:
|
|
|
|
print(u'Rollback to production base failed.')
|
|
|
|
sys.exit(u'If you have used other forks, your database may be unusable due to their changes')
|
|
|
|
if 100000 <= max_v and None is not base_v:
|
|
|
|
max_v = base_v # set max_v to the needed base production db for test_db
|
|
|
|
print(u'Rollback to production base of [%s] successful.' % d)
|
|
|
|
sickbeard.classes.loading_msg.set_msg_progress(load_msg, 'Finished')
|
|
|
|
|
|
|
|
# handling of production db versions
|
|
|
|
if 0 < cur_db_version < 100000:
|
|
|
|
if cur_db_version < min_v:
|
|
|
|
print(u'Your [%s] database version (%s) is too old to migrate from with this version of SickGear'
|
|
|
|
% (d, cur_db_version))
|
|
|
|
sys.exit(u'Upgrade using a previous version of SG first,'
|
|
|
|
+ u' or start with no database file to begin fresh')
|
|
|
|
if cur_db_version > max_v:
|
|
|
|
sickbeard.classes.loading_msg.set_msg_progress(load_msg, 'Rollback')
|
|
|
|
print(u'Your [%s] database version (%s) has been incremented past'
|
|
|
|
u' what this version of SickGear supports. Trying to rollback now. Please wait...' %
|
|
|
|
(d, cur_db_version))
|
|
|
|
self.execute_rollback(mo, max_v, load_msg)
|
|
|
|
if db.DBConnection(d).checkDBVersion() > max_v:
|
|
|
|
print(u'Rollback failed.')
|
|
|
|
sys.exit(u'If you have used other forks, your database may be unusable due to their changes')
|
|
|
|
print(u'Rollback of [%s] successful.' % d)
|
|
|
|
sickbeard.classes.loading_msg.set_msg_progress(load_msg, 'Finished')
|
|
|
|
|
|
|
|
# migrate the config if it needs it
|
|
|
|
from sickbeard.config import ConfigMigrator
|
|
|
|
migrator = ConfigMigrator(sickbeard.CFG)
|
|
|
|
if migrator.config_version > migrator.expected_config_version:
|
|
|
|
self.execute_rollback('ConfigFile', migrator.expected_config_version, 'Downgrading config.ini')
|
|
|
|
migrator = ConfigMigrator(sickbeard.CFG)
|
|
|
|
migrator.migrate_config()
|
|
|
|
|
|
|
|
# free memory
|
|
|
|
global rollback_loaded
|
|
|
|
rollback_loaded = None
|
|
|
|
sickbeard.classes.loading_msg.message = 'Init SickGear'
|
|
|
|
|
|
|
|
# Initialize the threads and other stuff
|
|
|
|
sickbeard.initialize(console_logging=self.console_logging)
|
|
|
|
|
|
|
|
# Check if we need to perform a restore first
|
|
|
|
restore_dir = os.path.join(sickbeard.DATA_DIR, 'restore')
|
|
|
|
if os.path.exists(restore_dir):
|
|
|
|
sickbeard.classes.loading_msg.message = 'Restoring files'
|
|
|
|
if self.restore(restore_dir, sickbeard.DATA_DIR):
|
|
|
|
logger.log(u'Restore successful...')
|
|
|
|
else:
|
|
|
|
logger.log_error_and_exit(u'Restore FAILED!')
|
|
|
|
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
# refresh network timezones
|
|
|
|
sickbeard.classes.loading_msg.message = 'Checking network timezones'
|
|
|
|
network_timezones.update_network_dict()
|
|
|
|
|
|
|
|
update_arg = '--update-restart'
|
|
|
|
manual_update_arg = '--update-pkg'
|
|
|
|
if update_arg not in sickbeard.MY_ARGS and sickbeard.UPDATES_TODO \
|
|
|
|
and (manual_update_arg in sickbeard.MY_ARGS or sickbeard.UPDATE_PACKAGES_AUTO):
|
|
|
|
sickbeard.MEMCACHE['update_restart'] = piper.pip_update(
|
|
|
|
sickbeard.classes.loading_msg, sickbeard.UPDATES_TODO, sickbeard.DATA_DIR)
|
|
|
|
sickbeard.UPDATES_TODO = dict()
|
|
|
|
sickbeard.save_config()
|
|
|
|
|
|
|
|
if manual_update_arg in sickbeard.MY_ARGS:
|
|
|
|
sickbeard.MY_ARGS.remove(manual_update_arg)
|
|
|
|
|
|
|
|
if not sickbeard.MEMCACHE.get('update_restart'):
|
|
|
|
# Build from the DB to start with
|
|
|
|
sickbeard.classes.loading_msg.message = 'Loading shows from db'
|
|
|
|
self.load_shows_from_db()
|
|
|
|
if not db.DBConnection().has_flag('ignore_require_cleaned'):
|
|
|
|
from sickbeard.show_updater import clean_ignore_require_words
|
|
|
|
sickbeard.classes.loading_msg.message = 'Cleaning ignore/require words lists'
|
|
|
|
clean_ignore_require_words()
|
|
|
|
db.DBConnection().set_flag('ignore_require_cleaned')
|
|
|
|
|
|
|
|
# Fire up threads
|
|
|
|
sickbeard.classes.loading_msg.message = 'Starting threads'
|
|
|
|
sickbeard.start()
|
|
|
|
|
|
|
|
if sickbeard.MEMCACHE.get('update_restart'):
|
|
|
|
sickbeard.MY_ARGS.append(update_arg)
|
|
|
|
sickbeard.classes.loading_msg.message = 'Restarting SickGear after update'
|
|
|
|
time.sleep(3)
|
|
|
|
sickbeard.restart(soft=False)
|
|
|
|
# restart wait loop
|
|
|
|
while True:
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
if update_arg in sickbeard.MY_ARGS:
|
|
|
|
sickbeard.MY_ARGS.remove(update_arg)
|
|
|
|
|
|
|
|
# Build internal name cache
|
|
|
|
sickbeard.classes.loading_msg.message = 'Build name cache'
|
|
|
|
name_cache.buildNameCache()
|
|
|
|
|
|
|
|
# load all ids from xem
|
|
|
|
sickbeard.classes.loading_msg.message = 'Loading xem data'
|
|
|
|
startup_background_tasks = threading.Thread(name='XEMUPDATER', target=sickbeard.scene_exceptions.get_xem_ids)
|
|
|
|
startup_background_tasks.start()
|
|
|
|
|
|
|
|
sickbeard.classes.loading_msg.message = 'Checking history'
|
|
|
|
# check history snatched_proper update
|
|
|
|
if not db.DBConnection().has_flag('history_snatch_proper'):
|
|
|
|
# noinspection PyUnresolvedReferences
|
|
|
|
history_snatched_proper_task = threading.Thread(name='UPGRADE-HISTORY-ACTION',
|
|
|
|
target=sickbeard.history.history_snatched_proper_fix)
|
|
|
|
history_snatched_proper_task.start()
|
|
|
|
|
|
|
|
if not db.DBConnection().has_flag('kodi_nfo_default_removed'):
|
|
|
|
sickbeard.metadata.kodi.remove_default_attr()
|
Add UI changes.
Changelog
---------
Update fancyBox 2.1.6 to 3.5.7 (c4fd903).
Update jQ collapser 2.0 → 3.0.1 (c3f95ba).
Add glide.js 3.4.0 (e71f8bf) to view-show https://glidejs.com
Add object fit image 3.2.4 (f951d2a).
Update fanart icon.
Change "Import" title to "Path conflict" for clarity.
Add when a path conflict occurs during add show, users may enter a new show folder name.
Add parsing Kodi show.nfo so import existing page selects any known info source.
Change refactor mass_add_table to improve performance, and code clarity.
Change find_show_by_id improve performance by iterating less and not using elif after a return.
Add a vertical dotted line indication to the final cast slide on view-show.
Add glide arrows to view-show.
Change improve ui glide panel generally and also on startup.
Add dynamic search examples to add show view.
Change interface browse cards to new show search.
Add search placeholder syntax hints.
Add prevent user error on edit-show where "set master" is pending but Update or Cancel Edit is used instead of "Save Changes".
Add rounded borders to cast on view-show.
Add character relationship Presenter to Host.
Add third person singular pronoun on view show to a character who is portrayed by themself.
Add where a character is in multiple shows to the character page.
Change display on ui when update cast is in progress and not just queued.
Change replace swipe with move event to act on any input type event (e.g. keyboard) for glide.
Add click the glide number on view show to change slide times.
Add pause to glide.
Add cast displayed on view-show is saved whenever the glide is pause.
Add restore view-show glide startAt when in pause mode and an image is selected as first to display.
Rename from TVMaze < TVmaze in line with their branding.
Remove problematic buffering of 20 items on search results.
Add 5 mins to Trakt failure retries times.
Add spoken height to person.
Change improve speed reading for many processes.
Fix layout of multiline genre labels on view-show.
Change view-show, during adding of a show, cast links will only become links when data is actually ready to be linked to, otherwise, display as textual info.
Add new sort option "Combine source" to search show results.
Add source provider images to search result items.
Fix search box width now that the other select is reinstated.
Change correct log messages grammar.
Add visual cue of master tv info source to view show.
Add new column on manage/Bulk Change for tv info src so that shows can be sorted to isolate a provider for selection.
Add to manage/Bulk Change/Edit/TV info source.
Add auto redirect from manage/Bulk Change to manage/show-tasks if a TV info source is tasked to change.
Change improve manage/Show Tasks html template.
Change replace most of inline styles with CSS classes to improve readability and load perf.
Change use proper section dividers on manage/Show Tasks.
Fix search TVDb links only to contain lang arg, not all.
Technical commit messages (combined commits)
--------------------------------------------
Add trigger glide count when view-art is clicked as width can change.
Fix to restore show_poster due to change that now returns paths to thumbs that may not exist.
Fix search box width on Palemoon.
Change set initial cast background to full width.
Change prevent the case where a cast list of one person will produce one single fixed width 170px box before the view-show js renders the final box width.
Fix quotes in actor names breaking data-caption html markup.
Add death data to known api attrs, but still not useful yet because cant do multiple actor searches in one call
Change refresh font cache for people icon.
Fix initialisation of view-show to display overview text where there is no glide cast list.
Change improve image captions with text that cannot be copy/pasted in carousel.
Fix hash crash when multiple people play a role.
Change DRY and skip write nfo if exception from load_cast_from_tvinfo.
Change _get_show_data api4 + fallback html complete.
Add if SG_DEV_MODE=1 then logs new api4 data keys that can be added.
Fix the return and invalid number of #type declarations for the _get_show_data signature in tvdb_api.py.
Change more prep to get the request correct for api vs web requests.
Change the goal is to make it so that if apikey = '', the lib will be html sufficient and not use api.
Fix closing fb in cases that have less then display items.
Fix preventing glide btn from change after fb was closed in paused mode.
Fix the pause called when opening glide fb from destroying saved glide position
Change wait for fb to init before displaying images.
Fix clicking on cloned glider items.
Add pause glide when fb is opened
Add caption when fb is open.
Fix cursor style over glide btn
tweak the exclusion case to focus on role surname as that is the false +ve trigger in this instance
Fix use role show_obj in cast_characters.
Change rename tmpl file.
Change tweak glider ui button positions.
Change experiment with Cheetah #attr over, it is too shitty to be useful, so reverted it.
Fix cast image full image for characters.
Add exclusions to person roles relationship builder, and ensure main character presents first.
Add glide pinch zoom on mobile devices.. https://github.com/glidejs/glide/issues/507
Fix select top most item by default in info source search results.
Fix issues surrounding process to add show that has an existing folder.
Add path conflict rename suggest button when adding a show and the folder exists.
Fix correctly send tvid:prodid data between find and existing show page.
Fix a nasty c_i index exception created by newly added optimisation code. the exception was raised when an existing folder is found and the add btn pressed so that sg would redirect to the existing show path page. If sg was restarted at this point and the page then refreshed in the browser, then fail.
Add send slug:value to find show from existing show folder page.
Add use info source passed when redirected from existing show to find show.
Change improve ui text.
Change simplify and improve clarity of the template variables used.
Fix passing hash_dir through to massAddTable tmpl as was consumed in webserve parameter functions instead of being passed in kwargs.
Change find_show_by_id to be more pythonic in handling falsy values by not crashing if k/v of a dict is Nonetype.
Change use helpers md5_for_text instead of hash() function for existing dir path.
Change links got too messy, centralise creation into a function to make link params consistent and remove mistakes, from one use to another.
Change wherever ui links/images have a ref_id, if id is not original id then include original id in link
Change use reference_id for ui where available
Change to less volatile ref_id for saving and restoring glide startAt.
Change swap order into slowest to fastest for slide time
Change move calcSlideCount function to document scope so it can be called on anytime
Change call calcSlideCount when livepanel back-art is clicked
Fix minor pyc flagged issues in the sql for tv.
Change interface browse cards to new search.
Changed use of re_imdb in search to helpers and expanded to 10 digits.
Add exceptions to cast.
Fix view-show episode date for young and restless (and others) cases.
Change more tweaking of that ui text until it feels short and sweet.
Change data sent to character page, a person is in a `role` playing a character.
Change much simplified character logic due to an issue with Patrick Stewart at AD and ST.
Change improved about text on character page and add link to characters in related shows.
Change move text list processing from template and into backend.
Fix crash on get start end year.
Change fix and improve wording of ui switching tv info source.
Change make sure there is something to glide before even trying to mount it as there is an acknowledged issue that mounting an empty glide can cause 100% browser usage.
Change rescale cast images whose width leak out of container in view-show and move js into cast.js
Change move ofi.js to inc_top.tmpl
Change neaten the edging of person image.
Change contain glide to prevent it from interfering where it should not be.
Change setupGlide() is reverted as only one setup is needed, and hasGlideMounted is redundant/removed.
Change add qTip.
Change view-show sanitise startAt incase a switch makes a smaller cast.
Change improve glide pause button with multi-click.
Fix multi image alignment also fix round corners for wide images.
Fix comparison of width for images on person page.
More tweaking of css due to incorrect height on view-show.
Tidy up glider CSS files locations and remove unused files from repo.
Change move displayshow glide css and js to inc_top.
Change improve restarting glide after collapse show and hide events. hide event seems to have better continuous flow, but both do at least restart at the correct index now.
Add $.dbg var so the output of index can be seen at console level when an event is fired.
Add missing arg to calcSlideCount().
Fix for css .. will-change: transform;
Change tidy up collapser button, style its anchor instead of the span workaround.
Add resize person and character image container if width is smaller then container on modern browsers
Tidy up some ui CSS and minimise show airs text and simplify day ranges.
Change collapser to remount glide after show/hide.
Change put glide mount in try block to prevent it destroying the collapse when hiding.
Change position of cast panel to before the overview.
Rename js vars from Python to JS camelcase convention.
Fix multiple character images.
Fix IE compatibility.
Fix prevent crash when switch from tvmaze to tdvb and back again, wierd.
Change rename templates.
Reformat sql so that the multiline statements can be easily copy pasted into a pyc SQL console window for instant execution. Added missing ';' so they copy/paste execute too.
Need to drop existing tbl and copy/paste/execute new sql tbl.
Change not everything is an error, but everything is a result, therefore, tbl is renamed.
Change pushed rollback of renamed tbl.
Fix initial sorting of search results.
Change text for people queue actions.
Fix max age on appearance.
Change correct html layout for view source in web browser.
Change title for characters in db, and add tip to make explain that a different image can be correctly shown for a different person e.g. animated or multiple people cast like in The Young and Restless - Sandra Nelson (Phyllis Summers).
Fix default tvinfo search source for additional source.
Change layout of persons.
Change make multiple akas easier to read.
Fix saving tvmaze in meta .nfo data.
Add .nfo scanned once on startup to ensure tvmaze is set up.
Change style for cast carousel on view-show.
Change style for Cast update button.
Change make topbar-notification unified and use for switcher bar.
Change correct the indentation to improve maintainability.
Change replace the misuse of br with div tags.
Change remove spaces that badly affect layout, and use proper layout spacing.
Change add confirm action to clear btn and reinstate all clear buttons.
Fix Expand/collapse all + include for people queue.
Remove redundant spaces.
Change hide clear button until table is expanded. Also, move it to the right or expand/collapse btn. Shuffle the html structure around a little to set btn layout horizontally.
Fix 'More'/'Less' btn on view-show duplicating summary due to cast-holder div tag conflict.
Change view-show cast list to display known names before unknown names.
Change view-show add placeholder image for cast with no image.
Change view-show under indentation used for html of cast block.
Add some icon glyphs.
Change vertical alignment of cast to be top down to make cast images level.
Change cast update icon.
Add akas to person.
Change reduce find_show_by_id double call into one.
Change tidy up get_url.
4 years ago
|
|
|
if not db.DBConnection().has_flag('kodi_nfo_rebuild_uniqueid'):
|
|
|
|
sickbeard.metadata.kodi.rebuild_nfo()
|
|
|
|
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
my_db = db.DBConnection()
|
|
|
|
sql_result = my_db.select('SELECT * FROM tv_src_switch WHERE status = 0')
|
|
|
|
if sql_result:
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
switching = True
|
|
|
|
l_msg = 'Adding shows that are switching tv source to queue'
|
|
|
|
total_result = len(sql_result)
|
|
|
|
|
|
|
|
def q_switch(switch):
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
try:
|
|
|
|
_show_obj = sickbeard.helpers.find_show_by_id({switch['new_indexer']: switch['new_indexer_id']})
|
|
|
|
if _show_obj:
|
|
|
|
sickbeard.show_queue_scheduler.action.switch_show(
|
|
|
|
show_obj=_show_obj,
|
|
|
|
new_tvid=switch['new_indexer'], new_prodid=switch['new_indexer_id'],
|
|
|
|
force_id=bool(switch['force_id']), uid=switch['uid'],
|
|
|
|
set_pause=bool(switch['set_pause']), mark_wanted=bool(switch['mark_wanted']), resume=True,
|
|
|
|
old_tvid=switch['old_indexer'], old_prodid=switch['old_indexer_id']
|
|
|
|
)
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
except (BaseException, Exception):
|
|
|
|
pass
|
|
|
|
|
|
|
|
sickbeard.classes.loading_msg.set_msg_progress(l_msg, '0/%s' % total_result)
|
|
|
|
for i, cur_switch in enumerate(sql_result, 1):
|
|
|
|
sickbeard.classes.loading_msg.set_msg_progress(l_msg, '%s/%s' % (i, total_result))
|
|
|
|
try:
|
|
|
|
show_obj = sickbeard.helpers.find_show_by_id(
|
|
|
|
{cur_switch['old_indexer']: cur_switch['old_indexer_id']})
|
|
|
|
except (BaseException, Exception):
|
|
|
|
if cur_switch['new_indexer_id']:
|
|
|
|
# show id was already switched, but not finished updated, so queue as update
|
|
|
|
q_switch(cur_switch)
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
continue
|
|
|
|
if show_obj:
|
|
|
|
try:
|
|
|
|
sickbeard.show_queue_scheduler.action.switch_show(
|
|
|
|
show_obj=show_obj,
|
|
|
|
new_tvid=cur_switch['new_indexer'], new_prodid=cur_switch['new_indexer_id'],
|
|
|
|
force_id=bool(cur_switch['force_id']), uid=cur_switch['uid'],
|
|
|
|
set_pause=bool(cur_switch['set_pause']), mark_wanted=bool(cur_switch['mark_wanted'])
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
)
|
|
|
|
except (BaseException, Exception):
|
|
|
|
continue
|
|
|
|
elif cur_switch['new_indexer_id']:
|
|
|
|
# show id was already switched, but not finished updated, so resume
|
|
|
|
q_switch(cur_switch)
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
else:
|
|
|
|
switching = False
|
|
|
|
|
|
|
|
# Start an update if we're supposed to
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
if not switching and (self.force_update or sickbeard.UPDATE_SHOWS_ON_START):
|
|
|
|
sickbeard.classes.loading_msg.message = 'Starting a forced show update'
|
|
|
|
sickbeard.show_update_scheduler.action.run()
|
|
|
|
|
|
|
|
sickbeard.classes.loading_msg.message = 'Switching to default web server'
|
|
|
|
time.sleep(2)
|
|
|
|
self.webserver.switch_handlers()
|
|
|
|
|
|
|
|
# main loop
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
while 1:
|
|
|
|
time.sleep(1)
|
|
|
|
|
|
|
|
def daemonize(self):
|
|
|
|
"""
|
|
|
|
Fork off as a daemon
|
|
|
|
"""
|
|
|
|
# pylint: disable=E1101
|
|
|
|
# Make a non-session-leader child process
|
|
|
|
try:
|
|
|
|
pid = os.fork() # only available in UNIX
|
|
|
|
if 0 != pid:
|
|
|
|
self.exit(0)
|
|
|
|
except OSError as er:
|
|
|
|
sys.stderr.write('fork #1 failed: %d (%s)\n' % (er.errno, er.strerror))
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
os.setsid() # only available in UNIX
|
|
|
|
|
|
|
|
# Make sure I can read my own files and shut out others
|
|
|
|
prev = os.umask(0)
|
|
|
|
os.umask(prev and int('077', 8))
|
|
|
|
|
|
|
|
# Make the child a session-leader by detaching from the terminal
|
|
|
|
try:
|
|
|
|
pid = os.fork() # only available in UNIX
|
|
|
|
if 0 != pid:
|
|
|
|
self.exit(0)
|
|
|
|
except OSError as er:
|
|
|
|
sys.stderr.write('fork #2 failed: %d (%s)\n' % (er.errno, er.strerror))
|
|
|
|
sys.exit(1)
|
|
|
|
|
|
|
|
# Write pid
|
|
|
|
if self.create_pid:
|
|
|
|
pid = str(os.getpid())
|
|
|
|
logger.log(u'Writing PID: %s to %s' % (pid, self.pid_file))
|
|
|
|
try:
|
|
|
|
os.fdopen(os.open(self.pid_file, os.O_CREAT | os.O_WRONLY, 0o644), 'w').write('%s\n' % pid)
|
|
|
|
except (BaseException, Exception) as er:
|
|
|
|
logger.log_error_and_exit('Unable to write PID file: %s Error: %s [%s]' % (
|
|
|
|
self.pid_file, er.strerror, er.errno))
|
|
|
|
|
|
|
|
# Redirect all output
|
|
|
|
sys.stdout.flush()
|
|
|
|
sys.stderr.flush()
|
|
|
|
|
|
|
|
devnull = getattr(os, 'devnull', '/dev/null')
|
|
|
|
stdin = open(devnull, 'r')
|
|
|
|
stdout = open(devnull, 'a+')
|
|
|
|
stderr = open(devnull, 'a+')
|
|
|
|
os.dup2(stdin.fileno(), sys.stdin.fileno())
|
|
|
|
os.dup2(stdout.fileno(), sys.stdout.fileno())
|
|
|
|
os.dup2(stderr.fileno(), sys.stderr.fileno())
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def remove_pid_file(pidfile):
|
|
|
|
try:
|
|
|
|
if os.path.exists(pidfile):
|
|
|
|
os.remove(pidfile)
|
|
|
|
|
|
|
|
except (IOError, OSError):
|
|
|
|
return False
|
|
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def load_shows_from_db():
|
|
|
|
"""
|
|
|
|
Populates the showList with shows from the database
|
|
|
|
"""
|
|
|
|
|
|
|
|
logger.log(u'Loading initial show list')
|
|
|
|
|
|
|
|
my_db = db.DBConnection(row_type='dict')
|
|
|
|
sql_result = my_db.select(
|
|
|
|
"""
|
|
|
|
SELECT tv_shows.indexer AS tv_id, tv_shows.indexer_id AS prod_id, tv_shows.*,
|
|
|
|
ii.akas AS ii_akas,
|
|
|
|
ii.certificates AS ii_certificates,
|
|
|
|
ii.countries AS ii_countries, ii.country_codes AS ii_country_codes,
|
|
|
|
ii.genres AS ii_genres, ii.imdb_id AS ii_imdb_id,
|
|
|
|
ii.indexer AS ii_indexer, ii.indexer_id AS ii_indexer_id,
|
|
|
|
ii.last_update AS ii_ii_last_update,
|
|
|
|
ii.rating AS ii_rating, ii.runtimes AS ii_runtimes,
|
|
|
|
ii.title AS ii_title, ii.votes AS ii_votes, ii.year AS ii_year,
|
|
|
|
tsnf.fail_count AS tsnf_fail_count, tsnf.indexer AS tsnf_indexer,
|
|
|
|
tsnf.indexer_id AS tsnf_indexer_id, tsnf.last_check AS tsnf_last_check,
|
|
|
|
tsnf.last_success AS tsnf_last_success
|
|
|
|
FROM tv_shows
|
|
|
|
LEFT JOIN imdb_info ii
|
|
|
|
ON tv_shows.indexer = ii.indexer AND tv_shows.indexer_id = ii.indexer_id
|
|
|
|
LEFT JOIN tv_shows_not_found tsnf
|
|
|
|
ON tv_shows.indexer = tsnf.indexer AND tv_shows.indexer_id = tsnf.indexer_id
|
|
|
|
""")
|
|
|
|
sickbeard.showList = []
|
|
|
|
sickbeard.showDict = {}
|
|
|
|
for cur_result in sql_result:
|
|
|
|
try:
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
tv_id = int(cur_result['tv_id'])
|
|
|
|
prod_id = int(cur_result['prod_id'])
|
|
|
|
if cur_result['ii_indexer_id']:
|
|
|
|
imdb_info_sql = {_fk.replace('ii_', ''): _fv for _fk, _fv in iteritems(cur_result)
|
|
|
|
if _fk.startswith('ii_')}
|
Add support for multiple TV info sources.
Changelog
---------
Change improve loading speed of shows at startup.
Change improve main execution loop speed.
Add force cast update to view show page.
Add person view.
Add character view.
Add characters, person to clean-up cache (30 days).
Add reload person, character images every 7 days.
Add suppress UI notification for scheduled people updates during show updates and during switching ids.
Add resume support of switched shows after restart that switched id but not finished updating.
Add failed TV info switches to show tasks page.
Add remove item from queue and clear queue test buttons to mange/show-tasks and manage/search-tasks.
Change improve show update logic.
Add to view-show page a notification message if a show fails to switch.
Add check for existing show with new id pair before switching.
Change prioritize first episode start year over the start year set at the tv info source.
Change delete non existing episodes when switching indexer.
Change "exists in db" link on search results page to support any info source.
Add TMDB person pics as fallback.
Add use person fallback for character images.
Add logic to add start, end year in case of multiple characters per person.
Change improve speed getting list in the import view.
Add abort people cast update when show is deleted, also remove show from any queued show item or search item
Support list of names to search for in show search.
Change assist user search terms when the actual title of a show is unknown.
Add support URLs in search.
Change remove year from search term ... year is still used for relevancy order.
Add updating show.nfo when a cast changes.
Change use longest biography available for output.
Add UI requests of details for feb 28 will also return feb 29 in years without feb 29.
Add fetch extra data fallback from TMDB for persons.
technical commit messages (combined commits)
--------------------------------------------
Add tmdb get_trending, get_popular, get_top_rated, discover to tvinfoapi.
Add home/get_persons ajax endpoint, currently supports: birthday, deathday, names.
Change daily-schedule to new get_episode_time - More TODO
Change view-show to use get_episode_time.
Add get show updates list in show updater.
Add get_episode_time to network_timezones.
Add airtime for episode and show to get_episode_time.
Small ep obj load performance improvement.
Add handle special episodes and assign numbers based on airdate.
Add handle tvmaze specials without airdate.
Change during switch tv info source, specials are removed from db because of non-existing generic numbering.
Change add first/latest regular episode, use first_aired_regular_episode in all places that have airdate of first episode.
Add IMDb to person interface.
Add akas to person.
Add IMDb bio parser.
Add TMDB api for people.
Add character role start/end year to IMDb api and tv character.
Fix updating characters with multiple persons, by limiting to one.
Add cache to imdb_api.py.
Add cache to tmdb_api: get_person, _search_person.
Add cache to trakt get_person, _search_person cache.
Improve main execution loop speed https://stackify.com/20-simple-python-performance-tuning-tips/ point: 12
Add network to episode for tvdb_api (from show data).
Add fallback for network/timezone for tv episode to tv show.
Add skip retrieve_exceptions for tv info sources that don't have 'scene_url'.
Change move network load before show load to make sure the tvshow obj timezone can be set (startup).
Add datetime.time to/from integer to sbdatetime (hour, minute only).
Add load all indexer mapping at once from db during startup.
Add load the failed count during startup.
Change move sanitize_filename to sg_helpers.
Change move download_file to sg_helpers.
Add list_tables, list_indexes to db.py.
Add multi db column add function.
Restore backup tables during upgrade.
Use lib.tvinfo_base import everywhere.
Add new properties to tvepisode.
Add show_updates to indexer endpoint.
Add new db schema.
Add Character and Persons tables.
Add tvmaze_api lib.
Add pytvmaze lib.
Add debug __repr__ to people/show queue.
Add crew to show tvinfo_base.
Drop backup tables for now.
Don't save switch refresh, update show queue items (since they are sub queues of switch).
Remove show from switched_shows in case it is in it when deleting the show.
Use switch queue for manual switch
Load/save updated time for person/Character.
Add show_queue table.
Add _get_item_sql, _delete_item_from_db_sql to search search_queue.
Add people_queue type.
Add people scheduler.
Add people queue.
Add tvinfo source switch queue item.
Alternate naming for person/character images.
Add load and save image/thumb urls for persons.
Add load character pics.
Add save images for characters.
Add save image urls for characters to db.
Change limit for person searches to 100 instead of 10 default.
Add person verification.
Add people_url and character_url to sources that support them.
Add save castlist changes.
Add remove old characters from castlist.
Change optimize find_show_by_id.
Change improve debug info for person, character obj.
Add db_support_upsert support flag in db.py.
Add cast list objs and load from db.
Add parse and add additional images to TVInfo.
Add optional loading of images and actors/crew.
Fix _make_timestamp in py2.
Save and load _src_update_time.
Change use update time for show updates.
Add _set_network optimization.
Add src_update_timestamp to tvshow tbl.
Add updated_timestamp to TVInfoShow.
Add _indexer_update_time TVShow obj.
Add support to search for external ids on TV info sources: [TVINFO_TVDB, TVINFO_IMDb, TVINFO_TMDB, TVINFO_TRAKT].
Change show tasks page, keep remove button for failed switches always visible.
Add use get_url for tvmaze_api interface (to support failure handling), without changing original lib.
Add missing settings in switch show.
Add new switch error: TVSWITCH_ID_CONFLICT: 'new id conflicts with existing show'.
Add messages for manual switch id.
Add connection skip handling.
Add get_url failure handling to Trakt lib.
Add real search_person to tvinfo interface.
Change move TMDB api key to tmdb_api.
Add get_url usage via tmdb_api.
Change join/split of akas/join and sql group_concat to `;;;` to prevent issues with names that may contain comma (`,`).
Add Trakt api specific failure times.
Add warning about reassigning MEMCACHE
Add calc_age to sg_helpers for person page to remove dupe code.
Add return age in ajax for persons.
Change format dates on person page to honour config/General.
Add convert_to_inch_fraction_html to sg_helpers.
Change direct assign method instead of wrapper (faster).
Change force disk_pickle_protocol=2 for py2 compatibility in tvinfo cache.
Add episode rename info during switch.
Add save deleted episodes when switching tvinfo source.
Add get_switch_changed page.
Add force=True to QueueItemRefresh during switch of tvinfo to force rewriting of metadata.
Add filter character dupes in tvdb_api only take images for unique character, role combos on tvdb.
Fix humanize lib in py27.
Add diskcache to tvinfo_base.
Add doc files for diskcache lib.
Add clean tvinfo to show_updater.
Add switch_ep_errors table to sickbeard.db
Add debug log message when extra data is fetched for a person.
Change make character loading more efficient.
Add placeholder image for characters and persons.
Change start, end year moved to new extra table to support multiple person per character.
Change replace start_year, end_year with persons_years in Character class.
Add new table character_person_years, change table structure characters.
Add check if show is found for switch pages.
Add missing scheduled to cache.db people queue table.
Change trakt show search now will ignore failure handling, to make sure it's always tried when searching for shows.
Change add/improve tvmaze id cross search.
Change improve search, if only ids are given, resulting seriesnames on source will be used as text search on following tvinfo sources.
Add new parameter: prefer_person to imagecache/character endpoint.
Add if prefer_person is set and person_id is set to valid person and the character has more then 1 person assigned the character image will not be returned, instead the actors image or the placeholder.
Add only take external ids if character is confirmed in logic.
Add match name instead of person id for checking same person in show when adding cast for sources without person id (tvdb)
Add cache tmdb genres directly in dict for performance.
4 years ago
|
|
|
else:
|
|
|
|
imdb_info_sql = None
|
|
|
|
show_obj = TVShow(tv_id, prod_id, show_sql=cur_result, imdb_info_sql=imdb_info_sql)
|
|
|
|
if cur_result['tsnf_indexer_id']:
|
|
|
|
failed_result = {_fk.replace('tsnf_', ''): _fv for _fk, _fv in iteritems(cur_result)
|
|
|
|
if _fk.startswith('tsnf_')}
|
|
|
|
show_obj.helper_load_failed_db(sql_result=failed_result)
|
|
|
|
sickbeard.showList.append(show_obj)
|
|
|
|
sickbeard.showDict[show_obj.sid_int] = show_obj
|
|
|
|
except (BaseException, Exception) as err:
|
|
|
|
logger.log('There was an error creating the show in %s: %s' % (
|
|
|
|
cur_result['location'], ex(err)), logger.ERROR)
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def restore(src_dir, dst_dir):
|
|
|
|
try:
|
|
|
|
for filename in os.listdir(src_dir):
|
|
|
|
src_file = os.path.join(src_dir, filename)
|
|
|
|
dst_file = os.path.join(dst_dir, filename)
|
|
|
|
bak_file = os.path.join(dst_dir, '%s.bak' % filename)
|
|
|
|
shutil.move(dst_file, bak_file)
|
|
|
|
shutil.move(src_file, dst_file)
|
|
|
|
|
|
|
|
os.rmdir(src_dir)
|
|
|
|
return True
|
|
|
|
except (BaseException, Exception):
|
|
|
|
return False
|
|
|
|
|
|
|
|
def shutdown(self, ev_type):
|
|
|
|
if sickbeard.started:
|
|
|
|
# stop all tasks
|
|
|
|
sickbeard.halt()
|
|
|
|
|
|
|
|
# save all shows to DB
|
|
|
|
sickbeard.save_all()
|
|
|
|
|
|
|
|
# shutdown web server
|
|
|
|
if self.webserver:
|
|
|
|
logger.log('Shutting down Tornado')
|
|
|
|
self.webserver.shut_down()
|
|
|
|
try:
|
|
|
|
self.webserver.join(10)
|
|
|
|
except (BaseException, Exception):
|
|
|
|
pass
|
|
|
|
|
|
|
|
# if run as daemon delete the pidfile
|
|
|
|
if self.run_as_daemon and self.create_pid:
|
|
|
|
self.remove_pid_file(self.pid_file)
|
|
|
|
|
|
|
|
if sickbeard.events.SystemEvent.RESTART == ev_type:
|
|
|
|
|
|
|
|
popen_list = []
|
|
|
|
|
|
|
|
if sickbeard.update_software_scheduler.action.install_type in ('git', 'source'):
|
|
|
|
popen_list = [sys.executable, sickbeard.MY_FULLNAME]
|
|
|
|
|
|
|
|
if popen_list:
|
|
|
|
popen_list += sickbeard.MY_ARGS
|
|
|
|
|
|
|
|
if self.run_as_systemd:
|
|
|
|
logger.log(u'Restarting SickGear with exit(1) handler and %s' % popen_list)
|
|
|
|
logger.close()
|
|
|
|
self.exit(1)
|
|
|
|
|
|
|
|
if '--nolaunch' not in popen_list:
|
|
|
|
popen_list += ['--nolaunch']
|
|
|
|
logger.log(u'Restarting SickGear with %s' % popen_list)
|
|
|
|
logger.close()
|
|
|
|
from _23 import Popen
|
|
|
|
with Popen(popen_list, cwd=os.getcwd()):
|
|
|
|
self.exit(0)
|
|
|
|
|
|
|
|
# system exit
|
|
|
|
self.exit(0)
|
|
|
|
|
|
|
|
@staticmethod
|
|
|
|
def exit(code):
|
|
|
|
# noinspection PyProtectedMember
|
|
|
|
os._exit(code)
|
|
|
|
|
|
|
|
|
|
|
|
if '__main__' == __name__:
|
|
|
|
freeze_support()
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
# start SickGear
|
|
|
|
SickGear().start()
|
|
|
|
except IOError as e:
|
|
|
|
if e.errno != errno.EINTR:
|
|
|
|
raise
|
|
|
|
except SystemExit as e:
|
|
|
|
print('%s' % ex(e))
|
|
|
|
except (BaseException, Exception) as e:
|
|
|
|
import traceback
|
|
|
|
print(traceback.format_exc())
|
|
|
|
logger.log('SickGear.Start() exception caught %s: %s' % (ex(e), traceback.format_exc()))
|