Beispiel #1
0
    def __init__(self):
        # i18n
        languages = []
        lc, encoding = locale.getdefaultlocale()
        if lc:
            languages = [lc]
        languages += constants.DEFAULT_LANGUAGES
        gettext.bindtextdomain(constants.SF_COMPACT_NAME,
                               constants.LOCALE_DIR)
        gettext.textdomain(constants.SF_COMPACT_NAME)
        language = gettext.translation(constants.SF_COMPACT_NAME,
                                       constants.LOCALE_DIR,
                                       languages = languages,
                                       fallback = True)
        _ = language.gettext

        self.series_manager = SeriesManager()
        self.settings = Settings()
        self.settingsWrapper = SettingsWrapper()

        load_conf_item = AsyncItem(self.settings.load,
                                   (constants.SF_CONF_FILE,),
                                   self._settings_load_finished)
        load_shows_item = AsyncItem(self.series_manager.load,
                                    (constants.SF_DB_FILE,),
                                    self._load_finished)

        self.request = AsyncWorker(True)
        self.request.queue.put(load_conf_item)
        self.request.queue.put(load_shows_item)
        self.request.start()

        self.version = constants.SF_VERSION
Beispiel #2
0
 def update_all_shows_episodes(self, show_list = []):
     self.isUpdating = True
     pyotherside.send('updating', self.isUpdating)
     show_list = show_list or self.series_list
     async_worker = AsyncWorker(False)
     update_images_worker = AsyncWorker(True)
     i = 0
     n_shows = len(show_list)
     for i in range(n_shows):
         update_ended_shows = Settings().getConf(Settings.UPDATE_ENDED_SHOWS)
         show = show_list[i]
         if show.status and show.status == 'Ended' and not update_ended_shows:
             async_item = AsyncItem(self._empty_callback, (),
                                    self._set_show_episodes_complete_cb,
                                    (show, update_images_worker, i == n_shows - 1))
             async_worker.queue.put(async_item)
             continue
         pyotherside.send('episodesListUpdating', show.get_name())
         show.set_updating(True)
         async_item = AsyncItem(self.thetvdb.get_show_and_episodes,
                                (show.thetvdb_id, show.language,),
                                self._set_show_episodes_complete_cb,
                                (show, update_images_worker, i == n_shows - 1))
         async_worker.queue.put(async_item)
         async_item = AsyncItem(self._set_show_images,
                                (show,),
                                None,)
         update_images_worker.queue.put(async_item)
     async_worker.start()
     return async_worker
Beispiel #3
0
 def _get_complete_show_finished_cb(self, show, error):
     logging.debug('GET_FULL_SHOW_COMPLETE_SIGNAL') #TODO
     async_worker = AsyncWorker(True)
     async_item = AsyncItem(self._set_show_images,
                            (show,),
                            None,)
     async_worker.queue.put(async_item)
     async_worker.start()
Beispiel #4
0
 def _get_complete_show_finished_cb(self, show, error):
     logging.debug('GET_FULL_SHOW_COMPLETE_SIGNAL')  #TODO
     async_worker = AsyncWorker(True)
     async_item = AsyncItem(
         self._set_show_images,
         (show, ),
         None,
     )
     async_worker.queue.put(async_item)
     async_worker.start()
Beispiel #5
0
 def search_shows(self, terms, language = "en"):
     if not terms:
         return []
     self.search_results = []
     self.searching = True
     pyotherside.send('searching', self.searching)
     async_worker = AsyncWorker(True)
     async_item = AsyncItem(self.thetvdb.get_matching_shows,
                            (terms, language,),
                            self._search_finished_callback)
     async_worker.queue.put(async_item)
     async_worker.start()
