[Sugar-devel] [PATCH sugar] Friendstray: make sure the tray is right on the sharer side OLPC #10817

Simon Schampijer simon at schampijer.de
Mon Jul 4 11:08:11 EDT 2011


On 07/02/2011 06:50 PM, Sascha Silbe wrote:
> Excerpts from Simon Schampijer's message of Fri Jun 24 11:57:56 +0200 2011:
>> The code path that listens for the 'activity-added' signal is used to
>> track the following use case: 'A' starts an activity
>> (he gets the 'active-activity-changed' signal from the shell), he then
>> at a later point shares the activity. In order to track joining/leaving
>> buddies he needs to get the shared activity. On other machines if we
>> receive the 'activity-added' signal we can ignore it, therefore the
>> check if the current active activity is the shared one.
>
> I understood neither the description nor the patch at first. Let's go
> into detail a bit:
>
>
> Sequence of events:
>
> A					B
> ---------------------------------------------------------------------------
> starts activity
> shell:active-activity-changed fires
> shares activity
> neighborhood:activity-added fires?	neighborhood:activity-added fires
> 					joins activity
> 					shell:active-activity-changed fires
>
>
> According to the HIG, the People side of the Frame shows the individuals
> that the user is collaborating with in the currently active
> activity. [1]

Correct.

> On the "sharer" side shell:active-activity-changed will fire before a
> shared activity object exists. So we need to wait for the corresponding
> neighborhood:activity-added signal in order to access the shared
> activity object and connect to its buddy-added and buddy-received
> signals.
>
> On the "joiner" side the shared activity object is already available
> when shell:active-activity-changed fires, so we can connect to the
> signals right away. neighborhood:activity-added doesn't need to do
> anything in this case.
>
> When switching between different activities, the shared activity object
> also already exists (if the activity is shared at all), so again
> neighborhood:activity-added should be a no-op.

Yes, this all is true.

>> +++ b/src/jarabe/frame/friendstray.py
>> @@ -75,6 +75,10 @@ class FriendsTray(VTray):
>>       def __neighborhood_activity_added_cb(self, neighborhood_model,
>>                                            shared_activity):
>>           logging.debug('FriendsTray.__neighborhood_activity_added_cb')
>> +        active_activity = shell.get_model().get_active_activity()
>> +        if active_activity.get_activity_id() != shared_activity.activity_id:
>> +            return
>> +
>
> With the above understanding, shouldn't we reset self._shared_activity
> to None in __active_activity_changed_cb() and add the following check
> before yours?
>
>          if self._shared_activity is not None:
>              return

So my check prevents on any other machine then the sharer machine the 
neighborhood:activity-added to have any effect. All the rest should work 
fine. AFAIK your addition is not needed, from testing and looking at the 
code. But maybe I do oversee something, can you explain which exact case 
it should fix?

Regards,
    Simon




More information about the Sugar-devel mailing list