Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
qSlicerExtensionsManagerModel.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Copyright (c) Kitware Inc.
6
7 See COPYRIGHT.txt
8 or http://www.slicer.org/copyright/copyright.txt for details.
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.
17 and was partially funded by NIH grant 3P41RR013218-12S1
18
19==============================================================================*/
20
21#ifndef __qSlicerExtensionsManagerModel_h
22#define __qSlicerExtensionsManagerModel_h
23
24// Qt includes
25#include <QHash>
26#include <QStringList>
27#include <QUrl>
28#include <QSettings>
29#include <QUuid>
30#include <QVariantMap>
31
32// CTK includes
33#include <ctkErrorLogModel.h>
34
35// QtGUI includes
36#include "qSlicerBaseQTCoreExport.h"
38
39class QNetworkReply;
40class qSlicerExtensionsManagerModelPrivate;
41class QStandardItemModel;
42
47class Q_SLICER_BASE_QTCORE_EXPORT qSlicerExtensionsManagerModel : public QObject
48{
49 Q_OBJECT
55 Q_PROPERTY(QStringList managedExtensions READ managedExtensions NOTIFY modelUpdated)
57 Q_PROPERTY(QStringList bookmarkedExtensions READ bookmarkedExtensions NOTIFY modelUpdated)
58 Q_PROPERTY(QStringList installedExtensions READ installedExtensions NOTIFY modelUpdated)
59 Q_PROPERTY(QStringList enabledExtensions READ enabledExtensions NOTIFY modelUpdated)
63 Q_PROPERTY(bool interactive READ interactive WRITE setInteractive NOTIFY interactiveChanged)
66 Q_PROPERTY(QString slicerOs READ slicerOs WRITE setSlicerOs NOTIFY slicerOsChanged)
67 Q_PROPERTY(QString slicerArch READ slicerArch WRITE setSlicerArch NOTIFY slicerArchChanged)
74 Q_PROPERTY(QStringList activeTasks READ activeTasks NOTIFY activeTasksChanged DESIGNABLE false)
75
76public:
78 typedef QObject Superclass;
79
81 typedef qSlicerExtensionsManagerModelPrivate Pimpl;
82
85
87 explicit qSlicerExtensionsManagerModel(QObject* parent = nullptr);
88
91
94
100
104 int serverAPI() const;
105
109 static QString serverAPIToString(int serverAPI);
110
114 static int serverAPIFromString(const QString& str);
115
122 Q_INVOKABLE QUrl serverUrl() const;
123
130 Q_INVOKABLE QUrl frontendServerUrl() const;
131
133 Q_INVOKABLE QUrl extensionsListUrl() const;
134
135 Q_INVOKABLE QString extensionsInstallPath() const;
136
137 Q_INVOKABLE QString extensionInstallPath(const QString& extensionName) const;
138
139 Q_INVOKABLE QStringList extensionModulePaths(const QString& extensionName) const;
140
141 Q_INVOKABLE QString extensionDescriptionFile(const QString& extensionName) const;
142
145
146 bool autoUpdateCheck() const;
147 bool autoUpdateInstall() const;
149
152 bool interactive() const;
153
160 Q_INVOKABLE ExtensionMetadataType extensionMetadata(const QString& extensionName, int source = MetadataAll) const;
161
162 Q_INVOKABLE QString extensionDescription(const QString& extensionName) const;
163
167
169 QStringList managedExtensions() const;
170
172 bool isExtensionLoaded(const QString& extensionName) const;
173
176 Q_INVOKABLE bool isExtensionInstalled(const QString& extensionName) const;
177
181
185
188 QStringList installedExtensions() const;
189
193 Q_INVOKABLE bool isExtensionBookmarked(const QString& extensionName) const;
194
197 Q_INVOKABLE bool isExtensionEnabled(const QString& extensionName) const;
198
203 QStringList scheduledForUpdateExtensions() const;
204
211 Q_INVOKABLE bool isExtensionUpdateAvailable(const QString& extensionName) const;
212
215 QStringList availableUpdateExtensions() const;
216
222 Q_INVOKABLE bool isExtensionScheduledForUpdate(const QString& extensionName) const;
223
227
230 Q_INVOKABLE bool isExtensionScheduledForUninstall(const QString& extensionName) const;
231
234 QStringList bookmarkedExtensions() const;
235
238 QStringList enabledExtensions() const;
239
245
249 QString slicerRevision() const;
250 void setSlicerRevision(const QString& revision);
251
255 QString slicerOs() const;
256 void setSlicerOs(const QString& os);
257
261 QString slicerArch() const;
262 void setSlicerArch(const QString& arch);
263
271 void setSlicerRequirements(const QString& revision, const QString& os, const QString& arch);
272
273 QString slicerVersion() const;
274 void setSlicerVersion(const QString& version);
275
280 Q_INVOKABLE QStringList isExtensionCompatible(const QString& extensionName, const QString& slicerRevision, const QString& slicerOs, const QString& slicerArch) const;
281
288 Q_INVOKABLE QStringList isExtensionCompatible(const QString& extensionName) const;
289
297 Q_INVOKABLE bool installExtension(const QString& archiveFile, bool installDependencies = true, bool waitForCompletion = false);
298
306 Q_INVOKABLE bool installExtension(const QString& extensionName,
308 const QString& archiveFile,
309 bool installDependencies = true,
310 bool waitForCompletion = false);
311
317 bool uninstallExtension(const QString& extensionName);
318
320 Q_INVOKABLE bool extractExtensionArchive(const QString& extensionName, const QString& archiveFile, const QString& destinationPath);
321
323 Q_INVOKABLE const QStandardItemModel* model() const;
324
328
330 QStringList activeTasks() const;
331
334 static QHash<QString, QString> serverToExtensionDescriptionKey(int serverAPI);
335
339
342 static QStringList serverKeysToIgnore(int serverAPI);
343
347
348 static QStringList readArrayValues(QSettings& settings, const QString& arrayName, const QString fieldName);
349
350 static void writeArrayValues(QSettings& settings, const QStringList& values, const QString& arrayName, const QString fieldName);
351
352 static bool writeExtensionDescriptionFile(const QString& file, const ExtensionMetadataType& metadata);
353
355
356public slots:
357
360 void setExtensionBookmarked(const QString& extensionName, bool value);
361
365 void setExtensionEnabled(const QString& extensionName, bool value);
366
370 bool downloadAndInstallExtension(const QString& extensionId, bool installDependencies = true, bool waitForCompletion = false);
371
376 bool downloadAndInstallExtensionByName(const QString& extensionName, bool installDependencies = true, bool waitForCompletion = false);
377
411 bool installExtensionFromServer(const QString& extensionName, bool restart = true, bool update = false);
412
418 bool scheduleExtensionForUninstall(const QString& extensionName);
419
423 bool cancelExtensionScheduledForUninstall(const QString& extensionName);
424
432 bool updateExtensionsMetadataFromServer(bool force = false, bool waitForCompletion = false);
433
438
445 bool scheduleExtensionForUpdate(const QString& extensionName);
446
450 bool cancelExtensionScheduledForUpdate(const QString& extensionName);
451
460 bool updateScheduledExtensions(QStringList& updatedExtensions);
461
468
477 bool uninstallScheduledExtensions(QStringList& uninstalledExtensions);
478
485
487
488 bool exportExtensionList(QString& exportFilePath);
489
490 QStringList checkInstallPrerequisites() const;
491
497
500
501 void setAutoUpdateCheck(bool enable);
502 void setAutoUpdateInstall(bool enable);
503 void setAutoInstallDependencies(bool enable);
504 void setInteractive(bool value);
505
509 Q_INVOKABLE bool waitForAllTasksCompletion(int timeoutMsec = -1) const;
510
511signals:
512
513 void downloadStarted(QNetworkReply* reply);
514
515 void downloadFinished(QNetworkReply* reply);
516
517 void updateDownloadProgress(const QString& extensionName, qint64 received, qint64 total);
518
520
523
524 void extensionUpdateAvailable(const QString& extensionName);
525
527 void extensionUpdatesAvailable(bool available);
528
529 void extensionInstalled(const QString& extensionName);
530
531 void extensionUpdated(const QString& extensionName);
532
534 void extensionMetadataUpdated(const QString& extensionName);
535
536 void extensionScheduledForUninstall(const QString& extensionName);
537
538 void extensionCancelledScheduleForUninstall(const QString& extensionName);
539
540 void extensionScheduledForUpdate(const QString& extensionName);
541
542 void extensionCancelledScheduleForUpdate(const QString& extensionName);
543
544 void extensionUninstalled(const QString& extensionName);
545
547 void extensionBookmarkedChanged(const QString& extensionName, bool value);
548
549 void extensionEnabledChanged(const QString& extensionName, bool value);
550
551 void extensionIdentifedAsIncompatible(const QString& extensionName);
552
554
555 void slicerRequirementsChanged(const QString& revision, const QString& os, const QString& arch);
556 void slicerArchChanged(const QString& slicerArch);
557 void slicerOsChanged(const QString& slicerOs);
559
561
563
564 void messageLogged(const QString& text, ctkErrorLogLevel::LogLevels level) const;
565
566 void installDownloadProgress(const QString& extensionName, qint64 received, qint64 total);
567
569
572
575
576protected slots:
577
578 void onInstallDownloadProgress(qSlicerExtensionDownloadTask* task, qint64 received, qint64 total);
579
582
585
586 void onUpdateDownloadProgress(qSlicerExtensionDownloadTask* task, qint64 received, qint64 total);
587
589
590protected:
591 QScopedPointer<qSlicerExtensionsManagerModelPrivate> d_ptr;
592
593private:
594 Q_DECLARE_PRIVATE(qSlicerExtensionsManagerModel);
595 Q_DISABLE_COPY(qSlicerExtensionsManagerModel);
596};
597
599
600// MetaType already declared in qSlicerIO.h
601// Q_DECLARE_METATYPE(qSlicerExtensionsManagerModel::ExtensionMetadataType)
602
603#endif
bool newExtensionEnabledByDefault() const
void setNewExtensionEnabledByDefault(bool value)
int numberOfInstalledExtensions() const
Return the number of installed extensions. Deprecated, use installedExtensionsCount instead.
QStringList managedExtensions
Names of extensions that are installed or bookmarked.
bool autoUpdateCheck
Download extensions metadata from the server at application startup to allow the application to displ...
void slicerVersionChanged(const QString &slicerVersion)
void updateExtensionsMetadataFromServerCompleted(bool success)
Emitted when metadata download from the extensions server is completed.
void extensionCancelledScheduleForUpdate(const QString &extensionName)
QStringList activeTasks() const
Number of operations in progress.
static ExtensionMetadataType parseExtensionDescriptionFile(const QString &file)
Q_INVOKABLE QUrl extensionsListUrl() const
Returns the URL of the extensions manager frontend for the current application version and operating ...
QStringList managedExtensions() const
Return names of all managed extensions, i.e., installed or bookmarked extensions.
Q_INVOKABLE ExtensionMetadataType extensionMetadata(const QString &extensionName, int source=MetadataAll) const
QVariantMap ExtensionMetadataType
Extension metadata typedef.
void autoUpdateSettingsChanged()
Emitted when autoUpdateCheck, autoUpdateInstall, or autoInstallDependencies properties are changed.
QStringList bookmarkedExtensions() const
Return names of all bookmarked extensions.
void extensionScheduledForUpdate(const QString &extensionName)
Q_INVOKABLE QStringList isExtensionCompatible(const QString &extensionName) const
Check if extensionName is compatible. An extension is considered incompatible when the version of Sli...
int managedExtensionsCount
Number of extensions that are installed or bookmarked.
QStringList installedExtensions() const
Return names of all installed extensions sorted in alphabetical order.
Q_INVOKABLE bool waitForAllTasksCompletion(int timeoutMsec=-1) const
bool exportExtensionList(QString &exportFilePath)
void slicerArchChanged(const QString &slicerArch)
static ExtensionMetadataType filterExtensionMetadata(const ExtensionMetadataType &extensionMetadata, int serverAPI)
void extensionUninstalled(const QString &extensionName)
void setSlicerRequirements(const QString &revision, const QString &os, const QString &arch)
Convenience function setting Slicer revision, operating system and architecture.
void extensionUpdatesAvailable(bool available)
Emitted after updates are checked on the extensions server.
QStringList scheduledForUninstallExtensions() const
Return names of all extensions scheduled for uninstall.
QScopedPointer< qSlicerExtensionsManagerModelPrivate > d_ptr
void onInstallDownloadFinished(qSlicerExtensionDownloadTask *task)
bool scheduleExtensionForUpdate(const QString &extensionName)
void extensionMetadataUpdated(const QString &extensionName)
Emitted when extension metadata (description, icon URL, etc. is updated)
void updateModel()
Full update of the extensions from extension description files and settings.
void installDownloadProgress(const QString &extensionName, qint64 received, qint64 total)
void slicerRevisionChanged(const QString &slicerRevision)
int managedExtensionsCount() const
Return the number of managed extensions.
void slicerOsChanged(const QString &slicerOs)
Q_INVOKABLE bool isExtensionBookmarked(const QString &extensionName) const
Return True if the extensionName is bookmarked. Bookmarked extensions are included in the list of man...
bool autoInstallDependencies() const
bool scheduleExtensionForUninstall(const QString &extensionName)
Schedule extensionName of uninstall Tell the application to uninstall extensionName when it will rest...
bool updateExtensionsMetadataFromServer(bool force=false, bool waitForCompletion=false)
Q_INVOKABLE QString extensionDescription(const QString &extensionName) const
void onInstallDownloadProgress(qSlicerExtensionDownloadTask *task, qint64 received, qint64 total)
void interactiveChanged(bool interactive)
bool onExtensionsMetadataFromServerQueryFinished(const QUuid &requestId)
static QHash< QString, QString > serverToExtensionDescriptionKey(int serverAPI)
Q_INVOKABLE QString extensionInstallPath(const QString &extensionName) const
void downloadStarted(QNetworkReply *reply)
QString slicerRevision() const
Set/Get Slicer revision.
bool autoUpdateInstall
Automatically install any extension updates.
bool cancelExtensionScheduledForUninstall(const QString &extensionName)
Cancel the uninstallation of extensionName Tell the application to keep extensionName installed.
void downloadFinished(QNetworkReply *reply)
@ MetadataServer
return metadata downloaded from the server
@ MetadataAll
return local metadata, and if any fields are not set locally then set it from the server
@ MetadataLocal
return local metadata (stored in s4ext files in the extensions folder)
Q_INVOKABLE QString extensionDescriptionFile(const QString &extensionName) const
int installedExtensionsCount() const
Return the number of installed extensions.
static ExtensionMetadataType convertExtensionMetadata(const ExtensionMetadataType &extensionMetadata, int serverAPI)
void extensionCancelledScheduleForUninstall(const QString &extensionName)
void setAutoUpdateInstall(bool enable)
void setSlicerArch(const QString &arch)
QStringList enabledExtensions() const
Return names of all enabled extensions sorted in alphabetical order.
QStringList scheduledForUpdateExtensions() const
void setAutoInstallDependencies(bool enable)
QString slicerOs() const
Set/Get Slicer operating system.
Q_INVOKABLE bool installExtension(const QString &extensionName, ExtensionMetadataType extensionMetadata, const QString &archiveFile, bool installDependencies=true, bool waitForCompletion=false)
qSlicerExtensionsManagerModelPrivate Pimpl
Pimpl typedef.
void extensionScheduledForUninstall(const QString &extensionName)
void setExtensionBookmarked(const QString &extensionName, bool value)
Add/remove bookmark for an extension. Add/remove this extension from the list of bookmarked extension...
bool uninstallScheduledExtensions(QStringList &uninstalledExtensions)
void extensionUpdateAvailable(const QString &extensionName)
qSlicerExtensionsManagerModel(QObject *parent=nullptr)
Constructor.
void setSlicerVersion(const QString &version)
Q_INVOKABLE bool installExtension(const QString &archiveFile, bool installDependencies=true, bool waitForCompletion=false)
void extensionsSettingsFilePathChanged(const QString &extensionsSettingsFilePath)
void onUpdateDownloadProgress(qSlicerExtensionDownloadTask *task, qint64 received, qint64 total)
QStringList bookmarkedExtensions
Names of bookmarked extensions.
void onUpdateDownloadFinished(qSlicerExtensionDownloadTask *task)
bool downloadAndInstallExtension(const QString &extensionId, bool installDependencies=true, bool waitForCompletion=false)
Download and install extensionId The extensionId corresponds to the identifier used on the extension ...
void newExtensionEnabledByDefaultChanged(bool value)
void setSlicerOs(const QString &os)
bool installExtensionFromServer(const QString &extensionName, bool restart=true, bool update=false)
Download and install an extension from the extensions server.
Q_INVOKABLE QStringList extensionModulePaths(const QString &extensionName) const
bool autoInstallDependencies
Automatically install all dependencies (other extensions that the installed extension requires) when ...
void setSlicerRevision(const QString &revision)
void activeTasksChanged()
Emitted when background tasks are started or completed.
Q_INVOKABLE bool isExtensionEnabled(const QString &extensionName) const
Return True if the extensionName is enabled.
static QStringList serverKeysToIgnore(int serverAPI)
void updateDownloadProgress(const QString &extensionName, qint64 received, qint64 total)
Q_INVOKABLE bool extractExtensionArchive(const QString &extensionName, const QString &archiveFile, const QString &destinationPath)
Extract archiveFile into destinationPath/extensionName directory.
void extensionInstalled(const QString &extensionName)
bool downloadAndInstallExtensionByName(const QString &extensionName, bool installDependencies=true, bool waitForCompletion=false)
Download and install extensionId The extensionId corresponds to the identifier used on the extension ...
Q_INVOKABLE bool isExtensionUpdateAvailable(const QString &extensionName) const
Q_INVOKABLE bool isExtensionScheduledForUninstall(const QString &extensionName) const
Return True if the extensionName is scheduled to be uninstalled.
QString extensionsSettingsFilePath() const
Set/Get extension settings file path.
void messageLogged(const QString &text, ctkErrorLogLevel::LogLevels level) const
qSlicerExtensionsManagerModel Self
Self typedef.
Q_INVOKABLE QUrl frontendServerUrl() const
Frontend server URL displaying extension manager web page.
void setAutoUpdateCheck(bool enable)
QString slicerArch() const
Set/Get Slicer architecture.
static QString serverAPIToString(int serverAPI)
Q_INVOKABLE bool isExtensionInstalled(const QString &extensionName) const
Return True if the extensionName is installed.
bool cancelExtensionScheduledForUpdate(const QString &extensionName)
Cancel the update of extensionName Tell the application to keep extensionName installed.
void setExtensionEnabled(const QString &extensionName, bool value)
Enable or disable an extension. Tell the application to load (or skip the loading) of extensionName b...
void slicerRequirementsChanged(const QString &revision, const QString &os, const QString &arch)
void extensionUpdated(const QString &extensionName)
void extensionEnabledChanged(const QString &extensionName, bool value)
Q_INVOKABLE QString extensionsInstallPath() const
Q_INVOKABLE const QStandardItemModel * model() const
Return the item model used internally.
QStringList availableUpdateExtensions
Names of extensions that have updates available on the server.
static int serverAPIFromString(const QString &str)
bool updateScheduledExtensions(QStringList &updatedExtensions)
Q_INVOKABLE bool isExtensionScheduledForUpdate(const QString &extensionName) const
bool isExtensionLoaded(const QString &extensionName) const
Return True if the extensionName is loaded.
void extensionBookmarkedChanged(const QString &extensionName, bool value)
Emitted when bookmark is added to or removed from an extension.
void extensionIdentifedAsIncompatible(const QString &extensionName)
QDateTime lastUpdateTimeExtensionsMetadataFromServer()
void setExtensionsSettingsFilePath(const QString &extensionsSettingsFilePath)
void setInteractive(bool value)
Q_INVOKABLE QStringList isExtensionCompatible(const QString &extensionName, const QString &slicerRevision, const QString &slicerOs, const QString &slicerArch) const
Check if extensionName is compatible with the system identified by slicerRevision,...
QStringList availableUpdateExtensions() const
static bool writeExtensionDescriptionFile(const QString &file, const ExtensionMetadataType &metadata)
static void writeArrayValues(QSettings &settings, const QStringList &values, const QString &arrayName, const QString fieldName)
Q_INVOKABLE QUrl serverUrl() const
Backend server URL used to perform API calls.
static QStringList readArrayValues(QSettings &settings, const QString &arrayName, const QString fieldName)
bool uninstallExtension(const QString &extensionName)
Uninstall extensionName It is only allowed if the extension is not loaded already....
QStringList checkInstallPrerequisites() const
Q_DECLARE_METATYPE(qSlicerExtensionsManagerModel::ServerAPI)
QMap< QString, QVariant > QVariantMap