|
MythTV
0.26-pre
|
00001 // c++ 00002 #include <algorithm> 00003 00004 // mythtv 00005 #include "mythlogging.h" 00006 #include "mythdb.h" 00007 #include "channelgroup.h" 00008 00009 #define LOC QString("Channel Group: ") 00010 00011 ChannelGroupItem& ChannelGroupItem::operator=(const ChannelGroupItem &other) 00012 { 00013 grpid = other.grpid; 00014 name = (other.name); 00015 00016 return *this; 00017 } 00018 00019 inline bool lt_group(const ChannelGroupItem &a, const ChannelGroupItem &b) 00020 { 00021 return QString::localeAwareCompare(a.name, b.name) < 0; 00022 } 00023 00024 bool ChannelGroup::ToggleChannel(uint chanid, int changrpid, int delete_chan) 00025 { 00026 // Check if it already exists for that chanid... 00027 MSqlQuery query(MSqlQuery::InitCon()); 00028 query.prepare( 00029 "SELECT channelgroup.id " 00030 "FROM channelgroup " 00031 "WHERE channelgroup.chanid = :CHANID AND " 00032 "channelgroup.grpid = :GRPID " 00033 "LIMIT 1"); 00034 query.bindValue(":CHANID", chanid); 00035 query.bindValue(":GRPID", changrpid); 00036 00037 if (!query.exec()) 00038 { 00039 MythDB::DBError("ChannelGroup::ToggleChannel", query); 00040 return false; 00041 } 00042 else if (query.next() && delete_chan) 00043 { 00044 // We have a record...Remove it to toggle... 00045 QString id = query.value(0).toString(); 00046 query.prepare("DELETE FROM channelgroup WHERE id = :CHANID"); 00047 query.bindValue(":CHANID", id); 00048 if (!query.exec()) 00049 MythDB::DBError("ChannelGroup::ToggleChannel -- delete", query); 00050 LOG(VB_GENERAL, LOG_INFO, LOC + 00051 QString("Removing channel with id=%1.").arg(id)); 00052 } 00053 else if (query.size() == 0) 00054 { 00055 // We have no record...Add one to toggle... 00056 query.prepare("INSERT INTO channelgroup (chanid,grpid) " 00057 "VALUES (:CHANID, :GRPID)"); 00058 query.bindValue(":CHANID", chanid); 00059 query.bindValue(":GRPID", changrpid); 00060 if (!query.exec()) 00061 MythDB::DBError("ChannelGroup::ToggleChannel -- insert", query); 00062 LOG(VB_GENERAL, LOG_INFO, LOC + 00063 QString("Adding channel %1 to group %2.") 00064 .arg(chanid).arg(changrpid)); 00065 } 00066 00067 return true; 00068 } 00069 00070 bool ChannelGroup::AddChannel(uint chanid, int changrpid) 00071 { 00072 // Check if it already exists for that chanid... 00073 MSqlQuery query(MSqlQuery::InitCon()); 00074 query.prepare( 00075 "SELECT channelgroup.id " 00076 "FROM channelgroup " 00077 "WHERE channelgroup.chanid = :CHANID AND " 00078 "channelgroup.grpid = :GRPID " 00079 "LIMIT 1"); 00080 query.bindValue(":CHANID", chanid); 00081 query.bindValue(":GRPID", changrpid); 00082 00083 if (!query.exec()) 00084 { 00085 MythDB::DBError("ChannelGroup::AddChannel", query); 00086 return false; 00087 } 00088 else if (query.size() == 0) 00089 { 00090 // We have no record...Add one to toggle... 00091 query.prepare("INSERT INTO channelgroup (chanid,grpid) " 00092 "VALUES (:CHANID, :GRPID)"); 00093 query.bindValue(":CHANID", chanid); 00094 query.bindValue(":GRPID", changrpid); 00095 if (!query.exec()) 00096 MythDB::DBError("ChannelGroup::AddChannel -- insert", query); 00097 LOG(VB_GENERAL, LOG_INFO, LOC + 00098 QString("Adding channel %1 to group %2.") 00099 .arg(chanid).arg(changrpid)); 00100 } 00101 00102 return true; 00103 } 00104 00105 bool ChannelGroup::DeleteChannel(uint chanid, int changrpid) 00106 { 00107 // Check if it already exists for that chanid... 00108 MSqlQuery query(MSqlQuery::InitCon()); 00109 query.prepare( 00110 "SELECT channelgroup.id " 00111 "FROM channelgroup " 00112 "WHERE channelgroup.chanid = :CHANID AND " 00113 "channelgroup.grpid = :GRPID " 00114 "LIMIT 1"); 00115 query.bindValue(":CHANID", chanid); 00116 query.bindValue(":GRPID", changrpid); 00117 00118 if (!query.exec()) 00119 { 00120 MythDB::DBError("ChannelGroup::DeleteChannel", query); 00121 return false; 00122 } 00123 else if (query.next()) 00124 { 00125 // We have a record...Remove it to toggle... 00126 QString id = query.value(0).toString(); 00127 query.prepare("DELETE FROM channelgroup WHERE id = :CHANID"); 00128 query.bindValue(":CHANID", id); 00129 if (!query.exec()) 00130 MythDB::DBError("ChannelGroup::DeleteChannel -- delete", query); 00131 LOG(VB_GENERAL, LOG_INFO, LOC + 00132 QString("Removing channel with id=%1.").arg(id)); 00133 } 00134 00135 return true; 00136 } 00137 00138 ChannelGroupList ChannelGroup::GetChannelGroups(bool includeEmpty) 00139 { 00140 ChannelGroupList list; 00141 00142 MSqlQuery query(MSqlQuery::InitCon()); 00143 00144 QString qstr; 00145 00146 if (includeEmpty) 00147 qstr = "SELECT grpid, name FROM channelgroupnames ORDER BY name"; 00148 else 00149 qstr = "SELECT DISTINCT t1.grpid, name FROM channelgroupnames t1,channelgroup t2 " 00150 "WHERE t1.grpid = t2.grpid ORDER BY name"; 00151 00152 query.prepare(qstr); 00153 00154 if (!query.exec()) 00155 MythDB::DBError("ChannelGroup::GetChannelGroups", query); 00156 else 00157 { 00158 while (query.next()) 00159 { 00160 ChannelGroupItem group(query.value(0).toUInt(), 00161 query.value(1).toString()); 00162 list.push_back(group); 00163 } 00164 } 00165 00166 return list; 00167 } 00168 00169 // Cycle through the available groups, then all channels 00170 // Will cycle through to end then return -1 00171 // To signify all channels. 00172 int ChannelGroup::GetNextChannelGroup(const ChannelGroupList &sorted, int grpid) 00173 { 00174 // If no groups return -1 for all channels 00175 if (sorted.empty()) 00176 return -1; 00177 00178 // If grpid is all channels (-1), then return the first grpid 00179 if (grpid == -1) 00180 return sorted[0].grpid; 00181 00182 ChannelGroupList::const_iterator it = find(sorted.begin(), sorted.end(), grpid); 00183 00184 // If grpid is not in the list, return -1 for all channels 00185 if (it == sorted.end()) 00186 return -1; 00187 00188 ++it; 00189 00190 // If we reached the end, the next option is all channels (-1) 00191 if (it == sorted.end()) 00192 return -1; 00193 00194 return it->grpid; 00195 } 00196 00197 QString ChannelGroup::GetChannelGroupName(int grpid) 00198 { 00199 // All Channels 00200 if (grpid == -1) 00201 return QObject::tr("All Channels"); 00202 00203 MSqlQuery query(MSqlQuery::InitCon()); 00204 query.prepare("SELECT name FROM channelgroupnames WHERE grpid = :GROUPID"); 00205 query.bindValue(":GROUPID", grpid); 00206 00207 if (!query.exec()) 00208 MythDB::DBError("ChannelGroup::GetChannelGroups", query); 00209 else if (query.next()) 00210 return query.value(0).toString(); 00211 00212 return ""; 00213 } 00214 00215 int ChannelGroup::GetChannelGroupId(QString changroupname) 00216 { 00217 // All Channels 00218 if (changroupname == "All Channels") 00219 return -1; 00220 00221 MSqlQuery query(MSqlQuery::InitCon()); 00222 00223 query.prepare("SELECT grpid FROM channelgroupnames " 00224 "WHERE name = :GROUPNAME"); 00225 query.bindValue(":GROUPNAME", changroupname); 00226 00227 if (!query.exec()) 00228 MythDB::DBError("ChannelGroup::GetChannelGroups", query); 00229 else if (query.next()) 00230 return query.value(0).toUInt(); 00231 00232 return 0; 00233 }
1.7.6.1