def METHOD_NAME(self, which_shows=None):
    """Run the backlog search for given shows."""
    if self.amActive:
        log.debug(u'Backlog is still running, not starting it again')
        return
    if app.forced_search_queue_scheduler.action.is_forced_search_in_progress():
        log.warning(u'Manual search is running. Unable to start Backlog Search')
        return
    self.amActive = True
    self.amPaused = False
    if which_shows:
        show_list = which_shows
    else:
        show_list = app.showList
    self._get_last_backlog()
    cur_date = datetime.date.today().toordinal()
    from_date = datetime.date.fromordinal(1)
    if not which_shows and self.forced:
        log.info(u'Running limited backlog search on missed episodes from last {0} days',
                 app.BACKLOG_DAYS)
        from_date = datetime.date.today() - datetime.timedelta(days=app.BACKLOG_DAYS)
    else:
        log.info(u'Running full backlog search on missed episodes for selected shows')
    # go through non air-by-date shows and see if they need any episodes
    for series_obj in show_list:
        if series_obj.paused:
            continue
        segments = series_obj.get_wanted_segments(from_date=from_date)
        for season, segment in iteritems(segments):
            self.currentSearchInfo = {'title': '{series_name} Season {season}'.format(series_name=series_obj.name,
                                                                                      season=season)}
            backlog_queue_item = BacklogQueueItem(series_obj, segment)
            app.search_queue_scheduler.action.add_item(backlog_queue_item)  # @UndefinedVariable
        if not segments:
            log.debug(u'Nothing needs to be downloaded for {0!r}, skipping', series_obj.name)
    # don't consider this an actual backlog search if we only did recent eps
    # or if we only did certain shows
    if from_date == datetime.date.fromordinal(1) and not which_shows:
        self._set_last_backlog(cur_date)
    self.amActive = False
    self._reset_pi()