Ticket #190: autoexpire-do-not-expire-playing.patch
File autoexpire-do-not-expire-playing.patch, 10.1 KB (added by , 20 years ago) |
---|
-
libs/libmythtv/remoteutil.h
25 25 bool RemoteGetUptime(time_t &uptime); 26 26 bool RemoteGetMemStats(int &totalMB, int &freeMB, int &totalVM, int &freeVM); 27 27 bool RemoteCheckFile(ProgramInfo *pginfo); 28 bool RemoteIsPlaying(const ProgramInfo *pginfo); 28 29 void RemoteStopRecording(ProgramInfo *pginfo); 29 30 bool RemoteDeleteRecording(ProgramInfo *pginfo, bool forgetHistory, 30 31 bool forceMetadataDelete = false); -
libs/libmythtv/remoteutil.cpp
130 130 return strlist[0].toInt(); 131 131 } 132 132 133 bool RemoteIsPlaying(const ProgramInfo *pginfo) 134 { 135 QStringList strlist = "QUERY_IS_PLAYING"; 136 pginfo->ToStringList(strlist); 137 138 if (!gContext->SendReceiveStringList(strlist)) 139 return false; 140 141 return strlist[0].toInt(); 142 } 143 133 144 void RemoteStopRecording(ProgramInfo *pginfo) 134 145 { 135 146 QStringList strlist = QString("STOP_RECORDING"); -
libs/libmythtv/tv_rec.cpp
289 289 return internalState; 290 290 } 291 291 292 /** \fn TVRec::IsPlaying(const ProgramInfo*) 293 * \brief Returns true iff we are playing the program indicated. 294 * \param pginfo Program we want to compare to curRecording 295 */ 296 bool TVRec::IsPlaying(const ProgramInfo *pginfo) 297 { 298 QMutexLocker lock(&stateChangeLock); 299 if (curRecording && pginfo && StateIsPlaying(GetState())) 300 return (curRecording->IsSameProgram(*pginfo)); 301 return false; 302 } 303 292 304 /** \fn TVRec::GetRecording(void) 293 305 * \brief Allocates and returns a ProgramInfo for the current recording. 294 306 * -
libs/libmythtv/tv_rec.h
67 67 68 68 bool Init(void); 69 69 70 bool IsPlaying(const ProgramInfo *pginfo); 70 71 void RecordPending(const ProgramInfo *rcinfo, int secsleft); 71 72 int StartRecording(const ProgramInfo *rcinfo); 72 73 -
programs/mythbackend/encoderlink.h
52 52 53 53 TVState GetState(); 54 54 bool IsRecording(const ProgramInfo *rec); // scheduler call only. 55 bool IsPlaying(const ProgramInfo *rec); 55 56 56 57 bool HasEnoughFreeSpace(const ProgramInfo *rec, 57 58 bool try_to_use_cache = false); -
programs/mythbackend/playbacksock.cpp
228 228 return ret; 229 229 } 230 230 231 /** \fn PlaybackSock::IsPlaying(int, const ProgramInfo*) 232 * \brief Returns whether the particular program in pginfo is currently. 233 * being viewed. 234 * \param capturecardnum Recorder ID in the database. 235 */ 236 bool PlaybackSock::IsPlaying(int capturecardnum, const ProgramInfo *pginfo) 237 { 238 QStringList strlist = QString("QUERY_REMOTEENCODER %1").arg(capturecardnum); 239 strlist << "IS_PLAYING"; 240 pginfo->ToStringList(strlist); 241 242 SendReceiveStringList(strlist); 243 244 bool ret = strlist[0].toInt(); 245 return ret; 246 } 247 248 231 249 int PlaybackSock::StartRecording(int capturecardnum, const ProgramInfo *pginfo) 232 250 { 233 251 QStringList strlist = QString("QUERY_REMOTEENCODER %1").arg(capturecardnum); -
programs/mythbackend/mainserver.cpp
309 309 { 310 310 HandleQueryCheckFile(listline, pbs); 311 311 } 312 else if (command == "QUERY_IS_PLAYING") 313 { 314 HandleQueryIsPlaying(listline, pbs); 315 } 312 316 else if (command == "QUERY_GUIDEDATATHROUGH") 313 317 { 314 318 HandleQueryGuideDataThrough(pbs); … … 1904 1908 delete pginfo; 1905 1909 } 1906 1910 1911 void MainServer::HandleQueryIsPlaying(QStringList &slist, PlaybackSock *pbs) 1912 { 1913 QSocket *pbssock = pbs->getSocket(); 1914 1915 ProgramInfo *pginfo = new ProgramInfo(); 1916 pginfo->FromStringList(slist, 1); 1917 1918 int playing = 0; 1919 1920 if (!ismaster) 1921 VERBOSE(VB_IMPORTANT, "HandleQueryIsPlaying called on non-master..."); 1922 1923 // check each recorder to see if they are playing the stream. 1924 QMap<int, EncoderLink *>::Iterator iter = encoderList->begin(); 1925 for (; iter != encoderList->end() && !playing; ++iter) 1926 playing |= (iter.data())->IsPlaying(pginfo); 1927 1928 QStringList strlist = QString::number(playing); 1929 SendResponse(pbssock, strlist); 1930 1931 delete pginfo; 1932 } 1933 1907 1934 void MainServer::getGuideDataThrough(QDateTime &GuideDataThrough) 1908 1935 { 1909 1936 MSqlQuery query(MSqlQuery::InitCon()); … … 2715 2742 2716 2743 delete pginfo; 2717 2744 } 2745 else if (command == "IS_PLAYING") 2746 { 2747 ProgramInfo *pginfo = new ProgramInfo(); 2748 pginfo->FromStringList(slist, 2); 2749 2750 retlist << QString::number((int)enc->IsPlaying(pginfo)); 2751 2752 delete pginfo; 2753 } 2718 2754 else if (command == "START_RECORDING") 2719 2755 { 2720 2756 ProgramInfo *pginfo = new ProgramInfo(); -
programs/mythbackend/playbacksock.h
53 53 int GetEncoderState(int capturecardnum); 54 54 long long GetMaxBitrate(int capturecardnum); 55 55 bool EncoderIsRecording(int capturecardnum, const ProgramInfo *pginfo); 56 bool IsPlaying(int capturecardnum, const ProgramInfo *pginfo); 56 57 int StartRecording(int capturecardnum, const ProgramInfo *pginfo); 57 58 void RecordPending(int capturecardnum, const ProgramInfo *pginfo, int secsleft); 58 59 int SetSignalMonitoringRate(int capturecardnum, int rate, int notifyFrontend); -
programs/mythbackend/mainserver.h
83 83 void HandleRescheduleRecordings(int recordid, PlaybackSock *pbs); 84 84 void HandleQueryFreeSpace(PlaybackSock *pbs, bool allBackends); 85 85 void HandleQueryCheckFile(QStringList &slist, PlaybackSock *pbs); 86 void HandleQueryIsPlaying(QStringList &slist, PlaybackSock *pbs); 86 87 void HandleQueryGuideDataThrough(PlaybackSock *pbs); 87 88 void HandleGetPendingRecordings(PlaybackSock *pbs); 88 89 void HandleGetScheduledRecordings(PlaybackSock *pbs); -
programs/mythbackend/autoexpire.cpp
278 278 * 279 279 * CheckFile makes sure the file exists and is stored on the same file 280 280 * system as the recordfileprefix. 281 * 281 282 * \param pginfo ProgramInfo for the program we wish to delete. 282 283 * \param recordfileprefix Path where new recordings are stored. 283 284 * \param fsid Unique ID of recordfileprefix's filesystem. … … 322 323 VERBOSE(VB_FILE, msg); 323 324 return false; 324 325 } 326 327 // query recorders to see if the file is currently being played 328 if (RemoteIsPlaying(pginfo)) 329 { 330 VERBOSE(VB_FILE, QString("File '%1' is currently being played. " 331 "Not autoexpiring").arg(filename)); 332 return false; 333 } 334 325 335 return true; 326 336 } 327 337 -
programs/mythbackend/encoderlink.cpp
1 // C++ headers2 #include <iostream>3 using namespace std;4 5 1 // C headers 6 2 #include <unistd.h> 7 3 … … 137 133 else if (sock) 138 134 retval = (TVState)sock->GetEncoderState(m_capturecardnum); 139 135 else 140 cerr << "Broken for card: " << m_capturecardnum << endl; 136 VERBOSE(VB_IMPORTANT, 137 QString("EncoderLink::GetState() failed for recorder %1") 138 .arg(m_capturecardnum)); 141 139 142 140 return retval; 143 141 } … … 145 143 /** \fn EncoderLink::IsRecording(const ProgramInfo *rec) 146 144 * \brief Returns true if rec is scheduled for recording. 147 145 * \param rec Recording to check. 148 * \sa MatchesRecording(const ProgramInfo*) 146 * \sa MatchesRecording(const ProgramInfo*), IsPlaying(const ProgramInfo *) 149 147 */ 150 148 bool EncoderLink::IsRecording(const ProgramInfo *rec) 151 149 { … … 157 155 return retval; 158 156 } 159 157 158 /** \fn EncoderLink::IsPlaying(const ProgramInfo *) 159 * \brief Returns true iff recording is currently being played. 160 * \param rec Recording to check. 161 * \sa IsRecording(const ProgramInfo*), MatchesRecording(const ProgramInfo*) 162 */ 163 bool EncoderLink::IsPlaying(const ProgramInfo *rec) 164 { 165 bool retval = false; 166 167 if (local) 168 retval = tv->IsPlaying(rec); 169 else if (sock) 170 retval = sock->IsPlaying(m_capturecardnum, rec); 171 else 172 VERBOSE(VB_IMPORTANT, 173 QString("EncoderLink::IsPlaying() failed for recorder %1") 174 .arg(m_capturecardnum)); 175 176 return retval; 177 } 178 160 179 /** \fn EncoderLink::MatchesRecording(const ProgramInfo *rec) 161 180 * \brief Returns true if rec is actually being recorded by TVRec. 162 181 * … … 190 209 delete tvrec; 191 210 } 192 211 } 212 else if (sock) 213 retval = sock->EncoderIsRecording(m_capturecardnum, rec); 193 214 else 194 { 195 if (sock) 196 retval = sock->EncoderIsRecording(m_capturecardnum, rec); 197 } 215 VERBOSE(VB_IMPORTANT, QString("EncoderLink::MatchesRecording() " 216 "failed for recorder %1").arg(m_capturecardnum)); 198 217 199 218 return retval; 200 219 }