Ticket #13447: 20190411-scan-lcn-required.patch

File 20190411-scan-lcn-required.patch, 13.3 KB (added by Klaas de Waal, 5 years ago)

Option to select only channels with a Logical Channel Number.

  • mythtv/libs/libmythtv/channelscan/channelimporter.cpp

    diff --git a/mythtv/libs/libmythtv/channelscan/channelimporter.cpp b/mythtv/libs/libmythtv/channelscan/channelimporter.cpp
    index 0553d149ee..a597f3e470 100644
    a b  
    66 *
    77 */
    88
    9 #include <QTextStream>
     9// C++ includes
    1010#include <iostream>
    1111#include <utility>
    1212
     13// Qt includes
     14#include <QTextStream>
     15
    1316using namespace std;
    1417
    1518// MythTV headers
    void ChannelImporter::Process(const ScanDTVTransportList &_transports, 
    7982
    8083    FilterServices(transports);
    8184
     85    if (m_lcn_only)
     86        FilterChannelNumber(transports);
     87
    8288    // Pull in DB info
    8389    sourceid = transports[0].m_channels[0].m_source_id;
    8490    ScanDTVTransportList db_trans = GetDBTransports(sourceid, transports);
    void ChannelImporter::FilterServices(ScanDTVTransportList &transports) const 
    824830    }
    825831}
    826832
     833// Remove the channels that do not have a logical channel number
     834void ChannelImporter::FilterChannelNumber(ScanDTVTransportList &transports) const
     835{
     836    for (size_t i = 0; i < transports.size(); ++i)
     837    {
     838        ChannelInsertInfoList filtered;
     839        for (size_t k = 0; k < transports[i].m_channels.size(); ++k)
     840        {
     841            if (transports[i].m_channels[k].m_chan_num.isEmpty())
     842            {
     843                QString msg = FormatChannel(transports[i], transports[i].m_channels[k]);
     844                LOG(VB_GENERAL, LOG_DEBUG, QString("No LCN: %1").arg(msg));
     845                continue;
     846            }
     847            filtered.push_back(transports[i].m_channels[k]);
     848        }
     849        transports[i].m_channels = filtered;
     850    }
     851}
     852
    827853/** \fn ChannelImporter::GetDBTransports(uint,ScanDTVTransportList&) const
    828854 *  \brief Adds found channel info to transports list,
    829855 *         returns channels in DB which were not found in scan
  • mythtv/libs/libmythtv/channelscan/channelimporter.h

    diff --git a/mythtv/libs/libmythtv/channelscan/channelimporter.h b/mythtv/libs/libmythtv/channelscan/channelimporter.h
    index dbb3097c4e..171757280e 100644
    a b class MTV_PUBLIC ChannelImporter 
    7676  public:
    7777    ChannelImporter(bool gui, bool interactive,
    7878                    bool _delete, bool insert, bool save,
    79                     bool fta_only, ServiceRequirements service_requirements,
     79                    bool fta_only, bool lcn_only,
     80                    ServiceRequirements service_requirements,
    8081                    bool success = false) :
    81         m_use_gui(gui), m_is_interactive(interactive),
     82        m_use_gui(gui),
     83        m_is_interactive(interactive),
    8284        m_do_delete(_delete),
    83         m_do_insert(insert), m_do_save(save), m_fta_only(fta_only),
     85        m_do_insert(insert),
     86        m_do_save(save),
     87        m_fta_only(fta_only),
     88        m_lcn_only(lcn_only),
    8489        m_success(success),
    8590        m_service_requirements(service_requirements) { }
    8691
    class MTV_PUBLIC ChannelImporter 
    133138
    134139    void CleanupDuplicates(ScanDTVTransportList &transports) const;
    135140    void FilterServices(ScanDTVTransportList &transports) const;
     141    void FilterChannelNumber(ScanDTVTransportList &transports) const;
    136142    ScanDTVTransportList GetDBTransports(
    137143        uint sourceid, ScanDTVTransportList&) const;
    138144
    class MTV_PUBLIC ChannelImporter 
    228234    bool                m_do_save;
    229235    /// Only FreeToAir (non-encrypted) channels desired post scan?
    230236    bool                m_fta_only;
     237    /// Only services with logical channel numbers desired post scan?
     238    bool                m_lcn_only;
    231239    /// To pass information IPTV channel scan succeeded
    232240    bool                m_success {false};
    233241    /// Services desired post scan
  • mythtv/libs/libmythtv/channelscan/channelscanmiscsettings.h

    diff --git a/mythtv/libs/libmythtv/channelscan/channelscanmiscsettings.h b/mythtv/libs/libmythtv/channelscan/channelscanmiscsettings.h
    index 61104fc76a..505db30e45 100644
    a b class FreeToAirOnly : public TransMythUICheckBoxSetting 
    120120    };
    121121};
    122122
     123class ChannelNumbersOnly : public TransMythUICheckBoxSetting
     124{
     125  public:
     126    ChannelNumbersOnly()
     127    {
     128        setValue(false);
     129        setLabel(QObject::tr("Logical Channel Numbers required"));
     130        setHelpText(
     131            QObject::tr(
     132                "If set, only services with a Logical Channel Number will "
     133                "be added during the scan. This will filter out services "
     134                "for set-top-box firmware download and video-on-demand "
     135                "that can be present on DVB-C networks."));
     136    };
     137};
     138
    123139class AddFullTS : public TransMythUICheckBoxSetting
    124140{
    125141  public:
  • mythtv/libs/libmythtv/channelscan/channelscanner.cpp

    diff --git a/mythtv/libs/libmythtv/channelscan/channelscanner.cpp b/mythtv/libs/libmythtv/channelscan/channelscanner.cpp
    index 691fd13f9d..955c595b8c 100644
    a b void ChannelScanner::Scan( 
    115115    bool           do_follow_nit,
    116116    bool           do_test_decryption,
    117117    bool           do_fta_only,
     118    bool           do_lcn_only,
    118119    bool           do_add_full_ts,
    119120    ServiceRequirements service_requirements,
    120121    // stuff needed for particular scans
    void ChannelScanner::Scan( 
    127128    const QString &tbl_end   /* FullScan optional */)
    128129{
    129130    m_freeToAirOnly = do_fta_only;
     131    m_channelNumbersOnly = do_lcn_only;
    130132    m_addFullTS = do_add_full_ts;
    131133    m_serviceRequirements = service_requirements;
    132134    m_sourceid = sourceid;
  • mythtv/libs/libmythtv/channelscan/channelscanner.h

    diff --git a/mythtv/libs/libmythtv/channelscan/channelscanner.h b/mythtv/libs/libmythtv/channelscan/channelscanner.h
    index 4433e1247a..859a8f3533 100644
    a b class MTV_PUBLIC ChannelScanner 
    7676              bool           do_follow_nit,
    7777              bool           do_test_decryption,
    7878              bool           do_fta_only,
     79              bool           do_lcn_only,
    7980              bool           do_add_full_ts,
    8081              ServiceRequirements service_requirements,
    8182              // stuff needed for particular scans
    class MTV_PUBLIC ChannelScanner 
    135136    /// Only fta channels desired post scan?
    136137    bool                     m_freeToAirOnly       {false};
    137138
     139    /// Only channels with logical channel numbers desired post scan?
     140    bool                     m_channelNumbersOnly  {false};
     141
    138142    /// Add MPTS "full transport stream" channels
    139143    bool                     m_addFullTS           {false};
    140144
  • mythtv/libs/libmythtv/channelscan/channelscanner_cli.cpp

    diff --git a/mythtv/libs/libmythtv/channelscan/channelscanner_cli.cpp b/mythtv/libs/libmythtv/channelscan/channelscanner_cli.cpp
    index aadddeef95..ad79ed0190 100644
    a b void ChannelScannerCLI::InformUser(const QString &error) 
    136136void ChannelScannerCLI::Process(const ScanDTVTransportList &_transports)
    137137{
    138138    ChannelImporter ci(false, m_interactive, !m_onlysavescan, !m_onlysavescan, true,
    139                        m_freeToAirOnly, m_serviceRequirements);
     139                       m_freeToAirOnly, m_channelNumbersOnly, m_serviceRequirements);
    140140    ci.Process(_transports, m_sourceid);
    141141}
    142142
  • mythtv/libs/libmythtv/channelscan/channelscanner_gui.cpp

    diff --git a/mythtv/libs/libmythtv/channelscan/channelscanner_gui.cpp b/mythtv/libs/libmythtv/channelscan/channelscanner_gui.cpp
    index 25be3def5c..cf4f448aad 100644
    a b void ChannelScannerGUI::Process(const ScanDTVTransportList &_transports, 
    135135                                bool success)
    136136{
    137137    ChannelImporter ci(true, true, true, true, true,
    138                        m_freeToAirOnly, m_serviceRequirements, success);
     138                       m_freeToAirOnly, m_channelNumbersOnly, m_serviceRequirements, success);
    139139    ci.Process(_transports, m_sourceid);
    140140}
    141141
  • mythtv/libs/libmythtv/channelscan/scanwizardconfig.cpp

    diff --git a/mythtv/libs/libmythtv/channelscan/scanwizardconfig.cpp b/mythtv/libs/libmythtv/channelscan/scanwizardconfig.cpp
    index 48140d4519..5a3953477f 100644
    a b void ScanWizard::SetupConfig( 
    3131    m_scanConfig = new ScanOptionalConfig(m_scanType);
    3232    m_services = new DesiredServices();
    3333    m_ftaOnly = new FreeToAirOnly();
     34    m_lcnOnly = new ChannelNumbersOnly();
    3435    m_addFullTS = new AddFullTS();
    3536    m_trustEncSI = new TrustEncSISetting();
    3637
    3738    addChild(m_services);
    3839    addChild(m_ftaOnly);
     40    addChild(m_lcnOnly);
    3941    addChild(m_addFullTS);
    4042    addChild(m_trustEncSI);
    4143
    bool ScanWizard::DoFreeToAirOnly(void) const 
    7274    return m_ftaOnly->boolValue();
    7375}
    7476
     77bool ScanWizard::DoChannelNumbersOnly(void) const
     78{
     79    return m_lcnOnly->boolValue();
     80}
     81
    7582bool ScanWizard::DoAddFullTS(void) const
    7683{
    7784    return m_addFullTS->boolValue();
  • mythtv/libs/libmythtv/channelscan/scanwizardconfig.h

    diff --git a/mythtv/libs/libmythtv/channelscan/scanwizardconfig.h b/mythtv/libs/libmythtv/channelscan/scanwizardconfig.h
    index ab0115281c..6b0a692d59 100644
    a b class ScanNetwork; 
    4343class IgnoreSignalTimeout;
    4444class DesiredServices;
    4545class FreeToAirOnly;
     46class ChannelNumbersOnly;
    4647class AddFullTS;
    4748class TrustEncSISetting;
    4849
  • mythtv/libs/libmythtv/scanwizard.cpp

    diff --git a/mythtv/libs/libmythtv/scanwizard.cpp b/mythtv/libs/libmythtv/scanwizard.cpp
    index c1d80172af..bf5e2d4863 100644
    a b void ScanWizard::Scan() 
    137137        ScanDTVTransportList transports = LoadScan(scanid);
    138138        ChannelImporter ci(true, true, true, true, false,
    139139                           DoFreeToAirOnly(),
     140                           DoChannelNumbersOnly(),
    140141                           GetServiceRequirements());
    141142        ci.Process(transports, sourceid);
    142143    }
    void ScanWizard::Scan() 
    179180            GetInputName(),           GetSourceID(),
    180181            DoIgnoreSignalTimeout(),  DoFollowNIT(),
    181182            DoTestDecryption(),       DoFreeToAirOnly(),
     183            DoChannelNumbersOnly(),
    182184            DoAddFullTS(),            GetServiceRequirements(),
    183185            // stuff needed for particular scans
    184186            GetMultiplex(),         start_chan,
  • mythtv/libs/libmythtv/scanwizard.h

    diff --git a/mythtv/libs/libmythtv/scanwizard.h b/mythtv/libs/libmythtv/scanwizard.h
    index 074a10e708..5cda624e87 100644
    a b class MTV_PUBLIC ScanWizard : public GroupSetting 
    8787        { return m_scanConfig->DoIgnoreSignalTimeout(); }
    8888    bool    DoFollowNIT(void) const
    8989        { return m_scanConfig->DoFollowNIT(); }
    90     bool    DoFreeToAirOnly(void)  const;
    91     bool    DoAddFullTS(void)      const;
    92     bool    DoTestDecryption(void) const;
     90    bool    DoFreeToAirOnly(void)       const;
     91    bool    DoChannelNumbersOnly(void)  const;
     92    bool    DoAddFullTS(void)           const;
     93    bool    DoTestDecryption(void)      const;
    9394
    9495  protected:
    9596    VideoSourceSelector *m_videoSource {nullptr};
    class MTV_PUBLIC ScanWizard : public GroupSetting 
    9899    ScanOptionalConfig  *m_scanConfig  {nullptr};
    99100    DesiredServices     *m_services    {nullptr};
    100101    FreeToAirOnly       *m_ftaOnly     {nullptr};
     102    ChannelNumbersOnly  *m_lcnOnly     {nullptr};
    101103    AddFullTS           *m_addFullTS   {nullptr};
    102104    TrustEncSISetting   *m_trustEncSI  {nullptr};
    103105// End of members moved from ScanWizardConfig
  • mythtv/programs/mythtv-setup/main.cpp

    diff --git a/mythtv/programs/mythtv-setup/main.cpp b/mythtv/programs/mythtv-setup/main.cpp
    index d112a15d44..b040bb6680 100644
    a b int main(int argc, char *argv[]) 
    274274    bool    expertMode = false;
    275275    uint    scanImport = 0;
    276276    bool    scanFTAOnly = false;
     277    bool    scanLCNOnly = false;
    277278    bool    addFullTS = false;
    278279    ServiceRequirements scanServiceRequirements = kRequireAV;
    279280    uint    scanCardId = 0;
    int main(int argc, char *argv[]) 
    363364        scanImport = cmdline.toUInt("importscan");
    364365    if (cmdline.toBool("ftaonly"))
    365366        scanFTAOnly = true;
     367    if (cmdline.toBool("lcnonly"))
     368        scanLCNOnly = true;
    366369    if (cmdline.toBool("addfullts"))
    367370        addFullTS = true;
    368371    if (cmdline.toBool("servicetype"))
    int main(int argc, char *argv[]) 
    518521                         /* follow_nit */            true,
    519522                         /* test decryption */       true,
    520523                         scanFTAOnly,
     524                         scanLCNOnly,
    521525                         addFullTS,
    522526                         scanServiceRequirements,
    523527                         // stuff needed for particular scans
    int main(int argc, char *argv[]) 
    552556        {
    553557            ScanDTVTransportList list = LoadScan(scanImport);
    554558            ChannelImporter ci(false, true, true, true, false,
    555                                scanFTAOnly, scanServiceRequirements);
     559                               scanFTAOnly, scanLCNOnly, scanServiceRequirements);
    556560            ci.Process(list);
    557561        }
    558562        cout<<"*** SCAN IMPORT END ***"<<endl;