[mythtv] [PATCH/APP] Program rankings

Jason Rosson etiam at pacbell.net
Tue Jul 1 05:26:00 EDT 2003


Isaac Richards wrote:
> 
> Yeah, just something to grab and store the type rankings, maybe just right 
> after it sees a scheduling change so it's not looking up those same 4/5 
> numbers all the time.
> 
> Isaac
> _______________________________________________
> mythtv-dev mailing list
> mythtv-dev at snowman.net
> http://lists.snowman.net/cgi-bin/mailman/listinfo/mythtv-dev
> 

how this?

   - jason
-------------- next part --------------
Index: mythtv/programs/mythbackend/scheduler.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/programs/mythbackend/scheduler.cpp,v
retrieving revision 1.32
diff -u -r1.32 scheduler.cpp
--- mythtv/programs/mythbackend/scheduler.cpp	30 Jun 2003 16:40:12 -0000	1.32
+++ mythtv/programs/mythbackend/scheduler.cpp	1 Jul 2003 11:17:36 -0000
@@ -507,24 +507,53 @@
                           list<ProgramInfo *> *conflictList)
 {
     int rank, srank, resolved = 0;
+    QString chanid;
+    ScheduledRecording::RecordingType rectype;
 
-    rank = info->rank.toInt();
-    rank += info->GetChannelRank(info->chanid, db);
-    rank += info->GetRecordingTypeRank(info->GetProgramRecordingStatus(db));
+    if (!channelRankMap.contains(info->chanid)) 
+        channelRankMap[info->chanid] = info->GetChannelRank(info->chanid, db);
+
+    rectype = info->GetProgramRecordingStatus(db);
+    if (!recTypeRankMap.contains(rectype)) 
+        recTypeRankMap[rectype] = info->GetRecordingTypeRank(rectype);
+
+    if (!rankMap.contains(info->schedulerid))
+    {
+        rank = info->rank.toInt();
+        rank += channelRankMap[info->chanid];
+        rank += recTypeRankMap[rectype];
+        rankMap[info->schedulerid] = rank;
+    }
+    else
+        rank = rankMap[info->schedulerid];
 
     list<ProgramInfo *>::iterator i = conflictList->begin();
     for (; i != conflictList->end(); i++)
     {
         ProgramInfo *second = (*i);
 
-        srank = second->rank.toInt();
-        srank += info->GetChannelRank(second->chanid, db);
-        srank += info->GetRecordingTypeRank(second->GetProgramRecordingStatus(db));
+        if (!channelRankMap.contains(second->chanid)) 
+            channelRankMap[second->chanid] = 
+                second->GetChannelRank(second->chanid, db);
+
+        rectype = second->GetProgramRecordingStatus(db);
+        if (!recTypeRankMap.contains(rectype))
+            recTypeRankMap[rectype] = second->GetRecordingTypeRank(rectype);
+
+        if (!rankMap.contains(second->schedulerid))
+        {
+            srank = second->rank.toInt();
+            srank += channelRankMap[second->chanid];
+            srank += recTypeRankMap[rectype];
+            rankMap[second->schedulerid] = srank;
+        }
+        else
+            srank = rankMap[second->schedulerid];
 
         if (rank == srank)
             continue;
 
-        if(rank > srank)
+        if (rank > srank)
         {
             second->recording = false;
             resolved++;
@@ -1089,7 +1118,15 @@
         if (CheckForChanges() ||
             (lastupdate.date().day() != curtime.date().day()))
         {
+            if (rankMap.size() > 0)
+                rankMap.clear();
+            if (channelRankMap.size() > 0)
+                channelRankMap.clear();
+            if (recTypeRankMap.size() > 0)
+                recTypeRankMap.clear();
+
             FillRecordLists();
+
             lastupdate = curtime;
             VERBOSE("Found changes in the todo list.");
 
Index: mythtv/programs/mythbackend/scheduler.h
===================================================================
RCS file: /var/lib/mythcvs/mythtv/programs/mythbackend/scheduler.h,v
retrieving revision 1.10
diff -u -r1.10 scheduler.h
--- mythtv/programs/mythbackend/scheduler.h	28 Jun 2003 23:09:20 -0000	1.10
+++ mythtv/programs/mythbackend/scheduler.h	1 Jul 2003 11:17:36 -0000
@@ -9,6 +9,7 @@
 #include <list>
 #include <vector>
 #include <qobject.h>
+#include "scheduledrecording.h"
 
 using namespace std;
 
@@ -69,6 +70,9 @@
 
     list<ProgramInfo *> recordingList;
     list<ProgramInfo *> scheduledList;
+    QMap<QString, int> rankMap;
+    QMap<QString, int> channelRankMap;
+    QMap<ScheduledRecording::RecordingType, int> recTypeRankMap;
 
     bool hasconflicts;
 
Index: mythtv/programs/mythfrontend/globalsettings.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/programs/mythfrontend/globalsettings.cpp,v
retrieving revision 1.77
diff -u -r1.77 globalsettings.cpp
--- mythtv/programs/mythfrontend/globalsettings.cpp	30 Jun 2003 23:54:36 -0000	1.77
+++ mythtv/programs/mythfrontend/globalsettings.cpp	1 Jul 2003 11:17:36 -0000
@@ -1,6 +1,8 @@
 #include "mythcontext.h"
 
 #include "globalsettings.h"
+#include "scheduledrecording.h"
+#include <qsqldatabase.h>
 #include <qfile.h>
 #include <qdialog.h>
 #include <qcursor.h>
@@ -820,7 +822,7 @@
 class GRSingleRecordRank: public SpinBoxSetting, public BackendSetting {
 public:
     GRSingleRecordRank():
-        SpinBoxSetting(-1000, 1000, 1), BackendSetting("SingleRecordRank") {
+        SpinBoxSetting(-99, 99, 1), BackendSetting("SingleRecordRank") {
         setLabel("Single Recordings Rank");
         setHelpText("Single Recordings will receive this additional "
                     "ranking value.");
@@ -831,7 +833,7 @@
 class GRWeekslotRecordRank: public SpinBoxSetting, public BackendSetting {
 public:
     GRWeekslotRecordRank():
-        SpinBoxSetting(-1000, 1000, 1), BackendSetting("WeekslotRecordRank") {
+        SpinBoxSetting(-99, 99, 1), BackendSetting("WeekslotRecordRank") {
         setLabel("Weekslot Recordings Rank");
         setHelpText("Weekslot Recordings will receive this additional "
                     "ranking value.");
@@ -842,7 +844,7 @@
 class GRTimeslotRecordRank: public SpinBoxSetting, public BackendSetting {
 public:
     GRTimeslotRecordRank():
-        SpinBoxSetting(-1000, 1000, 1), BackendSetting("TimeslotRecordRank") {
+        SpinBoxSetting(-99, 99, 1), BackendSetting("TimeslotRecordRank") {
         setLabel("Timeslot Recordings Rank");
         setHelpText("Timeslot Recordings will receive this additional "
                     "ranking value.");
Index: mythtv/programs/mythfrontend/main.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/programs/mythfrontend/main.cpp,v
retrieving revision 1.92
diff -u -r1.92 main.cpp
--- mythtv/programs/mythfrontend/main.cpp	28 Jun 2003 23:09:20 -0000	1.92
+++ mythtv/programs/mythfrontend/main.cpp	1 Jul 2003 11:17:37 -0000
@@ -219,6 +219,7 @@
     {
         GeneralRankingSettings settings;
         settings.exec(QSqlDatabase::database());
+        ScheduledRecording::signalChange(QSqlDatabase::database());
     } 
     else if (sel == "settings channelranking") 
     {
Index: mythtv/programs/mythfrontend/rankchannels.cpp
===================================================================
RCS file: /var/lib/mythcvs/mythtv/programs/mythfrontend/rankchannels.cpp,v
retrieving revision 1.3
diff -u -r1.3 rankchannels.cpp
--- mythtv/programs/mythfrontend/rankchannels.cpp	30 Jun 2003 16:40:12 -0000	1.3
+++ mythtv/programs/mythfrontend/rankchannels.cpp	1 Jul 2003 11:17:37 -0000
@@ -386,6 +386,7 @@
             applyChannelRankChange(db, QString::number(chanInfo->chanid), 
                                    chanInfo->rank);
     }
+    ScheduledRecording::signalChange(db);
 }
 
 void RankChannels::FillList(void)


More information about the mythtv-dev mailing list