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/scheduleExtensionForUninstallto 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,
downloadAndInstallExtensionis 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: