File indexing completed on 2024-05-12 16:21:17
0001 // SPDX-FileCopyrightText: 2022 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 "ytmusic.h" 0008 #include "playlistimporter.h" 0009 #include <QAbstractListModel> 0010 #include <QDateTime> 0011 0012 #include <ThreadedDatabase> 0013 0014 struct Playlist { 0015 using ColumnTypes = std::tuple<qint64, QString, QString, QDateTime>; 0016 0017 Playlist static fromSql(ColumnTypes tuple) { 0018 auto [playlistId, title, description, createdOn] = tuple; 0019 return Playlist { playlistId, title, description, createdOn }; 0020 } 0021 0022 qint64 playlistId; 0023 QString title; 0024 QString description; 0025 QDateTime createdOn; 0026 0027 }; 0028 0029 class LocalPlaylistsModel : public QAbstractListModel 0030 { 0031 Q_OBJECT 0032 0033 enum Roles { 0034 PlaylistId, 0035 Title, 0036 Description, 0037 CreatedOn, 0038 ThumbnailIds 0039 }; 0040 0041 public: 0042 LocalPlaylistsModel(QObject *parent = nullptr); 0043 0044 int rowCount(const QModelIndex &index) const override; 0045 QHash<int, QByteArray> roleNames() const override; 0046 QVariant data(const QModelIndex &index, int role) const override; 0047 0048 Q_INVOKABLE void addPlaylist(const QString &title, const QString &description); 0049 Q_INVOKABLE void addPlaylistEntry(qint64 playlistId, const QString &videoId, const QString &title, const QString &artist, const QString &album); 0050 Q_INVOKABLE void addPlaylistEntry(qint64 playlistId, const playlist::Track &track); 0051 Q_INVOKABLE void importPlaylist(const QString &url); 0052 Q_SIGNAL void importFinished(); 0053 0054 Q_INVOKABLE void renamePlaylist(qint64 playlistId, const QString &name, const QString &description); 0055 Q_INVOKABLE void deletePlaylist(qint64 playlistId); 0056 0057 0058 Q_SIGNAL void playlistEntriesChanged(quint64 playlistId); 0059 0060 void refreshModel(); 0061 0062 private: 0063 QStringView cropURL(QStringView srcURL); 0064 std::vector<Playlist> m_playlists; 0065 std::vector<std::vector<QString>> m_thumbnailIds; 0066 PlaylistImporter *importer; 0067 }; 0068