Ticket #12296: 0002-Watchlist-Select-by-episode-numbers-and-date.patch

File 0002-Watchlist-Select-by-episode-numbers-and-date.patch, 6.3 KB (added by Roger Siddons <dizygotheca@…>, 6 years ago)
  • mythtv/programs/mythfrontend/playbackbox.cpp

    From a8a3b3767661717632da1dc89aecf526f1c557bf Mon Sep 17 00:00:00 2001
    From: Roger Siddons <dizygotheca@ntlworld.com>
    Date: Fri, 3 Oct 2014 16:38:52 +0100
    Subject: [PATCH 2/6] Watchlist: Select by episode numbers and date
    
    
    diff --git a/mythtv/programs/mythfrontend/playbackbox.cpp b/mythtv/programs/mythfrontend/playbackbox.cpp
    index 8abc2ea..23c129f 100644
    a b bool PlaybackBox::UpdateUILists(void) 
    16401640    QMap<QString, QString> sortedList;
    16411641    QMap<int, QString> searchRule;
    16421642    QMap<QString, int> watchlistCount;
     1643    TitleMap watchEpisode;
    16431644
    16441645    m_programInfoCache.Refresh();
    16451646
    bool PlaybackBox::UpdateUILists(void) 
    17881789                    {
    17891790                        QString title = extract_watchlist_title(*p);
    17901791                        ++watchlistCount[title];
    1791                         if (watchlistCount[title] == 1)
     1792
     1793                        ProgramInfo* curEp = watchEpisode[title];
     1794                        if (curEp)
    17921795                        {
    1793                             m_progLists[m_watchGroupLabel].push_front(p);
    1794                             m_progLists[m_watchGroupLabel].setAutoDelete(false);
     1796                            // duplicate title
     1797                            uint    cs = curEp->GetSeason(),
     1798                                    ce = curEp->GetEpisode(),
     1799                                    ps = p->GetSeason(),
     1800                                    pe = p->GetEpisode();
     1801
     1802                            // succeed earliest if;
     1803                            // - it was recorded earlier, or
     1804                            // - both have seasons and season is earlier, or
     1805                            // - seasons are same and both have episodes and
     1806                            //   episode is earlier
     1807                            if ((p->GetRecordingStartTime()
     1808                                 < curEp->GetRecordingStartTime())
     1809                                    // earlier non-zero season
     1810                                    || (ps < cs && ps)
     1811                                    // earlier non-zero episode of same season
     1812                                    || (ps == cs && pe && pe < ce))
     1813                            {
     1814                                // replace existing show
     1815                                watchEpisode[title] = p;
     1816
     1817                                LOG(VB_GUI, LOG_DEBUG,
     1818                                    QString("Watchlist: Replace - %1 %2 (%3x%4) "
     1819                                            "succeeding %5 (%6x%7)")
     1820                                    .arg(MythDate::toString(p->GetScheduledStartTime(),
     1821                                                            Qt::ISODate))
     1822                                    .arg(p->GetTitle())
     1823                                    .arg(ps).arg(pe)
     1824                                    .arg(MythDate::toString(curEp->GetScheduledStartTime(),
     1825                                                            Qt::ISODate))
     1826                                    .arg(cs).arg(ce));
     1827                            }
     1828                            else
     1829                            {
     1830                                p->SetRecordingPriority2(wlEarlier);
     1831                                LOG(VB_FILE, LOG_INFO,
     1832                                    QString("Not the earliest:  %1")
     1833                                    .arg(p->GetTitle()));
     1834                            }
    17951835                        }
    17961836                        else
    17971837                        {
    1798                             p->SetRecordingPriority2(wlEarlier);
    1799                             LOG(VB_FILE, LOG_INFO,
    1800                                 QString("Not the earliest:  %1")
    1801                                     .arg(p->GetTitle()));
     1838                            // first show with this title
     1839                            watchEpisode[title] = p;
     1840
     1841                            LOG(VB_GUI, LOG_DEBUG,
     1842                                QString("Watchlist: Earliest - %1 %2 (%3x%4)")
     1843                                .arg(MythDate::toString(p->GetScheduledStartTime(),
     1844                                                        Qt::ISODate))
     1845                                .arg(p->GetTitle())
     1846                                .arg(p->GetSeason())
     1847                                .arg(p->GetEpisode()));
    18021848                        }
    18031849                    }
    18041850                }
    bool PlaybackBox::UpdateUILists(void) 
    18761922        }
    18771923    }
    18781924
    1879     if (!m_progLists[m_watchGroupLabel].empty())
     1925    if (!watchEpisode.empty())
    18801926    {
     1927        // populate watchlist
     1928        foreach (ProgramInfo* wp, watchEpisode.values())
     1929            m_progLists[m_watchGroupLabel].push_front(wp);
     1930        m_progLists[m_watchGroupLabel].setAutoDelete(false);
     1931
    18811932        QDateTime now = MythDate::current();
    18821933        int baseValue = m_watchListMaxAge * 2 / 3;
    18831934
    void PlaybackBox::HandleUpdateProgramInfoEvent(const ProgramInfo &evinfo) 
    43604411    if (!m_programInfoCache.Update(evinfo))
    43614412        return;
    43624413
    4363     // If the recording group has changed, reload lists from the recently
    4364     // updated cache; if not, only update UI for the updated item
    4365     if (evinfo.GetRecordingGroup() == old_recgroup)
     4414    // Reload lists from the recently updated cache if
     4415    //  - the recording group has changed, or
     4416    //  - the watchlist is in use: season/episode edits may change the displayed prog
     4417    // Otherwise only update UI for the updated item
     4418    if (evinfo.GetRecordingGroup() != old_recgroup
     4419            || (m_viewMask & VIEW_WATCHLIST))
     4420
     4421        ScheduleUpdateUIList();
     4422
     4423    else
    43664424    {
    43674425        ProgramInfo *dst = FindProgramInUILists(evinfo);
    43684426        if (dst)
    43694427            UpdateUIListItem(dst, true);
    4370         return;
    43714428    }
    4372 
    4373     ScheduleUpdateUIList();
    43744429}
    43754430
    43764431void PlaybackBox::HandleUpdateProgramInfoFileSizeEvent(
  • mythtv/programs/mythfrontend/playbackbox.h

    diff --git a/mythtv/programs/mythfrontend/playbackbox.h b/mythtv/programs/mythfrontend/playbackbox.h
    index 25964bb..be160d3 100644
    a b class PlaybackBox : public ScheduleCommon 
    262262    void coverartLoad(void);
    263263
    264264  private:
     265    typedef QMap<QString, ProgramInfo*> TitleMap; // progs keyed by title
     266
    265267    bool UpdateUILists(void);
    266268    void UpdateUIGroupList(const QStringList &groupPreferences);
    267269    void UpdateUIRecGroupList(void);