angular.module('UserService', ["AjaxService", "ObserverService", "MapService"]).service('User', function (Ajax, $q, Observer, Map) { var obUser = Observer.create(); var user_defer = null; var local_address = null; this.getAddress = function () { if (!local_address) { var address = null; if (localStorage.getItem("local_address")) { address = angular.fromJson(localStorage.getItem("local_address")); } if (address && address.version !== 2) { address = null; } if (!address) { this.setAddress(null); } local_address = address; } return local_address; }; this.setAddress = function (address) { local_address = address; if (address) { localStorage.setItem("local_address", angular.toJson(address)); } else { localStorage.removeItem("local_address"); } }; this.reload = function() { user_defer = null; obUser.notify(); }; this.getOb = function () { return obUser; }; this.get = function() { if (!user_defer) { user_defer = $q.defer(); var defer = user_defer; Ajax.get("User", "get", function (response) { if (response && response.user) { defer.resolve(response.user); } else { defer.resolve(null); } }); } return user_defer.promise; }; this.logout = function() { Ajax.get("User", "logout", function () { user_defer = null; obUser.notify(); }); }; });