Activities/Library: Difference between revisions
| (96 intermediate revisions by 6 users not shown) | |||
| Line 1: | Line 1: | ||
<noinclude>{{ GoogleTrans-en | <noinclude>{{GoogleTrans-en}}{{TOCright}} | ||
[[Category:Activities|Library]]</noinclude> | |||
== Purposes | ---- | ||
'''NOTE:''' Core functionality of Library was moved to [[Features/Unified Browser for Objects]], since now Library will be implemented in plugin form (as a separate activity). | |||
---- | |||
= Thanks to = | |||
Library activity idea was inspired by [http://thread.gmane.org/gmane.comp.education.sugar.discuss/2586 iaep@ mailing list thread]. | |||
= Related ideas = | |||
* [http://wiki.laptop.org/go/Journal%2C_reloaded Journal, reloaded] | |||
* [[Design_Team/Designs/Journal#01|Journal mockups]] | |||
* [[Unified Bundles]] | |||
* [[User:Alsroot/trash/Unified Objects | Unified Objects]] | |||
* ... | |||
= Purposes = | |||
Cornerstone ideas: | Cornerstone ideas: | ||
* implement [[Unified Objects]] proposal to have unified method to create, reuse and share ''all'' Objects in Sugar | * implement [[User:Alsroot/trash/Unified Objects | Unified Objects]] proposal to have unified method to create, reuse and share ''all'' Objects in Sugar | ||
* work with ''remote'' Sugar Objects in the same way like with ''local'' | * work with ''remote'' Sugar Objects in the same way like with ''local'' | ||
* make this activity Sucrose version independent(0.82+) | * make this activity Sucrose version independent (0.82+) | ||
= Objects model = | |||
How it looks like from top-level point of view. | How it looks like from top-level point of view. | ||
== Everything is an object == | |||
So, journal objects, activities/activity-bundles, content/content-bundles are the same level objects. | So, journal objects, activities/activity-bundles, content/content-bundles are the same level objects. | ||
| Line 22: | Line 39: | ||
Every Library object could include: | Every Library object could include: | ||
* auto included Journal objects | |||
* auto included objects | |||
** new version of object, if object was already included | ** new version of object, if object was already included | ||
* all objects | ** by datastore fields, like ''mime_type'', ''tags'' etc. | ||
* all Journal objects | |||
== Tags == | |||
Every Library object have finite quantity of predefined tags and infinite quantity of users tags. | |||
=== Objective tags === | |||
Will be set by Library activity itself after including new Object. | |||
* ''creator'' for activities | |||
* ''creation'' for objects that were generated by activity (''activity_id'' field is not empty) | |||
* ''unbind'' for Journal objects w/o ''activity_id'' field | |||
* ''local'' objects are stored in Journal | |||
* ''remote'' object from online ''source'' (only for current session) | |||
=== Properties based tags === | |||
* tags values parsed from object's properties | |||
=== Subjective tags === | |||
Will be set by objects authors or users | |||
* ''activity'' required and mutually exclusive for ''content'' | |||
* ''content'' required and mutually exclusive for ''activity'' | |||
* ''endless quantity of users tags'' | |||
=== Composite tags === | |||
User tags could be composite. | |||
If we have: | |||
* ''games'' tag -> object #1 | |||
* ''books/nonfiction'' tag -> object #2 | |||
* ''books/science-fiction'' tag -> object #3 | |||
* ''news'' tag -> object #4 | |||
On the top level in ''cloud'' view in ''tags sidebar'' we have: | |||
* ''games'' tag -> object #1 | |||
* ''books'' tag -> object #2, object #3 | |||
* ''news'' tag -> object #4 | |||
After choosing ''books'' tag in ''cloud'' view in ''tags sidebar'': | |||
* ''nonfiction'' tag -> object #2 | |||
* ''science-fiction'' tag -> object #3 | |||
== Properties == | |||
Every object can have: | |||
* ''summary'' short explanation | |||
* ''description'' longer explanation | |||
* ''icon'' of object | |||
* ''screenshot'' of object | |||
* ''rank'' | |||
By default, some properties could be filled from Journal fields or from object itself (like .ogg properties). | |||
== Sharing == | |||
How users can share their objects. | |||
=== Type of objects === | |||
Library user could operate with two kinds of objects: | |||
* ''local objects'' stored in the local Journal; they are regular Journal objects | |||
** ''local objects'' that were created on local system | |||
** ''local objects'' that were downloaded from remote ''source''<br>user can sync them with original remote objects | |||
* ''remote objects'' stored in the Journal of other (online) users | |||
=== Sources === | |||
Every Library object has list of known (not necessarily online) ''sources'' of objects: | |||
* ''local objects'' stored in local Journal | |||
* ''Sugar users'' joined (if they are online) to this Library session | |||
* (?) ''activities.sugarlabs.org'' | |||
* (?) ''various sources'' that are provided by proper backend, for example books from gutenberg.org | |||
If ''source'' is online user can browse his objects (in separate way or merging them to the main set of objects) and download or download+start them. | |||
=== Synchronize/Upgrade objects === | |||
User can manually/auto synchronize ''local'' versions with ''remote'' versions from online ''sources''. | |||
= UI = | |||
Core UI components. | |||
=== Objects list === | |||
The list of objects which represents result of ''chosen tags''. | |||
Modes: | |||
* ''list view'' a la Journal | |||
* ''thumbs view'' | |||
* ''grid view'' a la Calibre | |||
User have several options for list items: | |||
* ''open'' object, for non-''creator'' objects<br>for ''unbind'' objects use the "right" activity to handle it i.e. open .txt in ReadEText not in Write | |||
* ''create'' new objects, for ''creator'' objects | |||
* ''edit'' current object, for ''creator'' objects | |||
* ''download'' remote object, if current object is from remote ''source'' and wasn't downloaded previously | |||
* ''sync'' current object with remote one, if current object was originally downloaded from remote ''source'' | |||
* ''delete'' object from local system (i.e., from the Journal), if current object was originally downloaded from remote ''source'' it would turn to "un-downloaded" state | |||
=== Tags sidebar === | |||
It filters objects for ''objects list''. | |||
* ''chosen tags'' backslashed list of tags that were chosen | |||
* ''related tags'' | |||
** cloud of ''related tags'' | |||
** tree (made by ''composite tags'') of ''related tags'' | |||
* without any tags i.e. all objects | |||
After proper ''tag'' was chosen: | |||
# selected ''tag' would be added to ''chosen tags'' list | |||
# ''related tags'' would reflect on the final list of objects | |||
# ''objects list'' would contain the final list of objects | |||
User can choose what kinds of tags it should contain: | |||
* ''objective tags'' | |||
* ''properties based tags'' | |||
* ''subjective tags'' | |||
=== Sources sidebar === | |||
It filters objects for ''tags sidebar'' | |||
List of known (not necessarily online) ''sources'' of objects.<br> | |||
User can select proper item to view objects only for this ''source''. | |||
=== Mockup === | |||
[[Image:library.svg|200px]] | |||
[[Image:-1.png|200px]] | |||
[[Image:-2.png|200px]] | |||
[[Image:-3.png|200px]] | |||
[[Image:-4.png|200px]] | |||
= Usage scenarios = | |||
=== Share objects between Sugar users === | |||
# user ''A'' creates/fills his Library object and shares it | |||
# user ''B'' joins ''A'''s Library session | |||
# ''B'' browses ''A''s ''local'' objects | |||
# ''B'' can download particular/all ''A'''s ''local'' objects | |||
# ''B'' can merge ''A'''s ''local'' objects to the objects list (only for current session) | |||
# during the next online session ''B'' can synchronize previously downloaded objects | |||
=== (?) Download objects from non-Sugar sources === | |||
# user selects proper non-sugar source in the sources list, for example activities.sugarlabs.org or gutenberg.org | |||
# makes it online | |||
# user browses remote objects | |||
# user can download particular/all remote objects | |||
# user can merge remote objects to the objects list(only for current session) | |||
=== Keep activities up-to-date === | |||
# user creates "Activities" Library object | |||
# downloads activities from proper source | |||
# make these activities auto-updated | |||
# add rule to include to this "Activities" object all activities | |||
# treats created Library object like a regular Home view i.e. use it to run all (preinstalled and downloaded) activities | |||
# "auto-updated" should mean that downloaded activities will be up-to-date (in some way) when "Activities" object is run | |||
=== Publish objects on non-Sugar sources === | |||
# selects object to publish in object list | |||
# click "publish" button | |||
= Implementation = | |||
Implementation details. | |||
=== Database model === | |||
Library follows simple rules: | |||
* use local datastore API to search/filter ''local objects'' | |||
* use remote datastore API(in some way) to search/filter ''remote objects'' | |||
* use telepathy tubes for notifying users about changes | |||
* sync shared objects while opening Library activity or manually | |||
= Going further = | |||
=== Integration with Sugar components === | |||
* downloaded files by Browse activity | |||
=== Simplify UI usage === | |||
* several levels of UI complexity | |||
* presets with different sets of UI components | |||
=== Various non-sugar ''sources'' === | |||
* FTP servers | |||
=== Room/Lesson mode === | |||
At the first approach it could look like: | |||
# teacher prepares one or several Library objects for future lesson | |||
# during the lesson teacher shares proper Library object for all students | |||
# teacher could observe if all students were joined to proper Library object, to proper object inside of Library object | |||
So, this mode should contain mini-neighbourhood view for Library object's items. | |||
= Roadmap = | |||
==== | {| border=1 cellpadding=3 style="border: 1px solid white; border-collapse: collapse; background: #e3e4e5;" | ||
|-style="background:#787878; color: white;" | |||
! Task | |||
! Planned date | |||
! Real date | |||
|- | |||
| Local version<br>v1 | |||
| 2009-05-12 | |||
| 2009-05-29 | |||
|- | |||
| Remote version(Sugar users as an objects source) | |||
| 2009-05-19 | |||
| | |||
|- | |||
| Publish objects on activities.sugarlabs.org | |||
| 2009-05-26 | |||
| | |||
|- | |||
| Provide [[#Keep activities up-to-date]] scenario for LTSP | |||
| | |||
| | |||
|- | |||
| Provide [[#Keep activities up-to-date]] scenario for intranet library portal | |||
| | |||
| | |||
|- | |||
|} | |||
== | == Activity Library == | ||
See also [[Activities/Activity Library]]. | |||
= | = Resources = | ||
[[ | * [http://git.sugarlabs.org/projects/library Sources] | ||
* [http://activities.sugarlabs.org/en-US/sugar/addon/4089 Activity Library page] | |||