plainblack/Lacuna-Web-Client

View on GitHub
app/js/stores/rpc/empire/boosts.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

var Reflux                  = require('reflux');
var _                       = require('lodash');
var util                    = require('js/util');

var TickerActions           = require('js/actions/ticker');
var EmpireRPCActions        = require('js/actions/rpc/empire');

var StatefulMixinsStore     = require('js/stores/mixins/stateful');
var EmpireRPCStore          = require('js/stores/rpc/empire');
var ServerRPCStore          = require('js/stores/rpc/server');

var clone                   = util.clone;

var BOOST_TYPES = [
    'food',
    'ore',
    'water',
    'energy',
    'happiness',
    'storage',
    'building',
    'spy_training'
];

var BoostsEmpireRPCStore = Reflux.createStore({
    listenables : [
        TickerActions,
        EmpireRPCActions
    ],

    mixins : [
        StatefulMixinsStore
    ],

    getDefaultData : function() {
        var defaultData = {};

        _.each(BOOST_TYPES, function(type) {
            defaultData[type] = {
                ms      : 0,
                display : ''
            };
        });

        return defaultData;
    },

    handleNewBoost : function(timestamp) {
        var millisecondsRemaining =
            util.serverDateToMs(timestamp) -
            util.serverDateToMs(ServerRPCStore.getData().time);

        if (timestamp && millisecondsRemaining > 0) {
            return {
                ms      : millisecondsRemaining,
                display : util.formatMillisecondTime(millisecondsRemaining)
            };
        } else {
            return {
                ms      : 0,
                display : ''
            };
        }
    },

    handleNewBoosts : function(result) {
        var boosts = clone(this.state);

        _.each(BOOST_TYPES, _.bind(function(type) {
            boosts[type] = this.handleNewBoost(result.boosts[type]);
        }, this));

        this.emit(boosts);
    },

    onTickerTick : function() {
        var boosts = clone(this.state);

        _.mapValues(boosts, function(boost) {
            if (boost.ms <= 0) {
                return {
                    ms      : 0,
                    display : ''
                };
            } else {
                boost.ms -= 1000;
                boost.display = util.formatMillisecondTime(boost.ms);

                return boost;
            }
        });

        this.emit(boosts);
    },

    onSuccessEmpireRPCViewBoosts : function(result) {
        this.handleNewBoosts(result);
    },

    onSuccessEmpireRPCBoost : function(result) {
        this.handleNewBoosts(result);
    },

    onFailureEmpireRPCBoost : function(result) {
        console.log('FAILURE Empire Boost');
    },
});
    
module.exports = BoostsEmpireRPCStore;