Beispiel #1
0
    def run(self):
        self.started = True

        show_object = find_show(self.series_id, self.series_provider_id)
        if not show_object:
            return

        episode_object = show_object.get_episode(self.season, self.episode)

        try:
            sickrage.app.log.info(
                "Starting backlog search for: [{}] S{:02d}E{:02d}".format(
                    show_object.name, self.season, self.episode))

            WebSocketMessage(
                'SEARCH_QUEUE_STATUS_UPDATED', {
                    'seriesSlug': show_object.slug,
                    'episodeId': episode_object.episode_id,
                    'searchQueueStatus': episode_object.search_queue_status
                }).push()

            search_result = search_providers(self.series_id,
                                             self.series_provider_id,
                                             self.season,
                                             self.episode,
                                             manualSearch=False)

            if search_result:
                snatch = all([(search_result.series_id, search_result.season,
                               episode)
                              not in sickrage.app.search_queue.SNATCH_HISTORY
                              for episode in search_result.episodes])

                if snatch:
                    [
                        sickrage.app.search_queue.SNATCH_HISTORY.append(
                            (search_result.series_id, search_result.season,
                             episode)) for episode in search_result.episodes
                    ]

                    sickrage.app.log.info("Downloading {} from {}".format(
                        search_result.name, search_result.provider.name))
                    snatch_episode(search_result)
            else:
                sickrage.app.log.info(
                    "Unable to find search results for: [{}] S{:02d}E{:02d}".
                    format(show_object.name, self.season, self.episode))
        except Exception:
            sickrage.app.log.debug(traceback.format_exc())
        finally:
            WebSocketMessage(
                'SEARCH_QUEUE_STATUS_UPDATED', {
                    'seriesSlug': show_object.slug,
                    'episodeId': episode_object.episode_id,
                    'searchQueueStatus': episode_object.search_queue_status
                }).push()

            sickrage.app.log.info(
                "Finished backlog search for: [{}] S{:02d}E{:02d}".format(
                    show_object.name, self.season, self.episode))
Beispiel #2
0
    def run(self):
        self.started = True

        show_object = find_show(self.series_id, self.series_provider_id)
        if not show_object:
            return

        episode_object = show_object.get_episode(self.season, self.episode)

        try:
            sickrage.app.log.info("Starting daily search for: [" +
                                  show_object.name + "]")

            WebSocketMessage(
                'SEARCH_QUEUE_STATUS_UPDATED', {
                    'seriesSlug': show_object.slug,
                    'episodeId': episode_object.episode_id,
                    'searchQueueStatus': episode_object.search_queue_status
                }).push()

            search_result = search_providers(
                self.series_id,
                self.series_provider_id,
                self.season,
                self.episode,
                cacheOnly=sickrage.app.config.general.enable_rss_cache)

            if search_result:
                snatch = all([(search_result.series_id, search_result.season,
                               episode)
                              not in sickrage.app.search_queue.SNATCH_HISTORY
                              for episode in search_result.episodes])

                if snatch:
                    [
                        sickrage.app.search_queue.SNATCH_HISTORY.append(
                            (search_result.series_id, search_result.season,
                             episode)) for episode in search_result.episodes
                    ]

                    sickrage.app.log.info("Downloading " + search_result.name +
                                          " from " +
                                          search_result.provider.name)
                    snatch_episode(search_result)
            else:
                sickrage.app.log.info("Unable to find search results for: [" +
                                      show_object.name + "]")
        except Exception:
            sickrage.app.log.debug(traceback.format_exc())
        finally:
            WebSocketMessage(
                'SEARCH_QUEUE_STATUS_UPDATED', {
                    'seriesSlug': show_object.slug,
                    'episodeId': episode_object.episode_id,
                    'searchQueueStatus': episode_object.search_queue_status
                }).push()

            sickrage.app.log.info("Finished daily search for: [" +
                                  show_object.name + "]")
