GCompris Architecture Reconfig Discussion
Purpose: Provide an alternative binary version with a small footprint in which activities are downloaded on demand.
Phases of development:
P-1 -> Separate ActivityInfo.qml and icons from some activities and make new ActivityInfo.rcc. See whether we are successfully able to load them. The activities selected here will not have have any inter-dependencies on some other activity.
P-2 -> Now for the activities that are inter-dependent, we'll have a new 'activitiy downloader' that drives the download manager in a way that it downloads all dependencies required for running that activity and nothing extra. For example erase_2clic needs erase. So activity dowloader's code will manage accordingly.
P-3 -> Each Activity icon in the main menu shows if it is locally present or not. If the children enters a non local activity it is downloaded. There is no way for the children to erase a specific downloaded activity.
P-4 -> Versioning of APIs. We have two issues to handle here: a) make sure inter dependant activities are kept in sync b) check and update correct version of activity to core. To do this, each ActivityInfo.qml contains the activities it depends on and the version of the core it expects. The activity downloaded checks that and perform the necessary downloads.
P-5 -> We can implement a cleanup of least used activities like a browser manages a cache. We provide in the configuration a cache option with 2 values: "keep all activities", "remove unused activities". When GCompris starts (or quits), we trigger a cleanup of least used activities.