def __init__(self, path): self.logger = logging.getLogger('pymetadatamanager.scanner') self.config = Config() self.dbTV = TVShowDB(self.config.tvshowdb) self.dbTV.init_db() self.TVDB = TVDB() self.FP = FileParser() self.nfo_reader = NfoReader() self.new_time = self.TVDB.get_server_time() self.dbTV.clean_db_files() self.series_list = [] self.set_file_list(path)
def __init__(self, parent = None): QtCore.QThread.__init__(self, parent) self.exiting = False self.db = TVShowDB(config.tvshowdb)
class SaveFiles(QtCore.QThread): def __init__(self, parent = None): QtCore.QThread.__init__(self, parent) self.exiting = False self.db = TVShowDB(config.tvshowdb) def __del__(self): self.exiting = True self.wait() def save_all(self, shows): self.shows = shows self.which = 'all' self.start() def save_series_artwork(self, series_id): self.series_id = series_id self.which = 'series_artwork' self.start() def save_series_nfos(self, series_id): self.series_id = series_id self.which = 'series_nfos' self.start() def save_series_both(self, series_id): self.series_id = series_id self.which = 'series_both' self.start() def run(self): if self.which == 'all': for show in self.shows: self.emit(QtCore.SIGNAL("updateStatus(QString)"), \ QtCore.QString(show)) series_id = self.db.get_series_id(show) self.db.write_series_nfo(series_id) self.db.write_series_posters(series_id) episode_ids = self.db.get_all_episode_ids(series_id) self.emit(QtCore.SIGNAL("setupProgress(int)"), \ len(episode_ids)) for episode_id in episode_ids: self.emit(QtCore.SIGNAL("updateProgress(int)"), \ episode_ids.index(episode_id)) self.db.write_episode_nfo(episode_id) self.db.write_episode_thumb(episode_id) elif self.which == 'series_artwork': show = self.db.get_series_name(self.series_id) if show is not None: self.emit(QtCore.SIGNAL("updateStatus(QString)"), \ QtCore.QString(show)) self.db.write_series_posters(self.series_id) episode_ids = self.db.get_all_episode_ids(self.series_id) self.emit(QtCore.SIGNAL("setupProgress(int)"), \ len(episode_ids)) for episode_id in episode_ids: self.emit(QtCore.SIGNAL("updateProgress(int)"), \ episode_ids.index(episode_id)) self.db.write_episode_thumb(episode_id) elif self.which == 'series_nfos': show = self.db.get_series_name(self.series_id) if show is not None: self.emit(QtCore.SIGNAL("updateStatus(QString)"), \ QtCore.QString(show)) self.db.write_series_nfo(self.series_id) episode_ids = self.db.get_all_episode_ids(self.series_id) self.emit(QtCore.SIGNAL("setupProgress(int)"), \ len(episode_ids)) for episode_id in episode_ids: self.emit(QtCore.SIGNAL("updateProgress(int)"), \ episode_ids.index(episode_id)) self.db.write_episode_nfo(episode_id) elif self.which == 'series_both': show = self.db.get_series_name(self.series_id) if show is not None: self.emit(QtCore.SIGNAL("updateStatus(QString)"), \ QtCore.QString(show)) self.db.write_series_nfo(self.series_id) self.db.write_series_posters(self.series_id) episode_ids = self.db.get_all_episode_ids(self.series_id) self.emit(QtCore.SIGNAL("setupProgress(int)"), \ len(episode_ids)) for episode_id in episode_ids: self.emit(QtCore.SIGNAL("updateProgress(int)"), \ episode_ids.index(episode_id)) self.db.write_episode_nfo(episode_id) self.db.write_episode_thumb(episode_id)
config = Config() #Set up the logging logger = logging.getLogger('pymetadatamanager') logger.setLevel(logging.DEBUG) fh = logging.handlers.TimedRotatingFileHandler(config.log_file, \ when='midnight',\ backupCount=2) fh.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s: %(levelname)-8s %(name)-38s\n \ %(message)s') fh.setFormatter(formatter) logger.addHandler(fh) #Connect to the database dbTV = TVShowDB(config.tvshowdb) dbTV.init_db() #Setup the connection to thetvdb.com TVDB = TVDB() #Create an nfo_reader nfo_reader = NfoReader() class MainWindow(QtGui.QMainWindow): def __init__(self, parent=None): """Initializes the Main Window""" self.logger = logging.getLogger('pymetadatamanager.main_window') self.logger.info('Creating the main window.') QtGui.QWidget.__init__(self, parent) self.ui = Ui_MainWindow()
class Scanner(object): """ Methods for scanning files into the database. """ def __init__(self, path): self.logger = logging.getLogger('pymetadatamanager.scanner') self.config = Config() self.dbTV = TVShowDB(self.config.tvshowdb) self.dbTV.init_db() self.TVDB = TVDB() self.FP = FileParser() self.nfo_reader = NfoReader() self.new_time = self.TVDB.get_server_time() self.dbTV.clean_db_files() self.series_list = [] self.set_file_list(path) def __del__(self): try: self.dbTV.set_update_time(self.new_time) except AttributeError: self.logger.error("Error setting update time.") def set_file_list(self, path): self.file_list = self.FP.parse_files_by_path(path) def set_series_list(self): for file in self.file_list: dir = file[0] filename = file[1] series_name = file[2] if not series_name in self.series_list: self.series_list.append(series_name) def get_series_id_list(self, series_name): series_id = self.dbTV.check_db_for_series(series_name) if not series_id: match_list = self.TVDB.find_series(series_name) else: match_list = [(series_id, match_list)] return match_list def add_series_to_db_by_id(self, series_id): if not self.dbTV.check_db_for_series(series_id): series = self.TVDB.get_all_series_info(series_id) episodes = self.TVDB.get_series_episodes(series_id) actors = self.TVDB.get_series_actors(series_id) banners = self.TVDB.get_series_banners(series_id) if series is not None: self.dbTV.write_series_to_db(series) series_name = self.dbTV.get_series_name(series_id) self.logger.info("Adding series %s to DB" % (series_name,)) if episodes is not None: self.dbTV.write_episodes_to_db(episodes, series_id) if actors is not None: self.dbTV.write_actors_to_db(actors) if banners is not None: self.dbTV.write_banners_to_db(banners) def add_series_to_db_by_nfo(self, series_name): episodes = [] episode_nfos = [] for file in self.file_list: name = file[2] if name == series_name: episode_nfos.append(file[6]) series_nfo = file[5] series = self.nfo_reader.get_series(series_nfo) for episode_nfo in episode_nfos: if not episode_nfo == '': episodes.append(self.nfo_reader.get_episode(episode_nfo)) actors = self.nfo_reader.get_actors(series_nfo) self.logger.debug(actors) banners = self.nfo_reader.get_banners(series_nfo) self.logger.info("Adding series %s to DB" % (series_name,)) if series is not None: self.dbTV.write_series_to_db(series) if episodes is not None: series_id = self.dbTV.get_series_id(series_name) self.dbTV.write_episodes_to_db(episodes, series_id) if actors is not None: self.dbTV.write_actors_to_db(actors) if banners is not None: self.dbTV.write_banners_to_db(banners) def add_files_to_db(self, series_id, series_name): #Create a list of files from this series series_file_list = [] for file in self.file_list: if file[2] == series_name: if not self.dbTV.check_db_for_file(file[1], file[0]): series_file_list.append(file) #Add any new files to the DB if len(series_file_list): self.logger.info("Adding files from %s to DB" % (series_name,)) self.dbTV.write_files_to_db(series_file_list, series_id) unlinked = self.dbTV.find_unlinked_files() unlinked_list = [] for unlinked_file in unlinked: for file in self.file_list: file_path = file[0] file_name = file[1] if unlinked_file[1] == file_name \ and unlinked_file[2] == file_path: unlinked_list.append(file) if len(unlinked_list): self.dbTV.write_files_to_db(series_file_list, series_id)