86 lines
2.6 KiB
C++
86 lines
2.6 KiB
C++
// SPDX-FileCopyrightText: 2024 Gary Wang <git@blumia.net>
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
#pragma once
|
|
|
|
#include <QUrl>
|
|
#include <QAbstractListModel>
|
|
|
|
class PlaylistModel : public QAbstractListModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum PlaylistRole {
|
|
UrlRole = Qt::UserRole
|
|
};
|
|
Q_ENUM(PlaylistRole)
|
|
Q_PROPERTY(QStringList autoLoadFilterSuffixes MEMBER m_autoLoadSuffixes NOTIFY autoLoadFilterSuffixesChanged)
|
|
|
|
explicit PlaylistModel(QObject *parent = nullptr);
|
|
~PlaylistModel();
|
|
|
|
void setPlaylist(const QList<QUrl> & urls);
|
|
QModelIndex loadPlaylist(const QList<QUrl> & urls);
|
|
QModelIndex loadPlaylist(const QUrl & url);
|
|
QModelIndex appendToPlaylist(const QUrl & url);
|
|
bool removeAt(int index);
|
|
int indexOf(const QUrl & url) const;
|
|
QUrl urlByIndex(int index) const;
|
|
QStringList autoLoadFilterSuffixes() const;
|
|
|
|
QHash<int, QByteArray> roleNames() const override;
|
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
|
|
|
signals:
|
|
void autoLoadFilterSuffixesChanged(QStringList suffixes);
|
|
|
|
private:
|
|
// model data
|
|
QList<QUrl> m_playlist;
|
|
// properties
|
|
QStringList m_autoLoadSuffixes = {};
|
|
// internal
|
|
QString m_currentDir;
|
|
};
|
|
|
|
class PlaylistManager : public QObject
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
Q_PROPERTY(int currentIndex MEMBER m_currentIndex NOTIFY currentIndexChanged)
|
|
Q_PROPERTY(QStringList autoLoadFilterSuffixes WRITE setAutoLoadFilterSuffixes)
|
|
Q_PROPERTY(PlaylistModel * model READ model CONSTANT)
|
|
|
|
explicit PlaylistManager(QObject *parent = nullptr);
|
|
~PlaylistManager();
|
|
|
|
PlaylistModel * model();
|
|
|
|
void setPlaylist(const QList<QUrl> & url);
|
|
Q_INVOKABLE QModelIndex loadPlaylist(const QList<QUrl> & urls);
|
|
Q_INVOKABLE QModelIndex loadPlaylist(const QUrl & url);
|
|
|
|
int totalCount() const;
|
|
QModelIndex previousIndex() const;
|
|
QModelIndex nextIndex() const;
|
|
QModelIndex curIndex() const;
|
|
void setCurrentIndex(const QModelIndex & index);
|
|
QUrl urlByIndex(const QModelIndex & index);
|
|
QString localFileByIndex(const QModelIndex & index);
|
|
bool removeAt(const QModelIndex & index);
|
|
|
|
void setAutoLoadFilterSuffixes(const QStringList &nameFilters);
|
|
|
|
static QList<QUrl> convertToUrlList(const QStringList & files);
|
|
|
|
signals:
|
|
void currentIndexChanged(int index);
|
|
void totalCountChanged(int count);
|
|
|
|
private:
|
|
int m_currentIndex = -1;
|
|
PlaylistModel m_model;
|
|
};
|