33#include <QTemporaryFile>
42#include "libmythbase/mythversion.h"
77 qRegisterMetaType<V2ChannelInfoList*>(
"V2ChannelInfoList");
78 qRegisterMetaType<V2ChannelInfo*>(
"V2ChannelInfo");
79 qRegisterMetaType<V2VideoSourceList*>(
"V2VideoSourceList");
80 qRegisterMetaType<V2VideoSource*>(
"V2VideoSource");
81 qRegisterMetaType<V2LineupList*>(
"V2LineupList");
82 qRegisterMetaType<V2Lineup*>(
"V2Lineup");
83 qRegisterMetaType<V2VideoMultiplexList*>(
"V2VideoMultiplexList");
84 qRegisterMetaType<V2VideoMultiplex*>(
"V2VideoMultiplex");
85 qRegisterMetaType<V2Program*>(
"V2Program");
86 qRegisterMetaType<V2RecordingInfo*>(
"V2RecordingInfo");
87 qRegisterMetaType<V2ArtworkInfoList*>(
"V2ArtworkInfoList");
88 qRegisterMetaType<V2ArtworkInfo*>(
"V2ArtworkInfo");
89 qRegisterMetaType<V2CastMemberList*>(
"V2CastMemberList");
90 qRegisterMetaType<V2CastMember*>(
"V2CastMember");
91 qRegisterMetaType<V2Grabber*>(
"V2Grabber");
92 qRegisterMetaType<V2GrabberList*>(
"V2GrabberList");
93 qRegisterMetaType<V2FreqTableList*>(
"V2FreqTableList");
94 qRegisterMetaType<V2CommMethodList*>(
"V2CommMethodList");
95 qRegisterMetaType<V2CommMethod*>(
"V2CommMethod");
96 qRegisterMetaType<V2ScanStatus*>(
"V2ScanStatus");
97 qRegisterMetaType<V2Scan*>(
"V2Scan");
98 qRegisterMetaType<V2ScanList*>(
"V2ScanList");
99 qRegisterMetaType<V2ChannelRestore*>(
"V2ChannelRestore");
109 uint nChannelGroupID,
115 bool bGroupByCallsign,
120 uint nTotalAvailable = 0;
125 nSourceID, nChannelGroupID,
false,
"",
134 nStartIndex = (nStartIndex > 0) ? std::min( nStartIndex, nTotalAvailable ) : 0;
135 nCount = (nCount > 0) ? std::min(nCount, (nTotalAvailable - nStartIndex)) :
136 (nTotalAvailable - nStartIndex);
138 ChannelInfoList::iterator chanIt;
139 auto chanItBegin = chanList.begin() + nStartIndex;
140 auto chanItEnd = chanItBegin + nCount;
142 for( chanIt = chanItBegin; chanIt < chanItEnd; ++chanIt )
144 V2ChannelInfo *pChannelInfo = pChannelInfos->AddNewChannelInfo();
151 delete pChannelInfos;
152 throw( QString(
"V2Channel ID appears invalid."));
161 nTotalPages = (int)std::ceil((
float)nTotalAvailable / nCount);
163 if (nTotalPages == 1)
169 nCurPage = (int)std::ceil((
float)nStartIndex / nCount) + 1;
172 pChannelInfos->setStartIndex ( nStartIndex );
173 pChannelInfos->setCount ( nCount );
174 pChannelInfos->setCurrentPage ( nCurPage );
175 pChannelInfos->setTotalPages ( nTotalPages );
176 pChannelInfos->setTotalAvailable( nTotalAvailable );
178 pChannelInfos->setVersion ( MYTH_BINARY_VERSION );
179 pChannelInfos->setProtoVer ( MYTH_PROTO_VERSION );
181 return pChannelInfos;
191 throw( QString(
"V2Channel ID appears invalid."));
208 const QString &CallSign,
209 const QString &ChannelName,
210 const QString &ChannelNumber,
212 uint ATSCMajorChannel,
213 uint ATSCMinorChannel,
216 const QString &ExtendedVisible,
217 const QString &FrequencyID,
220 const QString &XMLTVID,
221 const QString &DefaultAuthority,
228 throw QString(
"ChannelId is required");
231 throw QString(
"Nothing to update");
235 throw QString(
"ChannelId %1 doesn't exist");
244 channel.
m_name = ChannelName;
270 throw QString(
"Can't override Always/NeverVisible");
303 QDateTime(),
"UpdateDBChannel");
312 query.
prepare(
"SELECT MAX(chanid) FROM channel");
316 throw( QString(
"Database Error executing query." ));
319 chanId = query.
value(0).toUInt() + 1;
320 chanId = std::max<uint>(chanId, 1000);
327 const QString &CallSign,
328 const QString &ChannelName,
329 const QString &ChannelNumber,
331 uint ATSCMajorChannel,
332 uint ATSCMinorChannel,
335 const QString &ExtendedVisible,
336 const QString &FrequencyID,
339 const QString &XMLTVID,
340 const QString &DefaultAuthority,
353 CallSign, ChannelName, ChannelNumber,
354 ServiceID, ATSCMajorChannel, ATSCMinorChannel,
355 UseEIT, chan_visible, FrequencyID,
381 pCommMethod->setCommMethod(pref);
397 throw( QString(
"Database not open while trying to list "
400 query.
prepare(
"SELECT sourceid, name, xmltvgrabber, userid, "
401 "freqtable, lineupid, password, useeit, configpath, "
402 "dvb_nit_id, bouquet_id, region_id, scanfrequency, "
403 "lcnoffset FROM videosource "
404 "ORDER BY sourceid" );
410 throw( QString(
"Database Error executing query." ));
424 pVideoSource->setId ( query.
value(0).toInt() );
425 pVideoSource->setSourceName ( query.
value(1).toString() );
426 pVideoSource->setGrabber ( query.
value(2).toString() );
427 pVideoSource->setUserId ( query.
value(3).toString() );
428 pVideoSource->setFreqTable ( query.
value(4).toString() );
429 pVideoSource->setLineupId ( query.
value(5).toString() );
430 pVideoSource->setPassword ( query.
value(6).toString() );
431 pVideoSource->setUseEIT ( query.
value(7).toBool() );
432 pVideoSource->setConfigPath ( query.
value(8).toString() );
433 pVideoSource->setNITId ( query.
value(9).toInt() );
434 pVideoSource->setBouquetId ( query.
value(10).toUInt() );
435 pVideoSource->setRegionId ( query.
value(11).toUInt() );
436 pVideoSource->setScanFrequency ( query.
value(12).toUInt() );
437 pVideoSource->setLCNOffset ( query.
value(13).toUInt() );
441 pList->setVersion ( MYTH_BINARY_VERSION );
442 pList->setProtoVer ( MYTH_PROTO_VERSION );
456 throw( QString(
"Database not open while trying to list "
459 query.
prepare(
"SELECT name, xmltvgrabber, userid, "
460 "freqtable, lineupid, password, useeit, configpath, "
461 "dvb_nit_id, bouquet_id, region_id, scanfrequency, "
463 "FROM videosource WHERE sourceid = :SOURCEID "
464 "ORDER BY sourceid" );
471 throw( QString(
"Database Error executing query." ));
482 pVideoSource->setId ( nSourceID );
483 pVideoSource->setSourceName ( query.
value(0).toString() );
484 pVideoSource->setGrabber ( query.
value(1).toString() );
485 pVideoSource->setUserId ( query.
value(2).toString() );
486 pVideoSource->setFreqTable ( query.
value(3).toString() );
487 pVideoSource->setLineupId ( query.
value(4).toString() );
488 pVideoSource->setPassword ( query.
value(5).toString() );
489 pVideoSource->setUseEIT ( query.
value(6).toBool() );
490 pVideoSource->setConfigPath ( query.
value(7).toString() );
491 pVideoSource->setNITId ( query.
value(8).toInt() );
492 pVideoSource->setBouquetId ( query.
value(9).toUInt() );
493 pVideoSource->setRegionId ( query.
value(10).toUInt() );
494 pVideoSource->setScanFrequency ( query.
value(11).toUInt() );
495 pVideoSource->setLCNOffset ( query.
value(12).toUInt() );
506 const QString &sSourceName,
507 const QString &sGrabber,
508 const QString &sUserId,
509 const QString &sFreqTable,
510 const QString &sLineupId,
511 const QString &sPassword,
513 const QString &sConfigPath,
523 LOG(VB_GENERAL, LOG_ERR,
"SourceId is required");
529 LOG(VB_GENERAL, LOG_ERR, QString(
"SourceId %1 doesn't exist")
536 LOG(VB_GENERAL, LOG_ERR, QString(
"SourceId=%1 was the only parameter")
542 MSqlBindings::const_iterator it;
546 ADD_SQLv2(settings, bindings,
"name",
"SourceName", sSourceName);
549 ADD_SQLv2(settings, bindings,
"xmltvgrabber",
"Grabber", sGrabber);
552 ADD_SQLv2(settings, bindings,
"userid",
"UserId", sUserId);
555 ADD_SQLv2(settings, bindings,
"freqtable",
"FreqTable", sFreqTable);
558 ADD_SQLv2(settings, bindings,
"lineupid",
"LineupId", sLineupId);
561 ADD_SQLv2(settings, bindings,
"password",
"Password", sPassword);
564 ADD_SQLv2(settings, bindings,
"useeit",
"UseEIT", bUseEIT);
568 if (sConfigPath.isEmpty())
569 settings +=
"configpath=NULL, ";
571 ADD_SQLv2(settings, bindings,
"configpath",
"ConfigPath", sConfigPath);
575 ADD_SQLv2(settings, bindings,
"dvb_nit_id",
"NITId", nNITId);
578 ADD_SQLv2(settings, bindings,
"bouquet_id",
"BouquetId", nBouquetId);
581 ADD_SQLv2(settings, bindings,
"region_id",
"RegionId", nRegionId);
584 ADD_SQLv2(settings, bindings,
"scanfrequency",
"ScanFrequency", nScanFrequency);
587 ADD_SQLv2(settings, bindings,
"lcnoffset",
"LCNOffset", nLCNOffset);
589 if ( settings.isEmpty() )
591 LOG(VB_GENERAL, LOG_ERR,
"No valid parameters were passed");
599 query.
prepare(QString(
"UPDATE videosource SET %1 WHERE sourceid=:SOURCEID")
601 bindings[
":SOURCEID"] = nSourceId;
603 for (it = bindings.cbegin(); it != bindings.cend(); ++it)
610 throw( QString(
"Database Error executing query." ));
621 const QString &sGrabber,
622 const QString &sUserId,
623 const QString &sFreqTable,
624 const QString &sLineupId,
625 const QString &sPassword,
627 const QString &sConfigPath,
635 sLineupId, sPassword, bUseEIT, sConfigPath,
636 nNITId, nBouquetId, nRegionId, nScanFrequency,
678 bool bWaitForFinish )
680 if ( nSourceId < 1 || nCardId < 1)
681 throw( QString(
"A source ID and card ID are both required."));
714 throw( QString(
"Database not open while trying to list "
718 where =
"WHERE sourceid = :SOURCEID";
719 QString sql = QString(
"SELECT mplexid, sourceid, transportid, networkid, "
720 "frequency, inversion, symbolrate, fec, polarity, "
721 "modulation, bandwidth, lp_code_rate, transmission_mode, "
722 "guard_interval, visible, constellation, hierarchy, hp_code_rate, "
723 "mod_sys, rolloff, sistandard, serviceversion, updatetimestamp, "
724 "default_authority FROM dtv_multiplex %1 "
725 "ORDER BY mplexid").arg(where);
735 throw( QString(
"Database Error executing query." ));
746 nStartIndex = (nStartIndex > 0) ? std::min( nStartIndex, muxCount ) : 0;
747 nCount = (nCount > 0) ? std::min( nCount, muxCount ) : muxCount;
748 int nEndIndex = std::min((nStartIndex + nCount), muxCount );
750 for(
int n = nStartIndex; n < nEndIndex; n++)
754 V2VideoMultiplex *pVideoMultiplex = pVideoMultiplexes->AddNewVideoMultiplex();
756 pVideoMultiplex->setMplexId( query.
value(0).toInt() );
757 pVideoMultiplex->setSourceId( query.
value(1).toInt() );
758 pVideoMultiplex->setTransportId( query.
value(2).toInt() );
759 pVideoMultiplex->setNetworkId( query.
value(3).toInt() );
760 pVideoMultiplex->setFrequency( query.
value(4).toLongLong() );
761 pVideoMultiplex->setInversion( query.
value(5).toString() );
762 pVideoMultiplex->setSymbolRate( query.
value(6).toLongLong() );
763 pVideoMultiplex->setFEC( query.
value(7).toString() );
764 pVideoMultiplex->setPolarity( query.
value(8).toString() );
765 pVideoMultiplex->setModulation( query.
value(9).toString() );
766 pVideoMultiplex->setBandwidth( query.
value(10).toString() );
767 pVideoMultiplex->setLPCodeRate( query.
value(11).toString() );
768 pVideoMultiplex->setTransmissionMode( query.
value(12).toString() );
769 pVideoMultiplex->setGuardInterval( query.
value(13).toString() );
770 pVideoMultiplex->setVisible( query.
value(14).toBool() );
771 pVideoMultiplex->setConstellation( query.
value(15).toString() );
772 pVideoMultiplex->setHierarchy( query.
value(16).toString() );
773 pVideoMultiplex->setHPCodeRate( query.
value(17).toString() );
774 pVideoMultiplex->setModulationSystem( query.
value(18).toString() );
775 pVideoMultiplex->setRollOff( query.
value(19).toString() );
776 pVideoMultiplex->setSIStandard( query.
value(20).toString() );
777 pVideoMultiplex->setServiceVersion( query.
value(21).toInt() );
778 pVideoMultiplex->setUpdateTimeStamp(
780 pVideoMultiplex->setDefaultAuthority( query.
value(23).toString() );
784 if (query.
value(9).toString() ==
"8vsb")
786 QString ChannelNumber =
788 QString(
"Freq %1").arg(query.
value(4).toInt());
789 int findFrequency = (query.
value(4).toInt() / 1000) - 1750;
792 if ((list.freq <= findFrequency + 200) &&
793 (list.freq >= findFrequency - 200))
795 ChannelNumber = QString(
"%1").arg(list.name);
799 DisplayText = tr(
"ATSC Channel %1").arg(ChannelNumber);
803 DisplayText = QString(
"%1 Hz (%2) (%3) (%4)")
804 .arg(query.
value(4).toString(),
805 query.
value(6).toString(),
806 query.
value(3).toString(),
807 query.
value(2).toString());
809 pVideoMultiplex->setDescription(DisplayText);
818 totalPages = (int)std::ceil((
float)muxCount / nCount);
826 curPage = (int)std::ceil((
float)nStartIndex / nCount) + 1;
829 pVideoMultiplexes->setStartIndex ( nStartIndex );
830 pVideoMultiplexes->setCount ( nCount );
831 pVideoMultiplexes->setCurrentPage ( curPage );
832 pVideoMultiplexes->setTotalPages ( totalPages );
833 pVideoMultiplexes->setTotalAvailable( muxCount );
835 pVideoMultiplexes->setVersion ( MYTH_BINARY_VERSION );
836 pVideoMultiplexes->setProtoVer ( MYTH_PROTO_VERSION );
838 return pVideoMultiplexes;
846 throw( QString(
"Database not open while trying to list "
847 "Video Multiplex."));
849 query.
prepare(
"SELECT sourceid, transportid, networkid, "
850 "frequency, inversion, symbolrate, fec, polarity, "
851 "modulation, bandwidth, lp_code_rate, transmission_mode, "
852 "guard_interval, visible, constellation, hierarchy, hp_code_rate, "
853 "mod_sys, rolloff, sistandard, serviceversion, updatetimestamp, "
854 "default_authority FROM dtv_multiplex WHERE mplexid = :MPLEXID "
855 "ORDER BY mplexid" );
862 throw( QString(
"Database Error executing query." ));
869 pVideoMultiplex->setMplexId( nMplexID );
870 pVideoMultiplex->setSourceId( query.
value(0).toInt() );
871 pVideoMultiplex->setTransportId( query.
value(1).toInt() );
872 pVideoMultiplex->setNetworkId( query.
value(2).toInt() );
873 pVideoMultiplex->setFrequency( query.
value(3).toLongLong() );
874 pVideoMultiplex->setInversion( query.
value(4).toString() );
875 pVideoMultiplex->setSymbolRate( query.
value(5).toLongLong() );
876 pVideoMultiplex->setFEC( query.
value(6).toString() );
877 pVideoMultiplex->setPolarity( query.
value(7).toString() );
878 pVideoMultiplex->setModulation( query.
value(8).toString() );
879 pVideoMultiplex->setBandwidth( query.
value(9).toString() );
880 pVideoMultiplex->setLPCodeRate( query.
value(10).toString() );
881 pVideoMultiplex->setTransmissionMode( query.
value(11).toString() );
882 pVideoMultiplex->setGuardInterval( query.
value(12).toString() );
883 pVideoMultiplex->setVisible( query.
value(13).toBool() );
884 pVideoMultiplex->setConstellation( query.
value(14).toString() );
885 pVideoMultiplex->setHierarchy( query.
value(15).toString() );
886 pVideoMultiplex->setHPCodeRate( query.
value(16).toString() );
887 pVideoMultiplex->setModulationSystem( query.
value(17).toString() );
888 pVideoMultiplex->setRollOff( query.
value(18).toString() );
889 pVideoMultiplex->setSIStandard( query.
value(19).toString() );
890 pVideoMultiplex->setServiceVersion( query.
value(20).toInt() );
891 pVideoMultiplex->setUpdateTimeStamp(
893 pVideoMultiplex->setDefaultAuthority( query.
value(22).toString() );
896 return pVideoMultiplex;
908 throw( QString(
"Database not open while trying to get source name."));
910 query.
prepare(
"SELECT name FROM videosource WHERE sourceid = :SOURCEID ");
917 throw( QString(
"Database Error executing query." ));
924 QString sourceName = query.
value(0).toString();
926 QString xmltvFile =
GetConfDir() +
'/' + sourceName +
".xmltv";
930 QFile
file(xmltvFile);
931 if (!
file.open(QIODevice::ReadOnly | QIODevice::Text))
934 while (!
file.atEnd())
936 QByteArray line =
file.readLine();
938 if (line.startsWith(
"channel="))
940 QString
id = line.mid(8, -1).trimmed();
950 throw(QString(
"SourceID (%1) not found").arg(
SourceID));
970 V2Grabber *pGrabber = pGrabberList->AddNewGrabber();
971 pGrabber->setProgram(
"eitonly");
972 pGrabber->setDisplayName(QObject::tr(
"Transmitted guide only (EIT)"));
973 pGrabber = pGrabberList->AddNewGrabber();
974 pGrabber->setProgram(
"/bin/true");
975 pGrabber->setDisplayName(QObject::tr(
"No grabber"));
982 find_grabber_proc.
Run(25s);
983 LOG(VB_GENERAL, LOG_INFO,
984 "Running 'tv_find_grabbers " +
args.join(
" ") +
"'.");
985 uint status = find_grabber_proc.
Wait();
989 QTextStream ostream(find_grabber_proc.
ReadAll());
990 while (!ostream.atEnd())
992 QString grabber_list(ostream.readLine());
993 QStringList grabber_split =
994 grabber_list.split(
"|", Qt::SkipEmptyParts);
995 const QString& grabber_name = grabber_split[1];
996 QFileInfo grabber_file(grabber_split[0]);
997 QString program = grabber_file.fileName();
999 if (!pGrabberList->containsProgram(program))
1001 pGrabber = pGrabberList->AddNewGrabber();
1002 pGrabber->setProgram(program);
1003 pGrabber->setDisplayName(grabber_name);
1005 LOG(VB_GENERAL, LOG_DEBUG,
"Found " + grabber_split[0]);
1007 LOG(VB_GENERAL, LOG_INFO,
"Finished running tv_find_grabbers");
1011 LOG(VB_GENERAL, LOG_ERR,
"Failed to run tv_find_grabbers");
1014 return pGrabberList;
1020 QStringList freqList;
1021 freqList.append(
"default");
1024 freqList.append(freqEntry.name);
1038 bool TestDecryptable,
1039 const QString &ScanType,
1042 const QString &FirstChan,
1043 const QString &LastChan,
1049 const QString &Bandwidth,
1050 const QString &Polarity,
1051 const QString &SymbolRate,
1052 const QString &Inversion,
1053 const QString &Constellation,
1054 const QString &ModSys,
1055 const QString &CodeRateLP,
1056 const QString &CodeRateHP,
1058 const QString &TransmissionMode,
1059 const QString &GuardInterval,
1060 const QString &Hierarchy,
1064 if (pScanner->
m_status ==
"RUNNING")
1106 pStatus->setCardId(pScanner->
m_cardid);
1107 pStatus->setStatus(pScanner->
m_status);
1115 pStatus->setDialogMsg(pScanner->
m_dlgMsg);
1138 auto *pItem = pResult->AddNewScan();
1139 pItem->setScanId (
scan.m_scanid);
1140 pItem->setCardId (
scan.m_cardid);
1141 pItem->setSourceId (
scan.m_sourceid);
1142 pItem->setProcessed (
scan.m_processed);
1143 pItem->setScanDate (
scan.m_scandate);
1149 const QString &DialogString,
1174 if (result.isEmpty())
1175 throw( QString(
"GetRestoreData failed."));
1186 bool result = rd->
doSave();
1194 QString
filename = Url.section(
'/', -1);
1197 QDir configDir(dirpath);
1198 if (!configDir.exists() && !configDir.mkdir(dirpath))
1200 LOG(VB_GENERAL, LOG_ERR, QString(
"Could not create %1").arg(dirpath));
1203 QString channelDir = QString(
"%1/%2").arg(configDir.absolutePath(),
1205 QDir strChannelDir(channelDir);
1206 if (!strChannelDir.exists() && !strChannelDir.mkdir(channelDir))
1208 LOG(VB_GENERAL, LOG_ERR,
1209 QString(
"Could not create %1").arg(channelDir));
1213 QString filePath = channelDir +
filename;
1219 QTemporaryFile tmpFile(filePath);
1220 if (!tmpFile.open())
1222 LOG(VB_GENERAL, LOG_INFO,
"Icon Download: Couldn't create temporary file");
1230 LOG(VB_GENERAL, LOG_INFO,
1231 QString(
"Download for icon %1 failed").arg(
filename));
1235 QImage icon(tmpFile.fileName());
1238 LOG(VB_GENERAL, LOG_INFO,
1239 QString(
"Downloaded icon for %1 isn't a valid image").arg(
filename));
1244 QFile
file(filePath);
1248 tmpFile.rename(filePath);
1249 tmpFile.setAutoRemove(
false);
1252 QString qstr =
"UPDATE channel SET icon = :ICON "
1253 "WHERE chanid = :CHANID";
static GlobalComboBoxSetting * FreqTable()
ChannelVisibleType channelVisibleTypeFromString(const QString &type)
std::vector< ChannelInfo > ChannelInfoList
static QString GetRawInputType(uint inputid)
ChannelVisibleType m_visible
bool Load(uint lchanid=-1)
QString m_defaultAuthority
int m_statusSignalStrength
QWaitCondition m_waitCondition
QString m_statusTitleText
bool StartScan(uint CardId, const QString &DesiredServices, bool FreeToAirOnly, bool ChannelNumbersOnly, bool CompleteChannelsOnly, bool FullChannelSearch, bool RemoveDuplicates, bool AddFullTS, bool TestDecryptable, const QString &ScanType, const QString &FreqTable, QString Modulation, const QString &FirstChan, const QString &LastChan, uint ScanId, bool IgnoreSignalTimeout, bool FollowNITSetting, uint MplexId, const QString &Frequency, const QString &Bandwidth, const QString &Polarity, const QString &SymbolRate, const QString &Inversion, const QString &Constellation, const QString &ModSys, const QString &CodeRate_LP, const QString &CodeRate_HP, const QString &FEC, const QString &Trans_Mode, const QString &Guard_Interval, const QString &Hierarchy, const QString &RollOff)
static ChannelScannerWeb * getInstance()
static bool DeleteChannel(uint channel_id)
static bool UpdateChannel(uint db_mplexid, uint source_id, uint channel_id, const QString &callsign, const QString &service_name, const QString &chan_num, uint service_id, uint atsc_major_channel, uint atsc_minor_channel, bool use_on_air_guide, ChannelVisibleType visible, const QString &freqid=QString(), const QString &icon=QString(), QString format=QString(), const QString &xmltvid=QString(), const QString &default_authority=QString(), uint service_type=0, int recpriority=INT_MIN, int tmOffset=INT_MIN, int commMethod=INT_MIN)
static bool CreateChannel(uint db_mplexid, uint db_sourceid, uint new_channel_id, const QString &callsign, const QString &service_name, const QString &chan_num, uint service_id, uint atsc_major_channel, uint atsc_minor_channel, bool use_on_air_guide, ChannelVisibleType visible, const QString &freqid, const QString &icon=QString(), QString format="Default", const QString &xmltvid=QString(), const QString &default_authority=QString(), uint service_type=0, int recpriority=0, int tmOffset=0, int commMethod=-1)
static ChannelInfoList LoadChannels(uint startIndex, uint count, uint &totalAvailable, bool ignoreHidden=true, OrderBy orderBy=kChanOrderByChanNum, GroupBy groupBy=kChanGroupByChanid, uint sourceID=0, uint channelGroupID=0, bool liveTVOnly=false, const QString &callsign="", const QString &channum="", bool ignoreUntunable=true)
Load channels from database into a list of ChannelInfo objects.
QSqlQuery wrapper that fetches a DB connection from the connection pool.
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
QVariant value(int i) const
bool isConnected(void) const
Only updated once during object creation.
bool seek(int where, bool relative=false)
Wrap QSqlQuery::seek(int,bool)
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
static void DBError(const QString &where, const MSqlQuery &query)
bool download(const QString &url, const QString &dest, bool reload=false)
Downloads a URL to a file in blocking mode.
bool HAS_PARAMv2(const QString &p)
uint Wait(std::chrono::seconds timeout=0s)
void Run(std::chrono::seconds timeout=0s)
Runs a command inside the /bin/sh shell. Returns immediately.
static void freeInstance()
QString doRestore(bool do_xmltvid, bool do_icon, bool do_visible)
static RestoreData * getInstance(uint sourceid)
static void RescheduleMatch(uint recordid, uint sourceid, uint mplexid, const QDateTime &maxstarttime, const QString &why)
static bool DeleteSource(uint sourceid)
static bool DeleteAllSources(void)
static bool IsSourceIDValid(uint sourceid)
static uint GetChannelCount(uint sourceid)
static int CreateSource(const QString &sourcename, const QString &grabber, const QString &userid, const QString &freqtable, const QString &lineupid, const QString &password, bool useeit, const QString &configpath, int nitid, uint bouquetid, uint regionid, uint scanfrequency, uint lcnoffset)
static bool UpdateChannelsFromListings(uint sourceid, const QString &inputtype=QString(), bool wait=false)
static V2ScanStatus * GetScanStatus()
static bool CopyIconToBackend(const QString &Url, const QString &ChanId)
static QStringList GetFreqTableList()
static uint GetAvailableChanid(void)
static V2ScanList * GetScanList(uint SourceId)
static V2VideoMultiplex * GetVideoMultiplex(uint MplexID)
static int FetchChannelsFromSource(uint SourceId, uint CardId, bool WaitForFinish)
static QStringList GetXMLTVIdList(uint SourceID)
static bool RemoveAllVideoSources(void)
static void RegisterCustomTypes()
static V2VideoMultiplexList * GetVideoMultiplexList(uint SourceID, uint StartIndex, uint Count)
static V2CommMethodList * GetCommMethodList(void)
bool UpdateDBChannel(uint MplexID, uint SourceID, uint ChannelID, const QString &CallSign, const QString &ChannelName, const QString &ChannelNumber, uint ServiceID, uint ATSCMajorChannel, uint ATSCMinorChannel, bool UseEIT, bool Visible, const QString &ExtendedVisible, const QString &FrequencyID, const QString &Icon, const QString &Format, const QString &XMLTVID, const QString &DefaultAuthority, uint ServiceType, int RecPriority, int TimeOffset, int CommMethod)
static bool StartScan(uint CardId, const QString &DesiredServices, bool FreeToAirOnly, bool ChannelNumbersOnly, bool CompleteChannelsOnly, bool FullChannelSearch, bool RemoveDuplicates, bool AddFullTS, bool TestDecryptable, const QString &ScanType, const QString &FreqTable, const QString &Modulation, const QString &FirstChan, const QString &LastChan, uint ScanId, bool IgnoreSignalTimeout, bool FollowNITSetting, uint MplexId, const QString &Frequency, const QString &Bandwidth, const QString &Polarity, const QString &SymbolRate, const QString &Inversion, const QString &Constellation, const QString &ModSys, const QString &CodeRateLP, const QString &CodeRateHP, const QString &FEC, const QString &TransmissionMode, const QString &GuardInterval, const QString &Hierarchy, const QString &RollOff)
bool AddDBChannel(uint MplexID, uint SourceID, uint ChannelID, const QString &CallSign, const QString &ChannelName, const QString &ChannelNumber, uint ServiceID, uint ATSCMajorChannel, uint ATSCMinorChannel, bool UseEIT, bool Visible, const QString &ExtendedVisible, const QString &FrequencyID, const QString &Icon, const QString &Format, const QString &XMLTVID, const QString &DefaultAuthority, uint ServiceType, int RecPriority, int TimeOffset, int CommMethod)
static V2ChannelInfoList * GetChannelInfoList(uint SourceID, uint ChannelGroupID, uint StartIndex, uint Count, bool OnlyVisible, bool Details, bool OrderByName, bool GroupByCallsign, bool OnlyTunable)
static bool SendScanDialogResponse(uint Cardid, const QString &DialogString, int DialogButton)
static int AddVideoSource(const QString &SourceName, const QString &Grabber, const QString &UserId, const QString &FreqTable, const QString &LineupId, const QString &Password, bool UseEIT, const QString &ConfigPath, int NITId, uint BouquetId, uint RegionId, uint ScanFrequency, uint LCNOffset)
static V2VideoSource * GetVideoSource(uint SourceID)
static bool StopScan(uint Cardid)
static V2ChannelRestore * GetRestoreData(uint SourceId, bool XmltvId, bool Icon, bool Visible)
static V2VideoSourceList * GetVideoSourceList(void)
static V2GrabberList * GetGrabberList()
static bool RemoveDBChannel(uint ChannelID)
static V2ChannelInfo * GetChannelInfo(uint ChanID)
static V2LineupList * GetDDLineupList(const QString &Source, const QString &UserId, const QString &Password)
bool UpdateVideoSource(uint SourceID, const QString &SourceName, const QString &Grabber, const QString &UserId, const QString &FreqTable, const QString &LineupId, const QString &Password, bool UseEIT, const QString &ConfigPath, int NITId, uint BouquetId, uint RegionId, uint ScanFrequency, uint LCNOffset)
static bool RemoveVideoSource(uint SourceID)
static bool SaveRestoreData(uint SourceId)
@ GENERIC_EXIT_OK
Exited with no error.
const CHANLISTS_vec gChanLists
QMap< QString, QVariant > MSqlBindings
typedef for a map of string -> string bindings for generic queries.
MythDownloadManager * GetMythDownloadManager(void)
Gets the pointer to the MythDownloadManager singleton.
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
@ kMSStdOut
allow access to stdout
@ kMSRunShell
run process through shell
QDateTime as_utc(const QDateTime &old_dt)
Returns copy of QDateTime with TimeSpec set to UTC.
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
def scan(profile, smoonURL, gate)
std::deque< int > GetPreferredSkipTypeCombinations(void)
QString SkipTypeToString(int flags)
std::vector< ScanInfo > LoadScanList(void)
static QMutex lockGrabber
Q_GLOBAL_STATIC_WITH_ARGS(MythHTTPMetaService, s_service,(CHANNEL_HANDLE, V2Channel::staticMetaObject, &V2Channel::RegisterCustomTypes)) void V2Channel
bool V2FillChannelInfo(V2ChannelInfo *pChannel, uint nChanID, bool bDetails)
static void ADD_SQLv2(QString &settings_var, MSqlBindings &bindvar, const QString &col, const QString &api_param, const T &val)