Ticket #10734: customedit.patch

File customedit.patch, 14.9 KB (added by mmm1976@…, 13 years ago)
Line 
1*** mythtv-0.25/programs/mythfrontend/customedit.cpp    2012-05-17 17:10:23.000000000 +0200
2--- mythtv-0.25-mod/programs/mythfrontend/customedit.cpp        2012-05-17 20:23:41.000000000 +0200
3***************
4*** 35,40 ****
5--- 35,41 ----
6      m_baseTitle.remove(QRegExp(" \\(.*\\)$"));
7 
8      m_maxex = 0;
9+       m_evaluate = 1; // default: evaluate
10      m_seSuffix = QString(" (%1)").arg(tr("stored search"));
11      m_exSuffix = QString(" (%1)").arg(tr("stored example"));
12 
13***************
14*** 150,165 ****
15      textChanged();
16  }
17 
18! void CustomEdit::loadClauses()
19  {
20!     QString quoteTitle = m_baseTitle;
21!     quoteTitle.replace("\'","\'\'");
22 
23      CustomRuleInfo rule;
24 
25      rule.title = tr("Match an exact title");
26      if (!m_baseTitle.isEmpty())
27!         rule.description = QString("program.title = '%1' ").arg(quoteTitle);
28      else
29          rule.description = "program.title = 'Nova' ";
30      new MythUIButtonListItem(m_clauseList, rule.title,
31--- 151,231 ----
32      textChanged();
33  }
34 
35! QString CustomEdit::evaluate(QString clause)
36  {
37!     int s0=0;
38!     int e0=0;
39!
40!     while (1) {
41!         s0 = clause.indexOf (QRegExp("\\{[A-Z]+\\}"), e0);
42!
43!         if (s0 < 0)
44!             break;
45!
46!         e0 = clause.indexOf ("}", s0);
47!
48!         QString mid = clause.mid(s0 + 1, e0 - s0 - 1);
49!         QString repl = "";
50!
51!         if (!mid.compare("TITLE")) {
52!             repl = m_pginfo->GetTitle();
53!             repl.replace("\'","\'\'");
54!         } else if (!mid.compare("SUBTITLE")) {
55!             repl = m_pginfo->GetSubtitle();
56!             repl.replace("\'","\'\'");
57!         } else if (!mid.compare("DESCR")) {
58!             repl = m_pginfo->GetDescription();
59!             repl.replace("\'","\'\'");
60!         } else if (!mid.compare("SERIESID")) {
61!             repl = QString("%1").arg(m_pginfo->GetSeriesID());
62!         } else if (!mid.compare("PROGID")) {
63!             repl = m_pginfo->GetProgramID();
64!         } else if (!mid.compare("SEASON")) {
65!             repl = QString::number(m_pginfo->GetSeason());
66!         } else if (!mid.compare("EPISODE")) {
67!             repl = QString::number(m_pginfo->GetEpisode());
68!         } else if (!mid.compare("CATEGORY")) {
69!             repl = m_pginfo->GetCategory();
70!         } else if (!mid.compare("CHANID")) {
71!             repl = QString("%1").arg(m_pginfo->GetChanID());
72!         } else if (!mid.compare("CHANNUM")) {
73!             repl = m_pginfo->GetChanNum();
74!         } else if (!mid.compare("SCHEDID")) {
75!             repl = m_pginfo->GetChannelSchedulingID();
76!         } else if (!mid.compare("CHANNAME")) {
77!             repl = m_pginfo->GetChannelName();
78!         } else if (!mid.compare("DAYNAME")) {
79!             repl = m_pginfo->GetScheduledStartTime().toString("dddd");
80!         } else if (!mid.compare("STARTDATE")) {
81!             repl = m_pginfo->GetScheduledStartTime().toString("yyyy-mm-dd hh:mm:ss");
82!         } else if (!mid.compare("ENDDATE")) {
83!             repl = m_pginfo->GetScheduledEndTime().toString("yyyy-mm-dd hh:mm:ss");
84!         } else if (!mid.compare("STARTTIME")) {
85!             repl = m_pginfo->GetScheduledStartTime().toString("hh:mm");
86!         } else if (!mid.compare("ENDTIME")) {
87!             repl = m_pginfo->GetScheduledEndTime().toString("hh:mm");
88!         } else if (!mid.compare("STARTSEC")) {
89!             QDateTime date = m_pginfo->GetScheduledStartTime();
90!             QDateTime midnight = QDateTime(date.date());
91!             repl = QString("%1").arg(midnight.secsTo(date));
92!         } else if (!mid.compare("ENDSEC")) {
93!             QDateTime date = m_pginfo->GetScheduledEndTime();
94!             QDateTime midnight = QDateTime(date.date());
95!             repl = QString("%1").arg(midnight.secsTo(date));
96!         }
97!         // unknown tags are simply removed
98!         clause.replace(s0, e0 - s0 + 1, repl);
99!     }
100!     return clause;
101! }
102 
103+ void CustomEdit::loadClauses()
104+ {
105      CustomRuleInfo rule;
106 
107      rule.title = tr("Match an exact title");
108      if (!m_baseTitle.isEmpty())
109!         rule.description = QString("program.title = '{TITLE}' ");
110      else
111          rule.description = "program.title = 'Nova' ";
112      new MythUIButtonListItem(m_clauseList, rule.title,
113***************
114*** 169,176 ****
115      {
116          rule.title = tr("Match this series");
117          rule.subtitle.clear();
118!         rule.description = QString("program.seriesid = '%1' ")
119!             .arg(m_pginfo->GetSeriesID());
120          new MythUIButtonListItem(m_clauseList, rule.title,
121                                   qVariantFromValue(rule));
122      }
123--- 235,241 ----
124      {
125          rule.title = tr("Match this series");
126          rule.subtitle.clear();
127!         rule.description = QString("program.seriesid = '{SERIESID}' ");
128          new MythUIButtonListItem(m_clauseList, rule.title,
129                                   qVariantFromValue(rule));
130      }
131***************
132*** 178,185 ****
133      rule.title = tr("Match words in the title");
134      rule.subtitle.clear();
135      if (!m_pginfo->GetTitle().isEmpty())
136!         rule.description = QString("program.title LIKE '%%1%' ")
137!                                    .arg(quoteTitle);
138      else
139          rule.description = "program.title LIKE 'CSI: %' ";
140      new MythUIButtonListItem(m_clauseList, rule.title,
141--- 243,249 ----
142      rule.title = tr("Match words in the title");
143      rule.subtitle.clear();
144      if (!m_pginfo->GetTitle().isEmpty())
145!         rule.description = QString("program.title LIKE '%{TITLE}%' ");
146      else
147          rule.description = "program.title LIKE 'CSI: %' ";
148      new MythUIButtonListItem(m_clauseList, rule.title,
149***************
150*** 188,199 ****
151      rule.title = tr("Match words in the subtitle");
152      rule.subtitle.clear();
153      if (!m_pginfo->GetSubtitle().isEmpty())
154!     {
155!         QString subt = m_pginfo->GetSubtitle();
156!         subt.replace("\'","\'\'");
157!         rule.description = QString("program.subtitle LIKE '%%1%' ")
158!                                    .arg(subt);
159!     }
160      else
161          rule.description = "program.subtitle LIKE '%Las Vegas%' ";
162      new MythUIButtonListItem(m_clauseList, rule.title,
163--- 252,258 ----
164      rule.title = tr("Match words in the subtitle");
165      rule.subtitle.clear();
166      if (!m_pginfo->GetSubtitle().isEmpty())
167!         rule.description = QString("program.subtitle LIKE '%{SUBTITLE}%' ");
168      else
169          rule.description = "program.subtitle LIKE '%Las Vegas%' ";
170      new MythUIButtonListItem(m_clauseList, rule.title,
171***************
172*** 203,219 ****
173      {
174          rule.title = tr("Match this episode");
175          rule.subtitle.clear();
176!         rule.description = QString("program.programid = '%1' ")
177!             .arg(m_pginfo->GetProgramID());
178      }
179      else if (!m_pginfo->GetSubtitle().isEmpty())
180      {
181          rule.title = tr("Match this episode");
182          rule.subtitle.clear();
183!         rule.description = QString("program.subtitle = '%1' \n"
184!                                    "AND program.description = '%2' ")
185!             .arg(m_pginfo->GetSubtitle().replace("\'","\'\'"))
186!             .arg(m_pginfo->GetDescription().replace("\'","\'\'"));
187      }
188      else
189      {
190--- 262,275 ----
191      {
192          rule.title = tr("Match this episode");
193          rule.subtitle.clear();
194!         rule.description = QString("program.programid = '{PROGID}' ");
195      }
196      else if (!m_pginfo->GetSubtitle().isEmpty())
197      {
198          rule.title = tr("Match this episode");
199          rule.subtitle.clear();
200!         rule.description = QString("program.subtitle = '{SUBTITLE}' \n"
201!                                    "AND program.description = '{DESCR}' ");
202      }
203      else
204      {
205***************
206*** 259,266 ****
207 
208      rule.title = tr("Anytime on a specific day of the week");
209      rule.subtitle.clear();
210!     rule.description = QString("DAYNAME(program.starttime) = '%1' ")
211!         .arg(m_pginfo->GetScheduledStartTime().toString("dddd"));
212      new MythUIButtonListItem(m_clauseList, rule.title,
213                               qVariantFromValue(rule));
214 
215--- 315,321 ----
216 
217      rule.title = tr("Anytime on a specific day of the week");
218      rule.subtitle.clear();
219!     rule.description = QString("DAYNAME(program.starttime) = '{DAYNAME}' ");
220      new MythUIButtonListItem(m_clauseList, rule.title,
221                               qVariantFromValue(rule));
222 
223***************
224*** 293,300 ****
225      rule.title = tr("Only on a specific station");
226      rule.subtitle.clear();
227      if (!m_pginfo->GetChannelSchedulingID().isEmpty())
228!         rule.description = QString("channel.callsign = '%1' ")
229!             .arg(m_pginfo->GetChannelSchedulingID());
230      else
231          rule.description = "channel.callsign = 'ESPN' ";
232      new MythUIButtonListItem(m_clauseList, rule.title,
233--- 348,354 ----
234      rule.title = tr("Only on a specific station");
235      rule.subtitle.clear();
236      if (!m_pginfo->GetChannelSchedulingID().isEmpty())
237!         rule.description = QString("channel.callsign = '{SCHEDID}' ");
238      else
239          rule.description = "channel.callsign = 'ESPN' ";
240      new MythUIButtonListItem(m_clauseList, rule.title,
241***************
242*** 366,373 ****
243      rule.title = tr("Limit by category");
244      rule.subtitle.clear();
245      if (!m_pginfo->GetCategory().isEmpty())
246!         rule.description = QString("program.category = '%1' ")
247!             .arg(m_pginfo->GetCategory());
248      else
249          rule.description = "program.category = 'Reality' ";
250      new MythUIButtonListItem(m_clauseList, rule.title,
251--- 420,426 ----
252      rule.title = tr("Limit by category");
253      rule.subtitle.clear();
254      if (!m_pginfo->GetCategory().isEmpty())
255!         rule.description = QString("program.category = '{CATEGORY}' ");
256      else
257          rule.description = "program.category = 'Reality' ";
258      new MythUIButtonListItem(m_clauseList, rule.title,
259***************
260*** 378,385 ****
261                      "program.chanid = programgenres.chanid AND "
262                      "program.starttime = programgenres.starttime ";
263      if (!m_pginfo->GetCategory().isEmpty())
264!         rule.description = QString("programgenres.genre = '%1' ")
265!             .arg(m_pginfo->GetCategory());
266      else
267          rule.description = "programgenres.genre = 'Reality' ";
268      new MythUIButtonListItem(m_clauseList, rule.title,
269--- 431,437 ----
270                      "program.chanid = programgenres.chanid AND "
271                      "program.starttime = programgenres.starttime ";
272      if (!m_pginfo->GetCategory().isEmpty())
273!         rule.description = QString("programgenres.genre = '{CATEGORY}' ");
274      else
275          rule.description = "programgenres.genre = 'Reality' ";
276      new MythUIButtonListItem(m_clauseList, rule.title,
277***************
278*** 545,551 ****
279 
280      CustomRuleInfo rule = qVariantValue<CustomRuleInfo>(item->GetData());
281 
282!     QString msg = rule.description;
283      msg.replace('\n', ' ');
284      msg.replace(QRegExp(" [ ]*"), " ");
285      msg = QString("\"%1\"").arg(msg);
286--- 597,603 ----
287 
288      CustomRuleInfo rule = qVariantValue<CustomRuleInfo>(item->GetData());
289 
290!     QString msg = (m_evaluate) ? evaluate(rule.description) : rule.description;
291      msg.replace('\n', ' ');
292      msg.replace(QRegExp(" [ ]*"), " ");
293      msg = QString("\"%1\"").arg(msg);
294***************
295*** 570,576 ****
296 
297      if (desc.contains(QRegExp("\\S")))
298          clause = "AND ";
299!     clause += rule.description;
300      m_descriptionEdit->SetText(desc.append(clause));
301 
302      QString sub = m_subtitleEdit->GetText();
303--- 622,629 ----
304 
305      if (desc.contains(QRegExp("\\S")))
306          clause = "AND ";
307!     clause += (m_evaluate) ? evaluate(rule.description) : rule.description;
308!
309      m_descriptionEdit->SetText(desc.append(clause));
310 
311      QString sub = m_subtitleEdit->GetText();
312***************
313*** 586,592 ****
314 
315      MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
316      ProgLister *pl = new ProgLister(mainStack, plSQLSearch,
317!                                     m_descriptionEdit->GetText(),
318                                      m_subtitleEdit->GetText());
319      if (pl->Create())
320      {
321--- 639,645 ----
322 
323      MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
324      ProgLister *pl = new ProgLister(mainStack, plSQLSearch,
325!                                     evaluate(m_descriptionEdit->GetText()),
326                                      m_subtitleEdit->GetText());
327      if (pl->Create())
328      {
329***************
330*** 610,622 ****
331      if (cur_recid > 0)
332      {
333          record->ModifyPowerSearchByID(cur_recid, m_titleEdit->GetText(),
334!                                       m_descriptionEdit->GetText(),
335                                        m_subtitleEdit->GetText());
336      }
337      else
338      {
339          record->LoadBySearch(kPowerSearch, m_titleEdit->GetText(),
340!                              m_descriptionEdit->GetText(),
341                               m_subtitleEdit->GetText());
342      }
343 
344--- 663,675 ----
345      if (cur_recid > 0)
346      {
347          record->ModifyPowerSearchByID(cur_recid, m_titleEdit->GetText(),
348!                                       evaluate(m_descriptionEdit->GetText()),
349                                        m_subtitleEdit->GetText());
350      }
351      else
352      {
353          record->LoadBySearch(kPowerSearch, m_titleEdit->GetText(),
354!                              evaluate(m_descriptionEdit->GetText()),
355                               m_subtitleEdit->GetText());
356      }
357 
358***************
359*** 700,706 ****
360      bool ret = false;
361      QString msg;
362 
363!     QString desc = m_descriptionEdit->GetText();
364      QString from = m_subtitleEdit->GetText();
365      if (desc.contains(QRegExp("^\\s*AND\\s", Qt::CaseInsensitive)))
366      {
367--- 753,759 ----
368      bool ret = false;
369      QString msg;
370 
371!     QString desc = evaluate(m_descriptionEdit->GetText());
372      QString from = m_subtitleEdit->GetText();
373      if (desc.contains(QRegExp("^\\s*AND\\s", Qt::CaseInsensitive)))
374      {
375***************
376*** 867,873 ****
377              // else if (GetFocusWidget() == m_ruleList)
378              //     deleteRecordingRule();
379          }
380!         else
381              handled = false;
382      }
383 
384--- 920,932 ----
385              // else if (GetFocusWidget() == m_ruleList)
386              //     deleteRecordingRule();
387          }
388!         else if (action == "EDIT")
389!         {
390!             // toggle evaluated/unevaluated sample view
391!             m_evaluate = 1-m_evaluate;
392!             MythUIButtonListItem* item = m_clauseList->GetItemCurrent();
393!             clauseChanged(item);
394!         } else
395              handled = false;
396      }
397 
398*** mythtv-0.25/programs/mythfrontend/customedit.h      2012-05-17 17:15:49.000000000 +0200
399--- mythtv-0.25-mod/programs/mythfrontend/customedit.h  2012-05-17 17:15:27.000000000 +0200
400***************
401*** 39,48 ****
402--- 39,51 ----
403      void storeRule(bool is_search, bool is_new);
404      void deleteRule(void);
405 
406+     QString evaluate(QString clause);
407+
408      ProgramInfo *m_pginfo;
409      QString m_baseTitle;
410 
411      int m_maxex;
412+     int m_evaluate;
413   
414      QString m_seSuffix;
415      QString m_exSuffix;