MythTV  master
videofilter.cpp
Go to the documentation of this file.
1 // C++
2 #include <set>
3 
4 // MythTV
6 #include "libmythbase/mythdate.h"
13 #include "libmythui/mythuibutton.h"
15 #include "libmythui/mythuitext.h"
17 
18 // MythFrontend
19 #include "videofilter.h"
20 #include "videolist.h"
21 
22 const QRegularExpression VideoFilterSettings::kReSeason {
23  "(\\d+)x(\\d*)", QRegularExpression::CaseInsensitiveOption };
24 const QRegularExpression VideoFilterSettings::kReDate {
25  "-(\\d+)([dwmy])", QRegularExpression::CaseInsensitiveOption };
26 
28  const QString& _prefix)
29 {
30  if (_prefix.isEmpty())
31  m_prefix = "VideoDefault";
32  else
33  m_prefix = _prefix + "Default";
34 
35  // do nothing yet
36  if (loaddefaultsettings)
37  {
38  m_category = gCoreContext->GetNumSetting(QString("%1Category").arg(m_prefix),
40  m_genre = gCoreContext->GetNumSetting(QString("%1Genre").arg(m_prefix),
42  m_country = gCoreContext->GetNumSetting(QString("%1Country").arg(m_prefix),
44  m_cast = gCoreContext->GetNumSetting(QString("%1Cast").arg(m_prefix),
46  m_year = gCoreContext->GetNumSetting(QString("%1Year").arg(m_prefix),
48  m_runtime = gCoreContext->GetNumSetting(QString("%1Runtime").arg(m_prefix),
50  m_userRating =
51  gCoreContext->GetNumSetting(QString("%1Userrating").arg(m_prefix),
53  m_browse = gCoreContext->GetNumSetting(QString("%1Browse").arg(m_prefix),
55  m_watched = gCoreContext->GetNumSetting(QString("%1Watched").arg(m_prefix),
57  m_inetRef = gCoreContext->GetNumSetting(QString("%1InetRef").arg(m_prefix),
59  m_coverFile = gCoreContext->GetNumSetting(QString("%1CoverFile")
61  m_orderBy = (ordering)gCoreContext->GetNumSetting(QString("%1Orderby")
62  .arg(m_prefix),
64  }
65 }
66 
68 {
69  *this = rhs;
70 }
71 
74 {
75  if (this == &rhs)
76  return *this;
77 
78  m_prefix = rhs.m_prefix;
79 
80  if (m_category != rhs.m_category)
81  {
83  m_category = rhs.m_category;
84  }
85 
86  if (m_genre != rhs.m_genre)
87  {
89  m_genre = rhs.m_genre;
90  }
91 
92  if (m_country != rhs.m_country)
93  {
95  m_country = rhs.m_country;
96  }
97 
98  if (m_cast != rhs.m_cast)
99  {
101  m_cast = rhs.m_cast;
102  }
103 
104  if (m_year != rhs.m_year)
105  {
107  m_year = rhs.m_year;
108  }
109 
110  if (m_runtime != rhs.m_runtime)
111  {
113  m_runtime = rhs.m_runtime;
114  }
115 
116  if (m_userRating != rhs.m_userRating)
117  {
120  }
121 
122  if (m_browse != rhs.m_browse)
123  {
125  m_browse = rhs.m_browse;
126  }
127 
128  if (m_watched != rhs.m_watched)
129  {
131  m_watched = rhs.m_watched;
132  }
133 
134  if (m_inetRef != rhs.m_inetRef)
135  {
137  m_inetRef = rhs.m_inetRef;
138  }
139 
140  if (m_coverFile != rhs.m_coverFile)
141  {
143  m_coverFile = rhs.m_coverFile;
144  }
145 
146  if (m_orderBy != rhs.m_orderBy)
147  {
149  m_orderBy = rhs.m_orderBy;
150  }
151 
152  if (m_parentalLevel != rhs.m_parentalLevel)
153  {
156  }
157 
158  if (m_textFilter != rhs.m_textFilter)
159  {
162  }
163  if (m_season != rhs.m_season || m_episode != rhs.m_episode)
164  {
165  m_season = rhs.m_season;
166  m_episode = rhs.m_episode;
168  }
169  if (m_insertDate != rhs.m_insertDate)
170  {
173  }
174 
175  return *this;
176 }
177 
179 {
180  gCoreContext->SaveSetting(QString("%1Category").arg(m_prefix), m_category);
181  gCoreContext->SaveSetting(QString("%1Genre").arg(m_prefix), m_genre);
182  gCoreContext->SaveSetting(QString("%1Cast").arg(m_prefix), m_cast);
183  gCoreContext->SaveSetting(QString("%1Country").arg(m_prefix), m_country);
184  gCoreContext->SaveSetting(QString("%1Year").arg(m_prefix), m_year);
185  gCoreContext->SaveSetting(QString("%1Runtime").arg(m_prefix), m_runtime);
186  gCoreContext->SaveSetting(QString("%1Userrating").arg(m_prefix), m_userRating);
187  gCoreContext->SaveSetting(QString("%1Browse").arg(m_prefix), m_browse);
188  gCoreContext->SaveSetting(QString("%1Watched").arg(m_prefix), m_watched);
189  gCoreContext->SaveSetting(QString("%1InetRef").arg(m_prefix), m_inetRef);
190  gCoreContext->SaveSetting(QString("%1CoverFile").arg(m_prefix), m_coverFile);
191  gCoreContext->SaveSetting(QString("%1Orderby").arg(m_prefix), m_orderBy);
192  gCoreContext->SaveSetting(QString("%1Filter").arg(m_prefix), m_textFilter);
193 }
194 
196 {
197  bool matches = true;
198 
199  //textfilter
200  if (!m_textFilter.isEmpty())
201  {
202  matches = false;
203  matches = (matches ||
204  mdata.GetTitle().contains(m_textFilter, Qt::CaseInsensitive));
205  matches = (matches ||
206  mdata.GetSubtitle().contains(m_textFilter, Qt::CaseInsensitive));
207  matches = (matches ||
208  mdata.GetPlot().contains(m_textFilter, Qt::CaseInsensitive));
209  }
210  //search for season with optionally episode nr.
211  if (matches && (m_season != -1))
212  {
213  matches = (m_season == mdata.GetSeason());
214  matches = (matches && (m_episode == -1 || m_episode == mdata.GetEpisode()));
215  }
216  if (matches && m_insertDate.isValid())
217  {
218  matches = (mdata.GetInsertdate().isValid() &&
219  mdata.GetInsertdate() >= m_insertDate);
220  }
221  if (matches && (m_genre != kGenreFilterAll))
222  {
223  const VideoMetadata::genre_list &gl = mdata.GetGenres();
224  auto samegenre = [this](const auto & g) {return g.first == m_genre; };
225  matches = std::any_of(gl.cbegin(), gl.cend(), samegenre);
226  }
227 
228  if (matches && m_country != kCountryFilterAll)
229  {
230  const VideoMetadata::country_list &cl = mdata.GetCountries();
231  auto samecountry = [this](const auto & c) {return c.first == m_country; };
232  matches = std::any_of(cl.cbegin(), cl.cend(), samecountry);
233  }
234 
235  if (matches && m_cast != kCastFilterAll)
236  {
237  const VideoMetadata::cast_list &cl = mdata.GetCast();
238 
239  if ((m_cast == kCastFilterUnknown) && (cl.empty()))
240  {
241  matches = true;
242  }
243  else
244  {
245  auto samecast = [this](const auto & c){return c.first == m_cast; };
246  matches = std::any_of(cl.cbegin(), cl.cend(), samecast);
247  }
248  }
249 
250  if (matches && m_category != kCategoryFilterAll)
251  {
252  matches = (m_category == mdata.GetCategoryID());
253  }
254 
255  if (matches && m_year != kYearFilterAll)
256  {
257  if (m_year == kYearFilterUnknown)
258  {
259  matches = ((mdata.GetYear() == 0) ||
260  (mdata.GetYear() == VIDEO_YEAR_DEFAULT));
261  }
262  else
263  {
264  matches = (m_year == mdata.GetYear());
265  }
266  }
267 
268  if (matches && m_runtime != kRuntimeFilterAll)
269  {
271  {
272  matches = (mdata.GetLength() == 0min);
273  }
274  else
275  {
276  matches = (m_runtime == (mdata.GetLength() / 30min));
277  }
278  }
279 
280  if (matches && m_userRating != kUserRatingFilterAll)
281  {
282  matches = (mdata.GetUserRating() >= m_userRating);
283  }
284 
285  if (matches && m_browse != kBrowseFilterAll)
286  {
287  matches = (static_cast<int>(mdata.GetBrowse()) == m_browse);
288  }
289 
290  if (matches && m_watched != kWatchedFilterAll)
291  {
292  matches = (static_cast<int>(mdata.GetWatched()) == m_watched);
293  }
294 
295  if (matches && m_inetRef != kInetRefFilterAll)
296  {
297  matches = (mdata.GetInetRef() == VIDEO_INETREF_DEFAULT);
298  }
299 
300  if (matches && m_coverFile != kCoverFileFilterAll)
301  {
302  matches = (IsDefaultCoverFile(mdata.GetCoverFile()));
303  }
304 
305  if (matches && m_parentalLevel)
306  {
307  matches = ((mdata.GetShowLevel() != ParentalLevel::plNone) &&
308  (mdata.GetShowLevel() <= m_parentalLevel));
309  }
310 
311  return matches;
312 }
313 
316  const VideoMetadata &rhs) const
317 {
318  switch (m_orderBy)
319  {
320  case kOrderByTitle: return lhs.sortBefore(rhs);
321  case kOrderByYearDescending: return lhs.GetYear() > rhs.GetYear();
322  case kOrderByUserRatingDescending: return lhs.GetUserRating() > rhs.GetUserRating();
323  case kOrderByDateAddedDescending: return lhs.GetInsertdate() > rhs.GetInsertdate();
324  case kOrderByLength: return lhs.GetLength() < rhs.GetLength();
325  case kOrderByID: return lhs.GetID() < rhs.GetID();
326  case kOrderByFilename:
328  case kOrderBySeasonEp:
329  {
330  if ((lhs.GetSeason() == rhs.GetSeason())
331  && (lhs.GetEpisode() == rhs.GetEpisode())
332  && (lhs.GetSeason() == 0)
333  && (rhs.GetSeason() == 0)
334  && (lhs.GetEpisode() == 0)
335  && (rhs.GetEpisode() == 0))
336  {
337  return lhs.sortBefore(rhs);
338  }
339  if ((lhs.GetSeason() == rhs.GetSeason())
340  && (lhs.GetTitle() == rhs.GetTitle()))
341  {
342  return (lhs.GetEpisode() < rhs.GetEpisode());
343  }
344  return (lhs.GetSeason() < rhs.GetSeason());
345  }
346  default:
347  {
348  LOG(VB_GENERAL, LOG_ERR, QString("Error: unknown sort type %1")
349  .arg(m_orderBy));
350  return false;
351  }
352  }
353 }
354 
355 void VideoFilterSettings::setTextFilter(const QString& val)
356 {
358  auto match = kReSeason.match(val);
359  if (match.hasMatch())
360  {
361  m_season = match.capturedView(1).isEmpty()
362  ? -1 : match.capturedView(1).toInt();
363  m_episode = match.capturedView(2).isEmpty()
364  ? -1 : match.capturedView(2).toInt();
365  //clear \dX\d from string for string-search in plot/title/subtitle
366  m_textFilter = val;
367  m_textFilter.remove(match.capturedStart(), match.capturedLength());
368  m_textFilter = m_textFilter.simplified ();
369  }
370  else
371  {
372  m_textFilter = val;
373  m_season = -1;
374  m_episode = -1;
375  }
376  match = kReDate.match(m_textFilter);
377  if (match.hasMatch())
378  {
379  int64_t modnr = match.capturedView(1).toInt();
380  QDate testdate = MythDate::current().date();
381  switch(match.capturedView(2).at(0).toLatin1())
382  {
383  case 'd': testdate = testdate.addDays(-modnr);break;
384  case 'w': testdate = testdate.addDays(-modnr * 7);break;
385  case 'm': testdate = testdate.addMonths(-modnr);break;
386  case 'y': testdate = testdate.addYears(-modnr);break;
387  }
388  m_insertDate = testdate;
389  m_textFilter.remove(match.capturedStart(), match.capturedLength());
390  m_textFilter = m_textFilter.simplified ();
391  }
392  else
393  {
394  //reset testdate
395  m_insertDate = QDate();
396  }
397 }
398 
400 // VideoFilterDialog
403  VideoList *video_list) : MythScreenType(lparent, lname),
404  m_videoList(*video_list),
405  m_fsp(new BasicFilterSettingsProxy<VideoList>(*video_list))
406 {
408 }
409 
411 {
412  delete m_fsp;
413 }
414 
416 {
417  if (!LoadWindowFromXML("video-ui.xml", "filter", this))
418  return false;
419 
420  bool err = false;
421  UIUtilE::Assign(this, m_textFilter, "textfilter_input", &err);
422  UIUtilE::Assign(this, m_yearList, "year_select", &err);
423  UIUtilE::Assign(this, m_userRatingList, "userrating_select", &err);
424  UIUtilE::Assign(this, m_categoryList, "category_select", &err);
425  UIUtilE::Assign(this, m_countryList, "country_select", &err);
426  UIUtilE::Assign(this, m_genreList, "genre_select", &err);
427  UIUtilE::Assign(this, m_castList, "cast_select", &err);
428  UIUtilE::Assign(this, m_runtimeList, "runtime_select", &err);
429  UIUtilE::Assign(this, m_browseList, "browse_select", &err);
430  UIUtilE::Assign(this, m_watchedList, "watched_select", &err);
431  UIUtilE::Assign(this, m_inetRefList, "inetref_select", &err);
432  UIUtilE::Assign(this, m_coverFileList, "coverfile_select", &err);
433  UIUtilE::Assign(this, m_orderByList, "orderby_select", &err);
434 
435  UIUtilE::Assign(this, m_doneButton, "done_button", &err);
436  UIUtilE::Assign(this, m_saveButton, "save_button", &err);
437 
438  UIUtilE::Assign(this, m_numVideosText, "numvideos_text", &err);
439 
440  if (err)
441  {
442  LOG(VB_GENERAL, LOG_ERR, "Cannot load screen 'filter'");
443  return false;
444  }
445 
446  BuildFocusList();
447 
448  fillWidgets();
449  update_numvideo();
450 
477 
480 
481  return true;
482 }
483 
485 {
486  int video_count = m_videoList.TryFilter(m_settings);
487 
488  if (video_count > 0)
489  {
490  m_numVideosText->SetText(tr("Result of this filter : %n video(s)", "",
491  video_count));
492  }
493  else
494  {
495  m_numVideosText->SetText(tr("Result of this filter : No Videos"));
496  }
497 }
498 
500 {
501  bool have_unknown_year = false;
502  bool have_unknown_runtime = false;
503 
504  using int_list = std::set<int>;
505  int_list years;
506  int_list runtimes;
507  int_list user_ratings;
508 
511  for (const auto & md : mdl)
512  {
513  int year = md->GetYear();
514  if ((year == 0) || (year == VIDEO_YEAR_DEFAULT))
515  have_unknown_year = true;
516  else
517  years.insert(year);
518 
519  std::chrono::minutes runtime = md->GetLength();
520  if (runtime == 0min)
521  have_unknown_runtime = true;
522  else
523  runtimes.insert(runtime.count() / 30);
524 
525  user_ratings.insert(static_cast<int>(md->GetUserRating()));
526  }
527 
528  // Category
529  new MythUIButtonListItem(m_categoryList, tr("All", "Category"),
531 
532  const VideoCategory::entry_list &vcl =
534  for (const auto & vc : vcl)
535  new MythUIButtonListItem(m_categoryList, vc.second, vc.first);
536 
540 
541  // Genre
542  new MythUIButtonListItem(m_genreList, tr("All", "Genre"), kGenreFilterAll);
543 
545  for (const auto & g : gl)
546  new MythUIButtonListItem(m_genreList, g.second, g.first);
547 
550 
551  // Cast
552  new MythUIButtonListItem(m_castList, tr("All", "Cast"), kCastFilterAll);
553 
555  for (const auto & c : cl)
556  new MythUIButtonListItem(m_castList, c.second, c.first);
557 
560 
561  // Country
562  new MythUIButtonListItem(m_countryList, tr("All", "Country"), kCountryFilterAll);
563 
565  for (const auto & cn : cnl)
566  new MythUIButtonListItem(m_countryList, cn.second, cn.first);
567 
571 
572  // Year
573  new MythUIButtonListItem(m_yearList, tr("All", "Year"), kYearFilterAll);
574 
575  for (auto p = years.crbegin(); p != years.crend(); ++p)
576  {
577  new MythUIButtonListItem(m_yearList, QString::number(*p), *p);
578  }
579 
580  if (have_unknown_year)
583 
585 
586  // Runtime
587  new MythUIButtonListItem(m_runtimeList, tr("All", "Runtime"), kRuntimeFilterAll);
588 
589  if (have_unknown_runtime)
592 
593  for (int runtime : runtimes)
594  {
595  QString s = QString("%1 %2 ~ %3 %4").arg(runtime * 30).arg(tr("minutes"))
596  .arg((runtime + 1) * 30).arg(tr("minutes"));
597  new MythUIButtonListItem(m_runtimeList, s, runtime);
598  }
599 
601 
602  // User Rating
603  new MythUIButtonListItem(m_userRatingList, tr("All", "User rating"),
605 
606  for (auto p = user_ratings.crbegin(); p != user_ratings.crend(); ++p)
607  {
609  QString(">= %1").arg(QString::number(*p)),
610  *p);
611  }
612 
614 
615  // Browsable
616  new MythUIButtonListItem(m_browseList, tr("All", "Browsable"),
619  QCoreApplication::translate("(Common)", "Yes"), QVariant::fromValue(1));
621  QCoreApplication::translate("(Common)", "No"), QVariant::fromValue(0));
623 
624  // Watched
625  new MythUIButtonListItem(m_watchedList, tr("All", "Watched"),
628  QCoreApplication::translate("(Common)", "Yes"), QVariant::fromValue(1));
630  QCoreApplication::translate("(Common)", "No"), QVariant::fromValue(0));
632 
633  // Inet Reference
634  new MythUIButtonListItem(m_inetRefList, tr("All", "Inet reference"),
636  new MythUIButtonListItem(m_inetRefList, tr("Unknown", "Inet reference"),
639 
640  // Coverfile
641  new MythUIButtonListItem(m_coverFileList, tr("All", "Cover file"),
643  new MythUIButtonListItem(m_coverFileList, tr("None", "Cover file"),
646 
647  // Order by
649  QCoreApplication::translate("(Common)", "Title"),
652  QCoreApplication::translate("(Common)", "Season/Episode"),
655  QCoreApplication::translate("(Common)", "Year"),
658  QCoreApplication::translate("(Common)", "User Rating"),
661  QCoreApplication::translate("(Common)", "Runtime"),
664  QCoreApplication::translate("(Common)", "Filename"),
666  new MythUIButtonListItem(m_orderByList, tr("Video ID"),
668  new MythUIButtonListItem(m_orderByList, tr("Date Added"),
671 
672  // Text Filter
674 }
675 
677 {
679  saveAndExit();
680 }
681 
683 {
685 
686  if (m_settings.getChangedState() > 0)
687  emit filterChanged();
688  Close();
689 }
690 
692 {
693  int new_year = item->GetData().toInt();
694  m_settings.SetYear(new_year);
695  update_numvideo();
696 }
697 
699 {
700  m_settings.SetUserRating(item->GetData().toInt());
701  update_numvideo();
702 }
703 
705 {
706  m_settings.SetCategory(item->GetData().toInt());
707  update_numvideo();
708 }
709 
711 {
712  m_settings.setCountry(item->GetData().toInt());
713  update_numvideo();
714 }
715 
717 {
718  m_settings.setGenre(item->GetData().toInt());
719  update_numvideo();
720 }
721 
723 {
724  m_settings.SetCast(item->GetData().toInt());
725  update_numvideo();
726 }
727 
729 {
730  m_settings.setRuntime(item->GetData().toInt());
731  update_numvideo();
732 }
733 
735 {
736  m_settings.SetBrowse(item->GetData().toInt());
737  update_numvideo();
738 }
739 
741 {
742  m_settings.SetWatched(item->GetData().toInt());
743  update_numvideo();
744 }
745 
747 {
748  m_settings.SetInetRef(item->GetData().toInt());
749  update_numvideo();
750 }
751 
753 {
754  m_settings.SetCoverFile(item->GetData().toInt());
755  update_numvideo();
756 }
757 
759 {
760  m_settings
762  update_numvideo();
763 }
764 
766 {
768  update_numvideo();
769 }
MythUIButton::Clicked
void Clicked()
VideoFilterDialog::SetWatched
void SetWatched(MythUIButtonListItem *item)
Definition: videofilter.cpp:740
kCountryFilterUnknown
@ kCountryFilterUnknown
Definition: videofilter.h:28
VideoFilterSettings::VideoFilterSettings
VideoFilterSettings(bool loaddefaultsettings=true, const QString &_prefix="")
Definition: videofilter.cpp:27
VIDEO_YEAR_UNKNOWN
const QString VIDEO_YEAR_UNKNOWN
Definition: globals.cpp:15
kRuntimeFilterAll
@ kRuntimeFilterAll
Definition: videofilter.h:47
kWatchedFilterAll
@ kWatchedFilterAll
Definition: videofilter.h:60
VideoMetadata
Definition: videometadata.h:24
VideoFilterSettings::m_parentalLevel
ParentalLevel::Level m_parentalLevel
Definition: videofilter.h:234
VideoFilterDialog::setTextFilter
void setTextFilter()
Definition: videofilter.cpp:765
VideoFilterSettings::m_prefix
QString m_prefix
Definition: videofilter.h:235
VideoFilterDialog::SetCategory
void SetCategory(MythUIButtonListItem *item)
Definition: videofilter.cpp:704
VideoFilterSettings::SetCast
void SetCast(int lcast)
Definition: videofilter.h:135
VideoFilterSettings::setGenre
void setGenre(int lgenre)
Definition: videofilter.h:128
MythUIButtonList::SetValueByData
void SetValueByData(const QVariant &data)
Definition: mythuibuttonlist.cpp:1566
VideoFilterDialog::m_genreList
MythUIButtonList * m_genreList
Definition: videofilter.h:317
mythuitext.h
VIDEO_RUNTIME_UNKNOWN
const QString VIDEO_RUNTIME_UNKNOWN
Definition: globals.cpp:17
kUserRatingFilterAll
@ kUserRatingFilterAll
Definition: videofilter.h:52
VideoMetadata::GetShowLevel
ParentalLevel::Level GetShowLevel() const
Definition: videometadata.cpp:1803
VideoFilterSettings::getInteRef
int getInteRef() const
Definition: videofilter.h:200
VideoFilterSettings::kReDate
static const QRegularExpression kReDate
Definition: videofilter.h:241
kYearFilterUnknown
@ kYearFilterUnknown
Definition: videofilter.h:43
VideoFilterDialog::setGenre
void setGenre(MythUIButtonListItem *item)
Definition: videofilter.cpp:716
VideoFilterSettings::ordering
ordering
Definition: videofilter.h:106
StringUtil::naturalSortCompare
bool naturalSortCompare(const QString &a, const QString &b, Qt::CaseSensitivity caseSensitivity=Qt::CaseSensitive)
naturalCompare as a std::sort compatible function (ignoring the third parameter, which is never used)...
Definition: stringutil.h:57
VideoFilterDialog::m_watchedList
MythUIButtonList * m_watchedList
Definition: videofilter.h:311
MythScreenType::Close
virtual void Close()
Definition: mythscreentype.cpp:384
kCountryFilterAll
@ kCountryFilterAll
Definition: videofilter.h:27
VideoFilterSettings::m_year
int m_year
Definition: videofilter.h:226
VideoFilterSettings::GetUserRating
int GetUserRating() const
Definition: videofilter.h:162
VideoFilterSettings::m_episode
int m_episode
Definition: videofilter.h:238
VideoFilterDialog::SetCast
void SetCast(MythUIButtonListItem *item)
Definition: videofilter.cpp:722
VideoFilterDialog::m_orderByList
MythUIButtonList * m_orderByList
Definition: videofilter.h:312
VideoFilterSettings::kFilterGenreChanged
@ kFilterGenreChanged
Definition: videofilter.h:81
VideoFilterSettings::m_runtime
int m_runtime
Definition: videofilter.h:227
VideoFilterSettings::getRuntime
int getRuntime() const
Definition: videofilter.h:155
VideoList::TryFilter
int TryFilter(const VideoFilterSettings &filter) const
Definition: videolist.cpp:498
VideoFilterSettings::getGenre
int getGenre() const
Definition: videofilter.h:127
VideoMetadata::GetInsertdate
QDate GetInsertdate() const
Definition: videometadata.cpp:1723
VideoFilterDialog::m_doneButton
MythUIButton * m_doneButton
Definition: videofilter.h:323
MythUIButtonList::itemSelected
void itemSelected(MythUIButtonListItem *item)
VideoFilterSettings::kOrderByLength
@ kOrderByLength
Definition: videofilter.h:113
VideoFilterSettings::kFilterRuntimeChanged
@ kFilterRuntimeChanged
Definition: videofilter.h:84
VideoFilterDialog::VideoFilterDialog
VideoFilterDialog(MythScreenStack *lparent, const QString &lname, VideoList *video_list)
Definition: videofilter.cpp:402
VideoFilterDialog::m_browseList
MythUIButtonList * m_browseList
Definition: videofilter.h:310
MythScreenStack
Definition: mythscreenstack.h:16
VideoMetadata::country_list
std::vector< country_entry > country_list
Definition: videometadata.h:33
VideoFilterDialog::m_saveButton
MythUIButton * m_saveButton
Definition: videofilter.h:322
VideoMetadata::GetSeason
int GetSeason() const
Definition: videometadata.cpp:1703
LOG
#define LOG(_MASK_, _LEVEL_, _QSTRING_)
Definition: mythlogging.h:39
VideoMetadata::genre_list
std::vector< genre_entry > genre_list
Definition: videometadata.h:32
MythScreenType
Screen in which all other widgets are contained and rendered.
Definition: mythscreentype.h:45
VideoMetadataListManager::getList
const metadata_list & getList() const
Definition: videometadatalistmanager.cpp:168
MythUITextEdit::GetText
QString GetText(void) const
Definition: mythuitextedit.h:50
VideoFilterSettings::kOrderByUserRatingDescending
@ kOrderByUserRatingDescending
Definition: videofilter.h:112
VideoMetadata::GetCategoryID
int GetCategoryID() const
Definition: videometadata.cpp:1938
VideoFilterSettings::setOrderby
void setOrderby(ordering lorderby)
Definition: videofilter.h:184
VideoFilterSettings::m_browse
int m_browse
Definition: videofilter.h:229
mythuibuttonlist.h
VideoFilterSettings::kOrderByFilename
@ kOrderByFilename
Definition: videofilter.h:114
VIDEO_CATEGORY_UNKNOWN
const QString VIDEO_CATEGORY_UNKNOWN
Definition: globals.cpp:7
MythDate::current
QDateTime current(bool stripped)
Returns current Date and Time in UTC.
Definition: mythdate.cpp:15
VideoMetadata::GetPlot
const QString & GetPlot() const
Definition: videometadata.cpp:1653
std::chrono::years
duration< CHRONO_TYPE, ratio< 31556952 > > years
Definition: mythchrono.h:28
VideoFilterSettings::kOrderByYearDescending
@ kOrderByYearDescending
Definition: videofilter.h:111
VideoFilterSettings::m_inetRef
int m_inetRef
Definition: videofilter.h:231
VideoFilterSettings::SetCoverFile
void SetCoverFile(int coverfile)
Definition: videofilter.h:208
VideoMetadata::GetSubtitle
const QString & GetSubtitle() const
Definition: videometadata.cpp:1558
VideoFilterSettings::getYear
int getYear() const
Definition: videofilter.h:148
VideoFilterSettings::saveAsDefault
void saveAsDefault()
Definition: videofilter.cpp:178
VideoFilterSettings::SetInetRef
void SetInetRef(int inetref)
Definition: videofilter.h:201
dbaccess.h
VideoFilterDialog::Create
bool Create() override
Definition: videofilter.cpp:415
VideoFilterDialog::m_textFilter
MythUITextEdit * m_textFilter
Definition: videofilter.h:325
videofilter.h
MythUIButtonListItem
Definition: mythuibuttonlist.h:41
VideoFilterDialog::SetYear
void SetYear(MythUIButtonListItem *item)
Definition: videofilter.cpp:691
MythUITextEdit::SetText
void SetText(const QString &text, bool moveCursor=true)
Definition: mythuitextedit.cpp:198
VideoFilterDialog::m_countryList
MythUIButtonList * m_countryList
Definition: videofilter.h:316
VideoFilterSettings::m_userRating
int m_userRating
Definition: videofilter.h:228
VideoFilterSettings::kFilterCoverFileChanged
@ kFilterCoverFileChanged
Definition: videofilter.h:88
VideoFilterDialog::fillWidgets
void fillWidgets()
Definition: videofilter.cpp:499
mythdate.h
VideoFilterDialog::m_runtimeList
MythUIButtonList * m_runtimeList
Definition: videofilter.h:319
VideoMetadata::GetInetRef
const QString & GetInetRef() const
Definition: videometadata.cpp:1603
VideoMetadata::GetCountries
const country_list & GetCountries() const
Definition: videometadata.cpp:1928
VideoFilterSettings::kReSeason
static const QRegularExpression kReSeason
Definition: videofilter.h:240
VideoFilterSettings::SetYear
void SetYear(int lyear)
Definition: videofilter.h:149
VideoGenre::getGenre
static VideoGenre & getGenre()
Definition: dbaccess.cpp:517
VideoFilterDialog::setRunTime
void setRunTime(MythUIButtonListItem *item)
Definition: videofilter.cpp:728
VideoFilterDialog::saveAsDefault
void saveAsDefault()
Definition: videofilter.cpp:676
mythlogging.h
videolist.h
VideoFilterDialog::SetUserRating
void SetUserRating(MythUIButtonListItem *item)
Definition: videofilter.cpp:698
VideoFilterSettings::getOrderby
ordering getOrderby() const
Definition: videofilter.h:183
VideoFilterSettings::m_genre
int m_genre
Definition: videofilter.h:223
VideoFilterSettings::kOrderByTitle
@ kOrderByTitle
Definition: videofilter.h:110
VideoFilterSettings::GetCoverFile
int GetCoverFile() const
Definition: videofilter.h:207
VideoFilterDialog::m_videoList
const VideoList & m_videoList
Definition: videofilter.h:327
VIDEO_COUNTRY_UNKNOWN
const QString VIDEO_COUNTRY_UNKNOWN
Definition: globals.cpp:13
hardwareprofile.config.p
p
Definition: config.py:33
VideoFilterDialog::m_inetRefList
MythUIButtonList * m_inetRefList
Definition: videofilter.h:320
globals.h
VideoFilterSettings::m_season
int m_season
Definition: videofilter.h:237
VideoFilterSettings::getTextFilter
QString getTextFilter() const
Definition: videofilter.h:190
VideoFilterSettings::kOrderByID
@ kOrderByID
Definition: videofilter.h:115
VideoFilterSettings::operator=
VideoFilterSettings & operator=(const VideoFilterSettings &rhs)
Definition: videofilter.cpp:73
VIDEO_CAST_UNKNOWN
const QString VIDEO_CAST_UNKNOWN
Definition: globals.cpp:19
MythScreenType::BuildFocusList
void BuildFocusList(void)
Definition: mythscreentype.cpp:204
VideoFilterSettings::m_category
int m_category
Definition: videofilter.h:222
VideoFilterSettings::kFilterBrowseChanged
@ kFilterBrowseChanged
Definition: videofilter.h:86
VideoFilterSettings::kFilterYearChanged
@ kFilterYearChanged
Definition: videofilter.h:83
VideoFilterSettings::m_orderBy
ordering m_orderBy
Definition: videofilter.h:233
stringutil.h
VideoFilterSettings::m_watched
int m_watched
Definition: videofilter.h:230
VideoFilterSettings::GetBrowse
int GetBrowse() const
Definition: videofilter.h:169
VideoFilterSettings::kFilterCountryChanged
@ kFilterCountryChanged
Definition: videofilter.h:82
VideoMetadata::GetYear
int GetYear() const
Definition: videometadata.cpp:1583
VideoFilterDialog::SetBrowse
void SetBrowse(MythUIButtonListItem *item)
Definition: videofilter.cpp:734
VideoCountry::getCountry
static VideoCountry & getCountry()
Definition: dbaccess.cpp:503
VideoMetadata::GetSortFilename
const QString & GetSortFilename() const
Definition: videometadata.cpp:1818
VideoFilterSettings::m_cast
int m_cast
Definition: videofilter.h:225
VIDEO_GENRE_UNKNOWN
const QString VIDEO_GENRE_UNKNOWN
Definition: globals.cpp:11
VideoFilterDialog::m_settings
VideoFilterSettings m_settings
Definition: videofilter.h:308
VideoFilterSettings::m_changedState
unsigned int m_changedState
Definition: videofilter.h:243
VideoFilterSettings::GetCategory
int GetCategory() const
Definition: videofilter.h:120
VideoMetadata::GetGenres
const genre_list & GetGenres() const
Definition: videometadata.cpp:1908
VideoFilterSettings::kFilterTextFilterChanged
@ kFilterTextFilterChanged
Definition: videofilter.h:92
VideoCategory::GetCategory
static VideoCategory & GetCategory()
Definition: dbaccess.cpp:489
kBrowseFilterAll
@ kBrowseFilterAll
Definition: videofilter.h:56
MythUIButtonListItem::GetData
QVariant GetData()
Definition: mythuibuttonlist.cpp:3715
VideoFilterSettings::kFilterParentalLevelChanged
@ kFilterParentalLevelChanged
Definition: videofilter.h:89
FilterSettingsProxy::setSettings
virtual void setSettings(const VideoFilterSettings &settings)=0
VideoFilterSettings::GetWatched
int GetWatched() const
Definition: videofilter.h:176
VideoMetadata::GetEpisode
int GetEpisode() const
Definition: videometadata.cpp:1713
gCoreContext
MythCoreContext * gCoreContext
This global variable contains the MythCoreContext instance for the app.
Definition: mythcorecontext.cpp:57
VideoFilterDialog::saveAndExit
void saveAndExit()
Definition: videofilter.cpp:682
VideoFilterSettings::m_coverFile
int m_coverFile
Definition: videofilter.h:232
VideoFilterSettings::kOrderBySeasonEp
@ kOrderBySeasonEp
Definition: videofilter.h:116
kGenreFilterAll
@ kGenreFilterAll
Definition: videofilter.h:22
kCastFilterAll
@ kCastFilterAll
Definition: videofilter.h:32
ParentalLevel::plNone
@ plNone
Definition: parentalcontrols.h:13
VideoList
Definition: videolist.h:23
MythCoreContext::GetNumSetting
int GetNumSetting(const QString &key, int defaultval=0)
Definition: mythcorecontext.cpp:918
VIDEO_INETREF_DEFAULT
const QString VIDEO_INETREF_DEFAULT
Definition: globals.cpp:24
VideoMetadata::sortBefore
bool sortBefore(const VideoMetadata &rhs) const
Definition: videometadata.cpp:2011
videometadatalistmanager.h
UIUtilDisp::Assign
static bool Assign(ContainerType *container, UIType *&item, const QString &name, bool *err=nullptr)
Definition: mythuiutils.h:27
FilterSettingsProxy::getSettings
virtual const VideoFilterSettings & getSettings()=0
IsDefaultCoverFile
bool IsDefaultCoverFile(const QString &coverfile)
Definition: videoutils.cpp:121
kCoverFileFilterAll
@ kCoverFileFilterAll
Definition: videofilter.h:69
VideoFilterSettings
Definition: videofilter.h:73
kInetRefFilterAll
@ kInetRefFilterAll
Definition: videofilter.h:64
VideoFilterSettings::kOrderByDateAddedDescending
@ kOrderByDateAddedDescending
Definition: videofilter.h:117
VideoFilterDialog::m_yearList
MythUIButtonList * m_yearList
Definition: videofilter.h:313
VideoFilterSettings::m_country
int m_country
Definition: videofilter.h:224
VideoFilterSettings::getCountry
int getCountry() const
Definition: videofilter.h:141
BasicFilterSettingsProxy
Definition: videofilter.h:254
kCategoryFilterUnknown
@ kCategoryFilterUnknown
Definition: videofilter.h:38
VideoFilterSettings::setTextFilter
void setTextFilter(const QString &val)
Definition: videofilter.cpp:355
VideoFilterSettings::m_textFilter
QString m_textFilter
Definition: videofilter.h:236
SingleValue::getList
const entry_list & getList()
Definition: dbaccess.cpp:241
VideoFilterSettings::SetBrowse
void SetBrowse(int lbrowse)
Definition: videofilter.h:170
VideoFilterDialog::m_categoryList
MythUIButtonList * m_categoryList
Definition: videofilter.h:315
mythcorecontext.h
mythuitextedit.h
XMLParseBase::LoadWindowFromXML
static bool LoadWindowFromXML(const QString &xmlfile, const QString &windowname, MythUIType *parent)
Definition: xmlparsebase.cpp:701
VideoMetadata::cast_list
std::vector< cast_entry > cast_list
Definition: videometadata.h:34
VideoCast::GetCast
static VideoCast & GetCast()
Definition: dbaccess.cpp:531
VideoMetadata::GetUserRating
float GetUserRating() const
Definition: videometadata.cpp:1663
VideoFilterSettings::kSortOrderChanged
@ kSortOrderChanged
Definition: videofilter.h:79
VideoFilterSettings::SetWatched
void SetWatched(int lwatched)
Definition: videofilter.h:177
VideoMetadata::GetWatched
bool GetWatched() const
Definition: videometadata.cpp:1763
VideoFilterSettings::getChangedState
unsigned int getChangedState()
Definition: videofilter.h:214
kYearFilterAll
@ kYearFilterAll
Definition: videofilter.h:42
VideoFilterDialog::m_fsp
FilterSettingsProxy * m_fsp
Definition: videofilter.h:328
kCoverFileFilterNone
@ kCoverFileFilterNone
Definition: videofilter.h:70
VideoFilterSettings::SetUserRating
void SetUserRating(int luserrating)
Definition: videofilter.h:163
VideoMetadata::GetCoverFile
const QString & GetCoverFile() const
Definition: videometadata.cpp:1858
VideoFilterDialog::update_numvideo
void update_numvideo()
Definition: videofilter.cpp:484
MythUIText::SetText
virtual void SetText(const QString &text)
Definition: mythuitext.cpp:115
kRuntimeFilterUnknown
@ kRuntimeFilterUnknown
Definition: videofilter.h:48
kInetRefFilterUnknown
@ kInetRefFilterUnknown
Definition: videofilter.h:65
VideoMetadata::GetLength
std::chrono::minutes GetLength() const
Definition: videometadata.cpp:1683
VideoFilterDialog::SetInetRef
void SetInetRef(MythUIButtonListItem *item)
Definition: videofilter.cpp:746
VideoMetadata::GetID
unsigned int GetID() const
Definition: videometadata.cpp:1733
VideoFilterSettings::GetCast
int GetCast() const
Definition: videofilter.h:134
VideoFilterDialog::m_coverFileList
MythUIButtonList * m_coverFileList
Definition: videofilter.h:321
VideoFilterSettings::SetCategory
void SetCategory(int lcategory)
Definition: videofilter.h:121
VideoMetadata::GetTitle
const QString & GetTitle() const
Definition: videometadata.cpp:1543
mythuibutton.h
VideoMetadataListManager::metadata_list
std::list< VideoMetadataPtr > metadata_list
Definition: videometadatalistmanager.h:14
MythUITextEdit::valueChanged
void valueChanged()
VideoFilterSettings::setRuntime
void setRuntime(int lruntime)
Definition: videofilter.h:156
VideoFilterSettings::kFilterCastChanged
@ kFilterCastChanged
Definition: videofilter.h:90
VideoFilterDialog::filterChanged
void filterChanged()
SingleValue::entry_list
std::vector< entry > entry_list
Definition: dbaccess.h:16
VIDEO_YEAR_DEFAULT
static constexpr uint16_t VIDEO_YEAR_DEFAULT
Definition: videometadata.h:18
VideoFilterDialog::setOrderby
void setOrderby(MythUIButtonListItem *item)
Definition: videofilter.cpp:758
kGenreFilterUnknown
@ kGenreFilterUnknown
Definition: videofilter.h:23
VideoFilterDialog::m_userRatingList
MythUIButtonList * m_userRatingList
Definition: videofilter.h:314
MythCoreContext::SaveSetting
void SaveSetting(const QString &key, int newValue)
Definition: mythcorecontext.cpp:887
VideoFilterDialog::m_numVideosText
MythUIText * m_numVideosText
Definition: videofilter.h:324
VideoMetadata::GetBrowse
bool GetBrowse() const
Definition: videometadata.cpp:1753
VideoFilterDialog::m_castList
MythUIButtonList * m_castList
Definition: videofilter.h:318
VideoFilterSettings::matches_filter
bool matches_filter(const VideoMetadata &mdata) const
Definition: videofilter.cpp:195
VideoFilterSettings::m_insertDate
QDate m_insertDate
Definition: videofilter.h:239
VideoFilterDialog::~VideoFilterDialog
~VideoFilterDialog() override
Definition: videofilter.cpp:410
VideoFilterSettings::kFilterUserRatingChanged
@ kFilterUserRatingChanged
Definition: videofilter.h:85
VideoMetadata::GetCast
const cast_list & GetCast() const
Definition: videometadata.cpp:1918
VideoFilterSettings::meta_less_than
bool meta_less_than(const VideoMetadata &lhs, const VideoMetadata &rhs) const
Compares two VideoMetadata instances.
Definition: videofilter.cpp:315
kCategoryFilterAll
@ kCategoryFilterAll
Definition: videofilter.h:37
VideoFilterSettings::kFilterWatchedChanged
@ kFilterWatchedChanged
Definition: videofilter.h:91
VideoFilterSettings::kFilterCategoryChanged
@ kFilterCategoryChanged
Definition: videofilter.h:80
VideoList::getListCache
const VideoMetadataListManager & getListCache() const
Definition: videolist.cpp:503
videoutils.h
VideoFilterSettings::setCountry
void setCountry(int lcountry)
Definition: videofilter.h:142
kCastFilterUnknown
@ kCastFilterUnknown
Definition: videofilter.h:33
VideoFilterDialog::SetCoverFile
void SetCoverFile(MythUIButtonListItem *item)
Definition: videofilter.cpp:752
VideoFilterSettings::kFilterInetRefChanged
@ kFilterInetRefChanged
Definition: videofilter.h:87
VideoFilterDialog::setCountry
void setCountry(MythUIButtonListItem *item)
Definition: videofilter.cpp:710