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