Ticket #10734: customedit.2.patch

File customedit.2.patch, 10.7 KB (added by mmm1976@…, 14 years ago)

with diff -Naur

  • programs/mythfrontend/customedit.cpp

    old new  
    3535    m_baseTitle.remove(QRegExp(" \\(.*\\)$"));
    3636
    3737    m_maxex = 0;
     38        m_evaluate = 1; // default: evaluate
    3839    m_seSuffix = QString(" (%1)").arg(tr("stored search"));
    3940    m_exSuffix = QString(" (%1)").arg(tr("stored example"));
    4041
     
    150151    textChanged();
    151152}
    152153
    153 void CustomEdit::loadClauses()
     154QString CustomEdit::evaluate(QString clause)
    154155{
    155     QString quoteTitle = m_baseTitle;
    156     quoteTitle.replace("\'","\'\'");
     156    int s0=0;
     157    int e0=0;
     158
     159    while (1) {
     160        s0 = clause.indexOf (QRegExp("\\{[A-Z]+\\}"), e0);
     161
     162        if (s0 < 0)
     163            break;
     164
     165        e0 = clause.indexOf ("}", s0);
     166
     167        QString mid = clause.mid(s0 + 1, e0 - s0 - 1);
     168        QString repl = "";
     169
     170        if (!mid.compare("TITLE")) {
     171            repl = m_pginfo->GetTitle();
     172            repl.replace("\'","\'\'");
     173        } else if (!mid.compare("SUBTITLE")) {
     174            repl = m_pginfo->GetSubtitle();
     175            repl.replace("\'","\'\'");
     176        } else if (!mid.compare("DESCR")) {
     177            repl = m_pginfo->GetDescription();
     178            repl.replace("\'","\'\'");
     179        } else if (!mid.compare("SERIESID")) {
     180            repl = QString("%1").arg(m_pginfo->GetSeriesID());
     181        } else if (!mid.compare("PROGID")) {
     182            repl = m_pginfo->GetProgramID();
     183        } else if (!mid.compare("SEASON")) {
     184            repl = QString::number(m_pginfo->GetSeason());
     185        } else if (!mid.compare("EPISODE")) {
     186            repl = QString::number(m_pginfo->GetEpisode());
     187        } else if (!mid.compare("CATEGORY")) {
     188            repl = m_pginfo->GetCategory();
     189        } else if (!mid.compare("CHANID")) {
     190            repl = QString("%1").arg(m_pginfo->GetChanID());
     191        } else if (!mid.compare("CHANNUM")) {
     192            repl = m_pginfo->GetChanNum();
     193        } else if (!mid.compare("SCHEDID")) {
     194            repl = m_pginfo->GetChannelSchedulingID();
     195        } else if (!mid.compare("CHANNAME")) {
     196            repl = m_pginfo->GetChannelName();
     197        } else if (!mid.compare("DAYNAME")) {
     198            repl = m_pginfo->GetScheduledStartTime().toString("dddd");
     199        } else if (!mid.compare("STARTDATE")) {
     200            repl = m_pginfo->GetScheduledStartTime().toString("yyyy-mm-dd hh:mm:ss");
     201        } else if (!mid.compare("ENDDATE")) {
     202            repl = m_pginfo->GetScheduledEndTime().toString("yyyy-mm-dd hh:mm:ss");
     203        } else if (!mid.compare("STARTTIME")) {
     204            repl = m_pginfo->GetScheduledStartTime().toString("hh:mm");
     205        } else if (!mid.compare("ENDTIME")) {
     206            repl = m_pginfo->GetScheduledEndTime().toString("hh:mm");
     207        } else if (!mid.compare("STARTSEC")) {
     208            QDateTime date = m_pginfo->GetScheduledStartTime();
     209            QDateTime midnight = QDateTime(date.date());
     210            repl = QString("%1").arg(midnight.secsTo(date));
     211        } else if (!mid.compare("ENDSEC")) {
     212            QDateTime date = m_pginfo->GetScheduledEndTime();
     213            QDateTime midnight = QDateTime(date.date());
     214            repl = QString("%1").arg(midnight.secsTo(date));
     215        }
     216        // unknown tags are simply removed
     217        clause.replace(s0, e0 - s0 + 1, repl);
     218    }
     219    return clause;
     220}
    157221
     222void CustomEdit::loadClauses()
     223{
    158224    CustomRuleInfo rule;
    159225
    160226    rule.title = tr("Match an exact title");
    161227    if (!m_baseTitle.isEmpty())
    162         rule.description = QString("program.title = '%1' ").arg(quoteTitle);
     228        rule.description = QString("program.title = '{TITLE}' ");
    163229    else
    164230        rule.description = "program.title = 'Nova' ";
    165231    new MythUIButtonListItem(m_clauseList, rule.title,
     
    169235    {
    170236        rule.title = tr("Match this series");
    171237        rule.subtitle.clear();
    172         rule.description = QString("program.seriesid = '%1' ")
    173             .arg(m_pginfo->GetSeriesID());
     238        rule.description = QString("program.seriesid = '{SERIESID}' ");
    174239        new MythUIButtonListItem(m_clauseList, rule.title,
    175240                                 qVariantFromValue(rule));
    176241    }
     
    178243    rule.title = tr("Match words in the title");
    179244    rule.subtitle.clear();
    180245    if (!m_pginfo->GetTitle().isEmpty())
    181         rule.description = QString("program.title LIKE '%%1%' ")
    182                                    .arg(quoteTitle);
     246        rule.description = QString("program.title LIKE '%{TITLE}%' ");
    183247    else
    184248        rule.description = "program.title LIKE 'CSI: %' ";
    185249    new MythUIButtonListItem(m_clauseList, rule.title,
     
    188252    rule.title = tr("Match words in the subtitle");
    189253    rule.subtitle.clear();
    190254    if (!m_pginfo->GetSubtitle().isEmpty())
    191     {
    192         QString subt = m_pginfo->GetSubtitle();
    193         subt.replace("\'","\'\'");
    194         rule.description = QString("program.subtitle LIKE '%%1%' ")
    195                                    .arg(subt);
    196     }
     255        rule.description = QString("program.subtitle LIKE '%{SUBTITLE}%' ");
    197256    else
    198257        rule.description = "program.subtitle LIKE '%Las Vegas%' ";
    199258    new MythUIButtonListItem(m_clauseList, rule.title,
     
    203262    {
    204263        rule.title = tr("Match this episode");
    205264        rule.subtitle.clear();
    206         rule.description = QString("program.programid = '%1' ")
    207             .arg(m_pginfo->GetProgramID());
     265        rule.description = QString("program.programid = '{PROGID}' ");
    208266    }
    209267    else if (!m_pginfo->GetSubtitle().isEmpty())
    210268    {
    211269        rule.title = tr("Match this episode");
    212270        rule.subtitle.clear();
    213         rule.description = QString("program.subtitle = '%1' \n"
    214                                    "AND program.description = '%2' ")
    215             .arg(m_pginfo->GetSubtitle().replace("\'","\'\'"))
    216             .arg(m_pginfo->GetDescription().replace("\'","\'\'"));
     271        rule.description = QString("program.subtitle = '{SUBTITLE}' \n"
     272                                   "AND program.description = '{DESCR}' ");
    217273    }
    218274    else
    219275    {
     
    259315
    260316    rule.title = tr("Anytime on a specific day of the week");
    261317    rule.subtitle.clear();
    262     rule.description = QString("DAYNAME(program.starttime) = '%1' ")
    263         .arg(m_pginfo->GetScheduledStartTime().toString("dddd"));
     318    rule.description = QString("DAYNAME(program.starttime) = '{DAYNAME}' ");
    264319    new MythUIButtonListItem(m_clauseList, rule.title,
    265320                             qVariantFromValue(rule));
    266321
     
    293348    rule.title = tr("Only on a specific station");
    294349    rule.subtitle.clear();
    295350    if (!m_pginfo->GetChannelSchedulingID().isEmpty())
    296         rule.description = QString("channel.callsign = '%1' ")
    297             .arg(m_pginfo->GetChannelSchedulingID());
     351        rule.description = QString("channel.callsign = '{SCHEDID}' ");
    298352    else
    299353        rule.description = "channel.callsign = 'ESPN' ";
    300354    new MythUIButtonListItem(m_clauseList, rule.title,
     
    366420    rule.title = tr("Limit by category");
    367421    rule.subtitle.clear();
    368422    if (!m_pginfo->GetCategory().isEmpty())
    369         rule.description = QString("program.category = '%1' ")
    370             .arg(m_pginfo->GetCategory());
     423        rule.description = QString("program.category = '{CATEGORY}' ");
    371424    else
    372425        rule.description = "program.category = 'Reality' ";
    373426    new MythUIButtonListItem(m_clauseList, rule.title,
     
    378431                    "program.chanid = programgenres.chanid AND "
    379432                    "program.starttime = programgenres.starttime ";
    380433    if (!m_pginfo->GetCategory().isEmpty())
    381         rule.description = QString("programgenres.genre = '%1' ")
    382             .arg(m_pginfo->GetCategory());
     434        rule.description = QString("programgenres.genre = '{CATEGORY}' ");
    383435    else
    384436        rule.description = "programgenres.genre = 'Reality' ";
    385437    new MythUIButtonListItem(m_clauseList, rule.title,
     
    545597
    546598    CustomRuleInfo rule = qVariantValue<CustomRuleInfo>(item->GetData());
    547599
    548     QString msg = rule.description;
     600    QString msg = (m_evaluate) ? evaluate(rule.description) : rule.description;
    549601    msg.replace('\n', ' ');
    550602    msg.replace(QRegExp(" [ ]*"), " ");
    551603    msg = QString("\"%1\"").arg(msg);
     
    570622
    571623    if (desc.contains(QRegExp("\\S")))
    572624        clause = "AND ";
    573     clause += rule.description;
     625    clause += (m_evaluate) ? evaluate(rule.description) : rule.description;
     626
    574627    m_descriptionEdit->SetText(desc.append(clause));
    575628
    576629    QString sub = m_subtitleEdit->GetText();
     
    586639
    587640    MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
    588641    ProgLister *pl = new ProgLister(mainStack, plSQLSearch,
    589                                     m_descriptionEdit->GetText(),
     642                                    evaluate(m_descriptionEdit->GetText()),
    590643                                    m_subtitleEdit->GetText());
    591644    if (pl->Create())
    592645    {
     
    610663    if (cur_recid > 0)
    611664    {
    612665        record->ModifyPowerSearchByID(cur_recid, m_titleEdit->GetText(),
    613                                       m_descriptionEdit->GetText(),
     666                                      evaluate(m_descriptionEdit->GetText()),
    614667                                      m_subtitleEdit->GetText());
    615668    }
    616669    else
    617670    {
    618671        record->LoadBySearch(kPowerSearch, m_titleEdit->GetText(),
    619                              m_descriptionEdit->GetText(),
     672                             evaluate(m_descriptionEdit->GetText()),
    620673                             m_subtitleEdit->GetText());
    621674    }
    622675
     
    700753    bool ret = false;
    701754    QString msg;
    702755
    703     QString desc = m_descriptionEdit->GetText();
     756    QString desc = evaluate(m_descriptionEdit->GetText());
    704757    QString from = m_subtitleEdit->GetText();
    705758    if (desc.contains(QRegExp("^\\s*AND\\s", Qt::CaseInsensitive)))
    706759    {
     
    867920            // else if (GetFocusWidget() == m_ruleList)
    868921            //     deleteRecordingRule();
    869922        }
    870         else
     923        else if (action == "EDIT")
     924        {
     925            // toggle evaluated/unevaluated sample view
     926            m_evaluate = 1-m_evaluate;
     927            MythUIButtonListItem* item = m_clauseList->GetItemCurrent();
     928            clauseChanged(item);
     929        } else
    871930            handled = false;
    872931    }
    873932
  • programs/mythfrontend/customedit.h

    old new  
    3939    void storeRule(bool is_search, bool is_new);
    4040    void deleteRule(void);
    4141
     42    QString evaluate(QString clause);
     43
    4244    ProgramInfo *m_pginfo;
    4345    QString m_baseTitle;
    4446
    4547    int m_maxex;
     48    int m_evaluate;
    4649 
    4750    QString m_seSuffix;
    4851    QString m_exSuffix;