Add-on manager for management of downloadable extras

Registered by Matthew Gates on 2010-11-26

An Add-on manager something along the lines of that in Firefox, for downloading, installing, updating and removing extras: specifically landscapes, scripts, sky cultures, star catalogs, nebula sets.

Blueprint information

Status:
Not started
Approver:
None
Priority:
Low
Drafter:
Matthew Gates
Direction:
Needs approval
Assignee:
None
Definition:
Drafting
Series goal:
None
Implementation:
Not started
Milestone target:
None

Related branches

Sprints

Whiteboard

This blueprint described an evolution of some features we already have in the program, and their extension into a more fully featured add-on manager tool.

As of 0.10.6 we have some parts implemented:
+ landscape installer feature added by Bogdan.
  - Now we have the unzip function (thanks to KDE code).
  - Uninstalls as well
+ star catalog downloader
+ ssystem.ini editor

Components we need to make an add-on manager:
+ new main dialog
  - one tab per add-on type
+ centralized download manager
+ add-on class hierarchy with a sub-class for each add-on type.
  - base class should have pure virtuals for:
    - getting a list of available add-ons for this type
    - downloading an add-by ID
    - installing an add-on by ID
    - checking for updates of an add-on by ID
    - updating an add-on by ID
    - removing an add-on by ID
    - getting descriptive details about the add-on
    - getting installed size of add-on.
  - sub-classes for:
    - landscapes
    - scripts
    - sky cultures
    - star catalogs
    - nebula sets
    - ssystem.ini files
    - full sky surveys
    - plugins

Some add-ons may be mutually exclusive (e.g. alternative startup scripts). Where this is the case there should be a switching mechanism to select one of several alternatives.

Add-ons should be listed in a JSON file on data.stellarium.org or similar.

JSON format like this:

{
  "type": "Stellarium Add-Ons List",
  "format-version": "1.0.0",
  "add-ons": [
    { <add-on-details> },
    { <add-on-details> }
  ]
}

Where <add-on-details> looks something like this:

{
  "type": "landscape",
  "install-base": "{DATAROOT}/landscapes",
  "name": "Beaumont Hills",
  "short": "Short description of landscape",
  "screenshot-url": "http://foo.com/screenshot.jpg",
  "version": "1.0",
  "authors": [
    {<author-details>},
    {<author-details>}
  ]
  "license": "GPLv2",
  "license-url": "http://www.gnu.org/licenses/gpl-2.0.html",
  "downloads": [
    {<download-details>},
    {<download-details>}
  ]
}

Where <author-details> would look something like this:
{
  "author-name": "Barry Gerdes",
  "author-contact": "some free text, probably email",
  "author-url": "http://a.nice.site/with/a/homepage.html"
}

Where <download-details> would look something like this:

{
  "url": "http://foo.com/download.zip",
  "type": "zip",
  "download-size": "3.7M",
  "installed-size": "3.8M",
  "checksum": "22db6a46fe4a31d18d86fb61d23a6c6d",
  "checked": true
}

Add-on feature would maintain a list of one or more URLs of these JSON package lists.

(?)

Work Items

Dependency tree

* Blueprints in grey have been implemented.

This blueprint contains Public information 
Everyone can see this information.