[chronojump] News get with a thread
- From: Xavier de Blas <xaviblas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [chronojump] News get with a thread
- Date: Wed, 20 Jan 2021 10:47:32 +0000 (UTC)
commit d282959329677a5214b0e5e2964d96e3c06ba75f
Author: Xavier de Blas <xaviblas gmail com>
Date: Wed Jan 20 11:46:20 2021 +0100
News get with a thread
glade/app1.glade | 426 +++++++++++++++++++++++++++++++++------------------
src/gui/app1/menu.cs | 35 +----
src/gui/app1/news.cs | 85 +++++++++-
3 files changed, 365 insertions(+), 181 deletions(-)
---
diff --git a/glade/app1.glade b/glade/app1.glade
index 8c9b12d3..b1250df7 100644
--- a/glade/app1.glade
+++ b/glade/app1.glade
@@ -23604,6 +23604,12 @@ Concentric</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
<packing>
<property name="expand">False</property>
@@ -36768,6 +36774,12 @@ then click this button.</property>
<child>
<placeholder/>
</child>
+ <child>
+ <placeholder/>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
</widget>
<packing>
<property name="expand">False</property>
@@ -42637,138 +42649,234 @@ then click this button.</property>
<property name="can_focus">False</property>
<property name="border_width">4</property>
<child>
- <widget class="GtkAlignment" id="alignment67">
+ <widget class="GtkNotebook" id="notebook_news">
<property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="bottom_padding">2</property>
+ <property name="can_focus">True</property>
+ <property name="show_tabs">False</property>
+ <property name="show_border">False</property>
<child>
- <widget class="GtkHBox" id="hbox453">
+ <widget class="GtkHBox" id="hbox78">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
- <widget class="GtkHBox" id="hbox447">
+ <widget class="GtkVBox" id="vbox243">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">6</property>
<child>
- <widget class="GtkImage" id="image_news_blue">
+ <widget class="GtkFrame" id="frame28">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="stock">gtk-missing-image</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">1</property>
+ <property name="shadow_type">in</property>
+ <child>
+ <widget class="GtkViewport" id="viewport21">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="border_width">4</property>
+ <child>
+ <widget class="GtkVBox" id="vbox244">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkLabel" id="label261">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label"
translatable="yes">Please, Wait!</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkProgressBar"
id="progressbar_news_get">
+ <property name="height_request">25</property>
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
+ </child>
+ <child>
+ <placeholder/>
+ <packing>
+ <property name="type">label_item</property>
+ </packing>
+ </child>
</widget>
<packing>
- <property name="expand">False</property>
+ <property name="expand">True</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
- <child>
- <widget class="GtkImage" id="image_news_yellow">
- <property name="can_focus">False</property>
- <property name="stock">gtk-missing-image</property>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label_news_frame">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">Latest
products</property>
- </widget>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
</widget>
<packing>
- <property name="expand">False</property>
+ <property name="expand">True</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label33">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">page 1</property>
+ </widget>
+ <packing>
+ <property name="tab_fill">False</property>
+ <property name="type">tab</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVBox" id="vbox242">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
<child>
- <widget class="GtkHBox" id="hbox452">
+ <widget class="GtkAlignment" id="alignment67">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="spacing">8</property>
- <child>
- <widget class="GtkRadioButton"
id="radio_news_language_english">
- <property name="label"
translatable="yes">English</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="active">True</property>
- <property name="draw_indicator">False</property>
- <signal name="toggled"
handler="on_radio_news_language_english_toggled" swapped="no"/>
- </widget>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
+ <property name="bottom_padding">2</property>
<child>
- <widget class="GtkRadioButton"
id="radio_news_language_spanish">
- <property name="label"
translatable="yes">Spanish</property>
+ <widget class="GtkHBox" id="hbox453">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="draw_indicator">False</property>
- <property
name="group">radio_news_language_english</property>
- <signal name="toggled"
handler="on_radio_news_language_spanish_toggled" swapped="no"/>
+ <property name="can_focus">False</property>
+ <child>
+ <widget class="GtkHBox" id="hbox447">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkImage" id="image_news_blue">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property
name="stock">gtk-missing-image</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkImage" id="image_news_yellow">
+ <property name="can_focus">False</property>
+ <property
name="stock">gtk-missing-image</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label_news_frame">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Latest
products</property>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox452">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">8</property>
+ <child>
+ <widget class="GtkRadioButton"
id="radio_news_language_english">
+ <property name="label"
translatable="yes">English</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property name="active">True</property>
+ <property name="draw_indicator">False</property>
+ <signal name="toggled"
handler="on_radio_news_language_english_toggled" swapped="no"/>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkRadioButton"
id="radio_news_language_spanish">
+ <property name="label"
translatable="yes">Spanish</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property
name="receives_default">False</property>
+ <property name="draw_indicator">False</property>
+ <property
name="group">radio_news_language_english</property>
+ <signal name="toggled"
handler="on_radio_news_language_spanish_toggled" swapped="no"/>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="pack_type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
</widget>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="pack_type">end</property>
- <property name="position">1</property>
+ <property name="position">0</property>
</packing>
</child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkFrame" id="frame27">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label_xalign">0</property>
- <property name="label_yalign">1</property>
- <property name="shadow_type">in</property>
- <child>
- <widget class="GtkViewport" id="viewport16">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">4</property>
<child>
- <widget class="GtkVBox" id="vbox148">
+ <widget class="GtkFrame" id="frame27">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="label_yalign">1</property>
+ <property name="shadow_type">in</property>
<child>
- <widget class="GtkAlignment" id="alignment55">
+ <widget class="GtkViewport" id="viewport16">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="top_padding">2</property>
+ <property name="border_width">4</property>
<child>
- <widget class="GtkHBox" id="hbox451">
+ <widget class="GtkVBox" id="vbox148">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <widget class="GtkAlignment" id="alignment55">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="top_padding">2</property>
+ <child>
+ <widget class="GtkHBox" id="hbox451">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
@@ -42836,21 +42944,21 @@ then click this button.</property>
<property name="position">0</property>
</packing>
</child>
- </widget>
- </child>
- </widget>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHBox" id="hbox443">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <widget class="GtkVBox" id="vbox149">
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHBox" id="hbox443">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <widget class="GtkVBox" id="vbox149">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
@@ -42979,64 +43087,73 @@ then click this button.</property>
<property name="position">1</property>
</packing>
</child>
- </widget>
- <packing>
+ </widget>
+ <packing>
<property name="expand">True</property>
<property name="fill">False</property>
<property name="position">0</property>
- </packing>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
</child>
</widget>
+ </child>
+ <child>
+ <placeholder/>
<packing>
- <property name="expand">True</property>
- <property name="fill">False</property>
- <property name="position">1</property>
+ <property name="type">label_item</property>
</packing>
</child>
</widget>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
</child>
- </widget>
- </child>
- <child>
- <placeholder/>
- <packing>
- <property name="type">label_item</property>
- </packing>
- </child>
- </widget>
- <packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <widget class="GtkAlignment" id="alignment65">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="top_padding">4</property>
- <child>
- <widget class="GtkHButtonBox" id="hbuttonbox10">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
<child>
- <widget class="GtkButton" id="button_news_close">
+ <widget class="GtkAlignment" id="alignment65">
<property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <signal name="clicked"
handler="on_button_news_close_clicked" swapped="no"/>
- <accelerator key="Escape" signal="clicked"/>
+ <property name="can_focus">False</property>
+ <property name="top_padding">4</property>
<child>
- <widget class="GtkEventBox"
id="eventbox_button_news_close">
+ <widget class="GtkHButtonBox" id="hbuttonbox10">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
- <widget class="GtkLabel" id="label412">
+ <widget class="GtkButton" id="button_news_close">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property
name="receives_default">False</property>
+ <signal name="clicked"
handler="on_button_news_close_clicked" swapped="no"/>
+ <accelerator key="Escape" signal="clicked"/>
+ <child>
+ <widget class="GtkEventBox"
id="eventbox_button_news_close">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <widget class="GtkLabel" id="label412">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label"
translatable="yes">Close</property>
+ </widget>
+ </child>
+ </widget>
+ </child>
</widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
</child>
</widget>
</child>
@@ -43044,16 +43161,31 @@ then click this button.</property>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
- <property name="position">0</property>
+ <property name="position">2</property>
</packing>
</child>
</widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label104">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">page 2</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ <property name="tab_fill">False</property>
+ <property name="type">tab</property>
+ </packing>
</child>
</widget>
<packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">2</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
</packing>
</child>
</widget>
diff --git a/src/gui/app1/menu.cs b/src/gui/app1/menu.cs
index 25704143..55b919c3 100644
--- a/src/gui/app1/menu.cs
+++ b/src/gui/app1/menu.cs
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Copyright (C) 2018-2020 Xavier de Blas <xaviblas gmail com>
+ * Copyright (C) 2018-2021 Xavier de Blas <xaviblas gmail com>
*/
//this file has methods of ChronoJumpWindow related to manage menu
@@ -300,7 +300,6 @@ public partial class ChronoJumpWindow
app1s_notebook_sup_entered_from = notebook_sup.CurrentPage;
notebook_sup.CurrentPage = Convert.ToInt32(notebook_sup_pages.HELP);
}
-
private void on_button_help_close_clicked (object o, EventArgs args)
{
menus_and_mode_sensitive(true);
@@ -309,38 +308,8 @@ public partial class ChronoJumpWindow
private void on_button_menu_news_clicked (object o, EventArgs args)
{
- // 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);
-
- //debug stuff
- foreach(News news in newsAtDB_l)
- LogB.Information(news.ToString());
-
- // 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
- menus_and_mode_sensitive(false);
- app1s_notebook_sup_entered_from = notebook_sup.CurrentPage;
- notebook_sup.CurrentPage = Convert.ToInt32(notebook_sup_pages.NEWS);
+ newsGetThreadPrepare();
}
-
private void on_button_news_close_clicked (object o, EventArgs args)
{
menus_and_mode_sensitive(true);
diff --git a/src/gui/app1/news.cs b/src/gui/app1/news.cs
index bef5fb6b..7d47f590 100644
--- a/src/gui/app1/news.cs
+++ b/src/gui/app1/news.cs
@@ -15,7 +15,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
- * Copyright (C) 2020 Xavier de Blas <xaviblas gmail com>
+ * Copyright (C) 2021 Xavier de Blas <xaviblas gmail com>
*/
using System;
@@ -23,9 +23,12 @@ using Gdk; //pixbuf
using Glade;
using System.IO;
using System.Collections.Generic; //List<T>
+using System.Threading;
public partial class ChronoJumpWindow
{
+ [Widget] Gtk.Notebook notebook_news;
+ [Widget] Gtk.ProgressBar progressbar_news_get;
[Widget] Gtk.Image image_news_blue;
[Widget] Gtk.Image image_news_yellow;
[Widget] Gtk.Label label_news_frame;
@@ -44,6 +47,86 @@ public partial class ChronoJumpWindow
Pixbuf image_news_pixbuf;
private int currentNewsPos;
+
+ private void newsGetThreadPrepare()
+ {
+ // 1) select the news locally
+ newsAtDB_l = SqliteNews.Select(false, -1, 10);
+
+ // 2) prepare the GUI
+ alignment_news.Show(); // is hidden at beginning to allow being well shown when filled
+ menus_and_mode_sensitive(false);
+ app1s_notebook_sup_entered_from = notebook_sup.CurrentPage;
+ notebook_sup.CurrentPage = Convert.ToInt32(notebook_sup_pages.NEWS);
+
+ // 3) get the news on the server
+ if(preferences.serverNewsDatetime != "" && preferences.serverNewsDatetime !=
preferences.clientNewsDatetime)
+ {
+ LogB.Information("newsGet thread will start");
+ pingThread = new Thread (new ThreadStart (newsGet));
+ GLib.Idle.Add (new GLib.IdleHandler (pulseNewsGetGTK));
+ pingThread.Start();
+ } else {
+ // 3b) or display old news
+ newsDisplay();
+ }
+ }
+
+ //No GTK here
+ private void newsGet()
+ {
+ newsAtServer_l = jsPing.GetNews(newsAtDB_l); //send the local list to know if images have to
be re-downloaded on a version update
+ }
+ private bool pulseNewsGetGTK ()
+ {
+ if(! pingThread.IsAlive)
+ {
+ if(newsAtServer_l != null)
+ {
+ // 1) update clientNewsDatetime
+ preferences.clientNewsDatetime = preferences.serverNewsDatetime;
+ SqlitePreferences.Update(SqlitePreferences.ClientNewsDatetime,
preferences.clientNewsDatetime, false);
+
+ // 2) insert/update on SQL if needed
+ News.InsertOrUpdateIfNeeded (newsAtDB_l, newsAtServer_l);
+ }
+
+ // 3) end this pulse
+ LogB.Information("pulseNewsGetGTK ending here");
+ LogB.ThreadEnded();
+
+ if(newsAtServer_l != null)
+ newsDisplay();
+
+ return false;
+ }
+
+ notebook_news.Page = 0;
+ progressbar_news_get.Pulse();
+ Thread.Sleep (100);
+ //Log.Write(" (pulseNewsGetGTK:" + thread.ThreadState.ToString() + ") ");
+ return true;
+ }
+
+ private void newsDisplay()
+ {
+ // 1) select
+ newsAtDB_l = SqliteNews.Select(false, -1, 10);
+
+ /*
+ //debug stuff
+ foreach(News news in newsAtDB_l)
+ LogB.Information(news.ToString());
+ */
+
+ // 2) fill the widgets
+ news_setup_gui(0); //setup radios: language and arrows
+ news_fill_gui(true); //fill the widget
+
+ // 3) show the news tab
+ notebook_news.Page = 1;
+ }
+
private void news_setup_gui(int currentPos)
{
currentNewsPos = currentPos;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]