Beispiel #6
0
 def search_shows(self, terms, language="en"):
     if not terms:
         return []
     self.search_results = []
     self.searching = True
     pyotherside.send('searching', self.searching)
     async_worker = AsyncWorker(True)
     async_item = AsyncItem(self.thetvdb.get_matching_shows, (
         terms,
         language,
     ), self._search_finished_callback)
     async_worker.queue.put(async_item)
     async_worker.start()
    def __init__(self):
        # i18n
        languages = []
        lc, encoding = locale.getdefaultlocale()
        if lc:
            languages = [lc]
        languages += constants.DEFAULT_LANGUAGES
        gettext.bindtextdomain(constants.SF_COMPACT_NAME,
                               constants.LOCALE_DIR)
        gettext.textdomain(constants.SF_COMPACT_NAME)
        language = gettext.translation(constants.SF_COMPACT_NAME,
                                       constants.LOCALE_DIR,
                                       languages = languages,
                                       fallback = True)
        _ = language.gettext

        self.series_manager = SeriesManager()
        self.settings = Settings()
        self.settingsWrapper = SettingsWrapper()

        load_conf_item = AsyncItem(self.settings.load,
                                   (constants.SF_CONF_FILE,),
                                   self._settings_load_finished)
        load_shows_item = AsyncItem(self.series_manager.load,
                                    (constants.SF_DB_FILE,),
                                    self._load_finished)

        self.request = AsyncWorker(True)
        self.request.queue.put(load_conf_item)
        self.request.queue.put(load_shows_item)
        self.request.start()

        self.version = constants.SF_VERSION
Beispiel #8
0
 def get_complete_show(self, show_name, language = "en"):
     # Test if the show has already been added.
     for show in self.series_list:
         if show.name == show_name:
             pyotherside.send('notification', 'Show already in library')
             return
     self.isUpdating = True
     pyotherside.send('updating', self.isUpdating)
     show_id = self._cached_tvdb_shows.get(show_name, None)
     for show_id, show_title in self._cached_tvdb_shows.items():
         if show_title == show_name:
             break
     if not show_id:
         return
     async_worker = AsyncWorker(False)
     async_item = AsyncItem(self._get_complete_show_from_id,
                            (show_id, language,),
                            self._get_complete_show_finished_cb)
     async_worker.queue.put(async_item)
     async_worker.start()
    def closeEvent(self):
        # If the shows list is empty but the user hasn't deleted
        # any, then we don't save in order to avoid overwriting
        # the current db (for the shows list might be empty due
        # to an error)
        logging.debug('Going down...')
        if not self.series_manager.series_list and not self.series_manager.have_deleted:
            return
        self.series_manager.auto_save(False)

        save_shows_item = AsyncItem(self.series_manager.save,
                               (constants.SF_DB_FILE,))
        save_conf_item = AsyncItem(self.settings.save,
                               (constants.SF_CONF_FILE,),
                               self._save_finished_cb)
        async_worker = AsyncWorker(False)
        async_worker.queue.put(save_shows_item)
        async_worker.queue.put(save_conf_item)
        async_worker.start()
        # Wait for the saving thread to complete.
        async_worker.join()
Beispiel #10
0
 def get_complete_show(self, show_name, language="en"):
     # Test if the show has already been added.
     for show in self.series_list:
         if show.name == show_name:
             pyotherside.send('notification', 'Show already in library')
             return
     self.isUpdating = True
     pyotherside.send('updating', self.isUpdating)
     show_id = self._cached_tvdb_shows.get(show_name, None)
     for show_id, show_title in self._cached_tvdb_shows.items():
         if show_title == show_name:
             break
     if not show_id:
         return
     async_worker = AsyncWorker(False)
     async_item = AsyncItem(self._get_complete_show_from_id, (
         show_id,
         language,
     ), self._get_complete_show_finished_cb)
     async_worker.queue.put(async_item)
     async_worker.start()
Beispiel #11
0
 def update_all_shows_episodes(self, show_list = []):
     self.isUpdating = True
     pyotherside.send('updating', self.isUpdating)
     show_list = show_list or self.series_list
     async_worker = AsyncWorker(False)
     update_images_worker = AsyncWorker(True)
     i = 0
     n_shows = len(show_list)
     for i in range(n_shows):
         show = show_list[i]
         pyotherside.send('episodesListUpdating', show.get_name())
         show.set_updating(True)
         async_item = AsyncItem(self.thetvdb.get_show_and_episodes,
                                (show.thetvdb_id, show.language,),
                                self._set_show_episodes_complete_cb,
                                (show, update_images_worker, i == n_shows - 1))
         async_worker.queue.put(async_item)
         async_item = AsyncItem(self._set_show_images,
                                (show,),
                                None,)
         update_images_worker.queue.put(async_item)
     async_worker.start()
     return async_worker
