File indexing completed on 2024-04-28 08:40:19
0001 /* AUDEX CDDA EXTRACTOR 0002 * SPDX-FileCopyrightText: Copyright (C) 2007 Marco Nelles 0003 * <https://userbase.kde.org/Audex> 0004 * 0005 * SPDX-License-Identifier: GPL-3.0-or-later 0006 */ 0007 0008 #ifndef PROFILEMODEL_HEADER 0009 #define PROFILEMODEL_HEADER 0010 0011 #include <climits> 0012 0013 #include <QAbstractTableModel> 0014 #include <QString> 0015 #include <QVariant> 0016 0017 #include <KConfig> 0018 #include <KConfigGroup> 0019 #include <KLocalizedString> 0020 0021 #include "utils/encoderassistant.h" 0022 #include "utils/error.h" 0023 0024 #define DEFAULT_PROFILEINDEX -1 0025 #define DEFAULT_NAME "" 0026 #define DEFAULT_ICON "audio-x-generic" 0027 0028 #define DEFAULT_ENCODER_SELECTED 0 0029 0030 #define DEFAULT_ENCODER_PARAMETERS "" 0031 0032 #define DEFAULT_SCHEME "$" VAR_ALBUM_ARTIST "/$" VAR_ALBUM_TITLE "/$" VAR_TRACK_NO " - $" VAR_TRACK_TITLE ".$" VAR_SUFFIX 0033 0034 #define DEFAULT_FAT32 false 0035 #define DEFAULT_UNDERSCORE false 0036 #define DEFAULT_2DIGITSTRACKNUM true 0037 0038 #define DEFAULT_SC true 0039 #define DEFAULT_SC_SCALE false 0040 #define DEFAULT_SC_SIZE QSize(600, 600) 0041 #define DEFAULT_SC_FORMAT "JPEG" 0042 #define DEFAULT_SC_NAME "$" VAR_ALBUM_TITLE ".$" VAR_SUFFIX 0043 0044 #define DEFAULT_PL true 0045 #define DEFAULT_PL_FORMAT "M3U" 0046 #define DEFAULT_PL_NAME "$" VAR_ALBUM_TITLE ".$" VAR_SUFFIX 0047 #define DEFAULT_PL_ABS_FILE_PATH false 0048 #define DEFAULT_PL_UTF8 true 0049 0050 #define DEFAULT_INF false 0051 #define DEFAULT_INF_TEXT QStringList() 0052 #define DEFAULT_INF_NAME "info" 0053 #define DEFAULT_INF_SUFFIX "nfo" 0054 0055 #define DEFAULT_HL false 0056 #define DEFAULT_HL_FORMAT "SFV" 0057 #define DEFAULT_HL_NAME "checksums.$" VAR_SUFFIX 0058 0059 #define DEFAULT_CUE false 0060 #define DEFAULT_CUE_NAME "$" VAR_ALBUM_ARTIST " - $" VAR_ALBUM_TITLE ".$" VAR_SUFFIX 0061 #define DEFAULT_CUE_ADD_MCN_AND_ISRC false 0062 0063 #define DEFAULT_LOG false 0064 #define DEFAULT_LOG_NAME "$" VAR_ALBUM_ARTIST " - $" VAR_ALBUM_TITLE ".$" VAR_SUFFIX 0065 #define DEFAULT_LOG_WRITE_TIMESTAMPS false 0066 0067 #define DEFAULT_SF false 0068 #define DEFAULT_SF_NAME "$" VAR_ALBUM_ARTIST "/$" VAR_ALBUM_TITLE "/$" VAR_ALBUM_ARTIST " - $" VAR_ALBUM_TITLE ".$" VAR_SUFFIX 0069 0070 enum ProfileColumns { 0071 0072 PROFILE_MODEL_COLUMN_PROFILEINDEX_INDEX = 0, 0073 PROFILE_MODEL_COLUMN_NAME_INDEX, 0074 PROFILE_MODEL_COLUMN_ICON_INDEX, 0075 0076 PROFILE_MODEL_COLUMN_ENCODER_SELECTED_INDEX, 0077 0078 PROFILE_MODEL_COLUMN_SCHEME_INDEX, 0079 0080 PROFILE_MODEL_COLUMN_FAT32COMPATIBLE_INDEX, 0081 PROFILE_MODEL_COLUMN_UNDERSCORE_INDEX, 0082 PROFILE_MODEL_COLUMN_2DIGITSTRACKNUM_INDEX, 0083 0084 PROFILE_MODEL_COLUMN_SC_INDEX, 0085 PROFILE_MODEL_COLUMN_SC_SCALE_INDEX, 0086 PROFILE_MODEL_COLUMN_SC_SIZE_INDEX, 0087 PROFILE_MODEL_COLUMN_SC_FORMAT_INDEX, 0088 PROFILE_MODEL_COLUMN_SC_NAME_INDEX, 0089 0090 PROFILE_MODEL_COLUMN_PL_INDEX, 0091 PROFILE_MODEL_COLUMN_PL_FORMAT_INDEX, 0092 PROFILE_MODEL_COLUMN_PL_NAME_INDEX, 0093 PROFILE_MODEL_COLUMN_PL_ABS_FILE_PATH_INDEX, 0094 PROFILE_MODEL_COLUMN_PL_UTF8_INDEX, 0095 0096 PROFILE_MODEL_COLUMN_INF_INDEX, 0097 PROFILE_MODEL_COLUMN_INF_TEXT_INDEX, 0098 PROFILE_MODEL_COLUMN_INF_NAME_INDEX, 0099 PROFILE_MODEL_COLUMN_INF_SUFFIX_INDEX, 0100 0101 PROFILE_MODEL_COLUMN_HL_INDEX, 0102 PROFILE_MODEL_COLUMN_HL_FORMAT_INDEX, 0103 PROFILE_MODEL_COLUMN_HL_NAME_INDEX, 0104 0105 PROFILE_MODEL_COLUMN_CUE_INDEX, 0106 PROFILE_MODEL_COLUMN_CUE_NAME_INDEX, 0107 PROFILE_MODEL_COLUMN_CUE_ADD_MCN_AND_ISRC_INDEX, 0108 0109 PROFILE_MODEL_COLUMN_LOG_INDEX, 0110 PROFILE_MODEL_COLUMN_LOG_NAME_INDEX, 0111 PROFILE_MODEL_COLUMN_LOG_WRITE_TIMESTAMPS_INDEX, 0112 0113 PROFILE_MODEL_COLUMN_SF_INDEX, 0114 PROFILE_MODEL_COLUMN_SF_NAME_INDEX, 0115 0116 PROFILE_MODEL_COLUMN_ENCODER_LAME_PARAMETERS_INDEX, 0117 PROFILE_MODEL_COLUMN_ENCODER_OGGENC_PARAMETERS_INDEX, 0118 PROFILE_MODEL_COLUMN_ENCODER_OPUSENC_PARAMETERS_INDEX, 0119 PROFILE_MODEL_COLUMN_ENCODER_FLAC_PARAMETERS_INDEX, 0120 PROFILE_MODEL_COLUMN_ENCODER_FAAC_PARAMETERS_INDEX, 0121 PROFILE_MODEL_COLUMN_ENCODER_WAVE_PARAMETERS_INDEX, 0122 PROFILE_MODEL_COLUMN_ENCODER_CUSTOM_PARAMETERS_INDEX, 0123 0124 PROFILE_MODEL_COLUMN_NUM 0125 0126 }; 0127 0128 #define PROFILE_MODEL_PROFILEINDEX_KEY "profile_key" 0129 #define PROFILE_MODEL_NAME_KEY "name" 0130 #define PROFILE_MODEL_ICON_KEY "icon" 0131 #define PROFILE_MODEL_ENCODER_SELECTED_KEY "current_encoder" 0132 0133 #define PROFILE_MODEL_SCHEME_KEY "scheme" 0134 0135 #define PROFILE_MODEL_FAT32COMPATIBLE_KEY "fat32_compatible" 0136 #define PROFILE_MODEL_UNDERSCORE_KEY "underscore" 0137 #define PROFILE_MODEL_2DIGITSTRACKNUM_KEY "2_digits_tracknum" 0138 0139 #define PROFILE_MODEL_SC_KEY "sc" 0140 #define PROFILE_MODEL_SC_SCALE_KEY "sc_scale" 0141 #define PROFILE_MODEL_SC_SIZE_KEY "sc_size" 0142 #define PROFILE_MODEL_SC_FORMAT_KEY "sc_format" 0143 #define PROFILE_MODEL_SC_NAME_KEY "sc_name" 0144 0145 #define PROFILE_MODEL_PL_KEY "pl" 0146 #define PROFILE_MODEL_PL_FORMAT_KEY "pl_format" 0147 #define PROFILE_MODEL_PL_NAME_KEY "pl_name" 0148 #define PROFILE_MODEL_PL_ABS_FILE_PATH_KEY "pl_abs_file_path" 0149 #define PROFILE_MODEL_PL_UTF8_KEY "pl_utf8" 0150 0151 #define PROFILE_MODEL_INF_KEY "inf" 0152 #define PROFILE_MODEL_INF_TEXT_KEY "inf_text" 0153 #define PROFILE_MODEL_INF_NAME_KEY "inf_name" 0154 #define PROFILE_MODEL_INF_SUFFIX_KEY "inf_suffix" 0155 0156 #define PROFILE_MODEL_HL_KEY "hl" 0157 #define PROFILE_MODEL_HL_FORMAT_KEY "hl_format" 0158 #define PROFILE_MODEL_HL_NAME_KEY "hl_name" 0159 0160 #define PROFILE_MODEL_CUE_KEY "cue" 0161 #define PROFILE_MODEL_CUE_NAME_KEY "cue_name" 0162 #define PROFILE_MODEL_CUE_ADD_MCN_AND_ISRC_KEY "cue_write_mcn_and_isrc" 0163 0164 #define PROFILE_MODEL_LOG_KEY "log" 0165 #define PROFILE_MODEL_LOG_NAME_KEY "log_name" 0166 #define PROFILE_MODEL_LOG_WRITE_TIMESTAMPS_KEY "log_write_timestamps" 0167 0168 #define PROFILE_MODEL_SF_KEY "sf" 0169 #define PROFILE_MODEL_SF_NAME_KEY "sf_name" 0170 0171 #define PROFILE_MODEL_COLUMN_ENCODER_LAME_PARAMETERS_KEY "lame_parameters" 0172 #define PROFILE_MODEL_COLUMN_ENCODER_OGGENC_PARAMETERS_KEY "oggenc_parameters" 0173 #define PROFILE_MODEL_COLUMN_ENCODER_OPUSENC_PARAMETERS_KEY "opusenc_parameters" 0174 #define PROFILE_MODEL_COLUMN_ENCODER_FLAC_PARAMETERS_KEY "flac_parameters" 0175 #define PROFILE_MODEL_COLUMN_ENCODER_FAAC_PARAMETERS_KEY "faac_parameters" 0176 #define PROFILE_MODEL_COLUMN_ENCODER_WAVE_PARAMETERS_KEY "wave_parameters" 0177 #define PROFILE_MODEL_COLUMN_ENCODER_CUSTOM_PARAMETERS_KEY "custom_parameters" 0178 0179 typedef QMap<QString, QVariant> Profile; 0180 0181 /** audex profile model **/ 0182 class ProfileModel : public QAbstractTableModel 0183 { 0184 Q_OBJECT 0185 public: 0186 explicit ProfileModel(QObject *parent = nullptr); 0187 ~ProfileModel() override; 0188 0189 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 0190 int columnCount(const QModelIndex &parent = QModelIndex()) const override; 0191 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 0192 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; 0193 bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; 0194 bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; 0195 0196 bool validateData(const QModelIndex &index, const QVariant &value); 0197 0198 int currentProfileIndex() const; 0199 int currentProfileRow() const; 0200 int getRowByIndex(int profile_index) const; 0201 0202 void clear(); 0203 0204 bool nameExists(const QString &name) const; 0205 bool indexExists(int profile_index) const; 0206 int getNewIndex() const; 0207 0208 void sortItems(); 0209 0210 /**BEGIN: EncoderAssistant related */ 0211 void autoCreate(); // scans the system for encoders and create standard profiles 0212 EncoderAssistant::Encoder getSelectedEncoderFromCurrentIndex(); 0213 const Parameters getSelectedEncoderParametersFromCurrentIndex(); 0214 const QString getSelectedEncoderSchemeFromCurrentIndex(); 0215 const QString getSelectedEncoderSuffixFromCurrentIndex(); 0216 const QString getSelectedEncoderNameAndVersion(); 0217 bool isSelectedEncoderWithEmbedCover(); 0218 /**END: EncoderAssistant related */ 0219 0220 Error lastError() const; 0221 0222 public Q_SLOTS: 0223 void commit(); 0224 void revert() override; 0225 0226 int copy(const int profileRow); 0227 0228 bool saveProfilesToFile(const QString &filename); 0229 bool loadProfilesFromFile(const QString &filename); 0230 0231 void setCurrentProfileIndex(int profile_index); 0232 int setRowAsCurrentProfileIndex(int row); // returns profile index 0233 0234 Q_SIGNALS: 0235 void profilesRemovedOrInserted(); 0236 void currentProfileIndexChanged(int index); 0237 0238 private: 0239 const Profile p_new_profile(); 0240 QList<Profile> p_cache; 0241 int p_current_profile_index; 0242 0243 Error p_error; 0244 0245 void p_new_name(QString &name); 0246 0247 void p_save(KConfig *config); 0248 void p_load(KConfig *config); 0249 }; 0250 0251 #endif