Journal integration for Scratch

John Maloney jmaloney at media.mit.edu
Thu Jan 15 07:55:48 EST 2009


Hi, Phillip.

Re:
> There is a bug in Scratch version 12. The symbolic link of the Project
> directory doesn't get created (Open Projects shows Scratch.activity
> folder instead). I checked the scripts (scratch-activity and
> scratch-wrapper) but couldn't find where the link should get created.

In Scratch 11, a symbolic link was included in the .xo and unzipping  
re-created that link. Someone else helped me create that mechanism  
(sorry I can't quite remember who). But you are right, it no longer  
works in v12, either because I changed something about my process for  
creating the .xo file or perhaps because of a change in the XO  
software (less likely).

I will look into this.

	-- John


>
>
> Regards,
> Philipp
>
> Bert Freudenberg wrote:
>> The script looks good, except for the name mangling magic (which is  
>> a bit hard to understand because of mis-indentations). This  
>> wouldn't even work with your XO's language set to non-English  
>> (which the majority of XOs use).
>> I would simply name the file "$object_id.sb".
>> - Bert -
>> On 14.01.2009, at 07:04, Philipp Kocher wrote:
>>> 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,
>>> Philipp
>>>
>>> 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 <bert at 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
>>>>>>>>> Journal
>>>>>>>>> (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:
>>>>>>>>
>>>>>>>> http://wiki.laptop.org/go/Activity_bundles#Bundle_Structure
>>>>>>>>
>>>>>>>> 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?
>>>>>> Regards,
>>>>>> Tomeu
>>>>>
>>>>> 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
>>>>> version:
>>>>> - 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
>>>>> /usr/share/icons/sugar/scalable/mimetypes/application-x-squake- 
>>>>> project.svg.
>>>>>
>>>>> Regards,
>>>>> Philipp
>>>>>
>>> <?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"/>
>>>  </mime-type>
>>> </mime-info>
>>> #!/bin/sh
>>> # Author: Bert Freudenberg
>>> # Modified by: John Maloney
>>> # Purpose: Run Scratch using the Squeak virtual machine
>>>
>>> echo "scratch-activity"
>>> echo "$@"
>>>
>>> echo "$0" "$@"
>>> echo
>>>
>>> # arguments are unordered, have to loop
>>> args=""
>>> 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 ;;
>>>   esac
>>>   shift;shift
>>> done
>>>
>>> # 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
>>> fi
>>>
>>> # 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
>>> echo
>>>
>>> # do not crash on dbus errors
>>> export DBUS_FATAL_WARNINGS=0
>>>
>>> if [ -n "$object_id" ] ; then
>>>    JOURNAL_DIR="$SUGAR_ACTIVITY_ROOT/data/Journal"
>>>    mkdir -p "$JOURNAL_DIR"
>>>    temp_filename="$JOURNAL_DIR/temp.sb"
>>>    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 http://schoolserver/Scratch/do_math_3.sb 
>>> .
>>>    # 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  
>>> fileextension)
>>>    if [ -f "$JOURNAL_DIR/temp..sb" ] ; then
>>>        mv "$JOURNAL_DIR/temp..sb" "$temp_filename"
>>>    fi
>>>
>>>    if [[ "$title" == File*from* ]] ; then # for files downloaded  
>>> from server
>>>        filename=${title#*"File "} #cut off head until "File "
>>>        filename=${filename%" from"*} #cut off tail from " from"
>>>            echo "filename: $filename"
>>>           full_filename="$JOURNAL_DIR/$filename"
>>>           echo "full_filename: $full_filename"
>>>           mv "$temp_filename" "$full_filename"
>>>    else # for files from USB flash drive
>>>        full_filename="$JOURNAL_DIR/$title.sb"
>>>               echo "full_filename: $full_filename"
>>>               mv "$temp_filename" "$full_filename"
>>>    fi
>>> else
>>>    full_filename=""
>>> fi
>>> # run Squeak VM with Scratch image
>>> exec /usr/bin/squeak \
>>>    -vm-display-X11 \
>>>    -swapbtn \
>>>    -sugarBundleId $bundle_id \
>>>    -sugarActivityId $activity_id \
>>>    ScratchXO.image \
>>>    "$full_filename"
>




More information about the Devel mailing list