Beispiel #12
0
 def update_all_shows_episodes(self, show_list=[]):
     self.isUpdating = True
     pyotherside.send('updating', self.isUpdating)
     show_list = show_list or self.series_list
     async_worker = AsyncWorker(False)
     update_images_worker = AsyncWorker(True)
     i = 0
     n_shows = len(show_list)
     for i in range(n_shows):
         update_ended_shows = Settings().getConf(
             Settings.UPDATE_ENDED_SHOWS)
         show = show_list[i]
         if show.status and show.status == 'Ended' and not update_ended_shows:
             async_item = AsyncItem(
                 self._empty_callback, (),
                 self._set_show_episodes_complete_cb,
                 (show, update_images_worker, i == n_shows - 1))
             async_worker.queue.put(async_item)
             continue
         pyotherside.send('episodesListUpdating', show.get_name())
         show.set_updating(True)
         async_item = AsyncItem(
             self.thetvdb.get_show_and_episodes, (
                 show.thetvdb_id,
                 show.language,
             ), self._set_show_episodes_complete_cb,
             (show, update_images_worker, i == n_shows - 1))
         async_worker.queue.put(async_item)
         async_item = AsyncItem(
             self._set_show_images,
             (show, ),
             None,
         )
         update_images_worker.queue.put(async_item)
     async_worker.start()
     return async_worker
Beispiel #13
0
    def closeEvent(self):
        # If the shows list is empty but the user hasn't deleted
        # any, then we don't save in order to avoid overwriting
        # the current db (for the shows list might be empty due
        # to an error)
        logging.debug('Going down...')
        if not self.series_manager.series_list and not self.series_manager.have_deleted:
            return
        self.series_manager.auto_save(False)

        save_shows_item = AsyncItem(self.series_manager.save,
                               (constants.SF_DB_FILE,))
        save_conf_item = AsyncItem(self.settings.save,
                               (constants.SF_CONF_FILE,),
                               self._save_finished_cb)
        async_worker = AsyncWorker(False)
        async_worker.queue.put(save_shows_item)
        async_worker.queue.put(save_conf_item)
        async_worker.start()
        # Wait for the saving thread to complete.
        async_worker.join()
