Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
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,
281 const QString& slicerOs, const QString& slicerArch) const;
282
289 Q_INVOKABLE QStringList isExtensionCompatible(const QString& extensionName) const;
290
298 Q_INVOKABLE bool installExtension(const QString &archiveFile, bool installDependencies = true, bool waitForCompletion = false);
299
307 Q_INVOKABLE bool installExtension(const QString& extensionName,
309 const QString &archiveFile, bool installDependencies = true,
310 bool waitForCompletion = false);
311
317 bool uninstallExtension(const QString& extensionName);
318
320 Q_INVOKABLE bool extractExtensionArchive(const QString& extensionName,
321 const QString& archiveFile,
322 const QString &destinationPath);
323
325 Q_INVOKABLE const QStandardItemModel * model()const;
326
330
332 QStringList activeTasks() const;
333
336 static QHash<QString, QString> serverToExtensionDescriptionKey(int serverAPI);
337
341
344 static QStringList serverKeysToIgnore(int serverAPI);
345
349
350 static QStringList readArrayValues(QSettings& settings,
351 const QString& arrayName, const QString fieldName);
352
353 static void writeArrayValues(QSettings& settings, const QStringList& values,
354 const QString& arrayName, const QString fieldName);
355
356 static bool writeExtensionDescriptionFile(const QString& file,
357 const ExtensionMetadataType& metadata);
358
360
361public slots:
362
365 void setExtensionBookmarked(const QString& extensionName, bool value);
366
370 void setExtensionEnabled(const QString& extensionName, bool value);
371
375 bool downloadAndInstallExtension(const QString& extensionId, bool installDependencies = true, bool waitForCompletion = false);
376
381 bool downloadAndInstallExtensionByName(const QString& extensionName, bool installDependencies = true, bool waitForCompletion = false);
382
416 bool installExtensionFromServer(const QString& extensionName, bool restart = true, bool update = false);
417
423 bool scheduleExtensionForUninstall(const QString& extensionName);
424
428 bool cancelExtensionScheduledForUninstall(const QString& extensionName);
429
437 bool updateExtensionsMetadataFromServer(bool force = false, bool waitForCompletion = false);
438
443
450 bool scheduleExtensionForUpdate(const QString& extensionName);
451
455 bool cancelExtensionScheduledForUpdate(const QString& extensionName);
456
465 bool updateScheduledExtensions(QStringList &updatedExtensions);
466
473
482 bool uninstallScheduledExtensions(QStringList &uninstalledExtensions);
483
490
492
493 bool exportExtensionList(QString& exportFilePath);
494
495 QStringList checkInstallPrerequisites() const;
496
502
505
506 void setAutoUpdateCheck(bool enable);
507 void setAutoUpdateInstall(bool enable);
508 void setAutoInstallDependencies(bool enable);
509 void setInteractive(bool value);
510
514 Q_INVOKABLE bool waitForAllTasksCompletion(int timeoutMsec = -1)const;
515
516signals:
517
518 void downloadStarted(QNetworkReply * reply);
519
520 void downloadFinished(QNetworkReply * reply);
521
522 void updateDownloadProgress(const QString& extensionName,
523 qint64 received, qint64 total);
524
526
529
530 void extensionUpdateAvailable(const QString& extensionName);
531
533 void extensionUpdatesAvailable(bool available);
534
535 void extensionInstalled(const QString& extensionName);
536
537 void extensionUpdated(const QString& extensionName);
538
540 void extensionMetadataUpdated(const QString& extensionName);
541
542 void extensionScheduledForUninstall(const QString& extensionName);
543
544 void extensionCancelledScheduleForUninstall(const QString& extensionName);
545
546 void extensionScheduledForUpdate(const QString& extensionName);
547
548 void extensionCancelledScheduleForUpdate(const QString& extensionName);
549
550 void extensionUninstalled(const QString& extensionName);
551
553 void extensionBookmarkedChanged(const QString& extensionName, bool value);
554
555 void extensionEnabledChanged(const QString& extensionName, bool value);
556
557 void extensionIdentifedAsIncompatible(const QString& extensionName);
558
560
561 void slicerRequirementsChanged(const QString& revision, const QString& os, const QString& arch);
562 void slicerArchChanged(const QString& slicerArch);
563 void slicerOsChanged(const QString& slicerOs);
565
567
569
570 void messageLogged(const QString& text, ctkErrorLogLevel::LogLevels level) const;
571
572 void installDownloadProgress(const QString& extensionName, qint64 received, qint64 total);
573
575
578
581
582protected slots:
583
584 void onInstallDownloadProgress(qSlicerExtensionDownloadTask* task, qint64 received, qint64 total);
585
588
591
593 qint64 received, qint64 total);
594
596
597protected:
598 QScopedPointer<qSlicerExtensionsManagerModelPrivate> d_ptr;
599
600private:
601 Q_DECLARE_PRIVATE(qSlicerExtensionsManagerModel);
602 Q_DISABLE_COPY(qSlicerExtensionsManagerModel);
603};
604
606
607// MetaType already declared in qSlicerIO.h
608//Q_DECLARE_METATYPE(qSlicerExtensionsManagerModel::ExtensionMetadataType)
609
610#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