[chronojump] At start do not dowload news, just news date. News dowloaded on button press.



commit e8fe09fac8995a874302ab023d1cf9f7f57d6aee
Author: Xavier de Blas <xaviblas gmail com>
Date:   Tue Jan 19 12:04:24 2021 +0100

    At start do not dowload news, just news date. News dowloaded on button press.

 diagrams/processes/news.dia | Bin 4123 -> 4128 bytes
 src/gui/app1/chronojump.cs  |  31 ++++++++++++++-----------------
 src/gui/app1/menu.cs        |  28 ++++++++++++++++++++--------
 src/gui/app1/news.cs        |  15 ++++++++++-----
 4 files changed, 44 insertions(+), 30 deletions(-)
---
diff --git a/diagrams/processes/news.dia b/diagrams/processes/news.dia
index 2df81309..e0f29d0b 100644
Binary files a/diagrams/processes/news.dia and b/diagrams/processes/news.dia differ
diff --git a/src/gui/app1/chronojump.cs b/src/gui/app1/chronojump.cs
index 6162adf3..48b030f9 100644
--- a/src/gui/app1/chronojump.cs
+++ b/src/gui/app1/chronojump.cs
@@ -715,7 +715,6 @@ public partial class ChronoJumpWindow
                {
                        LogB.Information("Ping thread will start");
 
-                       newsAtDB_l = SqliteNews.Select(false, -1, 10);
                        pingThread = new Thread (new ThreadStart (pingAndNewsAtStart));
                        GLib.Idle.Add (new GLib.IdleHandler (pulsePingAndNewsGTK));
                        pingThread.Start();
@@ -6787,25 +6786,22 @@ LogB.Debug("mc finished 5");
        {
                if(! pingThread.IsAlive)
                {
-                       // 1) Insert if needed
-                       if(newsAtServer_l != null && News.InsertOrUpdateIfNeeded (newsAtDB_l, newsAtServer_l))
+                       // 1)  highlight news iccons if there are new news
+                       //if there is no network serverNewsDatetime will be empty, so do not highligh new 
products
+                       //highligh if server news date is not empty and server news date is different than 
client news date
+                       if(preferences.serverNewsDatetime != "" &&
+                                       preferences.serverNewsDatetime != preferences.clientNewsDatetime)
                        {
                                Pixbuf pixbuf = new Pixbuf (null, Util.GetImagePath(false) + 
"image_store_has_new_products.png");
                                image_menu_news.Pixbuf = pixbuf;
                                image_menu_news1.Pixbuf = pixbuf;
                        }
 
-                       // 2) update newsAtDB_l
-                       newsAtDB_l = SqliteNews.Select(false, -1, 10);
+                       // 2) make news buttons sensitive
+                       button_menu_news.Sensitive = true;
+                       button_menu_news1.Sensitive = true;
 
-                       // 3) if there are news (locally is not 0), make it sensitive
-                       if(newsAtDB_l.Count > 0)
-                       {
-                               button_menu_news.Sensitive = true;
-                               button_menu_news1.Sensitive = true;
-                       }
-
-                       // 4) end this pulse
+                       // 3) end this pulse
                        LogB.Information("pulsePingAndNews ending here");
                        LogB.ThreadEnded();
                        return false;
@@ -6822,7 +6818,7 @@ LogB.Debug("mc finished 5");
        {
                jsPing = new Json();
                if(pingDo())
-                       getNews();
+                       getNewsDatetime();
        }
 
        private bool pingDo()
@@ -6839,10 +6835,11 @@ LogB.Debug("mc finished 5");
 
        }
 
-       private void getNews()
+       private void getNewsDatetime()
        {
-               LogB.Information("getNews()");
-               newsAtServer_l = jsPing.GetNews(newsAtDB_l); //send the local list to know if images have to 
be re-downloaded on a version update
+               LogB.Information("getNewsDatetime()");
+               if(jsPing.GetNewsDatetime())
+                       preferences.serverNewsDatetime = jsPing.ResultMessage;
        }
 
        private void on_preferences_debug_mode_start (object o, EventArgs args) {
diff --git a/src/gui/app1/menu.cs b/src/gui/app1/menu.cs
index 9c03c60a..25704143 100644
--- a/src/gui/app1/menu.cs
+++ b/src/gui/app1/menu.cs
@@ -309,18 +309,30 @@ public partial class ChronoJumpWindow
 
        private void on_button_menu_news_clicked (object o, EventArgs args)
        {
-               /*
-                * this will not happen because button will be unresponsive
-               if(newsAtDB_l.Count == 0)
-                       return;
-               */
+               // 1) select the news locally
+               newsAtDB_l = SqliteNews.Select(false, -1, 10);
+
+               // 2) get the news on the server
+               if(preferences.serverNewsDatetime != "" && preferences.serverNewsDatetime != 
preferences.clientNewsDatetime)
+               {
+                       //TODO: start a thread here to allow news to download or be cancelled
+                       newsAtServer_l = jsPing.GetNews(newsAtDB_l); //send the local list to know if images 
have to be re-downloaded on a version update
+
+                       preferences.clientNewsDatetime = preferences.serverNewsDatetime;
+                       SqlitePreferences.Update(SqlitePreferences.ClientNewsDatetime, 
preferences.clientNewsDatetime, false);
+               }
+
+               // 3) insert/update on SQL if needed
+               if(newsAtServer_l != null && News.InsertOrUpdateIfNeeded (newsAtDB_l, newsAtServer_l))
+                       newsAtDB_l = SqliteNews.Select(false, -1, 10);
 
-               //news print debug
+               //debug stuff
                foreach(News news in newsAtDB_l)
                        LogB.Information(news.ToString());
 
-               news_setup(0); //setup radios: language and arrows
-               news_fill(true); //fill the widget
+               // 4) fill the widgets
+               news_setup_gui(0); //setup radios: language and arrows
+               news_fill_gui(true); //fill the widget
                alignment_news.Show(); // is hidden at beginning to allow being well shown when filled
 
                //sensitivity and notebook management
diff --git a/src/gui/app1/news.cs b/src/gui/app1/news.cs
index 3a9aaebe..bef5fb6b 100644
--- a/src/gui/app1/news.cs
+++ b/src/gui/app1/news.cs
@@ -44,7 +44,7 @@ public partial class ChronoJumpWindow
        Pixbuf image_news_pixbuf;
        private int currentNewsPos;
 
-       private void news_setup(int currentPos)
+       private void news_setup_gui(int currentPos)
        {
                currentNewsPos = currentPos;
 
@@ -89,7 +89,7 @@ public partial class ChronoJumpWindow
 
                currentNewsPos --;
                newsNewerOlderUpdateWidgets();
-               news_fill (true);
+               news_fill_gui (true);
        }
        private void on_button_news_older_clicked (object o, EventArgs args)
        {
@@ -99,14 +99,19 @@ public partial class ChronoJumpWindow
 
                currentNewsPos ++;
                newsNewerOlderUpdateWidgets();
-               news_fill (true);
+               news_fill_gui (true);
        }
 
        // <----------------- end of newer, older management ----------
 
 
-       private void news_fill (bool textAndVideo)
+       private void news_fill_gui (bool textAndVideo)
        {
+               //LogB.Information(string.Format("newsAtDB_l: {0}, newsAtDB_l.Count: {1}, currentNewsPos: 
{2}",
+               //                      newsAtDB_l, newsAtDB_l.Count, currentNewsPos));
+               //just a precaution
+               if(newsAtDB_l == null || currentNewsPos >= newsAtDB_l.Count)
+                       return;
 
                News news = newsAtDB_l[currentNewsPos];
 
@@ -164,7 +169,7 @@ public partial class ChronoJumpWindow
                Sqlite.Close();
 
                // 2) rewrite the labels
-               news_fill (false);
+               news_fill_gui (false);
        }
 
        private void on_button_new_open_browser_clicked (object o, EventArgs args)


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]