Beispiel #14
0
class SeriesFinale:
    def __init__(self):
        # i18n
        languages = []
        lc, encoding = locale.getdefaultlocale()
        if lc:
            languages = [lc]
        languages += constants.DEFAULT_LANGUAGES
        gettext.bindtextdomain(constants.SF_COMPACT_NAME,
                               constants.LOCALE_DIR)
        gettext.textdomain(constants.SF_COMPACT_NAME)
        language = gettext.translation(constants.SF_COMPACT_NAME,
                                       constants.LOCALE_DIR,
                                       languages = languages,
                                       fallback = True)
        _ = language.gettext

        self.series_manager = SeriesManager()
        self.settings = Settings()
        self.settingsWrapper = SettingsWrapper()

        load_conf_item = AsyncItem(self.settings.load,
                                   (constants.SF_CONF_FILE,),
                                   self._settings_load_finished)
        load_shows_item = AsyncItem(self.series_manager.load,
                                    (constants.SF_DB_FILE,),
                                    self._load_finished)

        self.request = AsyncWorker(True)
        self.request.queue.put(load_conf_item)
        self.request.queue.put(load_shows_item)
        self.request.start()

        self.version = constants.SF_VERSION

    def getVersion(self):
        return self.version

    def getStatistics(self):
        n_series = len(self.series_manager.series_list)
        n_series_watched = 0
        n_series_ended = 0
        n_all_episodes = 0
        n_episodes_to_watch = 0
        time_watched = 0
        for i in range(n_series):
            show = self.series_manager.series_list[i]
            episodes = show.episode_list
            aired_episodes = [episode for episode in episodes \
                              if episode.already_aired()]
            episodes_to_watch = [episode for episode in aired_episodes \
                                 if not episode.watched]
            n_all_episodes += len(aired_episodes)
            if episodes_to_watch:
                n_episodes_to_watch += len(episodes_to_watch)
            else:
                n_series_watched += 1
            if show.runtime:
                time_watched += (len(aired_episodes)-len(episodes_to_watch))*int(show.runtime)
            if show.status and show.status == 'Ended':
                n_series_ended += 1
        return {'numSeries': n_series,
                'numSeriesWatched': n_series_watched,
                'numSeriesEnded': n_series_ended,
                'numEpisodes': n_all_episodes,
                'numEpisodesWatched': n_all_episodes-n_episodes_to_watch,
                'timeWatched': time_watched}

    def closeEvent(self):
        # If the shows list is empty but the user hasn't deleted
        # any, then we don't save in order to avoid overwriting
        # the current db (for the shows list might be empty due
        # to an error)
        logging.debug('Going down...')
        if not self.series_manager.series_list and not self.series_manager.have_deleted:
            return
        self.series_manager.auto_save(False)

        save_shows_item = AsyncItem(self.series_manager.save,
                               (constants.SF_DB_FILE,))
        save_conf_item = AsyncItem(self.settings.save,
                               (constants.SF_CONF_FILE,),
                               self._save_finished_cb)
        async_worker = AsyncWorker(False)
        async_worker.queue.put(save_shows_item)
        async_worker.queue.put(save_conf_item)
        async_worker.start()
        # Wait for the saving thread to complete.
        async_worker.join()

    def saveSettings(self):
        self.settings.save(constants.SF_CONF_FILE)

    def _settings_load_finished(self, dummy_arg, error):
        #self.series_manager.sorted_series_list.resort()
        pass

    def _load_finished(self, dummy_arg, error):
        self.request = None
        self.series_manager.auto_save(False)

    def _save_finished_cb(self, dummy_arg, error):
        logging.debug('All saved!')
class SeriesFinale:
    def __init__(self):
        # i18n
        languages = []
        lc, encoding = locale.getdefaultlocale()
        if lc:
            languages = [lc]
        languages += constants.DEFAULT_LANGUAGES
        gettext.bindtextdomain(constants.SF_COMPACT_NAME,
                               constants.LOCALE_DIR)
        gettext.textdomain(constants.SF_COMPACT_NAME)
        language = gettext.translation(constants.SF_COMPACT_NAME,
                                       constants.LOCALE_DIR,
                                       languages = languages,
                                       fallback = True)
        _ = language.gettext

        self.series_manager = SeriesManager()
        self.settings = Settings()
        self.settingsWrapper = SettingsWrapper()

        load_conf_item = AsyncItem(self.settings.load,
                                   (constants.SF_CONF_FILE,),
                                   self._settings_load_finished)
        load_shows_item = AsyncItem(self.series_manager.load,
                                    (constants.SF_DB_FILE,),
                                    self._load_finished)

        self.request = AsyncWorker(True)
        self.request.queue.put(load_conf_item)
        self.request.queue.put(load_shows_item)
        self.request.start()

        self.version = constants.SF_VERSION

    def getVersion(self):
        return self.version

    def closeEvent(self):
        # If the shows list is empty but the user hasn't deleted
        # any, then we don't save in order to avoid overwriting
        # the current db (for the shows list might be empty due
        # to an error)
        logging.debug('Going down...')
        if not self.series_manager.series_list and not self.series_manager.have_deleted:
            return
        self.series_manager.auto_save(False)

        save_shows_item = AsyncItem(self.series_manager.save,
                               (constants.SF_DB_FILE,))
        save_conf_item = AsyncItem(self.settings.save,
                               (constants.SF_CONF_FILE,),
                               self._save_finished_cb)
        async_worker = AsyncWorker(False)
        async_worker.queue.put(save_shows_item)
        async_worker.queue.put(save_conf_item)
        async_worker.start()
        # Wait for the saving thread to complete.
        async_worker.join()

    def saveSettings(self):
        self.settings.save(constants.SF_CONF_FILE)

    def _settings_load_finished(self, dummy_arg, error):
        #self.series_manager.sorted_series_list.resort()
        pass

    def _load_finished(self, dummy_arg, error):
        self.request = None
        self.series_manager.auto_save(False)

    def _save_finished_cb(self, dummy_arg, error):
        logging.debug('All saved!')
