Ticket #8962: 8962_v2.patch
File 8962_v2.patch, 8.0 KB (added by , 9 years ago) |
---|
-
mythtv/libs/libmythtv/jobqueue.cpp
diff --git a/mythtv/libs/libmythtv/jobqueue.cpp b/mythtv/libs/libmythtv/jobqueue.cpp index b465bfb..f94d73f 100644
a b int JobQueue::GetRunningJobID(uint chanid, const QDateTime &recstartts) 1062 1062 return 0; 1063 1063 } 1064 1064 1065 bool JobQueue::IsJobRunning(int jobType, 1066 uint chanid, const QDateTime &recstartts) 1065 bool JobQueue::IsJobStatusQueued(int status) 1067 1066 { 1068 int tmpStatus = GetJobStatus(jobType, chanid, recstartts); 1067 return (status & JOB_QUEUED); 1068 } 1069 1069 1070 if ((tmpStatus != JOB_UNKNOWN) && (tmpStatus != JOB_QUEUED) && 1071 (!(tmpStatus & JOB_DONE))) 1072 return true; 1070 bool JobQueue::IsJobStatusRunning(int status) 1071 { 1072 return ((status != JOB_UNKNOWN) && (status != JOB_QUEUED) && 1073 (!(status & JOB_DONE))); 1074 } 1073 1075 1074 return false; 1076 bool JobQueue::IsJobRunning(int jobType, 1077 uint chanid, const QDateTime &recstartts) 1078 { 1079 return IsJobStatusRunning(GetJobStatus(jobType, chanid, recstartts)); 1075 1080 } 1076 1081 1077 1082 bool JobQueue::IsJobRunning(int jobType, const ProgramInfo &pginfo) … … bool JobQueue::IsJobQueuedOrRunning( 1094 1099 bool JobQueue::IsJobQueued( 1095 1100 int jobType, uint chanid, const QDateTime &recstartts) 1096 1101 { 1097 int tmpStatus = GetJobStatus(jobType, chanid, recstartts); 1098 1099 if (tmpStatus & JOB_QUEUED) 1100 return true; 1101 1102 return false; 1102 return IsJobStatusQueued(GetJobStatus(jobType, chanid, recstartts)); 1103 1103 } 1104 1104 1105 1105 QString JobQueue::JobText(int jobType) -
mythtv/libs/libmythtv/jobqueue.h
diff --git a/mythtv/libs/libmythtv/jobqueue.h b/mythtv/libs/libmythtv/jobqueue.h index e799912..ee7dcaa 100644
a b class MTV_PUBLIC JobQueue : public QObject, public QRunnable 161 161 static bool IsJobRunning(int jobType, const ProgramInfo &pginfo); 162 162 static bool IsJobQueued(int jobType, 163 163 uint chanid, const QDateTime &recstartts); 164 static bool IsJobStatusQueued(int status); 165 static bool IsJobStatusRunning(int status); 164 166 static bool PauseJob(int jobID); 165 167 static bool ResumeJob(int jobID); 166 168 static bool RestartJob(int jobID); -
mythtv/programs/mythfrontend/playbackbox.cpp
diff --git a/mythtv/programs/mythfrontend/playbackbox.cpp b/mythtv/programs/mythfrontend/playbackbox.cpp index 6d69ef3..548c014 100644
a b static QString extract_main_state(const ProgramInfo &pginfo, const TV *player) 288 288 return state; 289 289 } 290 290 291 static QStringextract_job_state(const ProgramInfo &pginfo)291 QString PlaybackBox::extract_job_state(const ProgramInfo &pginfo) 292 292 { 293 293 QString job = "default"; 294 294 295 295 if (pginfo.GetRecordingStatus() == RecStatus::Recording || 296 296 pginfo.GetRecordingStatus() == RecStatus::Failing) 297 297 job = "recording"; 298 else if ( JobQueue::IsJobQueuedOrRunning(298 else if (m_jobQueue.IsJobQueuedOrRunning( 299 299 JOB_TRANSCODE, pginfo.GetChanID(), 300 300 pginfo.GetRecordingStartTime())) 301 301 job = "transcoding"; 302 else if ( JobQueue::IsJobQueuedOrRunning(302 else if (m_jobQueue.IsJobQueuedOrRunning( 303 303 JOB_COMMFLAG, pginfo.GetChanID(), 304 304 pginfo.GetRecordingStartTime())) 305 305 job = "commflagging"; … … static QString extract_job_state(const ProgramInfo &pginfo) 307 307 return job; 308 308 } 309 309 310 static QStringextract_commflag_state(const ProgramInfo &pginfo)310 QString PlaybackBox::extract_commflag_state(const ProgramInfo &pginfo) 311 311 { 312 312 QString job = "default"; 313 313 314 314 // commflagged can be yes, no or processing 315 if (JobQueue::IsJobRunning(JOB_COMMFLAG, pginfo)) 315 if (m_jobQueue.IsJobRunning(JOB_COMMFLAG, pginfo.GetChanID(), 316 pginfo.GetRecordingStartTime())) 316 317 return "running"; 317 if ( JobQueue::IsJobQueued(JOB_COMMFLAG, pginfo.GetChanID(),318 pginfo.GetRecordingStartTime()))318 if (m_jobQueue.IsJobQueued(JOB_COMMFLAG, pginfo.GetChanID(), 319 pginfo.GetRecordingStartTime())) 319 320 return "queued"; 320 321 321 322 return ((pginfo.GetProgramFlags() & FL_COMMFLAG) ? "yes" : "no"); … … void HelpPopup::addItem(const QString &state, const QString &text) 5544 5545 item->DisplayState(state, "icons"); 5545 5546 } 5546 5547 5548 void PlaybackBox::PbbJobQueue::Update() 5549 { 5550 QDateTime now = QDateTime::currentDateTime(); 5551 if (!m_lastUpdated.isValid() || 5552 m_lastUpdated.msecsTo(now) >= kInvalidateTimeMs) 5553 { 5554 QMap<int, JobQueueEntry> jobs; 5555 JobQueue::GetJobsInQueue(jobs, JOB_LIST_ALL); 5556 m_jobs.clear(); 5557 for (int i = 0; i < jobs.size(); ++i) 5558 { 5559 JobQueueEntry &entry = jobs[i]; 5560 m_jobs.insert(qMakePair(entry.chanid, entry.recstartts), entry); 5561 } 5562 m_lastUpdated = now; 5563 } 5564 } 5565 5566 bool PlaybackBox::PbbJobQueue::IsJobQueued(int jobType, uint chanid, 5567 const QDateTime &recstartts) 5568 { 5569 Update(); 5570 MapType::const_iterator iter = m_jobs.find(qMakePair(chanid, recstartts)); 5571 for (; iter != m_jobs.end(); ++iter) 5572 { 5573 if (iter->type == jobType) 5574 return JobQueue::IsJobStatusQueued(iter->status); 5575 } 5576 return false; 5577 } 5578 5579 bool PlaybackBox::PbbJobQueue::IsJobRunning(int jobType, uint chanid, 5580 const QDateTime &recstartts) 5581 { 5582 Update(); 5583 MapType::const_iterator iter = m_jobs.find(qMakePair(chanid, recstartts)); 5584 for (; iter != m_jobs.end(); ++iter) 5585 { 5586 if (iter->type == jobType) 5587 return JobQueue::IsJobStatusRunning(iter->status); 5588 } 5589 return false; 5590 } 5591 5592 bool PlaybackBox::PbbJobQueue::IsJobQueuedOrRunning(int jobType, uint chanid, 5593 const QDateTime &recstartts) 5594 { 5595 return IsJobQueued(jobType, chanid, recstartts) || 5596 IsJobRunning(jobType, chanid, recstartts); 5597 } 5598 5547 5599 /* vim: set expandtab tabstop=4 shiftwidth=4: */ -
mythtv/programs/mythfrontend/playbackbox.h
diff --git a/mythtv/programs/mythfrontend/playbackbox.h b/mythtv/programs/mythfrontend/playbackbox.h index 44a41e2..19255ec 100644
a b using namespace std; 13 13 14 14 #include <QStringList> 15 15 #include <QDateTime> 16 #include <QMultiMap> 16 17 #include <QObject> 17 18 #include <QMutex> 18 19 #include <QMap> … … class PlaybackBox : public ScheduleCommon 333 334 334 335 QString CreateProgramInfoString(const ProgramInfo &program) const; 335 336 337 QString extract_job_state(const ProgramInfo &pginfo); 338 QString extract_commflag_state(const ProgramInfo &pginfo); 339 336 340 337 341 QRegExp m_prefixes; ///< prefixes to be ignored when sorting 338 342 QRegExp m_titleChaff; ///< stuff to remove for search rules … … class PlaybackBox : public ScheduleCommon 442 446 bool m_usingGroupSelector; 443 447 bool m_groupSelected; 444 448 bool m_passwordEntered; 449 450 // This class caches the contents of the jobqueue table to avoid excessive 451 // DB queries each time the PBB selection changes (currently 4 queries per 452 // displayed item). The cache remains valid for 15 seconds 453 // (kInvalidateTimeMs). 454 class PbbJobQueue 455 { 456 public: 457 PbbJobQueue() {} 458 bool IsJobQueued(int jobType, uint chanid, 459 const QDateTime &recstartts); 460 bool IsJobRunning(int jobType, uint chanid, 461 const QDateTime &recstartts); 462 bool IsJobQueuedOrRunning(int jobType, uint chanid, 463 const QDateTime &recstartts); 464 private: 465 static const qint64 kInvalidateTimeMs = 15000; 466 void Update(); 467 QDateTime m_lastUpdated; 468 // Maps <chanid, recstartts> to a set of JobQueueEntry values. 469 typedef QMultiMap<QPair<uint, QDateTime>, JobQueueEntry> MapType; 470 MapType m_jobs; 471 } m_jobQueue; 445 472 }; 446 473 447 474 class GroupSelector : public MythScreenType