File indexing completed on 2024-06-23 05:17:49

0001 /*
0002   SPDX-FileCopyrightText: 2007 Till Adam <adam@kde.org>
0003   SPDX-FileCopyrightText: 2012-2024 Laurent Montel <montel@kde.org>
0004 
0005   SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include "mailcommon_export.h"
0011 
0012 #include <KSharedConfig>
0013 #include <QUrl>
0014 
0015 #include <QList>
0016 #include <QStringList>
0017 #include <memory>
0018 class QWidget;
0019 
0020 namespace MailCommon
0021 {
0022 class MailFilter;
0023 
0024 /**
0025  * @short Utility class that provides persisting of filters to/from KConfig.
0026  *
0027  * @author Till Adam <till@kdab.net>
0028  */
0029 class MAILCOMMON_EXPORT FilterImporterExporter
0030 {
0031 public:
0032     enum FilterType {
0033         KMailFilter = 0,
0034         ThunderBirdFilter = 1,
0035         EvolutionFilter = 2,
0036         SylpheedFilter = 3,
0037         ProcmailFilter = 4,
0038         BalsaFilter = 5,
0039         ClawsMailFilter = 6,
0040         IcedoveFilter = 7,
0041         GmailFilter = 8,
0042         SeaMonkeyFilter = 9,
0043     };
0044 
0045     /**
0046      * Creates a new filter importer/exporter.
0047      *
0048      * @param parent The parent widget.
0049      */
0050     explicit FilterImporterExporter(QWidget *parent = nullptr);
0051 
0052     /**
0053      * Destroys the filter importer/exporter.
0054      */
0055     virtual ~FilterImporterExporter();
0056 
0057     /**
0058      * Exports the given @p filters to a file which
0059      * is asked from the user. The list to export is also
0060      * presented for confirmation/selection.
0061      */
0062     void exportFilters(const QList<MailFilter *> &filters, const QUrl &fileName = QUrl(), bool saveAll = false);
0063 
0064     /**
0065      * Imports filters. Ask the user where to import them from
0066      * and which filters to import.
0067      */
0068     [[nodiscard]] QList<MailFilter *>
0069     importFilters(bool &canceled, FilterImporterExporter::FilterType type = FilterImporterExporter::KMailFilter, const QString &filename = QString());
0070 
0071     /**
0072      * Writes the given list of @p filters to the given @p config file.
0073      */
0074     static void writeFiltersToConfig(const QList<MailFilter *> &filters, KSharedConfig::Ptr config, bool exportFilter = false);
0075 
0076     /**
0077      * Reads a list of filters from the given @p config file.
0078      * Return list of empty filter
0079      */
0080     static QList<MailFilter *> readFiltersFromConfig(const KSharedConfig::Ptr &config, QStringList &emptyFilter);
0081 
0082 private:
0083     //@cond PRIVATE
0084     Q_DISABLE_COPY(FilterImporterExporter)
0085 
0086     class FilterImporterExporterPrivate;
0087     std::unique_ptr<FilterImporterExporterPrivate> const d;
0088     //@endcond
0089 };
0090 }