12 #define LOC QString("Channel Group: ")
16 return QString::localeAwareCompare(a.
m_name, b.
m_name) < 0;
24 "SELECT channelgroup.id "
26 "WHERE channelgroup.chanid = :CHANID AND "
27 "channelgroup.grpid = :GRPID "
37 if (query.
next() && delete_chan)
40 QString
id = query.
value(0).toString();
41 query.
prepare(
"DELETE FROM channelgroup WHERE id = :CHANID");
45 LOG(VB_GENERAL, LOG_INFO,
LOC +
46 QString(
"Removing channel %1 from group %2.").arg(
id).arg(changrpid));
48 else if (query.
size() == 0)
51 query.
prepare(
"INSERT INTO channelgroup (chanid,grpid) "
52 "VALUES (:CHANID, :GRPID)");
57 LOG(VB_GENERAL, LOG_INFO,
LOC +
58 QString(
"Adding channel %1 to group %2.")
59 .arg(chanid).arg(changrpid));
63 LOG(VB_GENERAL, LOG_INFO,
LOC +
64 QString(
"Channel %1 already present in group %2.")
65 .arg(chanid).arg(changrpid));
76 "SELECT grpid, name FROM channelgroupnames "
77 "WHERE grpid = :GRPID");
85 if (query.
size() == 0)
87 LOG(VB_GENERAL, LOG_INFO,
LOC +
88 QString(
"AddChannel failed to find channel group %1.").arg(changrpid));
93 QString groupName = query.
value(1).toString();
97 "SELECT chanid, name FROM channel "
98 "WHERE chanid = :CHANID "
100 "AND deleted IS NULL");
108 if (query.
size() == 0)
110 LOG(VB_GENERAL, LOG_INFO,
LOC +
111 QString(
"AddChannel failed to find channel %1.").arg(chanid));
116 QString chanName = query.
value(1).toString();
120 "SELECT channelgroup.id "
122 "WHERE channelgroup.chanid = :CHANID AND "
123 "channelgroup.grpid = :GRPID "
133 if (query.
size() == 0)
136 query.
prepare(
"INSERT INTO channelgroup (chanid,grpid) "
137 "VALUES (:CHANID, :GRPID)");
142 LOG(VB_GENERAL, LOG_INFO,
LOC +
143 QString(
"Adding channel %1 to group %2.")
144 .arg(chanName, groupName));
155 "SELECT channelgroup.id "
157 "WHERE channelgroup.chanid = :CHANID AND "
158 "channelgroup.grpid = :GRPID "
171 QString
id = query.
value(0).toString();
172 query.
prepare(
"DELETE FROM channelgroup WHERE id = :CHANID");
176 LOG(VB_GENERAL, LOG_INFO,
LOC +
177 QString(
"Removing channel with id=%1.").arg(
id));
198 qstr =
"SELECT grpid, name FROM channelgroupnames"
203 qstr =
"SELECT DISTINCT t1.grpid, name FROM channelgroupnames t1, channelgroup t2"
204 " WHERE t1.grpid = t2.grpid"
215 query.
value(1).toString());
216 list.push_back(group);
223 qstr =
"SELECT grpid, name FROM channelgroupnames"
224 " WHERE name NOT IN (SELECT name FROM videosource)"
225 " AND name <> 'Priority' "
231 qstr =
"SELECT DISTINCT t1.grpid, name FROM channelgroupnames t1, channelgroup t2"
232 " WHERE t1.grpid = t2.grpid"
233 " AND name NOT IN (SELECT name FROM videosource)"
234 " AND name <> 'Priority' "
246 query.
value(1).toString());
247 list.push_back(group);
269 qstr =
"SELECT grpid, name FROM channelgroupnames"
270 " WHERE name = 'Priority'";
274 qstr =
"SELECT DISTINCT t1.grpid, name FROM channelgroupnames t1, channelgroup t2"
275 " WHERE t1.grpid = t2.grpid "
276 " AND name = 'Priority'";
286 query.
value(1).toString());
287 list.push_back(group);
294 qstr =
"SELECT grpid, name FROM channelgroupnames"
295 " WHERE name IN (SELECT name FROM videosource)"
300 qstr =
"SELECT DISTINCT t1.grpid, name FROM channelgroupnames t1, channelgroup t2"
301 " WHERE t1.grpid = t2.grpid"
302 " AND name IN (SELECT name FROM videosource)"
313 query.
value(1).toString());
314 list.push_back(group);
332 list.insert(list.end(), more.begin(), more.end());
346 return sorted[0].m_grpId;
348 auto it =
std::find(sorted.cbegin(), sorted.cend(), grpid);
351 if (it == sorted.end())
357 if (it == sorted.end())
365 auto it =
std::find(groupList.cbegin(), groupList.cend(), grpid);
366 return it != groupList.end();
378 return tr(
"All Channels");
385 query.
prepare(
"SELECT name FROM channelgroupnames WHERE grpid = :GROUPID");
390 else if (query.
next())
391 return query.
value(0).toString();
399 if (changroupname ==
"All Channels")
404 query.
prepare(
"SELECT grpid FROM channelgroupnames "
405 "WHERE name = :GROUPNAME");
406 query.
bindValue(
":GROUPNAME", changroupname);
410 else if (query.
next())
411 return query.
value(0).toUInt();
421 LOG(VB_GENERAL, LOG_INFO, QString(
"Add channelgroup %1").arg(groupName));
424 query.
prepare(
"INSERT INTO channelgroupnames (name) VALUE (:NEWNAME);");
440 LOG(VB_GENERAL, LOG_INFO, QString(
"Remove channels of channelgroup %1").arg(groupName));
443 query.
prepare(
"DELETE FROM channelgroup WHERE grpid = :GRPID;");
450 LOG(VB_GENERAL, LOG_INFO, QString(
"Remove channelgroup %1").arg(groupName));
451 query.
prepare(
"DELETE FROM channelgroupnames WHERE grpid = :GRPID;");
459 LOG(VB_GENERAL, LOG_DEBUG, QString(
"Channelgroup %1 not found").arg(groupName));
473 QString qstr =
"UPDATE channelgroupnames set name = :NEWNAME "
474 " WHERE name = :OLDNAME ;";
496 QMap<int, QString> allSources;
497 QMap<int, QString> connectedSources;
498 QMap<int, QString> disconnectedSources;
500 LOG(VB_GENERAL, LOG_INFO, QString(
"Running UpdateChannelGroups"));
505 query.
prepare(
"SELECT sourceid,name FROM videosource;");
509 allSources[query.
value(0).toInt()] = query.
value(1).toString();
519 for (
auto it = allSources.cbegin(); it != allSources.cend(); ++it)
521 uint sourceId = it.key();
524 connectedSources[sourceId] = allSources[sourceId];
526 disconnectedSources[sourceId] = allSources[sourceId];
531 QMap<int, QString> removeSources = disconnectedSources;
532 if (connectedSources.size() == 1)
534 auto it = connectedSources.cbegin();
535 uint sourceid = it.key();
536 removeSources[sourceid] = *it;
540 for (
const auto &sourceName : std::as_const(removeSources))
550 for (
const auto &chgrp : list)
553 "DELETE from channelgroup WHERE grpid = :GRPID"
554 " AND chanid NOT IN "
555 " (SELECT chanid FROM channel WHERE deleted IS NULL AND visible > 0)");
556 query.
bindValue(
":GRPID", chgrp.m_grpId);
564 LOG(VB_GENERAL, LOG_INFO, QString(
"Removed %1 channels from channelgroup %2")
572 if (connectedSources.size() > 1)
575 for (
const auto &sourceName : std::as_const(connectedSources))
581 for (
auto it = connectedSources.cbegin(); it != connectedSources.cend(); ++it)
583 uint sourceId = it.key();
584 QString sourceName = connectedSources[sourceId];
589 LOG(VB_GENERAL, LOG_INFO, QString(
"Update channelgroup %1").arg(sourceName));
592 "SELECT chanid FROM channel "
593 "WHERE sourceid = :SOURCEID "
594 "AND deleted IS NULL "
614 uint numPrioChannels = 0;
615 for (
auto it = connectedSources.cbegin(); it != connectedSources.cend(); ++it)
617 uint sourceId = it.key();
620 "SELECT count(*) FROM channel "
621 "WHERE sourceid = :SOURCEID "
622 "AND deleted IS NULL "
624 "AND recpriority > 0");
628 MythDB::DBError(
"UpdateChannelGroups Priority select channels", query);
633 numPrioChannels += query.
value(0).toUInt();
636 LOG(VB_GENERAL, LOG_INFO, QString(
"Found %1 priority channels").arg(numPrioChannels));
638 if (numPrioChannels > 0)
641 QString groupName =
"Priority";
643 LOG(VB_GENERAL, LOG_INFO, QString(
"Update channelgroup %1").arg(groupName));
652 "DELETE from channelgroup WHERE grpid = :GRPID "
653 " AND chanid NOT IN "
654 " (SELECT chanid FROM channel "
655 " WHERE deleted IS NULL "
657 " AND recpriority > 0)");
666 LOG(VB_GENERAL, LOG_INFO, QString(
"Removed %1 channels from channelgroup Priority")
671 for (
auto it = connectedSources.cbegin(); it != connectedSources.cend(); ++it)
673 uint sourceId = it.key();
675 "SELECT chanid FROM channel "
676 "WHERE sourceid = :SOURCEID "
677 "AND deleted IS NULL "
679 "AND recpriority > 0");
683 MythDB::DBError(
"UpdateChannelGroups Priority select channels", query);