static bool comp_soft(ProgramInfo *a, ProgramInfo *b) { if (a->cardid != b->cardid) return a->cardid < b->cardid; return a->recstartts < b->recstartts; } VERBOSE(VB_SCHEDULE, "Sort by cardid..."); reclist.sort(comp_soft); VERBOSE(VB_SCHEDULE, "PartialSoft..."); PartialSoft(); void Scheduler::PartialSoft(void) { int softStart = gContext->GetNumSetting("SchedSoftStart",0); int softEnd = gContext->GetNumSetting("SchedSoftEnd",0); if (softStart == 0 && softEnd == 0) return; ProgramInfo *lastp = NULL; RecIter i = reclist.begin(); while (i != reclist.end()) { ProgramInfo *p = *i; if (lastp != NULL && lastp->cardid == p->cardid && !p->shareable && p->recstatus == rsWillRecord && ((lastp->recstatus == rsWillRecord && lastp->softend==0) || p->softstart==0)) { /* if schedMoveHigher ignored if (lastp->recstatus == rsWillRecord) { QDateTime end = lastp->recendts.addSecs(-60 * lastp->softend); int diff = end.secsTo(start); p->softstart = ((diff * softStart)/(softStart + softEnd))/60; p->recstartts = start.addSecs(-60 * p->softstart); lastp->softend = (diff / 60) - p->softstart; lastp->recendts = end.addSecs(60 * lastp->softend); } else if (lastp->recstatus == rsRecording) { QDateTime end = lastp->recendts; int diff = end.secsTo(start); p->softstart = diff / 60; p->recstartts = start.addSecs(-60 * p->softstart); } */ if (lastp->recstatus == rsWillRecord) { if (schedMoveHigher || lastp->recpriority == p->recpriority) { QDateTime end = lastp->recendts.addSecs(-60 * lastp->softend); QDateTime start = p->recstartts.addSecs(60 * p->softstart); int diff = end.secsTo(start); p->softstart = ((diff * softStart)/(softStart + softEnd))/60; p->recstartts = start.addSecs(-60 * p->softstart); lastp->softend = (diff / 60) - p->softstart; lastp->recendts = end.addSecs(60 * lastp->softend); } // next three ifs assume that higher priority got the softpadding else if (lastp->recpriority < p->recpriority) { QDateTime end = lastp->recendts.addSecs(-60 * lastp->softend); QDateTime start = p->recstartts; int diff = end.secsTo(start); lastp->softend = diff / 60; lastp->recendts = end.addSecs(60 * lastp->softend); } else if (lastp->recpriority > p->recpriority) { QDateTime end = lastp->recendts; QDateTime start = p->recstartts.addSecs(60 * p->softstart); int diff = end.secsTo(start); p->softstart = diff / 60; p->recstartts = start.addSecs(-60 * p->softstart); } } // can only change start time else if (lastp->recstatus == rsRecording) { if (schedMoveHigher || lastp->recpriority >= p->recpriority) { // repeat of previous block QDateTime end = lastp->recendts; QDateTime start = p->recstartts.addSecs(60 * p->softstart); int diff = end.secsTo(start); p->softstart = diff / 60; p->recstartts = start.addSecs(-60 * p->softstart); } } } if (Recording(p)) lastp = p; i++; } }