コード例 #1
0
 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)
コード例 #2
0
 def __init__(self, parent = None):
     QtCore.QThread.__init__(self, parent)
     self.exiting = False
     self.db = TVShowDB(config.tvshowdb)
コード例 #3
0
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)
コード例 #4
0
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()
コード例 #5
0
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)