Beispiel #16
0
class SeriesFinale:
    def __init__(self):
        # i18n
        languages = []
        lc, encoding = locale.getdefaultlocale()
        if lc:
            languages = [lc]
        languages += constants.DEFAULT_LANGUAGES
        gettext.bindtextdomain(constants.SF_COMPACT_NAME,
                               constants.LOCALE_DIR)
        gettext.textdomain(constants.SF_COMPACT_NAME)
        language = gettext.translation(constants.SF_COMPACT_NAME,
                                       constants.LOCALE_DIR,
                                       languages = languages,
                                       fallback = True)
        _ = language.gettext

        self.series_manager = SeriesManager()
        self.settings = Settings()
        self.settingsWrapper = SettingsWrapper()

        load_conf_item = AsyncItem(self.settings.load,
                                   (constants.SF_CONF_FILE,),
                                   self._settings_load_finished)
        load_shows_item = AsyncItem(self.series_manager.load,
                                    (constants.SF_DB_FILE,),
                                    self._load_finished)

        self.request = AsyncWorker(True)
        self.request.queue.put(load_conf_item)
        self.request.queue.put(load_shows_item)
        self.request.start()

        self.version = constants.SF_VERSION

    def getVersion(self):
        return self.version

    def getStatistics(self):
        n_series = len(self.series_manager.series_list)
        n_series_watched = 0
        n_series_ended = 0
        n_all_episodes = 0
        n_episodes_to_watch = 0
        time_watched = 0
        for i in range(n_series):
            show = self.series_manager.series_list[i]
            episodes = show.episode_list
            aired_episodes = [episode for episode in episodes \
                              if episode.already_aired()]
            episodes_to_watch = [episode for episode in aired_episodes \
                                 if not episode.watched]
            n_all_episodes += len(aired_episodes)
            if episodes_to_watch:
                n_episodes_to_watch += len(episodes_to_watch)
            else:
                n_series_watched += 1
            if show.runtime:
                time_watched += (len(aired_episodes)-len(episodes_to_watch))*int(show.runtime)
            if show.status and show.status == 'Ended':
                n_series_ended += 1
        return {'numSeries': n_series,
                'numSeriesWatched': n_series_watched,
                'numSeriesEnded': n_series_ended,
                'numEpisodes': n_all_episodes,
                'numEpisodesWatched': n_all_episodes-n_episodes_to_watch,
                'timeWatched': time_watched}

    def closeEvent(self):
        # If the shows list is empty but the user hasn't deleted
        # any, then we don't save in order to avoid overwriting
        # the current db (for the shows list might be empty due
        # to an error)
        logging.debug('Going down...')
        if not self.series_manager.series_list and not self.series_manager.have_deleted:
            return
        self.series_manager.auto_save(False)

        save_shows_item = AsyncItem(self.series_manager.save,
                               (constants.SF_DB_FILE,))
        save_conf_item = AsyncItem(self.settings.save,
                               (constants.SF_CONF_FILE,),
                               self._save_finished_cb)
        async_worker = AsyncWorker(False)
        async_worker.queue.put(save_shows_item)
        async_worker.queue.put(save_conf_item)
        async_worker.start()
        # Wait for the saving thread to complete.
        async_worker.join()

    def saveSettings(self):
        self.settings.save(constants.SF_CONF_FILE)

    def _settings_load_finished(self, dummy_arg, error):
        #self.series_manager.sorted_series_list.resort()
        pass

    def _load_finished(self, dummy_arg, error):
        self.request = None
        self.series_manager.auto_save(False)

    def _save_finished_cb(self, dummy_arg, error):
        logging.debug('All saved!')