**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, I think we'll have to code a newwe'll have a new 'activitiy downloader' that drives the download mangerager in a way that it downloads all dependencies required for running that activity and nothing extra. As mentioned earlier by Johnny, For example erase_2clic needs erase. So download managSo activity dowloader's code will manage accordingly.
P-3 -> Now providing option of selective activity download to end-user in a way thatEach Activity icon in the main menu shows if it is easy to understandlocally present or not. I suggest that we have two buttons at the very beginning of the app,If the children enters a non local activity it is downloaded. that prompts user with two options/buttons: a) Full DThere is no way for the children to erase a specific download b) Seleed active downloadity.
P-4 -> Versioning of APIs. I'm a little unsure here. We have two issues to handle here: a) Avoid download of duplicatemake sure inter dependant activity on the user endies are kept in sync b) check and update correct version of activity to core. I think one of the ways could beTo do this, while we are creating a separate activityInfo.rcc for every activity,each ActivityInfo.qml contains the activities it depends on and the version of the core it expects. the download manger could check the corresponding ActivityInfo.qml file in activityInfo.rcc for version and then perform the necessary actionThe activity downloaded checks that and perform the necessary downloads.
P-5 -> If allWe can implement a cleanup of the above is done,least used activities like a browser manages a cache. I think we could also think of implementing anWe provide in the configuration a cache option that allows user to delete a particularwith 2 values: "keep all activity.ies", Suppose someone has completed all the levels of the activity and doesn't use the activity anymore then this option would help there.
Implementation of P-5 -> We can add a ActivityHandler.cpp in the core that will keep track of thi"remove unused activities". When GCompris starts (or quits), we trigger a cleanup of least used activities.
In my humble opinion, this would take around 12 weeks including the testing.