How do I use Manatee.Trello with multiple user accounts?

260 views Asked by At

I've been trying the following to retrieve data:

    void InitializeTrello()
    {
        TrelloConfiguration.Serializer = new ManateeSerializer();
        TrelloConfiguration.Deserializer = new ManateeSerializer();
        TrelloConfiguration.JsonFactory = new ManateeFactory();
        TrelloConfiguration.RestClientProvider = new Manatee.Trello.WebApi.WebApiClientProvider();
        TrelloConfiguration.ThrowOnTrelloError = true;
    }

    T DownloadDataFromTrello<T>(TrelloAccount account, Func<T> func)
    {
        TrelloConfiguration.Cache.Clear();
        TrelloAuthorization.Default.AppKey = account.AppKey;
        TrelloAuthorization.Default.UserToken = account.UserToken;
        T result = func();
        TrelloProcessor.Flush();
        return result;
    }

Method DownloadDataFromTrello is being called a few times with different AppKey and UserToken parametres. I receive the same data every call despite calling TrelloConfiguration.Cache.Clear() inside the function.

I would like to use library without resorting to dirty tricks with unloading static classes and retain the lazy loading functionality. Does anyone know how to use this library with multiple user accounts properly?

1

There are 1 answers

0
gregsdennis On BEST ANSWER

All of the entity constructors take a second parameter: a TrelloAuthorization that defaults to TrelloAuthorization.Default. The entity instance uses this authorization throughout its lifetime.

var customAuth = new TrelloAuthorization
{
    AppKey = "your app key",
    UserToken = "a user's token"
}
var card = new Card("card id", customAuth);

The default cache only looks at the entity ID as the key so even if you change the default authorization you would get the same instances back (using the old auth) if the system is pulling them from a cache (e.g. a card is downloaded as part of a List.Cards enumeration). If you explicitly create the entity through a constructor (as above) the new entity is added to the cache, but only the first one will be returned since it's matched only on ID.

To consider the auth as a match for the key, I'd have to either update the default cache or expose the auth so that you can write your own cache and set the TrelloConfiguration.Cache property. I'm not sure which I prefer right now.

Using a custom auth (possibly in combination with periodically clearing the cache) is currently your best option. Please feel free to create an issue or let me know here if this is a feature you'd like.