On Sat, 15 Jan 2005 01:13:17 +0900, Jack Porter <[EMAIL PROTECTED]> wrote: > Sorry!! That patch is missing an "else return 0;" for the case where > showDialogs is false, possibly causing an infinite loop. > > Please use this one instead. > > Thanks > Jack > > -- > Jack Porter Programmer > [EMAIL PROTECTED] Softmax > [EMAIL PROTECTED] South Korea > > > Index: tv_play.cpp > =================================================================== > RCS file: /var/lib/mythcvs/mythtv/libs/libmythtv/tv_play.cpp,v > retrieving revision 1.233 > diff -u -r1.233 tv_play.cpp > --- tv_play.cpp 24 Dec 2004 23:24:07 -0000 1.233 > +++ tv_play.cpp 14 Jan 2005 16:06:13 -0000 > @@ -37,6 +37,17 @@ > float rew_repos; > }; > > +struct CurrentEncRecordingInfo > +{ > + RemoteEncoder* enc; > + QString chanid; > + > + CurrentEncRecordingInfo(RemoteEncoder* inenc, QString inchanid) > + : enc(inenc) > + , chanid(inchanid) > + {} > +}; > + > #define MAX_REPO_LEVEL 3 > SeekSpeedInfo seek_speed_array[MAX_REPO_LEVEL][7] = > { > @@ -405,37 +416,106 @@ > return internalState; > } > > + > int TV::LiveTV(bool showDialogs) > { > if (internalState == kState_None) > { > - RemoteEncoder *testrec = > RemoteRequestNextFreeRecorder(lastRecorderNum); > - > - if (!testrec) > - return 0; > - > - if (!testrec->IsValidRecorder()) > + RemoteEncoder* testrec; > + for (;;) > { > - if (showDialogs) > - { > - QString title = tr("MythTV is already using all available " > - "inputs for recording. If you want to " > - "watch an in-progress recording, select > one " > - "from the playback menu. If you want to " > - "watch live TV, cancel one of the " > - "in-progress recordings from the delete " > - "menu."); > - > - DialogBox diag(gContext->GetMainWindow(), title); > - diag.AddButton(tr("Cancel and go back to the TV menu")); > - diag.exec(); > - } > + testrec = RemoteRequestNextFreeRecorder(lastRecorderNum); > > - delete testrec; > - > - return 0; > + if (!testrec) > + return 0; > + > + if (!testrec->IsValidRecorder()) > + { > + delete testrec; > + > + if (showDialogs) > + { > + QString title = tr("MythTV is already using all > available " > + "inputs for recording. If you want > to " > + "watch an in-progress recording, > select one " > + "from the playback menu. If you want > to " > + "watch live TV, cancel one of the " > + "in-progress recordings from the > delete " > + "menu."); > + > + DialogBox diag(gContext->GetMainWindow(), title); > + diag.AddButton(tr("Cancel and go back to the TV menu")); > + > + vector<CurrentEncRecordingInfo> encoderinfos; > + > + int countRecording = RemoteIsRecording(); > + for (int i = 1; i <= countRecording; i++) > + { > + RemoteEncoder* enc = RemoteGetExistingRecorder(i); > + if (enc) > + { > + if (enc->IsValidRecorder()) > + { > + enc->Setup(); > + QString title, subtitle, > + desc, category, > + starttime, endtime, > + callsign, iconpath, > + channelname, chanid, > + seriesid, programid, > + outputFilters, repeat, > + airdate, stars; > + > + enc->GetChannelInfo(title, subtitle, > + desc, category, > + starttime, endtime, > + callsign, iconpath, > + channelname, chanid, > + seriesid, programid, > + outputFilters, repeat, > + airdate, stars); > + if (title != "") > + { > + diag.AddButton(tr("Cancel Recording: > ")+title); > + > encoderinfos.push_back(CurrentEncRecordingInfo(enc, chanid)); > + } > + else > + delete enc; > + } > + else > + delete enc; > + } > + } > + > + int result = diag.exec(); > + int c = 2; > + for (vector<CurrentEncRecordingInfo>::iterator i = > encoderinfos.begin(); > + i != encoderinfos.end(); > + ++i) > + { > + RemoteEncoder* enc = (*i).enc; > + if (result == c) > + { > + QDateTime now = QDateTime::currentDateTime(); > + ProgramInfo* currentprog = > ProgramInfo::GetProgramAtDateTime(QSqlDatabase::database(), (*i).chanid, now); > + cout << "stopping recording " << > currentprog->title.local8Bit() << endl; > + RemoteStopRecording(currentprog); > + delete currentprog; > + } > + delete enc; > + c++; > + } > + > + if (result == 1) // Cancel and go back to TV menu. > + return 0; > + } > + else > + return 0; > + } > + else > + break; // found a valid recorder, fall out of the loop. > } > - > + > activerecorder = recorder = testrec; > lastRecorderNum = recorder->GetRecorderNumber(); > nextState = kState_WatchingLiveTV; > @@ -4217,4 +4297,3 @@ > cout << "No sleep timer?"; > } > } > - > > > _______________________________________________ > mythtv-dev mailing list > mythtv-dev@mythtv.org > http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev > > > Good patch, this exact same thing was bothering me last night! I'll apply it when I get a chance, thanks :)
-- - Ciaran
_______________________________________________ mythtv-dev mailing list mythtv-dev@mythtv.org http://mythtv.org/cgi-bin/mailman/listinfo/mythtv-dev