W/L: Check for update enhancement
21 Feb 2018 | linux windows ideaThere was basic a check for updates already at compiler level (and it even was fixed recently). But it was providing information only to console. I’m working on automatic toolchain download functionality for Linux/Windows project and it requires version check functionality improvement. Here I describe basic version check that I will propose also for MobiVM current master (it does not contain any Linux/Windows specific parts here).
Changes visible to user
Balloon instead of console output
Code was enhanced to allow high-level code above compiler to display user friendly dialogs instead of console output. In case there is no high level overrides (gradle case) there still will be old style console print.
Version check in RoboVM menu
Now user can trigger version check at any moment. Also if balloon notification was closed this menu causes same update dialog.
Update dialog
This dialog is triggered either by “check for update” menu click or by clicking on updates available
balloon. It contains basic version information and button that will navigate to Download page.
Other changes
Important one is that plugin can detect updates for Snapshot builds which is often useful.
Technical details of implementation
All changes are available in separate branch at dkimitsa/robovm/version_check_enh
Support for snapshots
During development snapshots come under same version and to differentiate version build.timestamp
was added to META-INF/RoboVM/version.properties:
version=${project.version}
build.timestamp=${project.build.timestamp}
And timestamp it is just a date in following format:
<properties>
<maven.build.timestamp.format>yyyyMMdd</maven.build.timestamp.format>
<project.build.timestamp>${maven.build.timestamp}</project.build.timestamp>
</properties>
Extended information block in version.json
To support “what’s new” texts and snapshots there were changes to version.json
. This file is being downloaded (from http://robovm.mobidevelop.com/version) to find out if there is new version is available. Currently is pretty small and contains following:
{"version":"2.3.3"}
New one is packed with extra information and bigger. Increased size is main downside of this enhancement:
{
"release": {
"version": "2.3.3",
"description": "2.3.3 release of OOS MobiVM/RoboVM",
"url": {
"idea": "http://robovm.mobidevelop.com/downloads/releases/idea/"
}
},
"snapshot": {
"version": "2.3.4",
"build.timestamp": 20180228,
"description": "* Added STDERR flush\n* RoboVM menu moved between [tools] and [vcs]",
"url": {
"idea": "http://robovm.mobidevelop.com/downloads/snapshots/idea/"
}
}
}
Structure of it is following:
- two root keys
release
andsnapshot
which corresponding recent version information; - both
release
andsnapshot
contain following data:version
number of today build available;description
text that will go to “what’s new” section;url
map that contains download URLs for each kind of plugins (e.g. idea/eclipse what ever);
- beside this
snapshot
containsbuild.timestamp
to be used to find out if currently used snapshot is outdated.
Other changes
There is a bunch of changes such as:
- UUID was removed from version check to respect user privacy;
- all version check functionality was moved to UpdateChecker class;
- introduced UpdateCheckPlugin interface and it is being used by
UpdateChecker
as service to delegate handling of update notification to higher level. Example: version check happens on compiler level but is delegated to Idea plugin where it is displayed as Balloon notification; - lot of Idea UI changes to display version update dialogs/balloons.
Comments