Hi John

Yes, we need the mimetypes.xml file as well (thanks Tomeu I forgot the USB flash drive use case). I have tested the attached mimetypes.xml. It is working fine. Put it in the activity directory.

Furthermore we have to change the scratch-activity script, so the parameter with the scratch project object-id gets converted (copy-from-journal) in a file and passed on to scratch. See the attached scratch-activity script. I am not an expert with bash scripts, so please give feedback.

I would like to extend the script so project files in the journal directory are copied back to the journal after exiting scratch, but for opening project it should work fine.

Best regards,

John Maloney wrote:
Hi, Phillip.

Thanks for all your hard work in tracking this down. I had looked at several other packages, including EToys, and couldn't figure out from them how to do this.

I will make these changes to the next XO Scratch bundle.

Is that all I need to do? What about the mime types XML file similar to the one added by Etoys? Does that turn out to be unnecessary?

    -- John

On Jan 13, 2009, at 12:55 AM, Philipp Kocher wrote:
Tomeu Vizoso wrote:
On Mon, Jan 12, 2009 at 18:50, Bert Freudenberg <b...@freudenbergs.de> wrote:
On 12.01.2009, at 18:11, Tomeu Vizoso wrote:
So what would the Scratch activity have to do so files put into the
(maybe by downloading) are displayed using a Scratch icon rather than the
generic document icon?
Shipping a mimetypes.xml file inside the bundle as explained here:


Sugar will call update-mime-database and will merge that file into the
xdg mime database.

I think that John is already trying this.

Guess I'm confused then - I thought that's exactly what Philipp had done.
I think he just changed the mime_types field in the .info file.
And I just checked and it does work with Etoys projects. When downloading one it indeed gets an etoys icon (although at a smaller size - why is that?)
No idea, though I think that the mime database is updated in the etoys
rpm and not in the bundle, am I right?

Thanks Tomeu to lead me to the /home/olpc/.local directory. However, the
mimetypes.xml is not necessary to get the icon in the journal. I just
had to copy the scratch icon file in the activity directory to
"application-x-scratch-project.svg" (also in the scratch activity
dirctory). The Memorize Activity is a good example for using that feature.
Sugar has to be restarted after installing Scratch to show the icon.

John, could you please make the following changes in the next Scratch
- add the line "mime_types = application/x-scratch-project" to the
activity.info file
- copy the scratch icon to "application-x-scratch-project.svg" in the
activity directory

Etoys gets configured by different packages. e.g. the rpm
etoys-3.0.2153-1.noarch is adding the file
/usr/share/mime/packges/etoys.xml and the rpm sugar-artwork-0.82.3-1.olpc3 is
adding the file


<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info";>
   <mime-type type="application/x-scratch-project">
     <comment>Scratch Project</comment>
     <glob pattern="*.sb"/>
# Author: Bert Freudenberg
# Modified by: John Maloney
# Purpose: Run Scratch using the Squeak virtual machine

echo "scratch-activity"
echo "$@"

echo "$0" "$@"

# arguments are unordered, have to loop
while [ -n "$2" ] ; do
    case "$1" in
        -b | --bundle-id)   bundle_id="$2"   ; args="$args BUNDLE_ID $2" ;;
        -a | --activity-id) activity_id="$2" ; args="$args ACTIVITY_ID $2";;
        -o | --object-id)   object_id="$2"   ; args="$args OBJECT_ID $2";;
        -u | --uri)         uri="$2"         ; args="$args URI $2";;
        *) echo unknown argument $1 $2 ;;

# really need bundle id and activity id
if [ -z "$bundle_id" -o -z "$activity_id" ] ; then
  echo ERROR: bundle-id and activity-id arguments required
  echo Aborting
  exit 1

# some debug output
echo launching $bundle_id instance $activity_id
[ -n "$object_id" ] && echo with journal obj $object_id
[ -n "$uri"       ] && echo loading uri $uri

# do not crash on dbus errors

if [ -n "$object_id" ] ; then
        mkdir -p "$JOURNAL_DIR"
        title=`copy-from-journal -o "$object_id" -m "$temp_filename" | grep 
"title "`
        # title is something like this for files downloaded from server:
        #       title -> File do_math_3.sb from 
        # or like this if copied from USB flash drive:
        #       title -> do_math_3
        title=${title#*"title -> "} #cut off description
        echo "title: $title"

        # workaround for copy-from-journal bug (adds another dot before 
        if [ -f "$JOURNAL_DIR/temp..sb" ] ; then
                mv "$JOURNAL_DIR/temp..sb" "$temp_filename"

        if [[ "$title" == File*from* ]] ; then # for files downloaded from 
                filename=${title#*"File "} #cut off head until "File "
                filename=${filename%" from"*} #cut off tail from " from"
                echo "filename: $filename"
                echo "full_filename: $full_filename"
                mv "$temp_filename" "$full_filename"
        else # for files from USB flash drive
                echo "full_filename: $full_filename"
                mv "$temp_filename" "$full_filename"
# run Squeak VM with Scratch image
exec /usr/bin/squeak \
        -vm-display-X11 \
        -swapbtn \
        -sugarBundleId $bundle_id \
        -sugarActivityId $activity_id \
        ScratchXO.image \
Devel mailing list

Reply via email to