Beispiel #3
0
    def run(self):
        self.started = True

        show_object = find_show(self.show_id)
        episode_object = show_object.get_episode(self.season, self.episode)

        try:
            sickrage.app.log.info("Starting failed download search for: [" +
                                  episode_object.name + "]")

            sickrage.app.log.info("Marking episode as bad: [" +
                                  episode_object.pretty_name() + "]")

            FailedHistory.mark_failed(self.show_id, self.season, self.episode)

            (release, provider) = FailedHistory.find_failed_release(
                self.show_id, self.season, self.episode)
            if release:
                FailedHistory.log_failed(release)
                History.log_failed(self.show_id, self.season, self.episode,
                                   release, provider)

            FailedHistory.revert_failed_episode(self.show_id, self.season,
                                                self.episode)

            search_result = search_providers(self.show_id,
                                             self.season,
                                             self.episode,
                                             manualSearch=True,
                                             downCurQuality=False)
            if search_result:
                snatch = all([(search_result.show_id, search_result.season,
                               episode)
                              not in sickrage.app.search_queue.SNATCH_HISTORY
                              for episode in search_result.episodes])

                if snatch:
                    [
                        sickrage.app.search_queue.fifo(
                            sickrage.app.search_queue.SNATCH_HISTORY,
                            (search_result.show_id, search_result.season,
                             episode),
                            sickrage.app.search_queue.SNATCH_HISTORY_SIZE)
                        for episode in search_result.episodes
                    ]

                    sickrage.app.log.info("Downloading " + search_result.name +
                                          " from " +
                                          search_result.provider.name)
                    snatch_episode(search_result)
        except Exception:
            sickrage.app.log.debug(traceback.format_exc())
        finally:
            sickrage.app.log.info("Finished failed download search for: [" +
                                  show_object.name + "]")
            sickrage.app.search_queue.fifo(
                sickrage.app.search_queue.MANUAL_SEARCH_HISTORY, self,
                sickrage.app.search_queue.MANUAL_SEARCH_HISTORY_SIZE)
Beispiel #4
0
    def _download_propers(self, proper_list):
        """
        Download proper (snatch it)

        :param proper_list:
        """

        session = sickrage.app.main_db.session()

        for curProper in proper_list:
            history_limit = datetime.datetime.today() - datetime.timedelta(days=30)

            # make sure the episode has been downloaded before
            history_results = [x for x in session.query(MainDB.History).filter_by(
                showid=curProper.indexer_id, season=curProper.season, episode=curProper.episode,
                quality=curProper.quality).filter(MainDB.History.date >= history_limit.toordinal(),
                                                  MainDB.History.action.in_(Quality.SNATCHED + Quality.DOWNLOADED))]

            # if we didn't download this episode in the first place we don't know what quality to use for the proper
            # so we can't do it
            if len(history_results) == 0:
                sickrage.app.log.info("Unable to find an original history entry for proper {} so I'm not downloading "
                                      "it.".format(curProper.name))
                continue

            # make sure that none of the existing history downloads are the same proper we're trying to download
            is_same = False
            clean_proper_name = self._generic_name(remove_non_release_groups(curProper.name))

            for curResult in history_results:
                # if the result exists in history already we need to skip it
                if self._generic_name(
                        remove_non_release_groups(curResult.resource)) == clean_proper_name:
                    is_same = True
                    break

            if is_same:
                sickrage.app.log.debug("This proper is already in history, skipping it")
                continue

            # make the result object
            result = curProper.provider.get_result(curProper.season, [curProper.episode])
            result.show_id = curProper.indexer_id
            result.url = curProper.url
            result.name = curProper.name
            result.quality = curProper.quality
            result.release_group = curProper.release_group
            result.version = curProper.version
            result.seeders = curProper.seeders
            result.leechers = curProper.leechers
            result.size = curProper.size
            result.files = curProper.files
            result.content = curProper.content

            # snatch it
            snatch_episode(result, SNATCHED_PROPER)
            time.sleep(cpu_presets[sickrage.app.config.cpu_preset])
Beispiel #5
0
    def run(self):
        self.started = True

        show_obj = find_show(self.show_id)

        try:
            sickrage.app.log.info("Starting daily search for: [" +
                                  show_obj.name + "]")

            search_result = search_providers(
                self.show_id,
                self.season,
                self.episode,
                cacheOnly=sickrage.app.config.enable_rss_cache)
            if search_result:
                snatch = all([(search_result.show_id, search_result.season,
                               episode)
                              not in sickrage.app.search_queue.SNATCH_HISTORY
                              for episode in search_result.episodes])

                if snatch:
                    [
                        sickrage.app.search_queue.fifo(
                            sickrage.app.search_queue.SNATCH_HISTORY,
                            (search_result.show_id, search_result.season,
                             episode),
                            sickrage.app.search_queue.SNATCH_HISTORY_SIZE)
                        for episode in search_result.episodes
                    ]

                    sickrage.app.log.info("Downloading " + search_result.name +
                                          " from " +
                                          search_result.provider.name)
                    snatch_episode(search_result)
            else:
                sickrage.app.log.info("Unable to find search results for: [" +
                                      show_obj.name + "]")
        except Exception:
            sickrage.app.log.debug(traceback.format_exc())
        finally:
            sickrage.app.log.info("Finished daily search for: [" +
                                  show_obj.name + "]")
