Ticket #3687: qam_lt_smart_sort.patch

File qam_lt_smart_sort.patch, 2.6 KB (added by billymacdonald@…, 18 years ago)

Patch for QAM sort

  • libs/libmythtv/channelutil.cpp

     
    13721372    int cmp = 0;
    13731373
    13741374    bool isIntA, isIntB;
     1375    bool isQamA = 0, isQamB = 0;
    13751376    int a_int = a.channum.toUInt(&isIntA);
    13761377    int b_int = b.channum.toUInt(&isIntB);
    13771378    int a_major = a.major_chan;
    13781379    int b_major = b.major_chan;
    13791380    int a_minor = a.minor_chan;
    13801381    int b_minor = b.minor_chan;
     1382    QStringList chanList;
    13811383
    13821384    // If ATSC channel has been renumbered, sort by new channel number
    13831385    if ((a_minor > 0) && a_int)
     
    14061408            return cmp < 0;
    14071409    }
    14081410
    1409     if (isIntA && isIntB)
     1411    if (isIntA)
    14101412    {
    1411         // both channels have a numeric channum
    1412         cmp = a_int - b_int;
    1413         if (cmp)
     1413        //Treat integer as if 0 subchannel ex. 9.0
     1414        a_major = a_int;
     1415        a_minor = 0;
     1416    }
     1417    else
     1418    {
     1419        //Try to split channum on -, _, or . for QAM channels and order by major/minor
     1420        chanList = QStringList::split("-",a.channum);
     1421        if (chanList.size() != 2)
     1422        {
     1423            chanList = QStringList::split("_",a.channum);
     1424            if (chanList.size() != 2)
     1425            {
     1426                chanList = QStringList::split(".",a.channum);
     1427            }
     1428        }
     1429        if (chanList.size() == 2)
     1430        {
     1431            a_major = chanList[0].toUInt(&isQamA);
     1432            if (isQamA)
     1433            {
     1434                a_minor = chanList[1].toUInt(&isQamA);
     1435            }
     1436        }
     1437    }
     1438
     1439    if (isIntB)
     1440    {
     1441        //Treat integer as if 0 subchannel ex. 9.0
     1442        b_major = b_int;
     1443        b_minor = 0;
     1444    }
     1445    else
     1446    {
     1447        //Try to split channum on -, _, or . for QAM channels and order by major/minor
     1448        chanList = QStringList::split("-",b.channum);
     1449        if (chanList.size() != 2)
     1450        {
     1451            chanList = QStringList::split("_",b.channum);
     1452            if (chanList.size() != 2)
     1453            {
     1454                chanList = QStringList::split(".",b.channum);
     1455            }
     1456        }
     1457        if (chanList.size() == 2)
     1458        {
     1459            b_major = chanList[0].toUInt(&isQamB);
     1460            if (isQamB)
     1461            {
     1462                b_minor = chanList[1].toUInt(&isQamB);
     1463            }
     1464        }
     1465    }
     1466
     1467    if ((isIntA || isQamA) && (isIntB || isQamB))
     1468    {
     1469        //Channels are Integer or QAM style (9.1, 9-1, 9_1)
     1470        if ((cmp = a_major - b_major))
    14141471            return cmp < 0;
     1472       
     1473        if ((cmp = a_minor - b_minor))
     1474            return cmp < 0;
    14151475    }
    14161476    else if (isIntA ^ isIntB)
    14171477    {