benitlux: refresh home window on receiving an invalid token error
[nit.git] / contrib / benitlux / src / client / views / home_views.nit
index c991f3c..bd3f851 100644 (file)
@@ -55,9 +55,8 @@ class HomeWindow
        # Cut-point for the iOS adaptation
        var layout_user = new VerticalLayout(parent=layout)
        private var layout_login = new HorizontalLayout(parent=layout_user)
-       private var lbl_login_status = new Label(parent=layout_login, text="Welcome".t, size=1.5)
-       private var but_login = new Button(parent=layout_login, text="Login or signup".t)
-       private var but_preferences = new Button(parent=layout_login, text="Preferences".t)
+       private var but_preferences: nullable Button = null
+       private var but_login: nullable Button = null
 
        private var layout_beers = new VerticalLayout(parent=layout)
        var layout_beers_title = new HorizontalLayout(parent=layout_beers)
@@ -79,13 +78,6 @@ class HomeWindow
        #private var news_button = new Button(parent=news_header, text="Open website") # TODO
        private var news_label = new Label(parent=layout_news, text="Bière en cask le jeudi!")
 
-       init
-       do
-               for c in [but_login, but_preferences, beer_button, social_button] do
-                       c.observers.add self
-               end
-       end
-
        redef fun on_resume do refresh
 
        # Refresh content of this page
@@ -96,13 +88,12 @@ class HomeWindow
                layout_login.clear
                if app.user != null then
                        # Logged in
-                       lbl_login_status.parent = layout_login
-                       but_preferences.parent = layout_login
+                       var lbl_login_status = new Label(parent=layout_login, text="Welcome".t, size=1.5)
                        lbl_login_status.set_welcome
                else
-                       but_login.parent = layout_login
-                       but_preferences.parent = layout_login
+                       self.but_login = new Button(parent=layout_login, text="Login or signup".t)
                end
+               self.but_preferences = new Button(parent=layout_login, text="Preferences".t)
 
                # Fill beers
                (new ListDiffAction(self, "rest/since?token={app.token}")).start
@@ -111,7 +102,7 @@ class HomeWindow
                (new HomeListPeopleAction(self, "rest/friends?token={app.token}")).start
 
                # Check if token is still valid
-               (new CheckTokenAction(self, "rest/check_token?token={app.token}")).start
+               if app.token != "none" then (new CheckTokenAction(self, "rest/check_token?token={app.token}")).start
        end
 
        redef fun on_event(event)
@@ -150,7 +141,7 @@ class ListDiffAction
 
        redef type W: HomeWindow
 
-       redef fun on_load(beers)
+       redef fun on_load(beers, status)
        do
                window.layout_beers.remove window.beer_list
                window.beer_list = new VerticalLayout(parent=window.layout_beers)
@@ -181,7 +172,7 @@ class HomeListPeopleAction
 
        redef type W: HomeWindow
 
-       redef fun on_load(users)
+       redef fun on_load(users, status)
        do
                window.layout_social.remove window.social_list
                window.social_list = new VerticalLayout(parent=window.layout_social)
@@ -200,7 +191,19 @@ class CheckTokenAction
 
        redef type W: HomeWindow
 
-       redef fun on_load(res) do intercept_error(res)
+       redef fun on_load(res, status) do intercept_error(res)
+end
+
+redef class BenitluxHttpRequest
+       redef fun intercept_error(res)
+       do
+               var r = super
+               if res isa BenitluxTokenError then
+                       var window = app.window
+                       if window isa HomeWindow then window.refresh
+               end
+               return r
+       end
 end
 
 # Today's date as a `String`