Ticket #11207: 11207-livetv-0.25-2.patch

File 11207-livetv-0.25-2.patch, 4.1 KB (added by gigem, 11 years ago)
  • mythtv/programs/mythbackend/scheduler.cpp

    diff --git a/mythtv/programs/mythbackend/scheduler.cpp b/mythtv/programs/mythbackend/scheduler.cpp
    index 3db2883..8c2a985 100644
    a b bool Scheduler::TryAnotherShowing(RecordingInfo *p, bool samePriority, 
    12201220
    12211221        q->SetRecordingStatus(rsWillRecord);
    12221222        MarkOtherShowings(q);
     1223        if (q->GetRecordingStartTime() < livetvTime)
     1224            livetvTime = q->GetRecordingStartTime();
    12231225        PrintRec(p, "     -");
    12241226        PrintRec(q, "     +");
    12251227        return true;
    void Scheduler::SchedNewRecords(void) 
    12551257            "- = unschedule a showing in favor of another one");
    12561258    }
    12571259
     1260    livetvTime = QDateTime::currentDateTime().addSecs(3600);
    12581261    int openEnd = gCoreContext->GetNumSetting("SchedOpenEnd", 0);
    12591262
    12601263    RecIter i = worklist.begin();
    void Scheduler::SchedNewRecords(void) 
    12701273            if (!conflict)
    12711274            {
    12721275                p->SetRecordingStatus(rsWillRecord);
    1273 
    1274                 if (p->GetRecordingStartTime() < schedTime.addSecs(90))
    1275                 {
    1276                     QString id = p->MakeUniqueSchedulerKey();
    1277                     if (!recPendingList.contains(id))
    1278                         recPendingList[id] = false;
    1279 
    1280                     livetvTime = (livetvTime < schedTime) ?
    1281                         schedTime : livetvTime;
    1282                 }
    1283 
    12841276                MarkOtherShowings(p);
     1277                if (p->GetRecordingStartTime() < livetvTime)
     1278                    livetvTime = p->GetRecordingStartTime();
    12851279                PrintRec(p, "  +");
    12861280            }
    12871281            else
    void Scheduler::MoveHigherRecords(bool move_this) 
    13281322        }
    13291323
    13301324        if (p->GetRecordingStatus() == rsWillRecord)
     1325        {
     1326            if (p->GetRecordingStartTime() < livetvTime)
     1327                livetvTime = p->GetRecordingStartTime();
    13311328            PrintRec(p, "  +");
     1329        }
    13321330    }
    13331331
    13341332    i = retrylist.begin();
    void Scheduler::MoveHigherRecords(bool move_this) 
    13611359        }
    13621360
    13631361        if (move_this && p->GetRecordingStatus() == rsWillRecord)
     1362        {
     1363            if (p->GetRecordingStartTime() < livetvTime)
     1364                livetvTime = p->GetRecordingStartTime();
    13641365            PrintRec(p, "  +");
     1366        }
    13651367    }
    13661368}
    13671369
    int Scheduler::CalcTimeToNextHandleRecordingEvent( 
    19721974        int secs_to_next = curtime.secsTo((*i)->GetRecordingStartTime());
    19731975
    19741976        if ((*i)->GetRecordingStatus() == rsWillRecord &&
    1975             !recPendingList[(*i)->MakeUniqueSchedulerKey()])
     1977            !recPendingList.contains((*i)->MakeUniqueSchedulerKey()))
    19761978            secs_to_next -= 30;
    19771979
    19781980        if (secs_to_next < 0)
    bool Scheduler::HandleRecording( 
    23182320        if (!recPendingList.contains(schedid))
    23192321        {
    23202322            recPendingList[schedid] = false;
    2321 
    2322             livetvTime = (livetvTime < nextrectime) ?
    2323                 nextrectime : livetvTime;
    2324 
    2325             m_queueLock.lock();
    2326             reschedQueue.enqueue(0);
    2327             m_queueLock.unlock();
     2323            if (schedTime.secsTo(curtime) > 15)
     2324            {
     2325                m_queueLock.lock();
     2326                reschedQueue.enqueue(0);
     2327                m_queueLock.unlock();
     2328            }
    23282329        }
    23292330    }
    23302331
    bool Scheduler::HandleRecording( 
    24762477            schedLock.unlock();
    24772478            recStatus = nexttv->StartRecording(&tempri);
    24782479            schedLock.lock();
     2480            recPendingList.remove(schedid);
    24792481
    24802482            // activate auto expirer
    24812483            if (m_expirer)
    void Scheduler::FillDirectoryInfoCache(bool force) 
    49264928
    49274929void Scheduler::SchedPreserveLiveTV(void)
    49284930{
    4929     if (!livetvTime.isValid())
    4930         return;
     4931    int prerollseconds = gCoreContext->GetNumSetting("RecordPreRoll", 0);
     4932    QDateTime curtime = QDateTime::currentDateTime();
     4933    int secsleft = curtime.secsTo(livetvTime);
    49314934
    4932     if (livetvTime < schedTime)
    4933     {
    4934         livetvTime = QDateTime();
     4935    if (secsleft - prerollseconds > 120)
    49354936        return;
    4936     }
    49374937
    49384938    livetvpriority = gCoreContext->GetNumSetting("LiveTVPriority", 0);
    49394939