Beispiel #6
0
    def run(self):
        self.started = True

        show_object = find_show(self.show_id)
        if not show_object:
            return

        try:
            sickrage.app.log.info(
                "Starting backlog search for: [{}] S{:02d}E{:02d}".format(
                    show_object.name, self.season, self.episode))

            search_result = search_providers(self.show_id,
                                             self.season,
                                             self.episode,
                                             manualSearch=False)
            if search_result:
                snatch = all([(search_result.show_id, search_result.season,
                               episode)
                              not in sickrage.app.search_queue.SNATCH_HISTORY
                              for episode in search_result.episodes])

                if snatch:
                    [
                        sickrage.app.search_queue.SNATCH_HISTORY.append(
                            (search_result.show_id, search_result.season,
                             episode)) for episode in search_result.episodes
                    ]

                    sickrage.app.log.info("Downloading {} from {}".format(
                        search_result.name, search_result.provider.name))
                    snatch_episode(search_result)
            else:
                sickrage.app.log.info(
                    "Unable to find search results for: [{}] S{:02d}E{:02d}".
                    format(show_object.name, self.season, self.episode))
        except Exception:
            sickrage.app.log.debug(traceback.format_exc())
        finally:
            sickrage.app.log.info(
                "Finished backlog search for: [{}] S{:02d}E{:02d}".format(
                    show_object.name, self.season, self.episode))
Beispiel #7
0
    def run(self, session=None):
        self.started = True

        show_object = find_show(self.show_id, session=session)

        try:
            sickrage.app.log.info("Starting backlog search for: [" +
                                  show_object.name + "]")

            search_result = search_providers(self.show_id,
                                             self.season,
                                             self.episode,
                                             manualSearch=False)
            if search_result:
                for episode in search_result.episodes:
                    if (search_result.show_id, search_result.season, episode
                        ) in sickrage.app.search_queue.SNATCH_HISTORY:
                        raise StopIteration

                    sickrage.app.search_queue.fifo(
                        sickrage.app.search_queue.SNATCH_HISTORY,
                        (search_result.show_id, search_result.season, episode),
                        sickrage.app.search_queue.SNATCH_HISTORY_SIZE)

                sickrage.app.log.info("Downloading " + search_result.name +
                                      " from " + search_result.provider.name)
                snatch_episode(search_result)
            else:
                sickrage.app.log.info("Unable to find search results for: [" +
                                      show_object.name + "]")
        except StopIteration:
            pass
        except Exception:
            sickrage.app.log.debug(traceback.format_exc())
        finally:
            sickrage.app.log.info("Finished backlog search for: [" +
                                  show_object.name + "]")
Beispiel #8
0
    def run(self):
        self.started = True

        show_object = find_show(self.show_id)
        episode_object = show_object.get_episode(self.season, self.episode)

        try:
            sickrage.app.log.info("Starting manual search for: [" +
                                  episode_object.pretty_name() + "]")

            search_result = search_providers(
                self.show_id,
                self.season,
                self.episode,
                manualSearch=True,
                downCurQuality=self.downCurQuality)
            if search_result:
                [
                    sickrage.app.search_queue.fifo(
                        sickrage.app.search_queue.SNATCH_HISTORY,
                        (search_result.show_id, search_result.season, episode),
                        sickrage.app.search_queue.SNATCH_HISTORY_SIZE)
                    for episode in search_result.episodes
                ]

                sickrage.app.log.info("Downloading " + search_result.name +
                                      " from " + search_result.provider.name)
                self.success = snatch_episode(search_result)
            else:
                sickrage.app.alerts.message(
                    _('No downloads were found'),
                    _("Couldn't find a download for <i>%s</i>") %
                    episode_object.pretty_name())

                sickrage.app.log.info("Unable to find a download for: [" +
                                      episode_object.pretty_name() + "]")
        except Exception:
            sickrage.app.log.debug(traceback.format_exc())
        finally:
            sickrage.app.log.info("Finished manual search for: [" +
                                  episode_object.pretty_name() + "]")
            sickrage.app.search_queue.fifo(
                sickrage.app.search_queue.MANUAL_SEARCH_HISTORY, self,
                sickrage.app.search_queue.MANUAL_SEARCH_HISTORY_SIZE)
