+QString DolphinFacetsWidget::ratingTerm() const
+{
+ QStringList terms;
+
+ if (!m_anyRating->isChecked()) {
+ int stars = 1; // represents m_oneOrMore
+ if (m_twoOrMore->isChecked()) {
+ stars = 2;
+ } else if (m_threeOrMore->isChecked()) {
+ stars = 3;
+ } else if (m_fourOrMore->isChecked()) {
+ stars = 4;
+ } else if (m_maxRating->isChecked()) {
+ stars = 5;
+ }
+
+ const int rating = stars * 2;
+ terms << QStringLiteral("rating>=%1").arg(rating);
+ }
+
+ if (!m_anytime->isChecked()) {
+ QDate date = QDate::currentDate(); // represents m_today
+ if (m_yesterday->isChecked()) {
+ date = date.addDays(-1);
+ } else if (m_thisWeek->isChecked()) {
+ date = date.addDays(1 - date.dayOfWeek());
+ } else if (m_thisMonth->isChecked()) {
+ date = date.addDays(1 - date.day());
+ } else if (m_thisYear->isChecked()) {
+ date = date.addDays(1 - date.dayOfYear());
+ }
+
+ terms << QStringLiteral("modified>=%1").arg(date.toString(Qt::ISODate));
+ }
+
+ return terms.join(QStringLiteral(" AND "));
+}
+
+QString DolphinFacetsWidget::facetType() const
+{
+ if (m_folders->isChecked()) {
+ return QStringLiteral("Folder");
+ } else if (m_documents->isChecked()) {
+ return QStringLiteral("Document");
+ } else if (m_images->isChecked()) {
+ return QStringLiteral("Image");
+ } else if (m_audio->isChecked()) {
+ return QStringLiteral("Audio");
+ } else if (m_videos->isChecked()) {
+ return QStringLiteral("Video");
+ }
+
+ return QString();
+}
+
+bool DolphinFacetsWidget::isRatingTerm(const QString& term) const
+{
+ const QStringList subTerms = term.split(' ', QString::SkipEmptyParts);
+
+ // If term has sub terms, then sone of the sub terms are always "rating" and "modified" terms.
+ bool containsRating = false;
+ bool containsModified = false;
+
+ foreach (const QString& subTerm, subTerms) {
+ if (subTerm.startsWith(QLatin1String("rating>="))) {
+ containsRating = true;
+ } else if (subTerm.startsWith(QLatin1String("modified>="))) {
+ containsModified = true;
+ }
+ }
+
+ return containsModified || containsRating;
+}
+
+void DolphinFacetsWidget::setRatingTerm(const QString& term)
+{
+ // If term has sub terms, then the sub terms are always "rating" and "modified" terms.
+ // If term has no sub terms, then the term itself is either a "rating" term or a "modified"
+ // term. To avoid code duplication we add term to subTerms list, if the list is empty.
+ QStringList subTerms = term.split(' ', QString::SkipEmptyParts);
+
+ foreach (const QString& subTerm, subTerms) {
+ if (subTerm.startsWith(QLatin1String("modified>="))) {
+ const QString value = subTerm.mid(10);
+ const QDate date = QDate::fromString(value, Qt::ISODate);
+ setTimespan(date);
+ } else if (subTerm.startsWith(QLatin1String("rating>="))) {
+ const QString value = subTerm.mid(8);
+ const int stars = value.toInt() / 2;
+ setRating(stars);
+ }
+ }
+}
+
+void DolphinFacetsWidget::setFacetType(const QString& type)
+{
+ if (type == QLatin1String("Document")) {
+ m_documents->setChecked(true);
+ } else if (type == QLatin1String("Image")) {
+ m_images->setChecked(true);
+ } else if (type == QLatin1String("Audio")) {
+ m_audio->setChecked(true);
+ } else if (type == QLatin1String("Video")) {
+ m_videos->setChecked(true);
+ } else {
+ m_anyType->setChecked(true);
+ }
+}
+
+void DolphinFacetsWidget::setRating(const int stars)
+{
+ switch (stars) {
+ case 5:
+ m_maxRating->setChecked(true);
+ break;
+
+ case 4:
+ m_fourOrMore->setChecked(true);
+ break;
+
+ case 3:
+ m_threeOrMore->setChecked(true);
+ break;
+
+ case 2:
+ m_twoOrMore->setChecked(true);
+ break;
+
+ case 1:
+ m_oneOrMore->setChecked(true);
+ break;
+
+ default:
+ m_anyRating->setChecked(true);
+ }
+}
+
+void DolphinFacetsWidget::setTimespan(const QDate& date)
+{
+ const QDate currentDate = QDate::currentDate();
+ const int days = date.daysTo(currentDate);
+
+ if (days <= 0) {
+ m_today->setChecked(true);
+ } else if (days <= 1) {
+ m_yesterday->setChecked(true);
+ } else if (days <= currentDate.dayOfWeek()) {
+ m_thisWeek->setChecked(true);
+ } else if (days <= currentDate.day()) {
+ m_thisMonth->setChecked(true);
+ } else if (days <= currentDate.dayOfYear()) {
+ m_thisYear->setChecked(true);
+ } else {
+ m_anytime->setChecked(true);
+ }
+}
+
+QRadioButton* DolphinFacetsWidget::createRadioButton(const QString& text,
+ QButtonGroup* group)
+{
+ QRadioButton* button = new QRadioButton(text);
+ connect(button, &QRadioButton::clicked, this, &DolphinFacetsWidget::facetChanged);
+ group->addButton(button);
+ return button;
+}
+