Ticket #2756: 2756-v1.patch

File 2756-v1.patch, 8.4 KB (added by danielk, 14 years ago)

Revised patch

  • libs/libmythtv/channelutil.h

     
    198198     */
    199199    static QString GetServiceName(int chanid);
    200200    static int     GetSourceID(int mplexid);
    201     static QString GetInputName(int sourceid);
    202201    static int     GetInputID(int sourceid, int cardid);
    203202    static QString GetDTVPrivateType(uint networkid, const QString &key,
    204203                                     const QString sitype = "dvb");
  • libs/libmythtv/cardutil.h

     
    138138
    139139
    140140    static QString      GetDefaultInput(uint cardid);
    141     static QString      GetInputName(uint cardid, uint sourceid);
     141    static QStringList  GetInputNames(uint cardid, uint sourceid);
    142142
    143143    static QString      GetDeviceLabel(uint    cardid,
    144144                                       QString cardtype,
  • libs/libmythtv/scanwizardscanner.cpp

     
    521521        return;
    522522    }
    523523
    524     scanner = new SIScan(card_type, channel, sourceid,
    525                          signal_timeout, channel_timeout);
     524    scanner = new SIScan(card_type, channel, sourceid, signal_timeout,
     525                         channel_timeout, inputname);
    526526
    527527    scanner->SetForceUpdate(true);
    528528
  • libs/libmythtv/siscan.cpp

     
    8181 *   HandleDVBDBInsertion() and HandleMPEGDBInsertion() are similar.
    8282 */
    8383
    84 /** \fn SIScan::SIScan(QString,ChannelBase*,int,uint,uint)
     84/** \fn SIScan::SIScan(QString,ChannelBase*,int,uint,uint,const QString&)
    8585 */
    86 SIScan::SIScan(QString _cardtype, ChannelBase* _channel, int _sourceID,
    87                uint signal_timeout, uint channel_timeout)
     86SIScan::SIScan(const QString &_cardtype, ChannelBase *_channel, int _sourceID,
     87               uint signal_timeout, uint channel_timeout,
     88               const QString &_inputname)
    8889    : // Set in constructor
    8990      channel(_channel),
    9091      signalMonitor(SignalMonitor::Init(_cardtype, -1, _channel)),
     
    9293      scanMode(IDLE),
    9394      signalTimeout(signal_timeout),
    9495      channelTimeout(channel_timeout),
     96      inputname(QDeepCopy<QString>(_inputname)),
    9597      // Settable
    9698      ignoreAudioOnlyServices(false),
    9799      ignoreDataServices(false),
     
    687689    }
    688690#endif // USING_DVB
    689691
    690     // TODO we should actually use the input the user specifies...
    691     QString inputname = ChannelUtil::GetInputName(item.SourceID);
    692 
    693692    if (!GetDTVChannel())
    694693        return false;
    695694
  • libs/libmythtv/channelutil.cpp

     
    699699    return -1;
    700700}
    701701
    702 /** \fn ChannelUtil::GetInputName(int)
    703  *  \brief Returns input name for a card input
    704  *  NOTE: This is BROKEN, it does not specify which card the input is on.
    705  */
    706 QString ChannelUtil::GetInputName(int source_id)
    707 {
    708     QString inputname = QString::null;
    709 
    710     MSqlQuery query(MSqlQuery::InitCon());
    711     query.prepare("SELECT inputname "
    712                   "FROM cardinput "
    713                   "WHERE sourceid = :SOURCEID");
    714     query.bindValue(":SOURCEID", source_id);
    715 
    716     if (query.exec() && query.isActive() && query.size() > 0)
    717     {
    718         query.next();
    719         inputname = query.value(0).toString();
    720     }
    721     return inputname;
    722 }
    723 
    724702int ChannelUtil::GetInputID(int source_id, int card_id)
    725703{
    726704    int input_id = -1;
  • libs/libmythtv/cardutil.cpp

     
    348348    return str;
    349349}
    350350
    351 QString CardUtil::GetInputName(uint cardid, uint sourceid)
     351QStringList CardUtil::GetInputNames(uint cardid, uint sourceid)
    352352{
    353     QString str = QString::null;
     353    QStringList list;
    354354    MSqlQuery query(MSqlQuery::InitCon());
    355355    query.prepare("SELECT inputname "
    356356                  "FROM cardinput "
     
    360360    query.bindValue(":CARDID",   cardid);
    361361
    362362    if (!query.exec() || !query.isActive())
    363         MythContext::DBError("CardUtil::GetInputName()", query);
    364     else if (query.next())
    365         str = query.value(0).toString();
     363    {
     364        MythContext::DBError("CardUtil::GetInputNames()", query);
     365    }
     366    else
     367    {
     368        while (query.next())
     369            list = query.value(0).toString();
     370    }
    366371
    367     return str;
     372    return list;
    368373}
    369374
    370375bool CardUtil::GetTimeouts(uint cardid,
  • libs/libmythtv/siscan.h

     
    4444{
    4545    Q_OBJECT
    4646  public:
    47     SIScan(QString _cardtype, ChannelBase* _channel, int _sourceID,
    48            uint signal_timeout, uint channel_timeout);
     47    SIScan(const QString &_cardtype, ChannelBase* _channel, int _sourceID,
     48           uint signal_timeout, uint channel_timeout,
     49           const QString &_inputname);
    4950    ~SIScan();
    5051
    5152    void StartScanner(void);
     
    180181    SCANMODE          scanMode;
    181182    uint              signalTimeout;
    182183    uint              channelTimeout;
     184    QString           inputname;
    183185
    184186    // Settable
    185187    bool              ignoreAudioOnlyServices;
  • libs/libmythtv/transporteditor.cpp

     
    188188    vector<uint>::const_iterator it = cardids.begin();
    189189    for (; it != cardids.end(); ++it)
    190190    {
    191         CardUtil::CARD_TYPES nType = CardUtil::ERROR_PROBE;
    192         QString inputname = CardUtil::GetInputName(*it, sourceid);
     191        QStringList inputnames = CardUtil::GetInputNames(*it, sourceid);
     192        QStringList::const_iterator it2 = inputnames.begin();
    193193
    194         if (!inputname.isEmpty())
     194        for (; it2 != inputnames.end(); ++it2)
    195195        {
    196             QString cardtype = CardUtil::GetRawCardType(*it, inputname);
     196            CardUtil::CARD_TYPES nType = CardUtil::ERROR_PROBE;
     197            QString cardtype = CardUtil::GetRawCardType(*it, *it2);
    197198            if (cardtype == "DVB")
    198                 cardtype = CardUtil::ProbeSubTypeName(*it, inputname);
     199                cardtype = CardUtil::ProbeSubTypeName(*it, *it2);
    199200            nType = CardUtil::toCardType(cardtype);
    200         }
    201201
    202         if ((CardUtil::ERROR_OPEN    == nType) ||
    203             (CardUtil::ERROR_UNKNOWN == nType) ||
    204             (CardUtil::ERROR_PROBE   == nType))
    205         {
    206             MythPopupBox::showOkPopup(
    207                 gContext->GetMainWindow(),
    208                 QObject::tr("Transport Editor"),
    209                 QObject::tr(
    210                     "Failed to probe a capture card connected to this "
    211                     "transport's video source. Please make sure the "
    212                     "backend is not running."));
     202            if ((CardUtil::ERROR_OPEN    == nType) ||
     203                (CardUtil::ERROR_UNKNOWN == nType) ||
     204                (CardUtil::ERROR_PROBE   == nType))
     205            {
     206                MythPopupBox::showOkPopup(
     207                    gContext->GetMainWindow(),
     208                    QObject::tr("Transport Editor"),
     209                    QObject::tr(
     210                        "Failed to probe a capture card connected to this "
     211                        "transport's video source. Please make sure the "
     212                        "backend is not running."));
    213213
    214             return CardUtil::ERROR_PROBE;
     214                return CardUtil::ERROR_PROBE;
     215            }
     216
     217            cardtypes.push_back(nType);
    215218        }
    216 
    217         cardtypes.push_back(nType);
    218219    }
    219220
     221    // This should never happen... (unless DB has changed under us)
     222    if (cardtypes.empty())
     223        return CardUtil::ERROR_PROBE;
     224
    220225    for (uint i = 1; i < cardtypes.size(); i++)
    221226    {
    222227        CardUtil::CARD_TYPES typeA = cardtypes[i - 1];