Beispiel #9
0
    def run(self):
        self.started = True

        sickrage.app.search_queue.TASK_HISTORY[self.id] = {
            'season': self.season,
            'episode': self.episode
        }

        show_object = find_show(self.series_id, self.series_provider_id)
        if not show_object:
            return

        episode_object = show_object.get_episode(self.season, self.episode)

        try:
            sickrage.app.log.info("Starting failed download search for: [" +
                                  episode_object.name + "]")

            WebSocketMessage(
                'SEARCH_QUEUE_STATUS_UPDATED', {
                    'seriesSlug': show_object.slug,
                    'episodeId': episode_object.episode_id,
                    'searchQueueStatus': episode_object.search_queue_status
                }).push()

            sickrage.app.log.info("Marking episode as bad: [" +
                                  episode_object.pretty_name() + "]")

            FailedHistory.mark_failed(self.series_id, self.series_provider_id,
                                      self.season, self.episode)

            (release, provider) = FailedHistory.find_failed_release(
                self.series_id, self.series_provider_id, self.season,
                self.episode)
            if release:
                FailedHistory.log_failed(release)
                History.log_failed(self.series_id, self.series_provider_id,
                                   self.season, self.episode, release,
                                   provider)

            FailedHistory.revert_failed_episode(self.series_id,
                                                self.series_provider_id,
                                                self.season, self.episode)

            search_result = search_providers(self.series_id,
                                             self.series_provider_id,
                                             self.season,
                                             self.episode,
                                             manualSearch=True,
                                             downCurQuality=False)

            if search_result:
                snatch = all([(search_result.series_id, search_result.season,
                               episode)
                              not in sickrage.app.search_queue.SNATCH_HISTORY
                              for episode in search_result.episodes])

                if snatch:
                    [
                        sickrage.app.search_queue.SNATCH_HISTORY.append(
                            (search_result.series_id, search_result.season,
                             episode)) for episode in search_result.episodes
                    ]

                    sickrage.app.log.info("Downloading " + search_result.name +
                                          " from " +
                                          search_result.provider.name)
                    snatch_episode(search_result)
        except Exception:
            sickrage.app.log.debug(traceback.format_exc())
        finally:
            WebSocketMessage(
                'SEARCH_QUEUE_STATUS_UPDATED', {
                    'seriesSlug': show_object.slug,
                    'episodeId': episode_object.episode_id,
                    'searchQueueStatus': episode_object.search_queue_status
                }).push()

            sickrage.app.log.info("Finished failed download search for: [" +
                                  show_object.name + "]")
Beispiel #10
0
    def run(self):
        self.started = True

        sickrage.app.search_queue.TASK_HISTORY[self.id] = {
            'season': self.season,
            'episode': self.episode
        }

        show_object = find_show(self.series_id, self.series_provider_id)
        if not show_object:
            return

        episode_object = show_object.get_episode(self.season, self.episode)

        WebSocketMessage(
            'SEARCH_QUEUE_STATUS_UPDATED', {
                'seriesSlug': show_object.slug,
                'episodeId': episode_object.episode_id,
                'searchQueueStatus': episode_object.search_queue_status
            }).push()

        try:
            sickrage.app.log.info("Starting manual search for: [" +
                                  episode_object.pretty_name() + "]")

            search_result = search_providers(
                self.series_id,
                self.series_provider_id,
                self.season,
                self.episode,
                manualSearch=True,
                downCurQuality=self.downCurQuality)

            if search_result:
                [
                    sickrage.app.search_queue.SNATCH_HISTORY.append(
                        (search_result.series_id, search_result.season,
                         episode)) for episode in search_result.episodes
                ]

                sickrage.app.log.info("Downloading " + search_result.name +
                                      " from " + search_result.provider.name)
                self.success = snatch_episode(search_result)

                WebSocketMessage(
                    'EPISODE_UPDATED', {
                        'seriesSlug': show_object.slug,
                        'episodeId': episode_object.episode_id,
                        'episode': episode_object.to_json()
                    }).push()
            else:
                sickrage.app.alerts.message(
                    _('No downloads were found'),
                    _("Couldn't find a download for <i>%s</i>") %
                    episode_object.pretty_name())

                sickrage.app.log.info("Unable to find a download for: [" +
                                      episode_object.pretty_name() + "]")
        except Exception:
            sickrage.app.log.debug(traceback.format_exc())
        finally:
            sickrage.app.log.info("Finished manual search for: [" +
                                  episode_object.pretty_name() + "]")