File indexing completed on 2025-02-23 04:35:14

0001 // SPDX-FileCopyrightText: none
0002 // SPDX-License-Identifier: GPL-3.0-or-later
0003 
0004 #pragma once
0005 
0006 #include <QHash>
0007 #include <QObject>
0008 #include <QString>
0009 #include <QUrl>
0010 #include <QVector>
0011 #include <QtQml>
0012 
0013 class SearchParameters : public QObject
0014 {
0015     Q_OBJECT
0016     QML_ELEMENT
0017 
0018     Q_PROPERTY(QString query READ query WRITE setQuery)
0019     Q_PROPERTY(unsigned int page READ page WRITE setPage)
0020     Q_PROPERTY(SortBy sortBy READ sortBy WRITE setSortBy)
0021     Q_PROPERTY(Date date READ date WRITE setDate)
0022     Q_PROPERTY(Duration duration READ duration WRITE setDuration)
0023     Q_PROPERTY(Type type READ type WRITE setType)
0024     Q_PROPERTY(QVector<Feature> features READ features WRITE setFeatures)
0025 
0026 public:
0027     enum class SortBy { Default, Relevance, Rating, UploadDate, ViewCount };
0028     Q_ENUM(SortBy)
0029 
0030     enum class Date { Default, Hour, Today, Week, Month, Year };
0031     Q_ENUM(Date)
0032 
0033     enum class Duration { Default, Short, Long };
0034     Q_ENUM(Duration)
0035 
0036     enum class Type { Default, Video, Playlist, Channel, All };
0037     Q_ENUM(Type)
0038 
0039     enum class Feature { Hd, Subtitles, CreativeCommons, ThreeD, Live, Purchased, FourK, ThreeSixty, Location, Hdr };
0040     Q_ENUM(Feature)
0041 
0042     SearchParameters() = default;
0043     explicit SearchParameters(const QString &query, unsigned int page = 0)
0044         : m_query(query)
0045         , m_page(page)
0046     {
0047     }
0048 
0049     void fill(const SearchParameters &other); // cannot use copy constructor with Q_OBJECT
0050     void clear();
0051 
0052     QHash<QString, QString> toQueryParameters() const;
0053     QHash<QString, QString> toPipedQueryParameters() const;
0054 
0055     const QString &query() const;
0056     void setQuery(const QString &query);
0057 
0058     unsigned int page() const;
0059     void setPage(unsigned int page);
0060 
0061     SortBy sortBy() const;
0062     void setSortBy(SortBy sortBy);
0063 
0064     Date date() const;
0065     void setDate(Date date);
0066 
0067     Duration duration() const;
0068     void setDuration(Duration duration);
0069 
0070     Type type() const;
0071     void setType(Type type);
0072 
0073     const QVector<Feature> &features();
0074     void setFeatures(const QVector<Feature> &features);
0075 
0076 private:
0077     QString m_query;
0078     unsigned int m_page = 1;
0079     SortBy m_sortBy = SortBy::Default;
0080     Date m_date = Date::Default;
0081     Duration m_duration = Duration::Default;
0082     Type m_type = Type::Default;
0083     QVector<Feature> m_features;
0084 };