public void Init(InboxInterface inboxInterface, InboxMessageData message)
    {
        this.message         = message;
        this._inboxInterface = inboxInterface;

        UpdateUI();
    }
    void ClaimLootCrate(InboxMessageData msg)
    {
        if (!msg.rewardsData.Exists())
        {
            traceError("Crate Data does not exists.");
            isReadingMessage = false;
            return;
        }

        SetBusy(true);

        API.Messages.ClaimReward(msg)
        .Then(o => {
            return(LootCrateScreenInterface.GenerateLootCrate(
                       msg.lootCrateData["lootTableIdentity"],
                       float.Parse(msg.lootCrateData["itemLevel"]),
                       float.Parse(msg.lootCrateData["variance"]),
                       float.Parse(msg.lootCrateData["magicFind"]),
                       null //lootCrateData["crateTypeIdentity"]
                       ));
        })
        .Then(res => {
            trace("Claimed? " + msg.receipt.isClaimed);
            SetBusy(false);
            isReadingMessage = false;

            trace(res.pretty);
        })
        .Catch(err => {
            traceError("Error claiming/generating a LootCrate!");
            traceError(err);
            traceError(err.StackTrace);
            SetBusy(false);
        });
    }
    void OnReadMessageComplete(InboxMessageData msg)
    {
        isReadingMessage = true;

        txtDismiss.text = "CLOSE";

        if (msg.messageType == InboxMessageType.CURRENCY_REWARD)
        {
            txtMessage.text = msg.message.Format2(msg.currencyAmount, msg.currencyType);
            txtTitle.text   = msg.title.Format2(msg.currencyAmount, msg.currencyType);
        }
        else
        {
            txtMessage.text = msg.message;
            txtTitle.text   = msg.title;
        }

        if (!msg.receipt.isClaimed)
        {
            txtDismiss.text = "CLAIM\nREWARD";
        }
        else
        {
            txtDismiss.text = "ALREADY\nCLAIMED";
        }
    }
    void ClaimCurrency(InboxMessageData msg)
    {
        if (!msg.rewardsData.Exists())
        {
            traceError("Currency Data does not exists.");
            isReadingMessage = false;
            return;
        }

        SetBusy(true);

        API.Messages.ClaimReward(msg)
        .Then(o => {
            if (msg.rewardBoost != null)
            {
                return(API.Users.BoostAddCurrency(msg.rewardBoost));
            }

            return(API.Currency.AddCurrency(msg.rewardCurrency));
        })
        .Then(res => {
            trace("Claimed? " + msg.receipt.isClaimed);
            SetBusy(false);
            isReadingMessage = false;

            trace(res.pretty);
        })
        .Catch(err => {
            traceError("Error claiming/adding currency!");
            traceError(err);
            traceError(err.StackTrace);
            SetBusy(false);
        });
    }
    public void ReadMessage(InboxItemInterface inboxItemInterface)
    {
        SetBusy(true);

        _currentMessage = inboxItemInterface;
        InboxMessageData message = _currentMessage.message;

        message.receipt.isRead = true;

        API.Messages.ReadMessage(message)
        .Then(msg => {
            SetBusy(false);
            inboxItemInterface.UpdateUI();
            OnReadMessageComplete(msg);
        })
        .Catch(err => {
            SetBusy(false);
            traceError("Could not read the Message #{0}:\n".Format2(message.MongoID) + err.Message + "\n" + err.StackTrace);
        });
    }