File indexing completed on 2024-04-28 04:49:02

0001 /*
0002    SPDX-FileCopyrightText: 2020 (c) Matthieu Gallien <matthieu_gallien@yahoo.fr>
0003 
0004    SPDX-License-Identifier: LGPL-3.0-or-later
0005  */
0006 
0007 #ifndef EDITABLETRACKMETADATAMODEL_H
0008 #define EDITABLETRACKMETADATAMODEL_H
0009 
0010 #include "elisaLib_export.h"
0011 
0012 #include "trackmetadatamodel.h"
0013 
0014 class ELISALIB_EXPORT EditableTrackMetadataModel : public TrackMetadataModel
0015 {
0016     Q_OBJECT
0017 
0018     Q_PROPERTY(bool isDataValid
0019                READ isDataValid
0020                NOTIFY isDataValidChanged)
0021 
0022     Q_PROPERTY(QString errorMessage
0023                READ errorMessage
0024                NOTIFY errorMessageChanged)
0025 
0026     Q_PROPERTY(bool isDirty
0027                READ isDirty
0028                NOTIFY isDirtyChanged)
0029 
0030     Q_PROPERTY(QStringList extraMetadata
0031                READ extraMetadata
0032                NOTIFY extraMetadataChanged)
0033 
0034 public:
0035     enum EditableColumnRoles
0036     {
0037         ReadOnlyRole = TrackMetadataModel::ItemTypeRole + 1,
0038         RemovableFieldRole,
0039     };
0040 
0041     Q_ENUM(EditableColumnRoles)
0042 
0043     explicit EditableTrackMetadataModel(QObject *parent = nullptr);
0044 
0045     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0046 
0047     bool isDataValid() const
0048     {
0049         return mIsDataValid;
0050     }
0051 
0052     bool setData(const QModelIndex &index, const QVariant &value,
0053                  int role = Qt::EditRole) override;
0054 
0055     bool isDirty() const
0056     {
0057         return mIsDirty;
0058     }
0059 
0060     QString errorMessage() const
0061     {
0062         return mErrorMessage;
0063     }
0064 
0065     QHash<int, QByteArray> roleNames() const override;
0066 
0067     QStringList extraMetadata() const
0068     {
0069         return mExtraMetadata;
0070     }
0071 
0072 Q_SIGNALS:
0073     void isDataValidChanged();
0074 
0075     void isDirtyChanged();
0076 
0077     void errorMessageChanged();
0078 
0079     void saveTrackModified(const DataTypes::ListTrackDataType &trackDataType, const QHash<QString, QUrl> &covers);
0080 
0081     void deleteRadioData(qulonglong radioId);
0082 
0083     void extraMetadataChanged();
0084 
0085 public Q_SLOTS:
0086 
0087     void saveData();
0088 
0089     void resetData();
0090 
0091     void deleteRadio();
0092 
0093     void removeData(int index);
0094 
0095     void addData(const QString &name);
0096 
0097 protected:
0098 
0099     void fillDataFromTrackData(const TrackMetadataModel::TrackDataType &trackData) override;
0100 
0101     void filterDataFromTrackData() override;
0102 
0103     void fillLyricsDataFromTrack() override;
0104 
0105     void fillDataForNewRadio() override;
0106 
0107     void initialize(MusicListenersManager *newManager,
0108                     DatabaseInterface *trackDatabase) override;
0109 private:
0110 
0111     void validData();
0112 
0113     void updateExtraMetadata();
0114 
0115     void modelHasBeenModified();
0116 
0117     bool mIsNewRadio = false;
0118 
0119     bool mIsDataValid = false;
0120 
0121     bool mIsDirty = false;
0122 
0123     QString mErrorMessage;
0124 
0125     QStringList mExtraMetadata;
0126 };
0127 
0128 
0129 
0130 #endif // EDITABLETRACKMETADATAMODEL_H