"use strict"; angular.module("iisland").factory('user_service', ['$http', '$interval', function($http, $interval) { var current_state = { state : { transient : { "sound" : true, "app" : "" } } }; var state_subscribers = {}; var logged_in = false; var jernej = 1; var state_update_call = function() { //console.log("JERNEJ: state_update_call"); if (current_state.user) { $("body").addClass("iisland_logged_in"); $("body").removeClass("iisland_not_logged_in"); } else { $("body").removeClass("iisland_logged_in"); $("body").addClass("iisland_not_logged_in"); } angular.forEach(state_subscribers, function(subscriber) { try { subscriber(current_state); } catch(e) { //console.error("ERROR WHILE UPDATING STATE:", e); } }); }; var s4 = function() { return (((1+Math.random())*0x10000)|0).toString(16).substring(1); }; var send_email = function(email, jezik) { return $http.post("/api/iisland_login/send_email", {"email" : email, "jezik" : jezik}).then(function(response){ return(response); }); }; var confirm_and_login_user = function(token) { return $http.get("/api/iisland_login/confirm_and_login_user/" + token).then(function(response) { if (response.data.code === "error") { return response; } else { $("#iisland .landing").addClass("hide"); current_state.user = response.data.message.user; var transient = angular.copy(current_state.state.transient); current_state.state = response.data.message.state; current_state.state.transient = transient; if(current_state.user !== undefined){ logged_in = true; } else{ current_state.user = {}; current_state.user.error = response.data.message; } state_update_call(); return response; } }); }; var check_login = function() { return $http.post("/api/iisland_login/check_login", {}).then(function(response){ if(response.data){ if(response.data.user){ $("#iisland .landing").addClass("hide"); current_state.user = response.data.user; var transient = angular.copy(current_state.state.transient); current_state.state = response.data.state; current_state.state.transient = transient; } else {//not logged in current_state.user = undefined; //current_state.user.error = {}; } } state_update_call(); return response; }); }; var logout_user = function() { $("#iisland .landing").addClass("hide"); $http.post("/api/iisland_login/logout_user", {}).then(function(){ current_state.user = undefined; current_state.state = { transient : current_state.state.transient }; logged_in = false; state_update_call(); //setTimeout(function() {location.reload();}, 1000); }); }; var login_user = function(email, pw, jezik) { return $http.post("/api/iisland_login/login_user_web", {"email" : email, "pw" : pw, "jezik" : jezik}).then(function(response){ if (response.data.code === "error") { return response; } else { $("#iisland .landing").addClass("hide"); current_state.user = response.data.message.user; var transient = angular.copy(current_state.state.transient); current_state.state = response.data.message.state; current_state.state.transient = transient; if(current_state.user !== undefined){ logged_in = true; } else{ current_state.user = {}; current_state.user.error = response.data.message; } state_update_call(); return response; } }); }; var register_user = function(email, pw, nick, fb_profil, send_novice, jezik, ep_num, story_state) { //console.error("KLEN: USER SERVICE register_user() story_state: "+story_state); return $http.post("/api/iisland_login/register_user", { "email" : email, "pw" : pw, "nick" : nick, "fb_profil" : fb_profil, "send_novice" : send_novice, "jezik" : jezik, "ep_num" : ep_num, "story_state" : story_state }).then(function(response){ return response; }); }; var state_subscribe = function(callback) { //console.info("user_service", "got subscription"); var ID = s4(); state_subscribers[ID] = callback; //state_subscribers[ID](angular.copy(current_state)); try { callback(current_state); } catch (e) { } return(ID); }; var state_unsubscribe = function(which) { if (state_subscribers[which]) { state_subscribers.splice(which, 1); return(true); } else { return(false); } }; var silent_state_update = function(key, value) { current_state.state[angular.copy(key)] = angular.copy(value); var new_state = angular.copy(current_state.state); if(new_state.hasOwnProperty('transient')){ delete(new_state.transient); } $http.post("/api/iisland_login/save_state", {"email" : current_state.user.email, "state" : new_state}).then(function(){ return true; }); }; var state_update = function(key, value) { var state_before = angular.copy(current_state); //console.info("state_update12", key, value, state_before.state); if (current_state.user != undefined) { ////console.info("state changed, NAREDIL1"+ current_state.state.transient.sound); silent_state_update(key, value); //jernej = jernej + 1; //current_state.state.transient.jernej = jernej; ////console.info("state changed, NAREDIL2" + current_state.state.transient.sound); } else{ current_state.state[angular.copy(key)] = angular.copy(value); } if (!angular.equals(current_state.state, state_before.state)) { //console.info("state changed, notifying", current_state.state,state_before.state); state_update_call(); } else { //console.info("state not changed, skip notify", current_state.state,state_before.state); state_update_call();//Jernej to je samo začasni hack, vedno začne s false in potem ni razlike, zdaj vedno pošljem state change, tudi če ni spremembe } }; $interval(function() { check_login(); }, 60 * 1000); check_login(); return { state_subscribe: state_subscribe, state_unsubscribe:state_unsubscribe, state_update:state_update, login_user: login_user, register_user: register_user, confirm_and_login_user: confirm_and_login_user, logout_user: logout_user, send_email: send_email, check_login: check_login }; }]);