Line 1: |
Line 1: |
− | <noinclude>{{ GoogleTrans-en | es =show | bg =show | zh-CN =show | zh-TW =show | hr =show | cs =show | da =show | nl =show | fi =show | fr =show | de =show | el =show | hi =show | it =show | ja =show | ko =show | no =show | pl =show | pt =show | ro =show | ru =show | sv =show }}{{TOCright}} | + | <noinclude>{{GoogleTrans-en}}{{TOCright}} |
| + | [[Category:Activities|Library]]</noinclude> |
| + | |
| + | ---- |
| + | '''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 = | | = 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 = | | = Objects model = |
Line 22: |
Line 39: |
| | | |
| Every Library object could include: | | Every Library object could include: |
− | * manually included Journal objects
| |
| * auto included Journal objects | | * auto included Journal objects |
− | ** by MIME type
| |
| ** new version of object, if object was already included | | ** new version of object, if object was already included |
| + | ** by datastore fields, like ''mime_type'', ''tags'' etc. |
| * all Journal objects | | * all Journal objects |
| | | |
Line 34: |
Line 50: |
| === Objective tags === | | === Objective tags === |
| | | |
− | Will be set by activity itself after including new Object. | + | Will be set by Library activity itself after including new Object. |
| | | |
| * ''creator'' for activities | | * ''creator'' for activities |
− | * ''creation'' for objects that were generated by activity(''activity_id'' field is not empty) | + | * ''creation'' for objects that were generated by activity (''activity_id'' field is not empty) |
| * ''unbind'' for Journal objects w/o ''activity_id'' field | | * ''unbind'' for Journal objects w/o ''activity_id'' field |
| * ''local'' objects are stored in Journal | | * ''local'' objects are stored in Journal |
− | * ''remote'' link to remote object | + | * ''remote'' object from online ''source'' (only for current session) |
| + | |
| + | === Properties based tags === |
| + | |
| + | * tags values parsed from object's properties |
| | | |
| === Subjective tags === | | === Subjective tags === |
| | | |
− | Will be set by activity authors or users | + | Will be set by objects authors or users |
| | | |
| * ''activity'' required and mutually exclusive for ''content'' | | * ''activity'' required and mutually exclusive for ''content'' |
Line 52: |
Line 72: |
| === Composite tags === | | === Composite tags === |
| | | |
− | User tags could consist of several child tags to represent tree of users tags. | + | User tags could be composite. |
| | | |
− | If we have four objwith tags: | + | If we have: |
| * ''games'' tag -> object #1 | | * ''games'' tag -> object #1 |
| * ''books/nonfiction'' tag -> object #2 | | * ''books/nonfiction'' tag -> object #2 |
Line 60: |
Line 80: |
| * ''news'' tag -> object #4 | | * ''news'' tag -> object #4 |
| | | |
− | On the top level we have: | + | On the top level in ''cloud'' view in ''tags sidebar'' we have: |
| * ''games'' tag -> object #1 | | * ''games'' tag -> object #1 |
| * ''books'' tag -> object #2, object #3 | | * ''books'' tag -> object #2, object #3 |
| * ''news'' tag -> object #4 | | * ''news'' tag -> object #4 |
| | | |
− | After choosing ''books'' tag: | + | After choosing ''books'' tag in ''cloud'' view in ''tags sidebar'': |
| * ''nonfiction'' tag -> object #2 | | * ''nonfiction'' tag -> object #2 |
| * ''science-fiction'' tag -> object #3 | | * ''science-fiction'' tag -> object #3 |
− |
| |
− | See [[#]].
| |
| | | |
| == Properties == | | == Properties == |
Line 87: |
Line 105: |
| How users can share their objects. | | How users can share their objects. |
| | | |
− | === Type of shared objects === | + | === Type of objects === |
| | | |
− | Library user could operate with three kinds 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'' stored in the local Journal; they are regular Journal objects |
− | * ''remote objects'' stored in the Journal of other(online) users | + | ** ''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 === | | === Sources === |
| | | |
− | Every Library object has list of known(not necessarily online) ''sources'' of objects: | + | Every Library object has list of known (not necessarily online) ''sources'' of objects: |
| | | |
− | * ''Sugar users'' joined(if they are online) to this Library session | + | * ''local objects'' stored in local Journal |
− | * ''activities.sugarlabs.org'' | + | * ''Sugar users'' joined (if they are online) to this Library session |
− | * ''various sources'' that are provided by proper backend, for example books from gutenberg.org | + | * (?) ''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. | + | 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 === | | === Synchronize/Upgrade objects === |
Line 114: |
Line 135: |
| === Objects list === | | === Objects list === |
| | | |
− | The list of objects. | + | The list of objects which represents result of ''chosen tags''. |
| | | |
| Modes: | | Modes: |
− | * ''list view'' ala Journal | + | * ''list view'' a la Journal |
| * ''thumbs view'' | | * ''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 === | | === Tags sidebar === |
| + | |
| + | It filters objects for ''objects list''. |
| | | |
| * ''chosen tags'' backslashed list of tags that were chosen | | * ''chosen tags'' backslashed list of tags that were chosen |
− | * ''related tags'' cloud or tree of tags to choose | + | * ''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 it would be added to ''chosen tags'' list, ''related tags'' would reflect on the final list of 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 === | | === Sources sidebar === |
| | | |
− | List of known(not necessarily online) ''sources'' of objects.<br> | + | 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''. | | 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 = | | = Usage scenarios = |
Line 137: |
Line 190: |
| | | |
| # user ''A'' creates/fills his Library object and shares it | | # user ''A'' creates/fills his Library object and shares it |
− | # user ''B'' joins ''A'''s Library session and browses his ''local'' objects, ''B'' can download particular/all ''A'''s ''local'' objects | + | # 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 === | | === Room/Lesson mode === |
Line 149: |
Line 256: |
| So, this mode should contain mini-neighbourhood view for Library object's items. | | So, this mode should contain mini-neighbourhood view for Library object's items. |
| | | |
− | [[Category:Activities]] | + | = 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] |