File indexing completed on 2024-05-19 04:55:56

0001 /**
0002  * \file importconfig.h
0003  * Configuration for import dialog.
0004  *
0005  * \b Project: Kid3
0006  * \author Urs Fleisch
0007  * \date 17 Sep 2003
0008  *
0009  * Copyright (C) 2003-2024  Urs Fleisch
0010  *
0011  * This file is part of Kid3.
0012  *
0013  * Kid3 is free software; you can redistribute it and/or modify
0014  * it under the terms of the GNU General Public License as published by
0015  * the Free Software Foundation; either version 2 of the License, or
0016  * (at your option) any later version.
0017  *
0018  * Kid3 is distributed in the hope that it will be useful,
0019  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0021  * GNU General Public License for more details.
0022  *
0023  * You should have received a copy of the GNU General Public License
0024  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
0025  */
0026 
0027 #pragma once
0028 
0029 #include <QStringList>
0030 #include "config.h"
0031 #include "generalconfig.h"
0032 #include "frame.h"
0033 
0034 /**
0035  * Import configuration.
0036  */
0037 class KID3_CORE_EXPORT ImportConfig : public StoredConfig<ImportConfig> {
0038   Q_OBJECT
0039   /** available plugins, this information is not stored in the configuration */
0040   Q_PROPERTY(QStringList availablePlugins READ availablePlugins
0041              WRITE setAvailablePlugins NOTIFY availablePluginsChanged)
0042   /** import server */
0043   Q_PROPERTY(int importServer READ importServer WRITE setImportServer
0044              NOTIFY importServerChanged)
0045   /** tag version to import */
0046   Q_PROPERTY(int importDest READ importDest WRITE setImportDestInt
0047              NOTIFY importDestChanged)
0048   /** Names of import formats */
0049   Q_PROPERTY(QStringList importFormatNames READ importFormatNames
0050              WRITE setImportFormatNames NOTIFY importFormatNamesChanged)
0051   /** regexp describing header import format */
0052   Q_PROPERTY(QStringList importFormatHeaders READ importFormatHeaders
0053              WRITE setImportFormatHeaders NOTIFY importFormatHeadersChanged)
0054   /** regexp describing track import format */
0055   Q_PROPERTY(QStringList importFormatTracks READ importFormatTracks
0056              WRITE setImportFormatTracks NOTIFY importFormatTracksChanged)
0057   /** selected import format */
0058   Q_PROPERTY(int importFormatIndex READ importFormatIndex
0059              WRITE setImportFormatIndex NOTIFY importFormatIndexChanged)
0060   /** maximum allowable time difference */
0061   Q_PROPERTY(int maxTimeDifference READ maxTimeDifference
0062              WRITE setMaxTimeDifference NOTIFY maxTimeDifferenceChanged)
0063   /** visible optional columns in import table */
0064   Q_PROPERTY(quint64 importVisibleColumns READ importVisibleColumns
0065              WRITE setImportVisibleColumns NOTIFY importVisibleColumnsChanged)
0066   /** import window geometry */
0067   Q_PROPERTY(QByteArray importWindowGeometry READ importWindowGeometry
0068              WRITE setImportWindowGeometry NOTIFY importWindowGeometryChanged)
0069   /** Names of import tags formats */
0070   Q_PROPERTY(QStringList importTagsNames READ importTagsNames
0071              WRITE setImportTagsNames NOTIFY importTagsNamesChanged)
0072   /** Expressions for tag import sources */
0073   Q_PROPERTY(QStringList importTagsSources READ importTagsSources
0074              WRITE setImportTagsSources NOTIFY importTagsSourcesChanged)
0075   /** regexp describing extraction from import tag sources */
0076   Q_PROPERTY(QStringList importTagsExtractions READ importTagsExtractions
0077              WRITE setImportTagsExtractions NOTIFY importTagsExtractionsChanged)
0078   /** selected import tags format */
0079   Q_PROPERTY(int importTagsIndex READ importTagsIndex WRITE setImportTagsIndex
0080              NOTIFY importTagsIndexChanged)
0081   /** names of picture sources */
0082   Q_PROPERTY(QStringList pictureSourceNames READ pictureSourceNames
0083              WRITE setPictureSourceNames NOTIFY pictureSourceNamesChanged)
0084   /** picture source URLs */
0085   Q_PROPERTY(QStringList pictureSourceUrls READ pictureSourceUrls
0086              WRITE setPictureSourceUrls NOTIFY pictureSourceUrlsChanged)
0087   /** selected picture source */
0088   Q_PROPERTY(int pictureSourceIndex READ pictureSourceIndex
0089              WRITE setPictureSourceIndex NOTIFY pictureSourceIndexChanged)
0090   /** Browse cover art window geometry */
0091   Q_PROPERTY(QByteArray browseCoverArtWindowGeometry READ browseCoverArtWindowGeometry
0092              WRITE setBrowseCoverArtWindowGeometry NOTIFY browseCoverArtWindowGeometryChanged)
0093   /** Mapping for picture URL matching */
0094   Q_PROPERTY(QStringList matchPictureUrlMap READ matchPictureUrlStringList
0095              WRITE setMatchPictureUrlStringList NOTIFY matchPictureUrlMapChanged)
0096   /** Last directory used for import or export. */
0097   Q_PROPERTY(QString importDir READ importDir WRITE setImportDir
0098              NOTIFY importDirChanged)
0099   /** Disabled plugins */
0100   Q_PROPERTY(QStringList disabledPlugins READ disabledPlugins
0101              WRITE setDisabledPlugins NOTIFY disabledPluginsChanged)
0102   /** check maximum allowable time difference */
0103   Q_PROPERTY(bool enableTimeDifferenceCheck READ enableTimeDifferenceCheck
0104              WRITE setEnableTimeDifferenceCheck NOTIFY enableTimeDifferenceCheckChanged)
0105 
0106 public:
0107   /**
0108    * Constructor.
0109    */
0110   ImportConfig();
0111 
0112   /**
0113    * Destructor.
0114    */
0115   ~ImportConfig() override = default;
0116 
0117   /**
0118    * Persist configuration.
0119    *
0120    * @param config configuration
0121    */
0122   void writeToConfig(ISettings* config) const override;
0123 
0124   /**
0125    * Read persisted configuration.
0126    *
0127    * @param config configuration
0128    */
0129   void readFromConfig(ISettings* config) override;
0130 
0131   /** Get list of available plugins. */
0132   QStringList availablePlugins() const { return m_availablePlugins; }
0133 
0134   /** Set list of available plugins. */
0135   void setAvailablePlugins(const QStringList& availablePlugins);
0136 
0137   /** Clear list of available plugins. */
0138   void clearAvailablePlugins() { m_availablePlugins.clear(); }
0139 
0140   /** Get import server. */
0141   int importServer() const { return m_importServer; }
0142 
0143   /** Set import server. */
0144   void setImportServer(int importServer);
0145 
0146   /** Get tag version to import. */
0147   Frame::TagVersion importDest() const { return m_importDest; }
0148 
0149   /** Set tag version to import. */
0150   void setImportDest(Frame::TagVersion importDest);
0151 
0152   /** Get names of import formats. */
0153   QStringList importFormatNames() const { return m_importFormatNames; }
0154 
0155   /** Set names of import formats. */
0156   void setImportFormatNames(const QStringList& importFormatNames);
0157 
0158   /** Get regexp describing header import format. */
0159   QStringList importFormatHeaders() const { return m_importFormatHeaders; }
0160 
0161   /** Set regexp describing header import format. */
0162   void setImportFormatHeaders(const QStringList& importFormatHeaders);
0163 
0164   /** Get regexp describing track import format. */
0165   QStringList importFormatTracks() const { return m_importFormatTracks; }
0166 
0167   /** Set regexp describing track import format. */
0168   void setImportFormatTracks(const QStringList& importFormatTracks);
0169 
0170   /** Get selected import format. */
0171   int importFormatIndex() const { return m_importFormatIdx; }
0172 
0173   /** Set selected import format. */
0174   void setImportFormatIndex(int importFormatIndex);
0175 
0176   /** Get maximum allowable time difference. */
0177   int maxTimeDifference() const { return m_maxTimeDifference; }
0178 
0179   /** Set maximum allowable time difference. */
0180   void setMaxTimeDifference(int maxTimeDifference);
0181 
0182   /** Get visible optional columns in import table. */
0183   quint64 importVisibleColumns() const { return m_importVisibleColumns; }
0184 
0185   /** Set visible optional columns in import table. */
0186   void setImportVisibleColumns(quint64 importVisibleColumns);
0187 
0188   /** Get import window geometry. */
0189   QByteArray importWindowGeometry() const { return m_importWindowGeometry; }
0190 
0191   /** Set import window geometry. */
0192   void setImportWindowGeometry(const QByteArray& importWindowGeometry);
0193 
0194   /** Get names of import tags formats. */
0195   QStringList importTagsNames() const { return m_importTagsNames; }
0196 
0197   /** Set names of import tags formats. */
0198   void setImportTagsNames(const QStringList& importTagsNames);
0199 
0200   /** Get expressions for tag import sources. */
0201   QStringList importTagsSources() const { return m_importTagsSources; }
0202 
0203   /** Set expressions for tag import sources. */
0204   void setImportTagsSources(const QStringList& importTagsSources);
0205 
0206   /** Get regexp describing extraction from import tag sources. */
0207   QStringList importTagsExtractions() const { return m_importTagsExtractions; }
0208 
0209   /** Set regexp describing extraction from import tag sources. */
0210   void setImportTagsExtractions(const QStringList& importTagsExtractions);
0211 
0212   /** Get selected import tags format. */
0213   int importTagsIndex() const { return m_importTagsIdx; }
0214 
0215   /** Set selected import tags format. */
0216   void setImportTagsIndex(int importTagsIndex);
0217 
0218   /** Get names of picture sources. */
0219   QStringList pictureSourceNames() const { return m_pictureSourceNames; }
0220 
0221   /** Set names of picture sources. */
0222   void setPictureSourceNames(const QStringList& pictureSourceNames);
0223 
0224   /** Get picture source URLs. */
0225   QStringList pictureSourceUrls() const { return m_pictureSourceUrls; }
0226 
0227   /** Set picture source URLs. */
0228   void setPictureSourceUrls(const QStringList& pictureSourceUrls);
0229 
0230   /** Get selected picture source. */
0231   int pictureSourceIndex() const { return m_pictureSourceIdx; }
0232 
0233   /** Set selected picture source. */
0234   void setPictureSourceIndex(int pictureSourceIndex);
0235 
0236   /** Get browse cover art window geometry. */
0237   QByteArray browseCoverArtWindowGeometry() const {
0238     return m_browseCoverArtWindowGeometry;
0239   }
0240 
0241   /** Set browse cover art window geometry. */
0242   void setBrowseCoverArtWindowGeometry(const QByteArray& browseCoverArtWindowGeometry);
0243 
0244   /** Get mapping for picture URL matching. */
0245   QList<QPair<QString, QString>> matchPictureUrlMap() const {
0246     return m_matchPictureUrlMap;
0247   }
0248 
0249   /** Set mapping for picture URL matching. */
0250   void setMatchPictureUrlMap(const QList<QPair<QString, QString>>& matchPictureUrlMap);
0251 
0252   /** Get mapping for picture URL matching as list with alternating key, values. */
0253   QStringList matchPictureUrlStringList() const;
0254 
0255   /** Set mapping for picture URL matching from list with alternating key, values. */
0256   void setMatchPictureUrlStringList(const QStringList& lst);
0257 
0258   /** Get last directory used for import or export. */
0259   QString importDir() const { return m_importDir; }
0260 
0261   /** Set last directory used for import or export. */
0262   void setImportDir(const QString& importDir);
0263 
0264   /** Get disabled plugins */
0265   QStringList disabledPlugins() const { return m_disabledPlugins; }
0266 
0267   /** Set disabled plugins */
0268   void setDisabledPlugins(const QStringList& disabledPlugins);
0269 
0270   /** Check if maximum allowable time difference check is enabled. */
0271   bool enableTimeDifferenceCheck() const { return m_enableTimeDifferenceCheck; }
0272 
0273   /** Set if maximum allowable time difference check is enabled. */
0274   void setEnableTimeDifferenceCheck(bool enableTimeDifferenceCheck);
0275 
0276 signals:
0277   /** Emitted when @a availablePlugins changed. */
0278   void availablePluginsChanged(const QStringList& availablePlugins);
0279 
0280   /** Emitted when @a importServer changed. */
0281   void importServerChanged(int importServer);
0282 
0283   /** Emitted when @a importDest changed. */
0284   void importDestChanged(Frame::TagVersion importDest);
0285 
0286   /** Emitted when @a importFormatNames changed. */
0287   void importFormatNamesChanged(const QStringList& importFormatNames);
0288 
0289   /** Emitted when @a importFormatHeaders changed. */
0290   void importFormatHeadersChanged(const QStringList& importFormatHeaders);
0291 
0292   /** Emitted when @a importFormatTracks changed. */
0293   void importFormatTracksChanged(const QStringList& importFormatTracks);
0294 
0295   /** Emitted when @a importFormatIdx changed. */
0296   void importFormatIndexChanged(int importFormatIndex);
0297 
0298   /** Emitted when @a maxTimeDifference changed. */
0299   void maxTimeDifferenceChanged(int maxTimeDifference);
0300 
0301   /** Emitted when @a importVisibleColumns changed. */
0302   void importVisibleColumnsChanged(quint64 importVisibleColumns);
0303 
0304   /** Emitted when @a importWindowGeometry changed. */
0305   void importWindowGeometryChanged(const QByteArray& importWindowGeometry);
0306 
0307   /** Emitted when @a importTagsNames changed. */
0308   void importTagsNamesChanged(const QStringList& importTagsNames);
0309 
0310   /** Emitted when @a importTagsSources changed. */
0311   void importTagsSourcesChanged(const QStringList& importTagsSources);
0312 
0313   /** Emitted when @a importTagsExtractions changed. */
0314   void importTagsExtractionsChanged(const QStringList& importTagsExtractions);
0315 
0316   /** Emitted when @a importTagsIdx changed. */
0317   void importTagsIndexChanged(int importTagsIndex);
0318 
0319   /** Emitted when @a pictureSourceNames changed. */
0320   void pictureSourceNamesChanged(const QStringList& pictureSourceNames);
0321 
0322   /** Emitted when @a pictureSourceUrls changed. */
0323   void pictureSourceUrlsChanged(const QStringList& pictureSourceUrls);
0324 
0325   /** Emitted when @a pictureSourceIdx changed. */
0326   void pictureSourceIndexChanged(int pictureSourceIndex);
0327 
0328   /** Emitted when @a browseCoverArtWindowGeometry changed. */
0329   void browseCoverArtWindowGeometryChanged(const QByteArray& browseCoverArtWindowGeometry);
0330 
0331   /** Emitted when @a matchPictureUrlMap changed. */
0332   void matchPictureUrlMapChanged(const QList<QPair<QString, QString>>& matchPictureUrlMap);
0333 
0334   /** Emitted when @a importDir changed. */
0335   void importDirChanged(const QString& importDir);
0336 
0337   /** Emitted when @a disabledPlugins changed. */
0338   void disabledPluginsChanged(const QStringList& disabledPlugins);
0339 
0340   /** Emitted when @a enableTimeDifferenceCheck changed. */
0341   void enableTimeDifferenceCheckChanged(bool enableTimeDifferenceCheck);
0342 
0343 private:
0344   friend ImportConfig& StoredConfig<ImportConfig>::instance();
0345 
0346   void setImportDestInt(int importDest) {
0347     setImportDest(Frame::tagVersionCast(importDest));
0348   }
0349 
0350   int m_importServer;
0351   Frame::TagVersion m_importDest;
0352   QStringList m_importFormatNames;
0353   QStringList m_importFormatHeaders;
0354   QStringList m_importFormatTracks;
0355   int m_importFormatIdx;
0356   int m_maxTimeDifference;
0357   quint64 m_importVisibleColumns;
0358   QByteArray m_importWindowGeometry;
0359 
0360   QStringList m_importTagsNames;
0361   QStringList m_importTagsSources;
0362   QStringList m_importTagsExtractions;
0363   int m_importTagsIdx;
0364 
0365   QStringList m_pictureSourceNames;
0366   QStringList m_pictureSourceUrls;
0367   int m_pictureSourceIdx;
0368   QByteArray m_browseCoverArtWindowGeometry;
0369   QList<QPair<QString, QString>> m_matchPictureUrlMap;
0370 
0371   QString m_importDir;
0372 
0373   QStringList m_disabledPlugins;
0374 
0375   QStringList m_availablePlugins;
0376   bool m_enableTimeDifferenceCheck;
0377 
0378   /** Index in configuration storage */
0379   static int s_index;
0380 };