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 };