File indexing completed on 2024-05-19 15:54:40
0001 // SPDX-FileCopyrightText: 2021 Jonah BrĂ¼chert <jbb@kaidan.im> 0002 // 0003 // SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0004 0005 #pragma once 0006 0007 #include <QAbstractListModel> 0008 #include <QThread> 0009 0010 #include "asyncytmusic.h" 0011 #include "abstractytmusicmodel.h" 0012 0013 class SearchModel : public AbstractYTMusicModel 0014 { 0015 Q_OBJECT 0016 0017 Q_PROPERTY(QString searchQuery READ searchQuery WRITE setSearchQuery NOTIFY searchQueryChanged) 0018 0019 public: 0020 enum Type { 0021 Artist, 0022 ArtistsDisplayString, 0023 Album, 0024 Playlist, 0025 Song, 0026 Video, 0027 TopResult 0028 }; 0029 Q_ENUM(Type) 0030 0031 enum Role { 0032 Title = Qt::UserRole + 1, 0033 TypeRole, 0034 VideoId, 0035 Artists, 0036 RadioPlaylistId, 0037 ThumbnailUrl 0038 }; 0039 0040 explicit SearchModel(QObject *parent = nullptr); 0041 0042 int rowCount(const QModelIndex &parent) const override; 0043 QVariant data(const QModelIndex &index, int role) const override; 0044 QHash<int, QByteArray> roleNames() const override; 0045 0046 QString searchQuery() const; 0047 void setSearchQuery(const QString &searchQuery); 0048 Q_SIGNAL void searchQueryChanged(); 0049 0050 Q_INVOKABLE void triggerItem(int row); 0051 0052 Q_SIGNAL void openAlbum(const QString &browseId); 0053 Q_SIGNAL void openArtist(const QString &browseId,const QString &radioId, const QString &shuffleId); 0054 Q_SIGNAL void openPlaylist(const QString &browseId); 0055 Q_SIGNAL void openSong(const QString &videoId); 0056 Q_SIGNAL void openVideo(const QString &videoId, const QString &title); 0057 0058 private: 0059 QString m_searchQuery; 0060 std::vector<search::SearchResultItem> m_searchResults; 0061 static int itemType(search::SearchResultItem const &item); 0062 };