Changes

Jump to navigation Jump to search
no edit summary
Line 33: Line 33:     
  Web.activity/
 
  Web.activity/
    MANIFEST                                  (list of bundle contents)
   
     activity/
 
     activity/
 
         activity.info                          (activity info file)
 
         activity.info                          (activity info file)
Line 40: Line 39:  
         text-plain.svg                        (icons for documents, e.g. "text-plain.svg" for "text/plain")
 
         text-plain.svg                        (icons for documents, e.g. "text-plain.svg" for "text/plain")
 
         text-html.svg
 
         text-html.svg
        contents                              (manifest for bundle contents -- not supported by Sugar)
  −
        contents.sig                          (credentials for signed bundle -- not supported by Sugar)
  −
        permissions.info                      (optional; '''not a stable API''')
   
     bin/
 
     bin/
 
         web-activity                          (launcher script or activity executable)
 
         web-activity                          (launcher script or activity executable)
Line 53: Line 49:  
         mylib.so                              (native library)
 
         mylib.so                              (native library)
 
     icons/
 
     icons/
  −
;MANIFEST
  −
  −
This optional file lists the files that will packaged in the .xo file. If missing, all files in the Activity directory which do not match a default ignore list are packaged.  The default ignore list includes the dist and .git subdirectories, and the .gitignore, MANIFEST, *.pyc, *~, *.bak, pseudo.po files.
      
;activity
 
;activity
Line 82: Line 74:     
  [Activity]
 
  [Activity]
  name = Web
+
  name = Browse
  activity_version = 1
+
  activity_version = 156
host_version = 1
+
  bundle_id = org.laptop.WebActivity
  bundle_id = com.redhat.Sugar.BrowserActivity
  −
license = GPLv2+ and BSD
   
  icon = activity-web
 
  icon = activity-web
  exec = sugar-activity browseractivity.BrowserActivity -s
+
  exec = sugar-activity webactivity.WebActivity -s
  mime_types = application/pdf;image/tiff
+
  mime_types = image/png;image/gif;image/jpeg;text/html;text/uri-list;application/xhtml+xml;application/rss+xml;application/xml;text/css
 +
license = GPLv2+
 +
summary = Surf the world! Here you can do research, watch educational videos, take online courses, find books, connect with friends and more.
 
  update_url = http://host.net/bundles/FooBar
 
  update_url = http://host.net/bundles/FooBar
 
  tags = exploration;web
 
  tags = exploration;web
 +
single_instance = no
 +
max_participants = 4
 +
repository = https://github.com/sugarlabs/browse-activity
    
A more detailed explanation of the valid properties follows:
 
A more detailed explanation of the valid properties follows:
Line 98: Line 93:  
: The activity.info file must begin with [Activity], and only that, on the first line of the file
 
: The activity.info file must begin with [Activity], and only that, on the first line of the file
   −
  name = Web
+
  name = Browse
 
: This is the name is displayed in Sugar referring to the activity.  A 'name' key without a bracketed language code is the "en_US" localized name of the activity.  The activity.info file must have this key.
 
: This is the name is displayed in Sugar referring to the activity.  A 'name' key without a bracketed language code is the "en_US" localized name of the activity.  The activity.info file must have this key.
   −
  activity_version = 1
+
  activity_version = 156
: Each activity.info file must have a "activity_version" key.  The version is a single positive integer.  Larger versions are considered "newer".  The value assigned to this key should be considered '''opaque''' to the activity; the only requirement of the activity is that it must be larger for new activity builds.
+
: Each activity.info file must have a "activity_version" key.  Example versions are 1, 1.2, 1.2.3, 1.2.3-peru, and 1.2.3~me.  Larger versions are considered "newer".  An activity should not use the value, as it may be changed by developers and packagers.  The value must be newer for newer activities.
    
  host_version = 1
 
  host_version = 1
 
: This key is deprecated. This used to specify the version of the Sugar environment the activity is compatible with; however, it was never implemented.
 
: This key is deprecated. This used to specify the version of the Sugar environment the activity is compatible with; however, it was never implemented.
   −
  bundle_id = com.redhat.Sugar.BrowserActivity
+
  bundle_id = org.laptop.WebActivity
