1 | /* |
2 | SPDX-FileCopyrightText: 2016 Volker Krause <vkrause@kde.org> |
3 | |
4 | SPDX-License-Identifier: MIT |
5 | */ |
6 | |
7 | #ifndef KSYNTAXHIGHLIGHTING_DEFINITIONDOWNLOADER_H |
8 | #define KSYNTAXHIGHLIGHTING_DEFINITIONDOWNLOADER_H |
9 | |
10 | #include "ksyntaxhighlighting_export.h" |
11 | |
12 | #include <QObject> |
13 | #include <memory> |
14 | |
15 | namespace KSyntaxHighlighting |
16 | { |
17 | class DefinitionDownloaderPrivate; |
18 | class Repository; |
19 | |
20 | /** |
21 | * Helper class to download definition file updates. |
22 | * |
23 | * With the DefinitionDownloader you can download new and update existing |
24 | * syntax highlighting definition files (xml files). |
25 | * |
26 | * An example that updates the highlighting Definition%s and prints the current |
27 | * update progress to the console may look as follows: |
28 | * |
29 | * @code |
30 | * auto downloader = new DefinitionDownloader(repo); // repo is a pointer to a Repository |
31 | * |
32 | * // print update progress to console |
33 | * QObject::connect(downloader, &DefinitionDownloader::informationMessage, [](const QString &msg) { |
34 | * std::cout << qPrintable(msg) << std::endl; |
35 | * }); |
36 | * |
37 | * // connect to signal done to delete the downloader later |
38 | * QObject::connect(downloader, &DefinitionDownloader::done, |
39 | * downloader, &DefinitionDownloader::deleteLater); |
40 | * downloader->start(); |
41 | * @endcode |
42 | * |
43 | * @see Repository, Definition |
44 | * @since 5.28 |
45 | */ |
46 | class KSYNTAXHIGHLIGHTING_EXPORT DefinitionDownloader : public QObject |
47 | { |
48 | Q_OBJECT |
49 | public: |
50 | /** |
51 | * Constructor. |
52 | * The Repository @p repo is used as reference to compare the versions of |
53 | * the existing Definition%s with the ones that are available online. |
54 | * |
55 | * Optionally, @p parent is a pointer to the owner of this instance. |
56 | */ |
57 | explicit DefinitionDownloader(Repository *repo, QObject *parent = nullptr); |
58 | |
59 | /** |
60 | * Destructor. |
61 | */ |
62 | ~DefinitionDownloader() override; |
63 | |
64 | /** |
65 | * Starts the update procedure. |
66 | * Once no more updates are available (i.e. either the local definition files |
67 | * are up-to-date, or all updates have been downloaded), the signal done() |
68 | * is emitted. |
69 | * |
70 | * During the update process, the signal informationMessage() can be used |
71 | * to display the current update progress to the user. |
72 | * |
73 | * @see done(), informationMessage() |
74 | */ |
75 | void start(); |
76 | |
77 | Q_SIGNALS: |
78 | /** |
79 | * Prints the information about the current state of the definition files. |
80 | * If all files are up-to-date, this signal is emitted informing you that |
81 | * all highlighting files are up-to-date. If there are updates, this signal |
82 | * is emitted for each update being downloaded. |
83 | */ |
84 | void informationMessage(const QString &msg); |
85 | |
86 | /** |
87 | * This signal is emitted when there are no pending downloads anymore. |
88 | */ |
89 | void done(); |
90 | |
91 | private: |
92 | std::unique_ptr<DefinitionDownloaderPrivate> d; |
93 | }; |
94 | } |
95 | |
96 | #endif // KSYNTAXHIGHLIGHTING_DEFINITIONDOWNLOADER_H |
97 | |