File indexing completed on 2024-05-19 04:48:26

0001 #pragma once
0002 
0003 #include <QObject>
0004 
0005 #include <MauiKit3/Core/fmh.h>
0006 #include <MauiKit3/Core/mauilist.h>
0007 
0008 class FM;
0009 class AbstractMusicProvider;
0010 class Cloud : public MauiList
0011 {
0012     Q_OBJECT
0013     Q_PROPERTY(Cloud::SORTBY sortBy READ getSortBy WRITE setSortBy NOTIFY sortByChanged)
0014     Q_PROPERTY(QVariantList artists READ getArtists NOTIFY artistsChanged)
0015     Q_PROPERTY(QVariantList albums READ getAlbums NOTIFY albumsChanged)
0016 
0017 public:
0018     enum SORTBY : uint_fast8_t {
0019         ADDDATE = FMH::MODEL_KEY::ADDDATE,
0020         RELEASEDATE = FMH::MODEL_KEY::RELEASEDATE,
0021         FORMAT = FMH::MODEL_KEY::FORMAT,
0022         ARTIST = FMH::MODEL_KEY::ARTIST,
0023         TITLE = FMH::MODEL_KEY::TITLE,
0024         ALBUM = FMH::MODEL_KEY::ALBUM,
0025         RATE = FMH::MODEL_KEY::RATE,
0026         FAV = FMH::MODEL_KEY::FAV,
0027         TRACK = FMH::MODEL_KEY::TRACK,
0028         COUNT = FMH::MODEL_KEY::COUNT,
0029         NONE
0030 
0031     };
0032     Q_ENUM(SORTBY)
0033 
0034     explicit Cloud(QObject *parent = nullptr);
0035     void componentComplete() override final;
0036 
0037     const FMH::MODEL_LIST &items() const override;
0038 
0039     void setSortBy(const Cloud::SORTBY &sort);
0040     Cloud::SORTBY getSortBy() const;
0041 
0042     QVariantList getAlbums() const;
0043     QVariantList getArtists() const;
0044 
0045 private:
0046     AbstractMusicProvider *provider;
0047     FMH::MODEL_LIST list;
0048     void sortList();
0049     void setList();
0050 
0051     Cloud::SORTBY sort = Cloud::SORTBY::ARTIST;
0052 
0053 public Q_SLOTS:
0054     void upload(const QUrl &url);
0055 
0056     void getFileUrl(const QString &id);
0057     void getFileUrl(const int &index);
0058 
0059 Q_SIGNALS:
0060     void sortByChanged();
0061     void fileReady(QVariantMap track);
0062     void warning(QString error);
0063 
0064     void artistsChanged();
0065     void albumsChanged();
0066 };