def get_rows(self): try: return self._cursor.execute(''.join(self._select_movies)) except sqlite3.DatabaseError as de: LOG.debug(de.message) raise PlexCleanerException("Unabled to fetch database rows {0}".format(de.message), severity=logging.ERROR)
def copy_jacket(src, dst, skip): try: if os.path.isfile(dst) and skip: LOG.debug("Jacket '{0}' already exist, skip.".format(dst)) return False shutil.copy(src, dst) return True except (IOError, OSError) as oe: log_error(oe.errno, dst) return False
def create_dir(dst): try: LOG.debug("Creating directory '{0}'.".format(dst)) os.mkdir(dst) return True except OSError as e: if e.errno == errno.EEXIST: LOG.debug("Directory '{0}' already exist.".format(dst)) return False raise PlexCleanerException("Unable to create directory '{0}' check permissions".format(dst), severity=logging.ERROR)
def move_media(src, dst, interrupt=False): try: LOG.debug(u"Copy file '{0}' to '{1}'".format(src, dst)) if os.path.isfile(dst): LOG.debug(u"File '{0}' already exist, will override if not the same file.".format(src)) shutil.move(src, dst) return True except (IOError, OSError) as oe: log_error(oe.errno, dst) if interrupt: raise PlexCleanerException('Media movie move error occurred (file missing)', severity=logging.CRITICAL)
def create_dir(dst): try: LOG.debug("Creating directory '{0}'.".format(dst)) os.mkdir(dst) return True except OSError as e: if e.errno == errno.EEXIST: LOG.debug("Directory '{0}' already exist.".format(dst)) return False raise PlexCleanerException( "Unable to create directory '{0}' check permissions".format(dst), severity=logging.ERROR)
def move_media(src, dst, interrupt=False): try: LOG.debug(u"Copy file '{0}' to '{1}'".format(src, dst)) if os.path.isfile(dst): LOG.debug( u"File '{0}' already exist, will override if not the same file." .format(src)) shutil.move(src, dst) return True except (IOError, OSError) as oe: log_error(oe.errno, dst) if interrupt: raise PlexCleanerException( 'Media movie move error occurred (file missing)', severity=logging.CRITICAL)
def __init__(self, metadata_home='/var/lib/plexmediaserver', database_override=None, database_name='com.plexapp.plugins.library.db'): sqlite = sqlite3.sqlite_version_info[:2] if sqlite < (3, 7): raise PlexCleanerException("SQLite bindings are not up to date " "(requires 3.7 current is {0}.{1})".format(*sqlite), severity=logging.ERROR) db = os.path.join(metadata_home, self._database_path, database_name) try: if database_override: db = database_override LOG.debug("User database override {0}".format(db)) LOG.info("Reading Plex database located at {0}".format(db)) self.filename = db self._connection = sqlite3.connect(db) self._cursor = self._connection.cursor() self._cursor.execute('ANALYZE') except sqlite3.OperationalError as oe: LOG.debug(oe) raise PlexCleanerException('Could not connect to Plex database', severity=logging.ERROR) except sqlite3.DatabaseError as de: LOG.debug(de.message) raise PlexCleanerException('Could not open Plex database (check permissions)', severity=logging.ERROR)
def update_database(db, m): filename = m.get_correct_absolute_file() db.update_row(m.mid, filename) LOG.debug("Updating movie '{0}' with path '{1}'".format(m.correct_title, filename)) return True
def update_database(db, m): filename = m.get_correct_absolute_file() db.update_row(m.mid, filename) LOG.debug("Updating movie '{0}' with path '{1}'".format( m.correct_title, filename)) return True
def rollback(self): LOG.debug('Rollback last changes to database.') self._connection.rollback() self._uncommited = False
def commit(self): LOG.debug('Commiting last changes to database.') self._connection.commit() self._uncommited = False
def update_many_row(self, values): LOG.debug("Updating {0} movies".format(len(values))) self._cursor.executemany(self._update_movie, values) self._uncommited = True
def update_row(self, mid, value): LOG.debug("Updating movie '{0}' with '{1}'".format(mid, value)) self._cursor.execute(self._update_movie, (value, mid)) self._uncommited = True