MythTV  master
channelsettings.cpp
Go to the documentation of this file.
1 // C/C++ headers
2 #include <utility>
3 
4 // Qt headers
5 #include <QCoreApplication>
6 #include <QFile>
7 #include <QWidget>
8 
9 // MythTV headers
10 #include "libmythbase/mythdirs.h"
12 #include "libmythbase/programinfo.h" // for COMM_DETECT*, GetPreferredSkipTypeCombinations()
13 
14 #include "cardutil.h"
15 #include "channelsettings.h"
16 #include "channelutil.h"
17 #include "mpeg/mpegtables.h"
18 
20 {
21  if (getValue().toInt() == 0) {
23 
25 
26  QString querystr = QString("SELECT %1 FROM %2 WHERE %3='%4'")
27  .arg(m_field, m_table, m_field, getValue());
28  query.prepare(querystr);
29 
30  if (!query.exec() && !query.isActive())
31  MythDB::DBError("ChannelID::save", query);
32 
33  if (query.size())
34  return;
35 
36  querystr = QString("INSERT INTO %1 (%2) VALUES ('%3')")
37  .arg(m_table, m_field, getValue());
38  query.prepare(querystr);
39 
40  if (!query.exec() || !query.isActive())
41  MythDB::DBError("ChannelID::save", query);
42 
43  if (query.numRowsAffected() != 1)
44  {
45  LOG(VB_GENERAL, LOG_ERR, QString("ChannelID, Error: ") +
46  QString("Failed to insert into: %1").arg(m_table));
47  }
48  }
49 }
50 
52 {
53  QString fieldTag = (":WHERE" + m_id.getField().toUpper());
54  QString query(m_id.getField() + " = " + fieldTag);
55 
56  bindings.insert(fieldTag, m_id.getValue());
57 
58  return query;
59 }
60 
62 {
63  QString fieldTag = (":SET" + m_id.getField().toUpper());
64  QString nameTag = (":SET" + GetColumnName().toUpper());
65 
66  QString query(m_id.getField() + " = " + fieldTag + ", " +
67  GetColumnName() + " = " + nameTag);
68 
69  bindings.insert(fieldTag, m_id.getValue());
70  bindings.insert(nameTag, m_user->GetDBValue());
71 
72  return query;
73 }
74 
76 {
77  QString fieldTag = (":WHERE" + m_id.getField().toUpper());
78  QString query(m_id.getField() + " = " + fieldTag);
79 
80  bindings.insert(fieldTag, m_id.getValue());
81 
82  return query;
83 }
84 
86 {
87  QString fieldTag = (":SET" + m_id.getField().toUpper());
88  QString nameTag = (":SET" + GetColumnName().toUpper());
89 
90  QString query(m_id.getField() + " = " + fieldTag + ", " +
91  GetColumnName() + " = " + nameTag);
92 
93  bindings.insert(fieldTag, m_id.getValue());
94  bindings.insert(nameTag, m_user->GetDBValue());
95 
96  return query;
97 }
98 
99 /*****************************************************************************
100  Channel Options - Common
101  *****************************************************************************/
102 
104 {
105  public:
106  explicit Name(const ChannelID &id) :
107  MythUITextEditSetting(new ChannelDBStorage(this, id, "name"))
108  {
109  setLabel(QCoreApplication::translate("(Common)", "Channel Name"));
110  }
111 };
112 
114 {
115  public:
116  explicit Channum(const ChannelID &id) :
117  MythUITextEditSetting(new ChannelDBStorage(this, id, "channum"))
118  {
119  setLabel(QCoreApplication::translate("(Common)", "Channel Number"));
120  setHelpText(QCoreApplication::translate("(Common)",
121  "This is the number by which the channel is known to MythTV."));
122  }
123 };
124 
126 {
127  public:
128  Source(const ChannelID &id, uint _default_sourceid) :
129  MythUIComboBoxSetting(new ChannelDBStorage(this, id, "sourceid")),
130  m_defaultSourceId(_default_sourceid)
131  {
132  setLabel(QCoreApplication::translate("(Common)", "Video Source"));
133  setHelpText(QCoreApplication::translate("(Common)",
134  "It is NOT a good idea to change this value as it only changes "
135  "the sourceid in table channel but not in dtv_multiplex. "
136  "The sourceid in dtv_multiplex cannot and should not be changed."));
137  }
138 
139  void Load(void) override // StandardSetting
140  {
141  fillSelections();
143 
144  if ((m_defaultSourceId != 0U) && (getValue().toUInt() == 0U))
145  {
147  if (which)
148  setValue(which);
149  }
150  }
151 
152  void fillSelections(void)
153  {
154  addSelection(QCoreApplication::translate("(ChannelSettings)",
155  "[Not Selected]"), "0");
156 
157  MSqlQuery query(MSqlQuery::InitCon());
158  query.prepare("SELECT name, sourceid "
159  "FROM videosource "
160  "ORDER BY sourceid");
161 
162  if (!query.exec() || !query.isActive())
163  {
164  MythDB::DBError("Source::fillSelections", query);
165  }
166  else
167  {
168  for (uint i = 1; query.next(); i++)
169  {
170  m_sourceIdToIndex[query.value(1).toUInt()] = i;
171  addSelection(query.value(0).toString(),
172  query.value(1).toString());
173  }
174  }
175 
176  m_sourceIdToIndex[0] = 0; // Not selected entry.
177  }
178 
179  private:
181  QMap<uint,uint> m_sourceIdToIndex;
182 };
183 
185 {
186  public:
187  explicit Callsign(const ChannelID &id) :
188  MythUITextEditSetting(new ChannelDBStorage(this, id, "callsign"))
189  {
190  setLabel(QCoreApplication::translate("(Common)", "Callsign"));
191  }
192 };
193 
195  MythUIComboBoxSetting(new ChannelDBStorage(this, id, "tvformat"))
196 {
197  setLabel(QCoreApplication::translate("(ChannelSettings)", "TV Format"));
198  setHelpText(QCoreApplication::translate("(ChannelSettings)",
199  "If this channel uses a format other than TV Format in the General "
200  "Backend Setup screen, set it here."));
201 
202  addSelection(QCoreApplication::translate("(Common)", "Default"), "Default");
203 
204  QStringList list = GetFormats();
205  for (const QString& format : std::as_const(list))
206  addSelection(format);
207 }
208 
210 {
211  QStringList list;
212 
213  list.push_back("NTSC");
214  list.push_back("NTSC-JP");
215  list.push_back("PAL");
216  list.push_back("PAL-60");
217  list.push_back("PAL-BG");
218  list.push_back("PAL-DK");
219  list.push_back("PAL-D");
220  list.push_back("PAL-I");
221  list.push_back("PAL-M");
222  list.push_back("PAL-N");
223  list.push_back("PAL-NC");
224  list.push_back("SECAM");
225  list.push_back("SECAM-D");
226  list.push_back("SECAM-DK");
227 
228  return list;
229 }
230 
232 {
233  public:
234  explicit TimeOffset(const ChannelID &id) :
235  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "tmoffset"),
236  -1440, 1440, 1)
237  {
238  setLabel(QCoreApplication::translate("(ChannelSettings)",
239  "DataDirect Time Offset"));
240 
241  setHelpText(QCoreApplication::translate("(ChannelSettings)",
242  "Offset (in minutes) to apply to the program guide data during "
243  "import. This can be used when the listings for a particular "
244  "channel are in a different time zone."));
245  }
246 };
247 
249 {
250  public:
251  explicit Priority(const ChannelID &id) :
252  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "recpriority"),
253  -99, 99, 1)
254  {
255  setLabel(QCoreApplication::translate("(ChannelSettings)", "Priority"));
256 
257  setHelpText(QCoreApplication::translate("(ChannelSettings)",
258  "Number of priority points to be added to any recording on this "
259  "channel during scheduling. Use a positive number as the priority "
260  "if you want this to be a preferred channel, a negative one to "
261  "depreciate this channel."));
262  }
263 };
264 
266 {
267  public:
268  explicit Icon(const ChannelID &id) :
269  MythUITextEditSetting(new ChannelDBStorage(this, id, "icon"))
270  {
271  setLabel(QCoreApplication::translate("(ChannelSettings)", "Icon"));
272 
273  setHelpText(QCoreApplication::translate("(ChannelSettings)",
274  "Image file to use as the icon for this channel on various MythTV "
275  "displays."));
276  }
277 };
278 
280 {
281  public:
282  explicit VideoFilters(const ChannelID &id) :
283  MythUITextEditSetting(new ChannelDBStorage(this, id, "videofilters"))
284  {
285  setLabel(QCoreApplication::translate("(ChannelSettings)",
286  "Video filters"));
287 
288  setHelpText(QCoreApplication::translate("(ChannelSettings)",
289  "Filters to be used when recording from this channel. Not used "
290  "with hardware encoding cards."));
291 
292  }
293 };
294 
295 
297 {
298  public:
299  explicit OutputFilters(const ChannelID &id) :
300  MythUITextEditSetting(new ChannelDBStorage(this, id, "outputfilters"))
301  {
302  setLabel(QCoreApplication::translate("(ChannelSettings)",
303  "Playback filters"));
304 
305  setHelpText(QCoreApplication::translate("(ChannelSettings)",
306  "Filters to be used when recordings from this channel are viewed. "
307  "Start with a plus to append to the global playback filters."));
308  }
309 };
310 
312 {
313  public:
314  XmltvID(const ChannelID &id, QString _sourceName) :
315  MythUIComboBoxSetting(new ChannelDBStorage(this, id, "xmltvid"), true),
316  m_sourceName(std::move(_sourceName))
317  {
318  setLabel(QCoreApplication::translate("(Common)", "XMLTV ID"));
319 
320  setHelpText(QCoreApplication::translate("(ChannelSettings)",
321  "ID used by listing services to get an exact correspondence "
322  "between a channel in your line-up and a channel in their "
323  "database. Normally this is set automatically when "
324  "'mythfilldatabase' is run."));
325  }
326 
327  void Load(void) override // StandardSetting
328  {
329  fillSelections();
331  }
332 
333  void fillSelections(void)
334  {
335  clearSelections();
336 
337  QString xmltvFile = GetConfDir() + '/' + m_sourceName + ".xmltv";
338 
339  if (QFile::exists(xmltvFile))
340  {
341  QFile file(xmltvFile);
342  if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
343  return;
344 
345  QStringList idList;
346 
347  while (!file.atEnd())
348  {
349  QByteArray line = file.readLine();
350 
351  if (line.startsWith("channel="))
352  {
353  QString id = line.mid(8, -1).trimmed();
354  idList.append(id);
355  }
356  }
357 
358  idList.sort();
359 
360  for (const QString& idName : std::as_const(idList))
361  addSelection(idName, idName);
362  }
363  }
364 
365  private:
366  QString m_sourceName;
367 };
368 
370 {
371  public:
372  explicit ServiceID(const ChannelID &id)
373  : MythUISpinBoxSetting(new ChannelDBStorage(this, id, "serviceid"),
374  -1, UINT16_MAX, 1, 1, "NULL")
375  {
376  setLabel(QCoreApplication::translate("(ChannelSettings)", "Service ID"));
377 
378  setHelpText(QCoreApplication::translate("(ChannelSettings)",
379  "Service ID (Program Number) of desired channel within the transport stream. "
380  "If there is only one channel, then setting this to anything will still find it."));
381  }
382 
383  void Load(void) override // StandardSetting
384  {
386 
387  if (getValue().isNull())
388  setValue("-1");
389  }
390 
391  QString getValue(void) const override // StandardSetting
392  {
393  if (StandardSetting::getValue().toInt() == -1)
394  return {};
395  return StandardSetting::getValue();
396  }
397 };
398 
399 // Transport ID in Channel Options
401 {
402  public:
404  {
405  setLabel(QObject::tr("Transport ID"));
406  setHelpText(
407  QObject::tr("The transport stream ID (tid) can be used to identify "
408  "the transport of this channel in the Transport Editor."));
409  }
410 };
411 
412 // Frequency in Channel Options
414 {
415  public:
417  {
418  setLabel(QObject::tr("Frequency"));
419  setHelpText(
420  QObject::tr("Frequency of the transport of this channel in Hz for "
421  "DVB-T/T2/C or in kHz plus polarization H or V for DVB-S/S2."));
422  }
423 };
424 
426 {
427  public:
428  explicit CommMethod(const ChannelID &id) :
429  MythUIComboBoxSetting(new ChannelDBStorage(this, id, "commmethod"))
430  {
431  setLabel(QCoreApplication::translate("(ChannelSettings)",
432  "Commercial Detection Method"));
433 
434  setHelpText(QCoreApplication::translate("(ChannelSettings)",
435  "Changes the method of commercial detection used for recordings on "
436  "this channel or skips detection by marking the channel as "
437  "Commercial Free."));
438 
439  std::deque<int> tmp = GetPreferredSkipTypeCombinations();
440  tmp.push_front(COMM_DETECT_UNINIT);
441  tmp.push_back(COMM_DETECT_COMMFREE);
442 
443  for (int pref : tmp)
444  addSelection(SkipTypeToString(pref), QString::number(pref));
445  }
446 };
447 
449 {
450  public:
451  explicit Visible(const ChannelID &id) :
452  MythUIComboBoxSetting(new ChannelDBStorage(this, id, "visible"))
453  {
455 
456  setLabel(QCoreApplication::translate("(ChannelSettings)", "Visible"));
457 
458  setHelpText(QCoreApplication::translate("(ChannelSettings)",
459  "If set to Always Visible or Visible, the channel will be visible in the "
460  "EPG. Set to Always Visible or Never Visible to prevent MythTV and other "
461  "utilities from automatically managing the value for this "
462  "channel."));
463 
464  addSelection(QCoreApplication::translate("(Common)", "Always Visible"),
465  QString::number(kChannelAlwaysVisible));
466  addSelection(QCoreApplication::translate("(Common)", "Visible"),
467  QString::number(kChannelVisible));
468  addSelection(QCoreApplication::translate("(Common)", "Not Visible"),
469  QString::number(kChannelNotVisible));
470  addSelection(QCoreApplication::translate("(Common)", "Never Visible"),
471  QString::number(kChannelNeverVisible));
472  }
473 };
474 
476 {
477  public:
478  explicit OnAirGuide(const ChannelID &id) :
479  MythUICheckBoxSetting(new ChannelDBStorage(this, id, "useonairguide"))
480  {
481  setLabel(QCoreApplication::translate("(ChannelSettings)",
482  "Use on air guide"));
483 
484  setHelpText(QCoreApplication::translate("(ChannelSettings)",
485  "If enabled, guide information for this channel will be updated "
486  "using 'Over-the-Air' program listings."));
487  }
488 };
489 
490 /*****************************************************************************
491  Channel Options - IPTV
492  *****************************************************************************/
494 {
495  public:
496  explicit ChannelURL(const ChannelID &id) :
497  MythUITextEditSetting(new IPTVChannelDBStorage(this, id, "url"))
498  {
499  setLabel(QCoreApplication::translate("(ChannelSettings)", "URL"));
500  setHelpText(QCoreApplication::translate("(ChannelSettings)",
501  "URL for streaming of this channel. Used by the IPTV "
502  "capture card and obtained with an \"M3U Import\" or "
503  "with a \"HDHomeRun Channel Import\" loading of an XML file."));
504  }
505 };
506 
507 /*****************************************************************************
508  Channel Options - Video 4 Linux
509  *****************************************************************************/
510 
512 {
513  public:
514  explicit Freqid(const ChannelID &id) :
515  MythUITextEditSetting(new ChannelDBStorage(this, id, "freqid"))
516  {
517  setLabel(QCoreApplication::translate("(ChannelSettings)",
518  "Freq/Channel"));
519  setHelpText(QCoreApplication::translate("(ChannelSettings)",
520  "N.B. This setting is only used for analog channels. "
521  "Depending on the tuner type, specify either the exact "
522  "frequency (in kHz) or a valid channel "
523  "number that will be understood by your tuners."));
524  }
525 };
526 
528 {
529  public:
530  explicit Finetune(const ChannelID& id)
531  : MythUISpinBoxSetting(new ChannelDBStorage(this, id, "finetune"),
532  -300, 300, 1)
533  {
534  setLabel(QCoreApplication::translate("(ChannelSettings)",
535  "Finetune (kHz)"));
536 
537  setHelpText(QCoreApplication::translate("(ChannelSettings)",
538  "Value to be added to your desired frequency (in kHz) for "
539  "'fine tuning'."));
540 
541  setValue("0");
542  }
543 };
544 
546 {
547  public:
548  explicit Contrast(const ChannelID &id) :
549  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "contrast"),
550  0, 65535, 655)
551  {
552  setLabel(QCoreApplication::translate("(Common)", "Contrast"));
553  }
554 };
555 
557 {
558  public:
559  explicit Brightness(const ChannelID &id) :
560  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "brightness"),
561  0, 65535, 655)
562  {
563  setLabel(QCoreApplication::translate("(Common)", "Brightness"));
564  }
565 };
566 
568 {
569  public:
570  explicit Colour(const ChannelID &id) :
571  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "colour"),
572  0, 65535, 655)
573  {
574  setLabel(QCoreApplication::translate("(Common)", "Color"));
575  }
576 };
577 
578 class Hue : public MythUISpinBoxSetting
579 {
580  public:
581  explicit Hue(const ChannelID &id) :
582  MythUISpinBoxSetting(new ChannelDBStorage(this, id, "hue"),
583  0, 65535, 655)
584  {
585  setLabel(QCoreApplication::translate("(Common)", "Hue"));
586  }
587 };
588 
590  uint default_sourceid, bool add_freqid)
591 {
592  setLabel(QCoreApplication::translate("(ChannelSettings)",
593  "Channel Options - Common"));
594  addChild(new Name(id));
595 
596  auto *source = new Source(id, default_sourceid);
597 
598  auto *channum = new Channum(id);
599  addChild(channum);
600  if (add_freqid)
601  {
602  m_freqId = new Freqid(id);
604  }
605  else
606  {
607  m_freqId = nullptr;
608  }
609  addChild(new Callsign(id));
610 
611 
612 
613  addChild(new Visible(id));
614  addChild(new ServiceID(id));
615 
618 
619  addChild(source);
620  addChild(new ChannelTVFormat(id));
621  addChild(new Priority(id));
622 
623  addChild(m_onAirGuide = new OnAirGuide(id));
624  addChild(m_xmltvID = new XmltvID(id, source->getValueLabel()));
625  addChild(new TimeOffset(id));
626 
627  addChild(new CommMethod(id));
628  addChild(new Icon(id));
629 
632  connect(source, qOverload<const QString&>(&StandardSetting::valueChanged),
634 
635  // Transport stream ID and frequency from dtv_multiplex
636  MSqlQuery query(MSqlQuery::InitCon());
637  query.prepare(
638  "SELECT transportid, frequency, polarity, mod_sys FROM dtv_multiplex "
639  "JOIN channel ON channel.mplexid = dtv_multiplex.mplexid "
640  "WHERE channel.chanid = :CHANID");
641 
642  query.bindValue(":CHANID", id.getValue().toUInt());
643 
644  if (!query.exec() || !query.isActive())
645  {
646  MythDB::DBError("ChannelOptionsCommon::ChannelOptionsCommon", query);
647  }
648  else if (query.next())
649  {
650  QString frequency = query.value(1).toString();
651  DTVModulationSystem modSys;
652  modSys.Parse(query.value(3).toString());
655  {
656  QString polarization = query.value(2).toString().toUpper();
657  frequency.append(polarization);
658  }
659  m_transportId->setValue(query.value(0).toString());
660  m_frequency->setValue(frequency);
661  }
662 };
663 
664 void ChannelOptionsCommon::onAirGuideChanged([[maybe_unused]] bool fValue)
665 {
666 }
667 
668 void ChannelOptionsCommon::sourceChanged(const QString& sourceid)
669 {
670  bool supports_eit = true;
671  bool uses_eit_only = false;
672 
673  MSqlQuery query(MSqlQuery::InitCon());
674  query.prepare("SELECT cardtype "
675  "FROM capturecard, videosource "
676  "WHERE capturecard.sourceid = videosource.sourceid AND "
677  " videosource.sourceid = :SOURCEID");
678  query.bindValue(":SOURCEID", sourceid);
679 
680  if (!query.exec() || !query.isActive())
681  MythDB::DBError("sourceChanged -- supports eit", query);
682  else
683  {
684  supports_eit = (query.size() == 0);
685  while (query.next())
686  {
687  supports_eit |= CardUtil::IsEITCapable(
688  query.value(0).toString().toUpper());
689  }
690 
691  query.prepare("SELECT xmltvgrabber "
692  "FROM videosource "
693  "WHERE sourceid = :SOURCEID");
694  query.bindValue(":SOURCEID", sourceid);
695 
696  if (!query.exec() || !query.isActive())
697  MythDB::DBError("sourceChanged -- eit only", query);
698  else
699  {
700  uses_eit_only = (query.size() != 0);
701  while (query.next())
702  {
703  uses_eit_only &= (query.value(0).toString() == "eitonly");
704  }
705  }
706  }
707 
708  m_onAirGuide->setEnabled(supports_eit);
709  m_xmltvID->setEnabled(!uses_eit_only);
710  m_xmltvID->Load();
711 }
712 
714 {
715  setLabel(QCoreApplication::translate("(ChannelSettings)",
716  "Channel Options - Filters"));
717 
718  addChild(new VideoFilters(id));
719  addChild(new OutputFilters(id));
720 }
721 
723 {
724  setLabel(QCoreApplication::translate("(ChannelSettings)",
725  "Channel Options - IPTV"));
726 
727  addChild(new Name(id));
728  addChild(new Channum(id));
729  addChild(new ChannelURL(id));
730 }
731 
733 {
734  setLabel(QCoreApplication::translate("(ChannelSettings)",
735  "Channel Options - Video4Linux"));
736 
737  addChild(new Freqid(id));
738  addChild(new Finetune(id));
739  addChild(new Contrast(id));
740  addChild(new Brightness(id));
741  addChild(new Colour(id));
742  addChild(new Hue(id));
743 };
744 
745 /*****************************************************************************
746  Channel Options - Video 4 Linux
747  *****************************************************************************/
748 
750  m_cid(id)
751 {
752  setLabel(QCoreApplication::translate("(ChannelSettings)",
753  "Channel Options - Raw Transport Stream"));
754 
755  const uint mx = kMaxPIDs;
756  m_pids.resize(mx);
757  m_sids.resize(mx);
758  m_pcrs.resize(mx);
759 
760  for (uint i = 0; i < mx; i++)
761  {
762  addChild((m_pids[i] = new TransTextEditSetting()));
763  m_pids[i]->setLabel("PID");
765  m_sids[i]->setLabel(" StreamID");
766  for (uint j = 0x101; j <= 0x1ff; j++)
767  {
768  QString desc = StreamID::GetDescription(j&0xff);
769  if (!desc.isEmpty())
770  {
771  m_sids[i]->addSelection(
772  QString("%1 (0x%2)")
773  .arg(desc).arg(j&0xff,2,16,QLatin1Char('0')),
774  QString::number(j), false);
775  }
776  }
777  for (uint j = 0x101; j <= 0x1ff; j++)
778  {
779  QString desc = StreamID::GetDescription(j&0xff);
780  if (desc.isEmpty())
781  {
782  m_sids[i]->addSelection(
783  QString("0x%1").arg(j&0xff,2,16,QLatin1Char('0')),
784  QString::number(j), false);
785  }
786  }
787 /* we don't allow tables right now, PAT & PMT generated on the fly
788  for (uint j = 0; j <= 0xff; j++)
789  {
790  QString desc = TableID::GetDescription(j);
791  if (!desc.isEmpty())
792  {
793  m_sids[i]->addSelection(
794  QString("%1 (0x%2)").arg(j,0,16,QLatin1Char('0')),
795  QString::number(j),
796  false);
797  }
798  }
799 */
801  m_pcrs[i]->setLabel(" Is PCR");
802  }
803 };
804 
806 {
807  uint chanid = m_cid.getValue().toUInt();
808 
809  pid_cache_t pid_cache;
810  if (!ChannelUtil::GetCachedPids(chanid, pid_cache))
811  return;
812 
813  auto it = pid_cache.begin();
814  for (uint i = 0; i < kMaxPIDs && it != pid_cache.end(); )
815  {
816  if (!(it->IsPermanent()))
817  {
818  ++it;
819  continue;
820  }
821 
822  m_pids[i]->setValue(QString("0x%1")
823  .arg(it->GetPID(),2,16,QLatin1Char('0')));
824  m_sids[i]->setValue(QString::number(it->GetComposite()&0x1ff));
825  m_pcrs[i]->setValue(it->IsPCRPID());
826 
827  ++it;
828  ++i;
829  }
830 }
831 
833 {
834  uint chanid = m_cid.getValue().toUInt();
835 
836  pid_cache_t pid_cache;
837  for (uint i = 0; i < kMaxPIDs; i++)
838  {
839  bool ok = false;
840  uint pid = m_pids[i]->getValue().toUInt(&ok, 0);
841  if (!ok || (m_sids[i]->getValue().toUInt() == 0U))
842  continue;
843 
844  pid_cache.emplace_back(
845  pid, m_sids[i]->getValue().toUInt() | 0x10000 |
846  (m_pcrs[i]->getValue().toUInt() ? 0x200 : 0x0));
847  }
848 
849  ChannelUtil::SaveCachedPids(chanid, pid_cache, true /* delete_all */);
850 }
851 
852 /* vim: set expandtab tabstop=4 shiftwidth=4: */
XmltvID
Definition: channelsettings.cpp:311
MSqlBindings
QMap< QString, QVariant > MSqlBindings
typedef for a map of string -> string bindings for generic queries.
Definition: mythdbcon.h:100
Source
static QString Source(const QNetworkRequest &request)
Definition: netstream.cpp:139
MSqlQuery::isActive
bool isActive(void) const
Definition: mythdbcon.h:215
ChannelOptionsCommon::m_xmltvID
XmltvID * m_xmltvID
Definition: channelsettings.h:108
CommMethod
Definition: channelsettings.cpp:425
MSqlQuery::next
bool next(void)
Wrap QSqlQuery::next() so we can display the query results.
Definition: mythdbcon.cpp:812
MSqlQuery
QSqlQuery wrapper that fetches a DB connection from the connection pool.
Definition: mythdbcon.h:127
Name::Name
Name(const ChannelID &id)
Definition: channelsettings.cpp:108
MythUIComboBoxSetting::clearSelections
void clearSelections()
Definition: standardsettings.cpp:517
ChannelOptionsRawTS::ChannelOptionsRawTS
ChannelOptionsRawTS(const ChannelID &id)
Definition: channelsettings.cpp:749
Visible::Visible
Visible(const ChannelID &id)
Definition: channelsettings.cpp:451
Frequency_CO
Definition: channelsettings.cpp:413
MSqlQuery::size
int size(void) const
Definition: mythdbcon.h:214
kChannelNeverVisible
@ kChannelNeverVisible
Definition: channelinfo.h:25
TransMythUICheckBoxSetting
Definition: standardsettings.h:411
OutputFilters
Definition: channelsettings.cpp:296
ChannelOptionsCommon::onAirGuideChanged
static void onAirGuideChanged(bool fValue)
Definition: channelsettings.cpp:664
StandardSetting::setValue
virtual void setValue(const QString &newValue)
Definition: standardsettings.cpp:169
Brightness
Definition: channelsettings.cpp:556
ChannelOptionsRawTS::m_pids
std::vector< TransTextEditSetting * > m_pids
Definition: channelsettings.h:144
ChannelOptionsCommon::sourceChanged
void sourceChanged(const QString &sourceid)
Definition: channelsettings.cpp:668
DBStorage::m_user
StorageUser * m_user
Definition: mythstorage.h:50
ChannelID::getField
const QString & getField(void) const
Definition: channelsettings.h:55
Hue
Definition: channelsettings.cpp:578
TransMythUIComboBoxSetting
Definition: standardsettings.h:272
MythUITextEditSetting::MythUITextEditSetting
MythUITextEditSetting(Storage *_storage=nullptr)
Definition: standardsettings.h:157
TransTextEditSetting
Definition: standardsettings.h:161
XmltvID::fillSelections
void fillSelections(void)
Definition: channelsettings.cpp:333
DTVModulationSystem::kModulationSystem_DVBS2
@ kModulationSystem_DVBS2
Definition: dtvconfparserhelpers.h:662
OnAirGuide
Definition: channelsettings.cpp:475
ChannelOptionsCommon::ChannelOptionsCommon
ChannelOptionsCommon(const ChannelID &id, uint default_sourceid, bool add_freqid)
Definition: channelsettings.cpp:589
xbmcvfs.exists
bool exists(str path)
Definition: xbmcvfs.py:51
MSqlQuery::value
QVariant value(int i) const
Definition: mythdbcon.h:204
ChannelOptionsIPTV::ChannelOptionsIPTV
ChannelOptionsIPTV(const ChannelID &id)
Definition: channelsettings.cpp:722
Colour
Definition: channelsettings.cpp:567
Source::Load
void Load(void) override
Definition: channelsettings.cpp:139
DBStorage::GetColumnName
QString GetColumnName(void) const
Definition: mythstorage.h:47
MSqlQuery::exec
bool exec(void)
Wrap QSqlQuery::exec() so we can display SQL.
Definition: mythdbcon.cpp:618
x0
static int x0
Definition: mythsocket.cpp:49
ChannelUtil::GetCachedPids
static bool GetCachedPids(uint chanid, pid_cache_t &pid_cache)
Returns cached MPEG PIDs when given a Channel ID.
Definition: channelutil.cpp:859
SkipTypeToString
QString SkipTypeToString(int flags)
Definition: programtypes.cpp:91
StorageUser::GetDBValue
virtual QString GetDBValue(void) const =0
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
build_compdb.file
file
Definition: build_compdb.py:55
mythdirs.h
Callsign
Definition: channelsettings.cpp:184
Contrast::Contrast
Contrast(const ChannelID &id)
Definition: channelsettings.cpp:548
ChannelDBStorage::GetWhereClause
QString GetWhereClause(MSqlBindings &bindings) const override
Definition: channelsettings.cpp:51
Visible
Definition: channelsettings.cpp:448
true
VERBOSE_PREAMBLE Most true
Definition: verbosedefs.h:95
ChannelID::Save
void Save() override
Definition: channelsettings.cpp:19
ChannelOptionsCommon::m_frequency
Frequency_CO * m_frequency
Definition: channelsettings.h:111
tmp
static guint32 * tmp
Definition: goom_core.cpp:26
ChannelID::m_field
QString m_field
Definition: channelsettings.h:57
Source::Source
Source(const ChannelID &id, uint _default_sourceid)
Definition: channelsettings.cpp:128
ServiceID::getValue
QString getValue(void) const override
Definition: channelsettings.cpp:391
TimeOffset::TimeOffset
TimeOffset(const ChannelID &id)
Definition: channelsettings.cpp:234
ChannelID
Definition: channelsettings.h:19
StreamID::GetDescription
static QString GetDescription(uint stream_id)
Definition: mpegtables.cpp:1059
StandardSetting::addChild
virtual void addChild(StandardSetting *child)
Definition: standardsettings.cpp:70
kChannelVisible
@ kChannelVisible
Definition: channelinfo.h:23
ServiceID
Definition: channelsettings.cpp:369
ChannelID::m_table
QString m_table
Definition: channelsettings.h:61
Source::fillSelections
void fillSelections(void)
Definition: channelsettings.cpp:152
programinfo.h
mythlogging.h
ChannelDBStorage::m_id
const ChannelID & m_id
Definition: channelsettings.h:73
GetConfDir
QString GetConfDir(void)
Definition: mythdirs.cpp:263
ChannelOptionsFilters::ChannelOptionsFilters
ChannelOptionsFilters(const ChannelID &id)
Definition: channelsettings.cpp:713
MythUIComboBoxSetting
Definition: standardsettings.h:218
Source
Definition: channelsettings.cpp:125
VideoFilters::VideoFilters
VideoFilters(const ChannelID &id)
Definition: channelsettings.cpp:282
Brightness::Brightness
Brightness(const ChannelID &id)
Definition: channelsettings.cpp:559
MSqlQuery::InitCon
static MSqlQueryInfo InitCon(ConnectionReuse _reuse=kNormalConnection)
Only use this in combination with MSqlQuery constructor.
Definition: mythdbcon.cpp:550
pid_cache_t
std::vector< pid_cache_item_t > pid_cache_t
Definition: channelutil.h:43
MythDB::DBError
static void DBError(const QString &where, const MSqlQuery &query)
Definition: mythdb.cpp:226
XmltvID::XmltvID
XmltvID(const ChannelID &id, QString _sourceName)
Definition: channelsettings.cpp:314
StandardSetting::Load
virtual void Load(void)
Definition: standardsettings.cpp:213
MythUICheckBoxSetting::valueChanged
void valueChanged(bool)
Icon::Icon
Icon(const ChannelID &id)
Definition: channelsettings.cpp:268
Colour::Colour
Colour(const ChannelID &id)
Definition: channelsettings.cpp:570
Callsign::Callsign
Callsign(const ChannelID &id)
Definition: channelsettings.cpp:187
StandardSetting::setHelpText
virtual void setHelpText(const QString &str)
Definition: standardsettings.h:37
Freqid
Definition: channelsettings.cpp:511
COMM_DETECT_COMMFREE
@ COMM_DETECT_COMMFREE
Definition: programtypes.h:128
OutputFilters::OutputFilters
OutputFilters(const ChannelID &id)
Definition: channelsettings.cpp:299
Finetune::Finetune
Finetune(const ChannelID &id)
Definition: channelsettings.cpp:530
mpegtables.h
StandardSetting::getValue
virtual QString getValue(void) const
Definition: standardsettings.h:52
VideoFilters
Definition: channelsettings.cpp:279
ChannelTVFormat
Definition: channelsettings.h:151
Contrast
Definition: channelsettings.cpp:545
ChannelOptionsCommon::m_transportId
TransportID_CO * m_transportId
Definition: channelsettings.h:110
ChannelURL
Definition: channelsettings.cpp:493
Channum::Channum
Channum(const ChannelID &id)
Definition: channelsettings.cpp:116
IPTVChannelDBStorage::GetWhereClause
QString GetWhereClause(MSqlBindings &bindings) const override
Definition: channelsettings.cpp:75
StandardSetting::setLabel
virtual void setLabel(QString str)
Definition: standardsettings.h:34
ChannelOptionsRawTS::Load
void Load(void) override
Definition: channelsettings.cpp:805
channelutil.h
IPTVChannelDBStorage::m_id
const ChannelID & m_id
Definition: channelsettings.h:85
XmltvID::Load
void Load(void) override
Definition: channelsettings.cpp:327
TimeOffset
Definition: channelsettings.cpp:231
ChannelOptionsRawTS::kMaxPIDs
static const uint kMaxPIDs
Definition: channelsettings.h:148
DTVModulationSystem::kModulationSystem_DVBS
@ kModulationSystem_DVBS
Definition: dtvconfparserhelpers.h:661
StandardSetting::valueChanged
void valueChanged(const QString &newValue)
StandardSetting::setEnabled
virtual void setEnabled(bool enabled)
Definition: standardsettings.cpp:47
Channum
Definition: channelsettings.cpp:113
MythUIComboBoxSetting::addSelection
void addSelection(const QString &label, QString value=QString(), bool select=false)
Definition: standardsettings.cpp:502
TransportID_CO
Definition: channelsettings.cpp:400
Hue::Hue
Hue(const ChannelID &id)
Definition: channelsettings.cpp:581
Source::m_sourceIdToIndex
QMap< uint, uint > m_sourceIdToIndex
Definition: channelsettings.cpp:181
ChannelOptionsCommon::m_onAirGuide
OnAirGuide * m_onAirGuide
Definition: channelsettings.h:107
MythUITextEditSetting
Definition: standardsettings.h:146
DTVModulationSystem
Definition: dtvconfparserhelpers.h:644
ChannelDBStorage
Definition: channelsettings.h:64
cardutil.h
Name
Definition: channelsettings.cpp:103
IPTVChannelDBStorage::GetSetClause
QString GetSetClause(MSqlBindings &bindings) const override
Definition: channelsettings.cpp:85
MSqlQuery::bindValue
void bindValue(const QString &placeholder, const QVariant &val)
Add a single binding.
Definition: mythdbcon.cpp:888
channelsettings.h
kChannelAlwaysVisible
@ kChannelAlwaysVisible
Definition: channelinfo.h:22
OnAirGuide::OnAirGuide
OnAirGuide(const ChannelID &id)
Definition: channelsettings.cpp:478
Brightness
static constexpr uint8_t Brightness
Definition: synaesthesia.h:18
CommMethod::CommMethod
CommMethod(const ChannelID &id)
Definition: channelsettings.cpp:428
MythUISpinBoxSetting
Definition: standardsettings.h:328
ChannelOptionsRawTS::m_sids
std::vector< TransMythUIComboBoxSetting * > m_sids
Definition: channelsettings.h:145
MSqlQuery::numRowsAffected
int numRowsAffected() const
Definition: mythdbcon.h:217
CardUtil::IsEITCapable
static bool IsEITCapable(const QString &rawtype)
Definition: cardutil.h:170
ChannelOptionsRawTS::m_pcrs
std::vector< TransMythUICheckBoxSetting * > m_pcrs
Definition: channelsettings.h:146
Icon
Definition: channelsettings.cpp:265
ServiceID::ServiceID
ServiceID(const ChannelID &id)
Definition: channelsettings.cpp:372
IPTVChannelDBStorage
Definition: channelsettings.h:76
Source::m_defaultSourceId
uint m_defaultSourceId
Definition: channelsettings.cpp:180
ChannelUtil::SaveCachedPids
static bool SaveCachedPids(uint chanid, const pid_cache_t &_pid_cache, bool delete_all=false)
Saves PIDs for PSIP tables to database.
Definition: channelutil.cpp:892
MythUICheckBoxSetting
Definition: standardsettings.h:390
Finetune
Definition: channelsettings.cpp:527
ChannelOptionsV4L::ChannelOptionsV4L
ChannelOptionsV4L(const ChannelID &id)
Definition: channelsettings.cpp:732
Frequency_CO::Frequency_CO
Frequency_CO(void)
Definition: channelsettings.cpp:416
ChannelURL::ChannelURL
ChannelURL(const ChannelID &id)
Definition: channelsettings.cpp:498
ChannelOptionsCommon::m_freqId
Freqid * m_freqId
Definition: channelsettings.h:109
COMM_DETECT_UNINIT
@ COMM_DETECT_UNINIT
Definition: programtypes.h:129
GetPreferredSkipTypeCombinations
std::deque< int > GetPreferredSkipTypeCombinations(void)
Definition: programtypes.cpp:129
ChannelID::findHighest
int findHighest(int floor=1000)
Definition: channelsettings.h:31
Priority::Priority
Priority(const ChannelID &id)
Definition: channelsettings.cpp:251
ChannelTVFormat::GetFormats
static QStringList GetFormats(void)
Definition: channelsettings.cpp:209
TransportID_CO::TransportID_CO
TransportID_CO(void)
Definition: channelsettings.cpp:403
ChannelTVFormat::ChannelTVFormat
ChannelTVFormat(const ChannelID &id)
Definition: channelsettings.cpp:194
ChannelOptionsRawTS::Save
void Save(void) override
Definition: channelsettings.cpp:832
Freqid::Freqid
Freqid(const ChannelID &id)
Definition: channelsettings.cpp:516
XmltvID::m_sourceName
QString m_sourceName
Definition: channelsettings.cpp:366
ChannelOptionsRawTS::m_cid
const ChannelID & m_cid
Definition: channelsettings.h:142
Priority
Definition: channelsettings.cpp:248
MythUIComboBoxSetting::setValue
void setValue(int value) override
Definition: standardsettings.cpp:482
ChannelDBStorage::GetSetClause
QString GetSetClause(MSqlBindings &bindings) const override
Definition: channelsettings.cpp:61
GroupSetting
Definition: standardsettings.h:435
kChannelNotVisible
@ kChannelNotVisible
Definition: channelinfo.h:24
uint
unsigned int uint
Definition: freesurround.h:24
ServiceID::Load
void Load(void) override
Definition: channelsettings.cpp:383
MSqlQuery::prepare
bool prepare(const QString &query)
QSqlQuery::prepare() is not thread safe in Qt <= 3.3.2.
Definition: mythdbcon.cpp:837
DTVModulationSystem::Parse
bool Parse(const QString &_value)
Definition: dtvconfparserhelpers.h:716