5 #include <QCoreApplication>
11 #include <QStringList>
29 #define LOC QString("PlaybackBoxHelper: ")
30 #define LOC_WARN QString("PlaybackBoxHelper Warning: ")
31 #define LOC_ERR QString("PlaybackBoxHelper Error: ")
49 bool event(QEvent* )
override;
62 QTime tm = QTime::currentTime();
64 QStringList::const_iterator it2 = slist.begin();
68 QSet<CheckAvailabilityType> cats;
69 for (; it2 != slist.end(); ++it2)
82 QHash<uint, QStringList>::iterator cit =
105 LOG(VB_GENERAL, LOG_ERR,
LOC +
106 QString(
"CHECK_AVAILABILITY '%1' file not found")
126 auto *e0 =
new MythEvent(
"SET_PLAYBACK_URL", list);
131 list.push_back(QString::number((
int)firstType));
132 list.push_back(QString::number((
int)availableStatus));
133 list.push_back(QString::number(evinfo.
GetFilesize()));
134 list.push_back(QString::number(tm.hour()));
135 list.push_back(QString::number(tm.minute()));
136 list.push_back(QString::number(tm.second()));
137 list.push_back(QString::number(tm.msec()));
139 for (
auto type : std::as_const(cats))
143 list[1] = QString::number((
int)
type);
144 auto *e =
new MythEvent(
"AVAILABILITY", list);
148 return availableStatus;
153 if (e->type() == QEvent::Timer)
155 auto *te = (QTimerEvent*)e;
156 const int timer_id = te->timerId();
164 QHash<uint, QStringList>::iterator it =
179 return QObject::event(e);
181 if (me->Message() ==
"UPDATE_FREE_SPACE")
186 if (me->Message() ==
"STOP_RECORDING")
193 if (me->Message() ==
"DELETE_RECORDINGS")
195 QStringList successes;
196 QStringList failures;
197 QStringList list = me->ExtraDataList();
198 while (list.size() >= 3)
200 uint recordingID = list[0].toUInt();
201 bool forceDelete = list[1].toUInt() != 0U;
202 bool forgetHistory = list[2].toUInt() != 0U;
207 QStringList &res = (ok) ? successes : failures;
208 for (
uint i = 0; i < 3; i++)
210 res.push_back(list.front());
214 if (!successes.empty())
216 auto *oe =
new MythEvent(
"DELETE_SUCCESSES", successes);
219 if (!failures.empty())
221 auto *oe =
new MythEvent(
"DELETE_FAILURES", failures);
227 if (me->Message() ==
"UNDELETE_RECORDINGS")
229 QStringList successes;
230 QStringList failures;
231 QStringList list = me->ExtraDataList();
232 while (!list.empty())
234 uint recordingID = list[0].toUInt();
238 QStringList &res = (ok) ? successes : failures;
240 res.push_back(QString::number(recordingID));
243 if (!successes.empty())
245 auto *oe =
new MythEvent(
"UNDELETE_SUCCESSES", successes);
248 if (!failures.empty())
250 auto *oe =
new MythEvent(
"UNDELETE_FAILURES", failures);
256 if (me->Message() ==
"GET_PREVIEW")
258 const QString& token = me->ExtraData(0);
259 bool check_avail = (
bool) me->ExtraData(1).toInt();
260 QStringList list = me->ExtraDataList();
261 QStringList::const_iterator it = list.cbegin()+2;
279 if (me->Message() ==
"CHECK_AVAILABILITY")
292 else if (me->Message() ==
"LOCATE_ARTWORK")
294 const QString& inetref = me->ExtraData(0);
295 uint season = me->ExtraData(1).toUInt();
298 uint recordingID = me->ExtraData(3).toUInt();
299 const QString &group = me->ExtraData(4);
301 const QString cacheKey = QString(
"%1:%2:%3")
302 .arg((
int)
type).arg(inetref).arg(season);
310 if (!
info.url.isEmpty())
312 foundFile =
info.url;
317 if (!foundFile.isEmpty())
319 QStringList list = me->ExtraDataList();
320 list.push_back(foundFile);
321 auto *oe =
new MythEvent(
"FOUND_ARTWORK", list);
329 return QObject::event(e);
364 QCoreApplication::postEvent(
372 auto *e =
new MythEvent(
"STOP_RECORDING", list);
380 list.push_back(QString::number(recordingID));
381 list.push_back((forceDelete) ?
"1" :
"0");
382 list.push_back((forgetHistory) ?
"1" :
"0");
388 auto *e =
new MythEvent(
"DELETE_RECORDINGS", list);
395 list.push_back(QString::number(recordingID));
396 auto *e =
new MythEvent(
"UNDELETE_RECORDINGS", list);
404 QMutexLocker locker(&
m_lock);
405 for (
const auto& fsInfo : std::as_const(fsInfos))
407 if (fsInfo.getPath() ==
"TotalDiskSpace")
413 auto *e =
new MythEvent(
"UPDATE_USAGE_UI");
419 QMutexLocker locker(&
m_lock);
425 QMutexLocker locker(&
m_lock);
432 QString catstr = QString::number((
int)
cat);
433 QMutexLocker locker(&
m_lock);
434 QHash<uint, QStringList>::iterator it =
445 (*it).push_back(catstr);
447 auto *e =
new MythEvent(
"CHECK_AVAILABILITY", QStringList(catstr));
452 const QString &inetref,
uint season,
455 const QString &groupname)
457 QString cacheKey = QString(
"%1:%2:%3")
458 .arg((
int)
type).arg(inetref).arg(season);
460 QMutexLocker locker(&
m_lock);
462 InfoMap::const_iterator it =
468 QStringList list(inetref);
469 list.push_back(QString::number(season));
470 list.push_back(QString::number(
type));
471 list.push_back((pginfo)?QString::number(pginfo->
GetRecordingID()):
"");
472 list.push_back(groupname);
473 auto *e =
new MythEvent(
"LOCATE_ARTWORK", list);
480 const ProgramInfo &pginfo,
bool check_availability)
488 QString token = QString(
"%1:%2")
491 QStringList extra(token);
492 extra.push_back(check_availability?
"1":
"0");
494 auto *e =
new MythEvent(
"GET_PREVIEW", extra);