diff --git a/js/App.js b/js/App.js index 73c4257..520f9ab 100644 --- a/js/App.js +++ b/js/App.js @@ -162,35 +162,46 @@ App.prototype.reload = function() { App.prototype.gotUnreadFeeds = function(new_articles) { - if(new_articles == null || !this.validate(new_articles)) { // on error load the saved unread articles. - - var old_articles = localStorage.unread_articles; - if(old_articles) { - this.unread_articles = JSON.parse(old_articles); - } - this.populateList(); - + if(new_articles == null || !this.validate(new_articles)) { + + // Check if we did not get a NOT_LOGGED_IN error, and ask the + // user to login again if it is the case. + // This can happen with TT-RSS backend + if (new_articles.error && new_articles.error === "NOT_LOGGED_IN") { + alert("Your TinyTinyRSS session has expired. Please login again"); + this.login.fillLoginFormFromLocalStorage(); + this.login.log_in(); + } + else { + // On other errors, load the saved unread articles. + var old_articles = localStorage.unread_articles; + if(old_articles) { + this.unread_articles = JSON.parse(old_articles); + } + this.populateList(); + } + } else { + + this.unread_articles = this.unread_articles.concat(new_articles); - this.unread_articles = this.unread_articles.concat(new_articles); - - if(new_articles.length > 0) { - try { - //To check if when it fails it is the same - localStorage.unread_articles = JSON.stringify(this.unread_articles); - var size = parseInt(localStorage.maxDownload); - if(localStorage.unread_articles.length < size) { - var num = parseInt(localStorage.numArticles); - this.backend.getUnreadFeeds(this.gotUnreadFeeds.bind(this), this.unread_articles,num); - } else { - alert("Limit size reached: Downloaded: " + this.unread_articles.length + " articles. Reached: " + localStorage.unread_articles.length +" bytes"); - } - } - catch (e) { - alert("Reached maximum memory by app " + e.name + " " + e.message + ". We will keep working in anycase with: " + localStorage.unread_articles.length); - } - this.populateList(); - } + if(new_articles.length > 0) { + try { + //To check if when it fails it is the same + localStorage.unread_articles = JSON.stringify(this.unread_articles); + var size = parseInt(localStorage.maxDownload); + if(localStorage.unread_articles.length < size) { + var num = parseInt(localStorage.numArticles); + this.backend.getUnreadFeeds(this.gotUnreadFeeds.bind(this), this.unread_articles,num); + } else { + alert("Limit size reached: Downloaded: " + this.unread_articles.length + " articles. Reached: " + localStorage.unread_articles.length +" bytes"); + } + } + catch (e) { + alert("Reached maximum memory by app " + e.name + " " + e.message + ". We will keep working in anycase with: " + localStorage.unread_articles.length); + } + this.populateList(); + } } }; diff --git a/js/Login.js b/js/Login.js index 72a9490..c786023 100644 --- a/js/Login.js +++ b/js/Login.js @@ -67,6 +67,7 @@ Login.prototype.authenticate = function(e) { if(data.version) { var auth = btoa(user + ':' + password); localStorage.server_url = server_url; + localStorage.username = user; localStorage.session_id = auth; localStorage.backend = "OwnCloud"; _this.app.after_login(localStorage.backend); @@ -83,6 +84,7 @@ Login.prototype.authenticate = function(e) { Pond.login(server_url, user, password, function(data) { if(data.session_token) { localStorage.server_url = server_url; + localStorage.username = user; localStorage.session_id = data.session_token; localStorage.backend = "Pond"; _this.app.after_login(localStorage.backend); @@ -106,6 +108,7 @@ Login.prototype.authenticate = function(e) { } else { localStorage.server_url = server_url; + localStorage.username = user; localStorage.session_id = data.session_id; localStorage.backend = "TinyTinyRSS"; _this.app.after_login(localStorage.backend); @@ -120,7 +123,29 @@ Login.prototype.authenticate = function(e) { return false; }; +Login.prototype.fillLoginFormFromLocalStorage = function() { + var serverUrl = localStorage.server_url; + if (serverUrl) { + $("#url").value = serverUrl; + } + var userName = localStorage.username; + if (userName) { + $("#un").value = userName; + } + var backendName = localStorage.backend; + if (backendName === "TinyTinyRSS") { + $("#login form").backend[0].checked = true; + } + else if (backendName === "OwnCloud") { + $("#login form").backend[1].checked = true; + } + else if (backendName === "Pond") { + $("#login form").backend[2].checked = true; + } +} + Login.prototype.log_out = function() { + this.fillLoginFormFromLocalStorage(); localStorage.removeItem("server_url"); localStorage.removeItem("session_id"); localStorage.removeItem("unread_articles");