You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by daviesd <da...@oclc.org> on 2011/08/02 18:01:05 UTC

Re: Example implementation for user prefs?

Dan,

Have you seen an timing issues with this setpref implementation?  I am
seeing strange things.  I'm using the horoscope gadget which renders
differently if the user preferences have been set (it shows your horoscope
based on a uid).  Sometimes this works and sometimes it doesn't.  What's
strange is it seems that switching the id of the html element (which then is
used as the siteid) is what's causing the behavior to change.  I'll do some
more investigation, just wondered if you had seen any peculiarities like
that.

doug


On 7/27/11 3:33 PM, "Dan Dumont" <dd...@us.ibm.com> wrote:

> http://opensocial-resources.googlecode.com/svn/spec/2.0/incubating/Core-Contai
> ner.xml#Configuring-The-Container
> 
> 
> When you insantiate the common container, you can provide these functions,
> keyed appropriately, via the config object.
> 
> The GET_PREFERENCES function will be called as defined when making the
> metadata request to the server.   The prefs will be supplied to the
> server, which will use any provided ones instead of default preferences
> when providing the metadata for a gadget.  This all happens automatically
> in a call to navigate gadget...and now that I think about it, I forgot to
> include it in the preLoad method in the common container...  I'll submit a
> patch shortly.
> 
> The server side impl is totally up to you.   I originally had in mind a
> client-side html5 store for a default implementation.
> 
> The gadget site encapsulates the site ID.  It will prefer the id attr of
> the site element you created the site with, otherwise it will default to
> an auto-incremented number.
> 
> If you wish to persist preferences for a particular occurrence of a
> gadget(per gadget url instance), then you'll need to keep track of the
> site (the auto generated ids are less helpful), if you wish to provide
> "per gadget url" preferences you can just ignore they siteid and return or
> persist the preferences for all gadgets coming from that url.
> 
> 
> 
> 
> From:   daviesd <da...@oclc.org>
> To:     <de...@shindig.apache.org>,
> Date:   07/27/2011 03:22 PM
> Subject:        Re: Example implementation for user prefs?
> 
> 
> 
> Dan,
> 
> Nice! I'm still using 3.0.0-beta2, so hadn't seen this yet. Was there an
> earlier thread on how to use this?  Can you explain how I hook into this
> and
> provide a server-side implementation?  And does this mean when I call
> navigateGadget that I should now be providing a unique id for the siteId
> (maybe correlating to my spaceid?)?
> 
> Thanks,
> doug
> 
> 
> On 7/27/11 1:50 PM, "Dan Dumont" <dd...@us.ibm.com> wrote:
> 
>> FYI, there have been some recent changes in the common container to
> expose
>> a callback to the container page that allows for the persisting and
>> retrieval of persisted preferences.
>> 
>>   /**
>>    * @see setprefs.js setprefs feature.
>>    */
>>   this.rpcRegister('set_pref', function(rpcArgs, key, value) {
>>     var site = rpcArgs[osapi.container.GadgetSite.RPC_ARG_KEY];
>>     var setPrefs =
>> self.config_[osapi.container.ContainerConfig.SET_PREFERENCES];
>>     if (site && setPrefs) { // Check if site is not already closed.
>>       var data = {};
>>       for (var i = 2, j = arguments.length; i < j; i += 2) {
>>         data[arguments[i]] = arguments[i + 1];
>>       }
>>       setPrefs(site.getId(), site.getActiveGadgetHolder().getUrl(),
> data);
>>     }
>>   });
>> 
>> A container may specify functions to the CommonContainer that will be
>> called to retrieve and set preferences for a particular gadget.
>> Please also note that gadget site id will now prefer the id attribute of
>> the gadget site element, so that named locations for specific gadgets
> can
>> have preferences persisted accordingly.
>> 
>> If you are going to be providing a default preference persistence impl,
> it
>> would be great if you could hook into this :)
>> 
>> 
>> 
>> From:   daviesd <da...@oclc.org>
>> To:     <de...@shindig.apache.org>,
>> Date:   07/27/2011 01:09 PM
>> Subject:        Re: Example implementation for user prefs?
>> 
>> 
>> 
>> Paul,
>> 
>> Sure. Give me a few days, I just got back from vacation. I'll have to
>> figure
>> out whether the container token will be sufficient for this, as I had to
>> apply other patches to get the gadget token to be used.
>> 
>> Thanks,
>> doug
>> 
>> 
>> On 7/27/11 12:58 PM, "Paul Lindner" <li...@inuus.com> wrote:
>> 
>>> Can you write this up a patch so we can make this the default
>>> implementation?  This is something I've been meaning to do for months.
>>> 
>>> On Wed, Jul 27, 2011 at 8:58 AM, daviesd <da...@oclc.org> wrote:
>>> 
>>>> Actually, I was lazy and went with the approach of layering userprefs
>> on
>>>> top
>>>> of appdata as follows:
>>>> 
>>>>    container.rpcRegister('set_pref', function(rpcArgs, data) {
>>>> 
>>>>        var prefName = rpcArgs['a'][1];
>>>>        var prefKey = 'up_' + prefName;
>>>>        var prefValue = rpcArgs['a'][2];
>>>> 
>>>>        var data = {};
>>>>        data[prefKey] = prefValue;
>>>> 
>>>>        osapi.appdata.update({
>>>>            userid : '@me',
>>>>            groupid : '@self',
>>>>            appId : '@app',
>>>>            data : data
>>>> 
>>>>        }).execute(function(response) {
>>>>        });
>>>>    });
>>>> 
>>>> This is with anticipation that appdata and userprefs will align as
>>>> discussed
>>>> here:
>>>> 
>>>> http://code.google.com/p/opensocial-resources/issues/detail?id=1182
>>>> 
>>>> Of course this also requires you to implement appdata server side.
>> Right
>>>> now I¹m just using the JsonDb implementation (in-memory), but we¹ll be
>>>> writing a persistent layer soon.
>>>> 
>>>> I also ran into issues with the correct token (the gadget one with the
>>>> appid
>>>> that you¹ll need to use to index the data) being passed to the appdata
>>>> request.  You can search for my other thread about this.
>>>> 
>>>> doug
>>>> 
>>>> 
>>>> On 7/25/11 6:53 PM, "Henry Saputra" <he...@gmail.com> wrote:
>>>> 
>>>>> If you want the user pref to be persisted in the database you need to
>>>>> implement the server handler for it.
>>>>> 
>>>>> I remember Doug Davies has tried to add persistent layer for user
>>>>> pref. Maybe he could share his progress.
>>>>> 
>>>>> Including him in the email.
>>>>> 
>>>>> - Henry
>>>>> 
>>>>> On Mon, Jul 25, 2011 at 3:42 PM, Mat Schaffer <ma...@schaffer.me>
> wrote:
>>>>>>> So with some research it looks like I'm supposed to be implementing
>> my
>>>> own
>>>>>>> server module. Is that pretty much accurate?
>>>>>>> 
>>>>>>> Again, any advice or RTFMs (with a link to the respective FMs) is
>>>>>>> appreciated.
>>>>>>> 
>>>>>>> Thanks,
>>>>>>> Mat
>>>>>>> 
>>>>>>> On Fri, Jul 22, 2011 at 10:20 AM, Mat Schaffer <ma...@schaffer.me>
>>>> wrote:
>>>>>>> 
>>>>>>>>> So I noticed that UserPref items don't work on the sample
>> container
>>>> which
>>>>>>>>> makes sense after finding this thread:
>>>>>>>>> http://markmail.org/message/tlwtlo4mrnrpz4w5
>>>>>>>>> 
>>>>>>>>> Is there any good example of best-practice for implementing user
>>>> prefs in
>>>>>>>>> my containing application? Do I just make my own
>>>> shindig-container.js and
>>>>>>>>> handleOpenUserPrefsDialog? And does the page we point to just
>> render
>>>>>>>>> information into a div with id of `this.id`?
>>>>>>>>> 
>>>>>>>>> The gmodule code appears to be obfuscated, so it's a bit hard to
>>>> tell >>>
>>>> what
>>>>>>>>> the right course of action would be. Any documentation or
>> assistance
>>>>>>> would
>>>>>>>>> be appreciated.
>>>>>>>>> 
>>>>>>>>> Thanks,
>>>>>>>>> Mat
>>>>>>>>> 
>>>>>>> 
>>>>> 
>>>>> 
>>>> 
>>>> 
>>> 
>> 
>> 
>> 
>> 
>> 
> 
> 
> 
> 
>