r4439 - in trunk/src/target/OM-2007.2/applications/openmoko-appmanager2: . src

thomas at docs.openmoko.org thomas at docs.openmoko.org
Thu May 15 18:34:24 CEST 2008


Author: thomas
Date: 2008-05-15 18:34:23 +0200 (Thu, 15 May 2008)
New Revision: 4439

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/tool-box.c
Log:
2008-05-15  Thomas Wood  <thomas at openedhand.com>

	* src/tool-box.c: (progress_update_cb),
	(start_install): Add a progress dialog and seperate thread for package
			 install


Modified: trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/ChangeLog	2008-05-15 13:34:12 UTC (rev 4438)
+++ trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/ChangeLog	2008-05-15 16:34:23 UTC (rev 4439)
@@ -1,3 +1,9 @@
+2008-05-15  Thomas Wood  <thomas at openedhand.com>
+
+	* src/tool-box.c: (progress_update_cb),
+	(start_install): Add a progress dialog and seperate thread for package
+			 install
+
 2008-05-09  Thomas Wood  <thomas at openedhand.com>
 
 	* configure.ac:

Modified: trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/tool-box.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/tool-box.c	2008-05-15 13:34:12 UTC (rev 4438)
+++ trunk/src/target/OM-2007.2/applications/openmoko-appmanager2/src/tool-box.c	2008-05-15 16:34:23 UTC (rev 4439)
@@ -25,6 +25,7 @@
 #include "navigation-area.h"
 #include "appmanager-window.h"
 #include "ipkg-utils.h"
+#include "am-progress-dialog.h"
 
 /*
  * @brief The callback function of the button "upgrade"
@@ -62,15 +63,51 @@
   */
 }
 
-
 void
-on_install_clicked (GtkWidget *button, ApplicationManagerData *data)
+progress_update_cb (opkg_t *opkg, const opkg_progress_data_t *pdata, void *am_progress_dialog)
 {
+  AmProgressDialog *dlg = AM_PROGRESS_DIALOG (am_progress_dialog);
+  gchar *text, *name;
+
+  if (!dlg)
+    return;
+
+  if (pdata->package)
+     name = pdata->package->name;
+  else
+    name = "";
+
+  gdk_threads_enter();
+  am_progress_dialog_set_progress (dlg, pdata->percentage / 100.0);
+
+  switch (pdata->action)
+  {
+    case OPKG_INSTALL:
+      text = g_strdup_printf ("Installing %s...", name);
+      break;
+    case OPKG_REMOVE:
+      text = g_strdup_printf ("Removing %s...", name);
+      break;
+    case OPKG_DOWNLOAD:
+      text = g_strdup_printf ("Downloading %s...", name);
+      break;
+    default:
+      text = g_strdup ("Please wait...");
+  }
+
+  am_progress_dialog_set_label_text (dlg, text);
+  g_free (text);
+  gdk_threads_leave();
+
+}
+void start_install (ApplicationManagerData *data)
+{
   GtkTreeSelection *sel;
   GtkTreeModel *model;
   GtkTreeIter iter;
   gchar *name;
   GtkWidget *dialog;
+  gint ret;
   
   sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (data->tvpkglist));
   
@@ -78,16 +115,33 @@
     return;
   
   gtk_tree_model_get (model, &iter, COL_NAME, &name, -1);
+
   
-  if (opkg_install_package (data->opkg, name, NULL, NULL) == 0)
+  ret = opkg_install_package (data->opkg, name, progress_update_cb, data->installdialog);
+
+  gdk_threads_enter();
+  if (ret == 0)
     dialog = gtk_message_dialog_new (NULL,0, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s was installed", name);
   else
     dialog = gtk_message_dialog_new (NULL,0, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "%s could not be installed", name);
+
+  gtk_widget_destroy (data->installdialog);
+
   gtk_dialog_run (GTK_DIALOG (dialog));
   gtk_widget_destroy (dialog);
+  gdk_threads_leave();
 }
 
 void
+on_install_clicked (GtkWidget *button, ApplicationManagerData *data)
+{
+  data->installdialog = am_progress_dialog_new ();
+  gtk_widget_show_all (data->installdialog);
+
+  g_thread_create ((GThreadFunc) start_install, data, FALSE, NULL);
+}
+
+void
 on_remove_clicked (GtkWidget *button, ApplicationManagerData *data)
 {
   GtkTreeSelection *sel;





More information about the commitlog mailing list