var preCheck = function (lang) { lang = $.trim(lang).toLowerCase(); log('========= LANGUAGE PRE CHECK ======== LANGUAGE IS: ' + lang); if((/en/).test(lang)) { lang = 'en'; } if((/deutsch/).test(lang)) { lang = 'de'; } if(lang !== defaultLang && lang !== 'de') { lang = defaultLang; } common.store.set('app-language', lang); app.lang = lang; if(app.user && typeof app.user.set === 'function') { app.user.set('lang', lang, {silent: true}); } return callback(lang); };
/** * Detect language in phonegap or browser * * @param callback gets a lang string like 'en' or 'de' (default 'en') */ function detectLang(callback) { var lang = common.store.get('app-language'); var preCheck = function (lang) { lang = $.trim(lang).toLowerCase(); log('========= LANGUAGE PRE CHECK ======== LANGUAGE IS: ' + lang); if((/en/).test(lang)) { lang = 'en'; } if((/deutsch/).test(lang)) { lang = 'de'; } if(lang !== defaultLang && lang !== 'de') { lang = defaultLang; } common.store.set('app-language', lang); app.lang = lang; if(app.user && typeof app.user.set === 'function') { app.user.set('lang', lang, {silent: true}); } return callback(lang); }; if(lang) { return callback(lang); } // browser environment if(_.isUndefined(navigator.globalization)) { if(!lang) { lang = navigator.userLanguage || navigator.language || defaultLang; } preCheck(lang); } else { // phonegap environment navigator.globalization.getPreferredLanguage( function (language) { lang = language.value; preCheck(lang); }, function () { return callback(defaultLang); // error, fallback to "defaultLang"... }); } }
changeLang: function (lang) { // log('CHANGE LANG to ' + lang + ' from ' + app.lang); if(lang === app.lang) { return false; } app.lang = lang; if(lang !== 'en' && lang !== 'de') { app.lang = 'en'; } common.store.set('app-language', app.lang); moment.lang(app.lang); i18n.init({ lng: app.lang // triggers translationsLoaded }); },
deauthenticateUser: function () { var self = this; // MUST be called before we reset the user! app.unregisterPUSHNotifications(); setTimeout(function() { self.go('start'); }, 1); this.isAuth = false; app.isLoggedIn = false; common.store.drop('is-auth'); common.unlockScreen(); app.todolists.reset(); // ! app.user = new User(); // soll man NICHT sehen wenn eingeloggt $('.hide-me').each(function () { $(this).addClass('hidden'); }); // deauthenticate means "DELETE ALL LOCAL DATA" if(app.storage) { app.storage.nukeAll(function() {}); } // unsubscribe from all socket-io events if(app.socketWrapper) { setTimeout(function() { // shutdown, denn beim nächsten login ändert sich der token // -> deshalb müssen wir dort wieder initial verbinden // mit neuem token (bei resume hat sich der token ja nicht geändert) app.socketWrapper.disconnect(true, true); }, 1000); } // reset activities app.activityCollection.reset(); },
setAuthenticated: function (userJSON, doNotSaveToDb) { log('=== AppRouter.setAuthenticated() YUHU I AM LOGGED IN: ', userJSON.email, userJSON); // ##### API ACCESS TOKEN siehe zepto ajax conf in main.js ##### // der token muss nun bei jedem weiteren request mitgehn! app.API_TOKEN = userJSON.API_TOKEN; // SOFORT RENDERN !!! // NOTE: es kann sein dass wir bereits auf #todolists sind, // AUCH AUF MOB. GERÄTEN // ist dies also der Fall: only re-render via app.user change // event in listview.js! if(!app.todolistView) { this.go('todolists', true); } app.isLoggedIn = true; this.isAuth = true; // wir speichern im local storage einfach ob wir eingeloggt sind // den rest übernimmt der server via access token common.store.set('is-auth', '1'); // hier kommt der user mit all seinen todolisten und deren todos // save user and todolists var lists = []; _.each(userJSON.todolists, function (list) { lists.push(list); }); app.todolists.reset(); app.todolists.add(lists); // update user's language // app.user.set('lang', userJSON.lang, {silent: true}); app.changeLang(userJSON.lang ? userJSON.lang : app.lang); if(!userJSON.lang) { userJSON.lang = app.lang; } // log(JSON.stringify(userJSON)) // triggers change in views app.user.set(userJSON); // 1. connect websocket /* no support anymore if(app.socketWrapper) { app.socketWrapper.connect(app.API_TOKEN); // listen for succes only ONCE: app.socketWrapper.once('connect_success', function() { // falls wir bereits listen aus der lokalen db haben: app.socketWrapper.subscribeToLists(app.todolists); }); }*/ // 2. register push notifications app.initAndRegisterPushNotifications(); // wenn 2.param gesetzt: nicht speichern, denn dann haben wir ihn // vorher gerade ausgelesen... if(!doNotSaveToDb) { var userID = app.user.get('_id'); console.log('STORING USER, LISTS AND TODOS IN LOCAL DB'); // ###### store user & lists to local db: ###### app.storage.storeUser(userJSON, function __storeUser(err, success) { if(success === true && lists.length > 0) { app.storage.storeListsForUser(userID, lists, function(/*err, success*/) { /*app.storage.fetchListsForUser(userID, function(err, results) { var len = results.rows.length; console.log('=================>', len) });*/ // auch gleich alle todos speichern: _.each(app.todolists.toJSON(), function(list) { var todos = list.todos; if(todos && todos.length > 0) { // ##### store local db ##### // app.storage.storeTodosOfList(list._id, todos, function(/*err, success*/) {}); // keep it local var l = app.todolists.get(list._id); if(l) { l.set({ todos: todos }, {silent: true}); } } }); }); } }); } },