Difference between revisions of "Documentation/Labs/AutomaticUpdateAndInstallationFramework"
From Slicer Wiki
Mneugebauer (talk | contribs) (added link to my user page, created link for subpage to shift previous effort information to) |
Mneugebauer (talk | contribs) |
||
Line 35: | Line 35: | ||
* Update: [[User:Mneugebauer|Mathias]] is currently working on this task ([[{{FULLPAGENAME}}/PreviousEfforts|Previous Efforts by Dennis]]) | * Update: [[User:Mneugebauer|Mathias]] is currently working on this task ([[{{FULLPAGENAME}}/PreviousEfforts|Previous Efforts by Dennis]]) | ||
+ | * Meta issue: [http://www.na-mic.org/Bug/view.php?id=2779 2779]: Mechanism to keep track of the installed extensions across version | ||
− | == | + | == Idea == |
− | * | + | * After installing a new version of Slicer, the user can select from all previously installed extensions and batch-install them |
− | * | + | * extensions installed in the last (previous) Slicer versions are marked and preselected (one click-solution for getting the previous setup) |
+ | * extensions that where previously installed but are not compatible for some reason, are shown but not selectable | ||
+ | * UI: a third tab ("Restore Extensions") should be added to the Extension Manager and provide at least a list view for selection / a button button for installing the selected extensions | ||
+ | |||
+ | == Gathering information about previous extensions == | ||
+ | * extensions information / subfolders containing the extensions are available in the "NA-MIC" folder | ||
** on Linux, that's in ~/.config/NA-MIC | ** on Linux, that's in ~/.config/NA-MIC | ||
** on Windows, in AppData/Roaming | ** on Windows, in AppData/Roaming | ||
** on OS X, seems to be a subdirectory of the application bundle | ** on OS X, seems to be a subdirectory of the application bundle | ||
− | * | + | * folder contains and Slicer-[Revision].ini file that points to paths relevant for extensions (modules/libraries/dependencies) |
− | + | * however, no explicit information about installed extensions are stored there, information about installed extension is gathered at runtime by parsing the extension subfolders | |
− | * | + | * '''PROPOSAL:''' added the extension IDs of all currently installed extensions in an additional setting information <code>[Extensions]/InstalledExtension</code>, thus, no folders need to be parsed and only the .ini files are needed |
− | |||
− | == | + | == Changes == |
− | * a new ( | + | * <code>Base/QTGUI/Resources/UI/qSlicerExtensionsManagerWidget.ui</code> |
− | * | + | ** a new tab ("Restore Extensions") was added |
− | ** extension | + | ** this tab contains a placeholder-widget for the <code>qSlicerExtensionsRestoreWidget</code> |
− | ** | + | * <code>qSlicerExtensionsManagerModel</code> |
− | ** | + | ** add a function that provides informations about previous extensions: <code>getExtensionRestoreInformation()</code> |
− | ** | + | ** add a callback for tracking the progress during non-update related updates: <code>onInstallDownloadProgress</code> (used in: <code>downloadAndInstallExtension</code>) |
− | + | ** extend <code>installExtension</code> / <code>scheduleExtensionForUninstall</code> to add (remove) ids of installed extensions to a new parameter <code>[Extensions]/InstalledExtension</code> | |
+ | |||
+ | == Addition == | ||
+ | * <code>qSlicerExtensionsRestoreWidget</code> | ||
+ | ** a new widget that renders a list of available extension that were previously installed | ||
+ | ** on initialization it calls <code>getExtensionRestoreInformation()</code> and builds a ListItemWidget | ||
+ | ** if "Install selected" is triggered, <code>downloadAndInstallExtension</code> is called sequentially for each selected extension | ||
+ | ** after installation of all extensions, the list is updated | ||
+ | [[File:Image2016-11-25 15-26-52.png|thumb|Screenshot of the "restore extension" widget]] | ||
== Progress == | == Progress == | ||
+ | * Adapt extensions manager model to provide neccessary information '''Done''' | ||
+ | * Extend the UI of the extensions manager (new tab, new widget) '''Done''' | ||
+ | * Add a widget that provides a selectable list of previously installed extensions '''Done''' | ||
+ | * Install procedure (with feedback) for selected extensions '''Done''' | ||
+ | * Discuss the proposed solution with JC '''ToBeDone''' | ||
+ | * Adapt solution accordingly '''ToBeDone''' | ||
+ | * Submit solution '''ToBeDone''' | ||
− | + | == Patch == | |
− | |||
− | |||
− | |||
− | + | == Questions == | |
− | * | + | * Does the uninstall progress also remove the extension-subfolders? |
+ | * Is the proposed solution (accessing the .ini file) suitable for all OS? | ||
== Completed == | == Completed == | ||
− | |||
NA | NA | ||
Revision as of 10:45, 7 December 2016
Home < Documentation < Labs < AutomaticUpdateAndInstallationFrameworkContents
Overview
This page serves as roadmap for the Slicer Automatic Update and Installation framework.
Use cases:
- New Slicer version installed locally should be updated with the list of extensions previously installed.
- Self update of Slicer
Terminology
- User Interface
- Extensions Manager is a Slicer dialog allowing the user to Search, Install, Remove and disable extensions.
- ExtensionWizard module: This is a Slicer module providing a graphical interface within Slicer to aid in the creation of Slicer extensions.
- Command line
- ExtensionWizard is a command line tool to simplify the process of creating and contributing extensions.
- API
- ExtensionsManagerModel: This is the backend of the Extensions Manager displayed to the user
- Utilities/Scripts/SlicerWizard: This is a python package used in the ExtensionWizard
Convention
Tasks listed in this page can be associated with any of these state:
Use case: Keep track of the installed extensions across version
The goal here is to simplify the number of steps allowing people to reinstall extensions that were used in a previous installation.
- Update: Mathias is currently working on this task (Previous Efforts by Dennis)
- Meta issue: 2779: Mechanism to keep track of the installed extensions across version
Idea
- After installing a new version of Slicer, the user can select from all previously installed extensions and batch-install them
- extensions installed in the last (previous) Slicer versions are marked and preselected (one click-solution for getting the previous setup)
- extensions that where previously installed but are not compatible for some reason, are shown but not selectable
- UI: a third tab ("Restore Extensions") should be added to the Extension Manager and provide at least a list view for selection / a button button for installing the selected extensions
Gathering information about previous extensions
- extensions information / subfolders containing the extensions are available in the "NA-MIC" folder
- on Linux, that's in ~/.config/NA-MIC
- on Windows, in AppData/Roaming
- on OS X, seems to be a subdirectory of the application bundle
- folder contains and Slicer-[Revision].ini file that points to paths relevant for extensions (modules/libraries/dependencies)
- however, no explicit information about installed extensions are stored there, information about installed extension is gathered at runtime by parsing the extension subfolders
- PROPOSAL: added the extension IDs of all currently installed extensions in an additional setting information
[Extensions]/InstalledExtension
, thus, no folders need to be parsed and only the .ini files are needed
Changes
Base/QTGUI/Resources/UI/qSlicerExtensionsManagerWidget.ui
- a new tab ("Restore Extensions") was added
- this tab contains a placeholder-widget for the
qSlicerExtensionsRestoreWidget
qSlicerExtensionsManagerModel
- add a function that provides informations about previous extensions:
getExtensionRestoreInformation()
- add a callback for tracking the progress during non-update related updates:
onInstallDownloadProgress
(used in:downloadAndInstallExtension
) - extend
installExtension
/scheduleExtensionForUninstall
to add (remove) ids of installed extensions to a new parameter[Extensions]/InstalledExtension
- add a function that provides informations about previous extensions:
Addition
qSlicerExtensionsRestoreWidget
- a new widget that renders a list of available extension that were previously installed
- on initialization it calls
getExtensionRestoreInformation()
and builds a ListItemWidget - if "Install selected" is triggered,
downloadAndInstallExtension
is called sequentially for each selected extension - after installation of all extensions, the list is updated
Progress
- Adapt extensions manager model to provide neccessary information Done
- Extend the UI of the extensions manager (new tab, new widget) Done
- Add a widget that provides a selectable list of previously installed extensions Done
- Install procedure (with feedback) for selected extensions Done
- Discuss the proposed solution with JC ToBeDone
- Adapt solution accordingly ToBeDone
- Submit solution ToBeDone
Patch
Questions
- Does the uninstall progress also remove the extension-subfolders?
- Is the proposed solution (accessing the .ini file) suitable for all OS?
Completed
NA
Use case: Self update of Slicer
Proposed Changes
- Display list of nightly builds in a web view
- Selecting a new version should automate:
- download
- auto-start installer, with extra information for the next steps
- auto-start new Slicer
- possibly, directly going to the above extensions-reinstallation tab (maybe not even showing the main window before)
- stuff that is there, or might be useful
- cross-platform re-start functionality is there (as part of extension installation)
- probably, at least on Win/Linux, "start Slicer after installation" is possible
- unattended installation on any platform(s)?
Notes
2016.05.03
- Ability to ask the installer (or Slicer) to install other extensions
- Would it make sense to transition to http://doc.qt.io/qtinstallerframework/ ?
- Serialize what is installed in you current Slicer
- Update of installed extensions: