5 #include <QCoreApplication>
11 #include <QStringList>
30 #define LOC QString("PlaybackBoxHelper: ")
31 #define LOC_WARN QString("PlaybackBoxHelper Warning: ")
32 #define LOC_ERR QString("PlaybackBoxHelper Error: ")
50 bool event(QEvent* )
override;
63 QTime tm = QTime::currentTime();
65 QStringList::const_iterator it2 = slist.begin();
69 QSet<CheckAvailabilityType> cats;
70 for (; it2 != slist.end(); ++it2)
83 QHash<uint, QStringList>::iterator cit =
106 LOG(VB_GENERAL, LOG_ERR,
LOC +
107 QString(
"CHECK_AVAILABILITY '%1' file not found")
127 auto *e0 =
new MythEvent(
"SET_PLAYBACK_URL", list);
132 list.push_back(QString::number((
int)firstType));
133 list.push_back(QString::number((
int)availableStatus));
134 list.push_back(QString::number(evinfo.
GetFilesize()));
135 list.push_back(QString::number(tm.hour()));
136 list.push_back(QString::number(tm.minute()));
137 list.push_back(QString::number(tm.second()));
138 list.push_back(QString::number(tm.msec()));
140 for (
auto type : std::as_const(cats))
144 list[1] = QString::number((
int)
type);
145 auto *e =
new MythEvent(
"AVAILABILITY", list);
149 return availableStatus;
154 if (e->type() == QEvent::Timer)
156 auto *te = (QTimerEvent*)e;
157 const int timer_id = te->timerId();
165 QHash<uint, QStringList>::iterator it =
180 return QObject::event(e);
182 if (me->Message() ==
"UPDATE_FREE_SPACE")
187 if (me->Message() ==
"STOP_RECORDING")
194 if (me->Message() ==
"DELETE_RECORDINGS")
196 QStringList successes;
197 QStringList failures;
198 QStringList list = me->ExtraDataList();
199 while (list.size() >= 3)
201 uint recordingID = list[0].toUInt();
202 bool forceDelete = list[1].toUInt() != 0U;
203 bool forgetHistory = list[2].toUInt() != 0U;
208 QStringList &res = (ok) ? successes : failures;
209 for (
uint i = 0; i < 3; i++)
211 res.push_back(list.front());
215 if (!successes.empty())
217 auto *oe =
new MythEvent(
"DELETE_SUCCESSES", successes);
220 if (!failures.empty())
222 auto *oe =
new MythEvent(
"DELETE_FAILURES", failures);
228 if (me->Message() ==
"UNDELETE_RECORDINGS")
230 QStringList successes;
231 QStringList failures;
232 QStringList list = me->ExtraDataList();
233 while (!list.empty())
235 uint recordingID = list[0].toUInt();
239 QStringList &res = (ok) ? successes : failures;
241 res.push_back(QString::number(recordingID));
244 if (!successes.empty())
246 auto *oe =
new MythEvent(
"UNDELETE_SUCCESSES", successes);
249 if (!failures.empty())
251 auto *oe =
new MythEvent(
"UNDELETE_FAILURES", failures);
257 if (me->Message() ==
"GET_PREVIEW")
259 const QString& token = me->ExtraData(0);
260 bool check_avail = (
bool) me->ExtraData(1).toInt();
261 QStringList list = me->ExtraDataList();
262 QStringList::const_iterator it = list.cbegin()+2;
280 if (me->Message() ==
"CHECK_AVAILABILITY")
293 else if (me->Message() ==
"LOCATE_ARTWORK")
295 const QString& inetref = me->ExtraData(0);
296 uint season = me->ExtraData(1).toUInt();
299 uint recordingID = me->ExtraData(3).toUInt();
300 const QString &group = me->ExtraData(4);
302 const QString cacheKey = QString(
"%1:%2:%3")
303 .arg((
int)
type).arg(inetref).arg(season);
311 if (!
info.url.isEmpty())
313 foundFile =
info.url;
318 if (!foundFile.isEmpty())
320 QStringList list = me->ExtraDataList();
321 list.push_back(foundFile);
322 auto *oe =
new MythEvent(
"FOUND_ARTWORK", list);
330 return QObject::event(e);
365 QCoreApplication::postEvent(
373 auto *e =
new MythEvent(
"STOP_RECORDING", list);
381 list.push_back(QString::number(recordingID));
382 list.push_back((forceDelete) ?
"1" :
"0");
383 list.push_back((forgetHistory) ?
"1" :
"0");
389 auto *e =
new MythEvent(
"DELETE_RECORDINGS", list);
396 list.push_back(QString::number(recordingID));
397 auto *e =
new MythEvent(
"UNDELETE_RECORDINGS", list);
405 QMutexLocker locker(&
m_lock);
406 for (
const auto& fsInfo : std::as_const(fsInfos))
408 if (fsInfo.getPath() ==
"TotalDiskSpace")
414 auto *e =
new MythEvent(
"UPDATE_USAGE_UI");
420 QMutexLocker locker(&
m_lock);
426 QMutexLocker locker(&
m_lock);
433 QString catstr = QString::number((
int)
cat);
434 QMutexLocker locker(&
m_lock);
435 QHash<uint, QStringList>::iterator it =
446 (*it).push_back(catstr);
448 auto *e =
new MythEvent(
"CHECK_AVAILABILITY", QStringList(catstr));
453 const QString &inetref,
uint season,
456 const QString &groupname)
458 QString cacheKey = QString(
"%1:%2:%3")
459 .arg((
int)
type).arg(inetref).arg(season);
461 QMutexLocker locker(&
m_lock);
463 InfoMap::const_iterator it =
469 QStringList list(inetref);
470 list.push_back(QString::number(season));
471 list.push_back(QString::number(
type));
472 list.push_back((pginfo)?QString::number(pginfo->
GetRecordingID()):
"");
473 list.push_back(groupname);
474 auto *e =
new MythEvent(
"LOCATE_ARTWORK", list);
481 const ProgramInfo &pginfo,
bool check_availability)
489 QString token = QString(
"%1:%2")
492 QStringList extra(token);
493 extra.push_back(check_availability?
"1":
"0");
495 auto *e =
new MythEvent(
"GET_PREVIEW", extra);