: This is the activity bundle identifier.  It is required. The name should conform to the [http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names D-Bus spec] - in particular, hyphens are not allowed (although this wasn't enforced in earlier builds, see [http://dev.laptop.org/ticket/6226 Trac 6226]).  It is recommended that [http://en.wikipedia.org/wiki/Java_package#Package_naming_conventions Java package naming conventions] are used when chosing bundle identifiers, to ensure uniqueness.  Briefly, your name should begin with the reversed domain name of an organization you belong to.
+
: This is the activity bundle identifier.  It is required. The name should conform to the [http://dbus.freedesktop.org/doc/dbus-specification.html#message-protocol-names D-Bus spec] - in particular, hyphens are not allowed (although this wasn't enforced in earlier builds, see [http://dev.laptop.org/ticket/6226 Trac 6226]).  It is recommended that [http://en.wikipedia.org/wiki/Java_package#Package_naming_conventions Java package naming conventions] are used when choosing bundle identifiers, to ensure uniqueness.  Briefly, your name should begin with the reversed domain name of an organization you belong to.
 
: The reversed domain name part is supposed to be rooted in some actual DNS-rooted namespace.  You don't need to own this domain; you just need to have a reasonable claim on some ''unique'' name at that domain. There are several ways to derive one:
 
: The reversed domain name part is supposed to be rooted in some actual DNS-rooted namespace.  You don't need to own this domain; you just need to have a reasonable claim on some ''unique'' name at that domain. There are several ways to derive one:
 
:* If your email address is ''yourname''@''somemailhost''.com, then you could use ''com.somemailhost.yourname''.''YourActivity''.
 
:* If your email address is ''yourname''@''somemailhost''.com, then you could use ''com.somemailhost.yourname''.''YourActivity''.
 
:* You could set up a web page on a free hosting service with information about your activity, and use a name derived from its URL.  For example, if you create a page at http://www.geocities.com/xotumusica for your activity, then com.geocities.www.xotumusica is a reasonable bundle_id.
 
:* You could set up a web page on a free hosting service with information about your activity, and use a name derived from its URL.  For example, if you create a page at http://www.geocities.com/xotumusica for your activity, then com.geocities.www.xotumusica is a reasonable bundle_id.
 
:* If nothing else is available, even org.sugarlabs.wiki.''Your Activity Page Title'' is probably a reasonable bundle_id, provided that you create the 'Your Activity Page Title' page.  Remember, bundle_ids should be unique, so you should double check that the 'Your Activity Page Title' page doesn't already exist (and then create it) before using this as your bundle_id.
 
:* If nothing else is available, even org.sugarlabs.wiki.''Your Activity Page Title'' is probably a reasonable bundle_id, provided that you create the 'Your Activity Page Title' page.  Remember, bundle_ids should be unique, so you should double check that the 'Your Activity Page Title' page doesn't already exist (and then create it) before using this as your bundle_id.
: In the Python bindings, the bundle_id is also used as the activity's default service type when the activity is shared on the network.  To determine this type, the distinct parts (separated by the '.' character) are reversed, any '.' is replaced by a '_' character, and the type is prefixed by a '_' character.  So in this example, the default service type would be "_BrowserActivity_Sugar_redhat_com".
+
: In the Python bindings, the bundle_id is also used as the activity's default service type when the activity is shared on the network.  To determine this type, the distinct parts (separated by the '.' character) are reversed, any '.' is replaced by a '_' character, and the type is prefixed by a '_' character.  So in this example, the default service type would be "_WebActivity_laptop_org".
   −
  license = GPLv2+ and BSD
+
  license = GPLv2+
 
: This field names the license used for the activity bundle (the binary .xo file).  The contents of this field should conform to the same guidelines as the [http://fedoraproject.org/wiki/Packaging/LicensingGuidelines#License:_field <code>License:</code> field] of an RPM package; consult the [http://fedoraproject.org/wiki/Packaging/LicensingGuidelines Fedora Licensing Guidelines] for more information.  A 'license' field naming an entry or entries in the "Good Licenses" table at [http://fedoraproject.org/wiki/Licensing Fedora's Licensing list] is required for any activities distributed by OLPC.
 
: This field names the license used for the activity bundle (the binary .xo file).  The contents of this field should conform to the same guidelines as the [http://fedoraproject.org/wiki/Packaging/LicensingGuidelines#License:_field <code>License:</code> field] of an RPM package; consult the [http://fedoraproject.org/wiki/Packaging/LicensingGuidelines Fedora Licensing Guidelines] for more information.  A 'license' field naming an entry or entries in the "Good Licenses" table at [http://fedoraproject.org/wiki/Licensing Fedora's Licensing list] is required for any activities distributed by OLPC.
   Line 121: Line 116:  
: It points to the activity's icon.  The icon is looked up in the activity bundle's 'activity' directory (the same directory the activity.info file is in).  It cannot contain a path.  When searching for the icon in the activity bundle's 'activity' directory, only a file with the icon name and the extension '.svg' will be looked for.  This property is required unless 'show_launcher' is 'no' (see below).
 
: It points to the activity's icon.  The icon is looked up in the activity bundle's 'activity' directory (the same directory the activity.info file is in).  It cannot contain a path.  When searching for the icon in the activity bundle's 'activity' directory, only a file with the icon name and the extension '.svg' will be looked for.  This property is required unless 'show_launcher' is 'no' (see below).
   −
  exec = sugar-activity webactivity.WebActivity
+
  exec = sugar-activity webactivity.WebActivity -s
 
: The exec key specifies the executable which [[Sugar]] runs to start the activity instances. Environment variables given on the exec line are expanded. Executable files should be placed into the bin/ directory in the bundle. It should support the following arguments:
 
: The exec key specifies the executable which [[Sugar]] runs to start the activity instances. Environment variables given on the exec line are expanded. Executable files should be placed into the bin/ directory in the bundle. It should support the following arguments:
   Line 143: Line 138:  
  tags = exploration;web
 
  tags = exploration;web
 
: Tags give more context in which to place the activity. This is used to allow users to find activities more easily in the journal, the home view, [http://activities.sugarlabs.org http://activities.sugarlabs.org], etc.
 
: Tags give more context in which to place the activity. This is used to allow users to find activities more easily in the journal, the home view, [http://activities.sugarlabs.org http://activities.sugarlabs.org], etc.
 +
 +
single_instance = yes
 +
: This key is optional. If not present, or if present with a value of "no", multiple instances of the activity can be launched at once. If present with a value of "yes", then only one instance of the activity will be open at any one time. This key was added in order to flag activities that use resources that cannot be shared.
 +
 +
max_participants = 4
 +
: This key is optional. If not present, or if present with a value of <=1, the activity is not shared. Otherwise, it limits the number of participants who can join a shared activity. Note that setting max_participants in activity.py is deprecated.
 +
 +
summary = ...
 +
: A short summary of the activity is displayed in the List View.
 +
 +
repository = https://...
 +
: The URL of the master git repository for the activity, for use by {{code|git clone}}. Since activities are not all hosted in a single repository, it is important to include a link so that users can readily find the activity. Some git hosting services allow the URL to be used by web browser as well as {{code|git clone}}.
    
== Localization/translation of the activity name and tags ==
 
== Localization/translation of the activity name and tags ==
Line 192: Line 199:  
== activity/permissions.info ==
 
== activity/permissions.info ==
   −
'''Note: the API described in this section is NOT STABLE and will probably change in future releases; perhaps drastically.'''
+
'''Note: the API described in this section is DEPRECATED.'''
    
Bitfrost describes a variety of security-related settings which activity authors can specify about their activity. At the option of the activity author, these settings can be described in a file called 'permissions.info' which can be placed alongside 'activity.info' in the 'activity' directory of the bundle.  
 
Bitfrost describes a variety of security-related settings which activity authors can specify about their activity. At the option of the activity author, these settings can be described in a file called 'permissions.info' which can be placed alongside 'activity.info' in the 'activity' directory of the bundle.  
Line 228: Line 235:  
== See also ==
 
== See also ==
   −
* [[olpc:Bundle]] for a generic introduction to bundles
   
* [[olpc:Activity tutorial]]
 
* [[olpc:Activity tutorial]]
  

Navigation menu