summaryrefslogtreecommitdiff
path: root/nautilus-installer
diff options
context:
space:
mode:
authorEskil Heyn Olsen <eskil@src.gnome.org>2000-08-30 09:49:02 +0000
committerEskil Heyn Olsen <eskil@src.gnome.org>2000-08-30 09:49:02 +0000
commit39765997dae22c0e99ef3e6ced9e28a2577ddb23 (patch)
tree3fcf50c8838b300c2f8bd85ef4b362e9ea72f52b /nautilus-installer
parent99f0444deca422cbcfb2c106a8fef6ac2dd159fd (diff)
downloadnautilus-39765997dae22c0e99ef3e6ced9e28a2577ddb23.tar.gz
Changed the comments reg. bug 1657
* components/rpmview/nautilus-rpm-view.c: (nautilus_rpm_view_update_from_uri): Changed the comments reg. bug 1657 components/services/install/command-line/eazel-alt-install-corba.c: (create_package), Handles ~ in filenames now (main): Proper gtk_signal_func cast for the delete_files signal * components/services/install/command-line/eazel-gen-pre-xml.sh: Script to generate a colon-delimited file for eazel-gen-xml, by using rpm -qp on rpm files. * components/services/install/lib/eazel-install-object.c: (eazel_install_class_initialize), (eazel_install_initialize): -DEAZEL_INSTALL_SLIM no longer creates a userlocal rpmdb * components/services/install/lib/eazel-install-protocols.c: (gnome_vfs_xfer_callback), (free_string), (gnome_vfs_fetch_remote_file) (get_url_for_package): Added D: to debug output, nicefied the gnome-vfs stuff after shane laughed at me (eazel_install_fetch_package), Added the md5 stuff, it's commented out, as there is no md5 in the xml from the server, thus checking md5 would fail all packages. * components/services/install/lib/eazel-install-rpm-glue.c: (eazel_install_download_packages), (download_all_packages), (eazel_install_pre_install_packages), (install_packages), (uninstall_packages), (eazel_install_prepare_rpm_system), (eazel_install_add_to_rpm_set), (eazel_install_check_existing_packages), (eazel_install_fetch_rpm_dependencies): So much... - xml packagelist can now have soft_depends which the download and install now checks for - removed some leaks - check for reopening rpmdb which is bad - clarifying comments for div FIXME's (eazel_install_prune_packages), Fixed a vaarg usage * components/services/install/lib/eazel-install-types.h: Added md5 to the PackageData struct * components/services/install/lib/eazel-install-types.c: (categorydata_new), (categorydata_destroy_foreach), (packagedata_new), (packagedata_destroy_foreach), Added md5 to the PackageData struct Now has some debug stuff to check for deallocating structes. (packagedata_remove_soft_dep), added function to remove a package from another packages soft_deps (rpmfilename_from_packagedata): Fixed a wrong g_strconcat * components/services/install/lib/eazel-install-xml-package-list.c: (generate_xml_package_list) Generates nicer category names... (parse_category), (parse_memory_transaction_file), Uses categorydata_new now (osd_parse_implementation), Added FIXME reg. md5 check (parse_osd_xml_from_memory): D: to debug output * components/services/install/lib/makefile.staticlib.in: No longer sets the defines, they are now set in the link.sh scrip in the nautilus-installer * nautilus-installer/src/Makefile: * nautilus-installer/src/Makefile.am: * nautilus-installer/src/callbacks.c: (druid_cancel), (begin_install), (druid_finish), (prep_install): * nautilus-installer/src/installer.c: (set_white_stuff), (create_what_to_do_page), (create_install_page), (create_finish_page), (create_window), (set_images), (eazel_install_progress), (eazel_download_progress), (install_failed_helper), (install_failed), (download_failed), (eazel_install_preflight), (eazel_install_dep_check), (eazel_install_delete_files), (eazel_installer_add_category), (check_system), (eazel_installer_do_install), (eazel_installer_finalize), (eazel_installer_unref), (eazel_installer_class_initialize), (eazel_installer_initialize), (eazel_installer_get_type), (eazel_installer_new): * nautilus-installer/src/installer.h: * nautilus-installer/src/interface.c: * nautilus-installer/src/link.sh: * nautilus-installer/src/main.c: (oaf_init), (bonobo_init): * nautilus-installer/src/support.c: * nautilus-installer/src/support.h: Created a gtkobject for the installer, revamped the choice stuff, so it now offers the categories, stabilization work etc.
Diffstat (limited to 'nautilus-installer')
-rw-r--r--nautilus-installer/src/Makefile11
-rw-r--r--nautilus-installer/src/Makefile.am1
-rw-r--r--nautilus-installer/src/callbacks.c22
-rw-r--r--nautilus-installer/src/installer.c901
-rw-r--r--nautilus-installer/src/installer.h4
-rw-r--r--nautilus-installer/src/interface.c941
-rw-r--r--nautilus-installer/src/interface.h0
-rwxr-xr-xnautilus-installer/src/link.sh7
-rw-r--r--nautilus-installer/src/main.c12
-rw-r--r--nautilus-installer/src/support.c103
-rw-r--r--nautilus-installer/src/support.h11
11 files changed, 920 insertions, 1093 deletions
diff --git a/nautilus-installer/src/Makefile b/nautilus-installer/src/Makefile
index 588549a4b..bb70b38df 100644
--- a/nautilus-installer/src/Makefile
+++ b/nautilus-installer/src/Makefile
@@ -66,7 +66,7 @@ BONOBO_CFLAGS = -I/gnome/include -DNEED_GNOMESUPPORT_H -I/gnome/lib/gnome-libs/i
BONOBO_LIBS = -rdynamic -L/gnome/lib -L/usr/X11R6/lib -L/usr/lib -lbonobo -lgdk_pixbuf -ltiff -ljpeg -lpng -lgnomeprint -lgnomeui -lart_lgpl -lgdk_imlib -lSM -lICE -lgtk -lgdk -lgmodule -lXext -lX11 -lgnome -lgnomesupport -lesd -laudiofile -ldb1 -ldl -lxml -lz -loaf -lORBitCosNaming -lORBit -lIIOP -lORBitutil -lglib -lnsl -lm
BONOBO_PRINT_CFLAGS =
BONOBO_PRINT_LIBS =
-CATALOGS = da.gmo de.gmo fr.gmo ga.gmo gl.gmo it.gmo ja.gmo ko.gmo no.gmo pt_BR.gmo ru.gmo sv.gmo tr.gmo uk.gmo zh_TW.Big5.gmo
+CATALOGS =
CATOBJEXT = .gmo
CC = gcc
CPP = gcc -E
@@ -165,7 +165,7 @@ CFLAGS = -g
bin_PROGRAMS = nautilus-installer
-nautilus_installer_SOURCES = main.c support.c support.h interface.c interface.h callbacks.c callbacks.h installer.c installer.h
+nautilus_installer_SOURCES = main.c support.c support.h callbacks.c callbacks.h installer.c installer.h
nautilus_installer_LDFLAGS = -static
@@ -181,8 +181,7 @@ PROGRAMS = $(bin_PROGRAMS)
DEFS = -DHAVE_CONFIG_H -I. -I$(srcdir) -I../..
LDFLAGS =
LIBS =
-nautilus_installer_OBJECTS = main.o support.o interface.o callbacks.o \
-installer.o
+nautilus_installer_OBJECTS = main.o support.o callbacks.o installer.o
nautilus_installer_DEPENDENCIES = \
$(top_builddir)/components/services/trilobite/libtrilobite/helixcode-utils.o \
$(top_builddir)/components/services/trilobite/libtrilobite/trilobite-core-distribution.o \
@@ -200,8 +199,8 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
GZIP_ENV = --best
-DEP_FILES = .deps/callbacks.P .deps/installer.P .deps/interface.P \
-.deps/main.P .deps/support.P
+DEP_FILES = .deps/callbacks.P .deps/installer.P .deps/main.P \
+.deps/support.P
SOURCES = $(nautilus_installer_SOURCES)
OBJECTS = $(nautilus_installer_OBJECTS)
diff --git a/nautilus-installer/src/Makefile.am b/nautilus-installer/src/Makefile.am
index 46b695c2b..2abbeee62 100644
--- a/nautilus-installer/src/Makefile.am
+++ b/nautilus-installer/src/Makefile.am
@@ -24,7 +24,6 @@ bin_PROGRAMS = nautilus-installer
nautilus_installer_SOURCES = \
main.c \
support.c support.h \
- interface.c interface.h \
callbacks.c callbacks.h \
installer.c installer.h
diff --git a/nautilus-installer/src/callbacks.c b/nautilus-installer/src/callbacks.c
index 1ce33ec26..ddb9c9490 100644
--- a/nautilus-installer/src/callbacks.c
+++ b/nautilus-installer/src/callbacks.c
@@ -27,21 +27,20 @@
#include <gnome.h>
#include "callbacks.h"
-#include "interface.h"
#include "support.h"
#include "installer.h"
void
-druid_cancel (GnomeDruid *gnomedruid,
- EazelInstaller *installer)
+druid_cancel (GnomeDruid *gnomedruid,
+ EazelInstaller *installer)
{
exit (1);
}
gboolean
-begin_install (EazelInstaller *installer)
+begin_install (EazelInstaller *installer)
{
GtkWidget *window = installer->window;
GnomeDruid *druid;
@@ -73,21 +72,18 @@ begin_install (EazelInstaller *installer)
void
-druid_finish (GnomeDruidPage *gnomedruidpage,
- gpointer arg1,
- EazelInstaller *installer)
+druid_finish (GnomeDruidPage *gnomedruidpage,
+ gpointer arg1,
+ EazelInstaller *installer)
{
exit (0);
}
void
-prep_install (GnomeDruidPage *gnomedruidpage,
- GtkWidget *druid,
- EazelInstaller *installer)
+prep_install (GnomeDruidPage *gnomedruidpage,
+ GtkWidget *druid,
+ EazelInstaller *installer)
{
- GnomeDruid *druid;
- GtkButton *button;
-
g_timeout_add (0, (GSourceFunc)begin_install, installer);
}
diff --git a/nautilus-installer/src/installer.c b/nautilus-installer/src/installer.c
index 12782c0d5..b3ec7dcab 100644
--- a/nautilus-installer/src/installer.c
+++ b/nautilus-installer/src/installer.c
@@ -25,22 +25,700 @@
#endif
#include <gnome.h>
-#include "installer.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
#include <libtrilobite/helixcode-utils.h>
-#include "interface.h"
+#include <eazel-install-xml-package-list.h>
#include <errno.h>
-#include <sys/stat.h>
-#include <sys/types.h>
#include <fcntl.h>
-#include <unistd.h>
#include <dirent.h>
-
#include <sys/utsname.h>
+#include "installer.h"
+#include "callbacks.h"
+#include "installer.h"
+#include "support.h"
+
+
+/* Include the pixmaps */
+#include "Banner_Left.xpm"
+#include "Step_Two_Top.xpm"
+#include "Step_Three_Top.xpm"
+#include "Step_One_Top.xpm"
+#include "Final_Top.xpm"
+
+
#define EAZEL_SERVICES_DIR_HOME "/var/eazel"
#define EAZEL_SERVICES_DIR EAZEL_SERVICES_DIR_HOME "/services"
-static char *failure_info = NULL;
+#define HOSTNAME "testmachine.eazel.com"
+#define PORT_NUMBER 80
+#define TMP_DIR "/tmp/eazel-install"
+#define RPMRC "/usr/lib/rpm/rpmrc"
+#define REMOTE_RPM_DIR "/RPMS"
+
+int installer_debug = 0;
+int installer_output = 0;
+int installer_test = 0;
+int installer_force = 0;
+int installer_local = 0;
+char *installer_server =NULL;
+int installer_server_port = 0;
+
+
+static GtkObjectClass *eazel_installer_parent_class;
+
+
+static void
+set_white_stuff (GtkWidget *w)
+{
+ GtkStyle *style;
+ GdkColor *color;
+
+ style = gtk_style_copy (w->style);
+ style->bg[GTK_STATE_NORMAL].red = 65000;
+ style->bg[GTK_STATE_NORMAL].blue = 65000;
+ style->bg[GTK_STATE_NORMAL].green = 65000;
+ gtk_widget_set_style (w, style);
+ gtk_style_unref (style);
+}
+
+GtkWidget*
+create_what_to_do_page (GtkWidget *druid, GtkWidget *window)
+{
+ GtkWidget *what_to_do_page;
+ GdkColor what_to_do_page_bg_color = { 0, 3341, 23130, 26214 };
+ GdkColor what_to_do_page_logo_bg_color = { 0, 3341, 23130, 26214 };
+ GdkColor what_to_do_page_title_color = { 0, 65535, 65535, 65535 };
+ GtkWidget *druid_vbox1;
+ GtkWidget *vbox3;
+ GtkWidget *label10;
+ GtkWidget *fixed3;
+
+ what_to_do_page = gnome_druid_page_standard_new_with_vals ("", NULL);
+
+ set_white_stuff (GTK_WIDGET (what_to_do_page));
+
+ gtk_widget_set_name (what_to_do_page, "what_to_do_page");
+ gtk_widget_ref (what_to_do_page);
+ gtk_object_set_data_full (GTK_OBJECT (window), "what_to_do_page", what_to_do_page,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show_all (what_to_do_page);
+ gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (what_to_do_page));
+ gnome_druid_page_standard_set_bg_color (GNOME_DRUID_PAGE_STANDARD (what_to_do_page),
+ &what_to_do_page_bg_color);
+ gnome_druid_page_standard_set_logo_bg_color (GNOME_DRUID_PAGE_STANDARD (what_to_do_page),
+ &what_to_do_page_logo_bg_color);
+ gnome_druid_page_standard_set_title_color (GNOME_DRUID_PAGE_STANDARD (what_to_do_page),
+ &what_to_do_page_title_color);
+ gnome_druid_page_standard_set_title (GNOME_DRUID_PAGE_STANDARD (what_to_do_page), _("What to do ?"));
+
+ druid_vbox1 = GNOME_DRUID_PAGE_STANDARD (what_to_do_page)->vbox;
+ set_white_stuff (GTK_WIDGET (druid_vbox1));
+ gtk_widget_set_name (druid_vbox1, "druid_vbox1");
+ gtk_widget_ref (druid_vbox1);
+ gtk_object_set_data_full (GTK_OBJECT (window), "druid_vbox1", druid_vbox1,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (druid_vbox1);
+
+ vbox3 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_set_name (vbox3, "vbox3");
+ gtk_widget_ref (vbox3);
+ gtk_object_set_data_full (GTK_OBJECT (window), "vbox3", vbox3,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (vbox3);
+ gtk_box_pack_start (GTK_BOX (druid_vbox1), vbox3, TRUE, TRUE, 0);
+
+ label10 = gtk_label_new (_("You have several choices for what you would like the installer to do.\n"
+ "Please choose one and click on the \"Next\" button to begin install."));
+ gtk_widget_set_name (label10, "label10");
+ gtk_widget_ref (label10);
+ gtk_object_set_data_full (GTK_OBJECT (window), "label10", label10,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (label10);
+ gtk_box_pack_start (GTK_BOX (vbox3), label10, FALSE, FALSE, 0);
+ gtk_label_set_justify (GTK_LABEL (label10), GTK_JUSTIFY_LEFT);
+
+ fixed3 = gtk_fixed_new ();
+ set_white_stuff (GTK_WIDGET (fixed3));
+ gtk_widget_set_name (fixed3, "fixed3");
+ gtk_widget_ref (fixed3);
+ gtk_object_set_data_full (GTK_OBJECT (window), "fixed3", fixed3,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (fixed3);
+ gtk_box_pack_start (GTK_BOX (vbox3), fixed3, TRUE, TRUE, 0);
+
+ return what_to_do_page;
+}
+
+GtkWidget*
+create_install_page (GtkWidget *druid, GtkWidget *window)
+{
+ GtkWidget *install_page;
+ GdkColor install_page_bg_color = { 0, 3341, 23130, 26214 };
+ GdkColor install_page_logo_bg_color = { 0, 3341, 23130, 26214 };
+ GdkColor install_page_title_color = { 0, 65535, 65535, 65535 };
+ GtkWidget *druid_vbox2;
+ GtkWidget *vbox5;
+ GtkWidget *label11;
+ GtkWidget *table2;
+ GtkWidget *label12;
+ GtkWidget *label13;
+ GtkWidget *action_label;
+ GtkWidget *progressbar1;
+ GtkWidget *progressbar2;
+ GtkWidget *package_label;
+ GtkWidget *fixed1;
+ GtkWidget *textbox;
+ GtkWidget *scrolledwindow;
+ const char *download_description;
+ int download_description_length;
+
+ download_description = g_strdup (_("Currently downloading packages required to "
+ "install Nautilus\n"));
+ download_description_length = strlen (download_description);
+
+ install_page = gnome_druid_page_standard_new_with_vals ("", NULL);
+ set_white_stuff (GTK_WIDGET (install_page));
+ gtk_widget_set_name (install_page, "install_page");
+ gtk_widget_ref (install_page);
+ gtk_object_set_data_full (GTK_OBJECT (window), "install_page", install_page,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show_all (install_page);
+ gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (install_page));
+ gnome_druid_page_standard_set_bg_color (GNOME_DRUID_PAGE_STANDARD (install_page),
+ &install_page_bg_color);
+ gnome_druid_page_standard_set_logo_bg_color (GNOME_DRUID_PAGE_STANDARD (install_page),
+ &install_page_logo_bg_color);
+ gnome_druid_page_standard_set_title_color (GNOME_DRUID_PAGE_STANDARD (install_page),
+ &install_page_title_color);
+ gnome_druid_page_standard_set_title (GNOME_DRUID_PAGE_STANDARD (install_page), _("Progress..."));
+
+ druid_vbox2 = GNOME_DRUID_PAGE_STANDARD (install_page)->vbox;
+ gtk_widget_set_name (druid_vbox2, "druid_vbox2");
+ gtk_widget_ref (druid_vbox2);
+ gtk_object_set_data_full (GTK_OBJECT (window), "druid_vbox2", druid_vbox2,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (druid_vbox2);
+
+ vbox5 = gtk_vbox_new (FALSE, 0);
+ set_white_stuff (GTK_WIDGET (vbox5));
+ gtk_widget_set_name (vbox5, "vbox5");
+ gtk_widget_ref (vbox5);
+ gtk_object_set_data_full (GTK_OBJECT (window), "vbox5", vbox5,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (vbox5);
+ gtk_box_pack_start (GTK_BOX (druid_vbox2), vbox5, TRUE, TRUE, 0);
+
+ table2 = gtk_table_new (3, 2, FALSE);
+ set_white_stuff (GTK_WIDGET (table2));
+ gtk_widget_set_name (table2, "table2");
+ gtk_widget_ref (table2);
+ gtk_object_set_data_full (GTK_OBJECT (window), "table2", table2,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (table2);
+ gtk_table_set_row_spacings (GTK_TABLE (table2), 16);
+ gtk_box_pack_start (GTK_BOX (vbox5), table2, FALSE, FALSE, 16);
+
+ progressbar1 = gtk_progress_bar_new ();
+ gtk_widget_set_name (progressbar1, "progressbar_single");
+ gtk_widget_ref (progressbar1);
+ gtk_object_set_data_full (GTK_OBJECT (window), "progressbar_single", progressbar1,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_progress_set_show_text (GTK_PROGRESS (progressbar1), TRUE);
+ gtk_widget_show (progressbar1);
+ gtk_table_attach (GTK_TABLE (table2), progressbar1, 1, 2, 1, 2,
+ /* GTK_EXPAND */ 0,
+ /* GTK_EXPAND */ GTK_SHRINK,
+ 0, 0);
+
+ progressbar2 = gtk_progress_bar_new ();
+ gtk_widget_set_name (progressbar2, "progressbar_overall");
+ gtk_widget_ref (progressbar2);
+ gtk_object_set_data_full (GTK_OBJECT (window), "progressbar_overall", progressbar2,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_progress_set_format_string (GTK_PROGRESS (progressbar2), "Waiting for download...");
+ gtk_progress_set_show_text (GTK_PROGRESS (progressbar2), TRUE);
+ gtk_widget_show (progressbar2);
+ gtk_table_attach (GTK_TABLE (table2), progressbar2, 1, 2, 2, 3,
+ /* GTK_EXPAND */ 0,
+ /* GTK_EXPAND */ GTK_SHRINK,
+ 0, 0);
+
+ package_label = gtk_label_new (_("En fjæsing hedder Bent"));
+ gtk_widget_set_name (package_label, "package_label");
+ gtk_widget_ref (package_label);
+ gtk_object_set_data_full (GTK_OBJECT (window), "package_label", package_label,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (package_label);
+ gtk_table_attach (GTK_TABLE (table2), package_label, 1, 2, 0, 1,
+ GTK_EXPAND,
+ GTK_EXPAND,
+ 0, 0);
+/*
+ fixed1 = gtk_fixed_new ();
+ gtk_widget_set_name (fixed1, "fixed1");
+ set_white_stuff (GTK_WIDGET (fixed1));
+ gtk_widget_ref (fixed1);
+ gtk_object_set_data_full (GTK_OBJECT (window), "fixed1", fixed1,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (fixed1);
+ gtk_box_pack_start (GTK_BOX (vbox5), fixed1, TRUE, TRUE, 16);
+*/
+
+
+ textbox = gtk_label_new ("");
+ gtk_widget_set_name (textbox, "textbox");
+ gtk_widget_ref (textbox);
+ gtk_object_set_data_full (GTK_OBJECT (window), "summary", textbox,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (textbox);
+ gtk_label_set_text (GTK_LABEL (textbox), download_description);
+ gtk_box_pack_start (GTK_BOX (vbox5), textbox, TRUE, TRUE, 0);
+
+ return install_page;
+}
+
+GtkWidget*
+create_finish_page (GtkWidget *druid, GtkWidget *window)
+{
+ GtkWidget *finish_page;
+ GdkColor finish_page_bg_color = { 0, 3341, 23130, 26214 };
+ GdkColor finish_page_textbox_color = { 0, 65535, 65535, 65535 };
+ GdkColor finish_page_logo_bg_color = { 0, 3341, 23130, 26214 };
+ GdkColor finish_page_title_color = { 0, 65535, 65535, 65535 };
+
+ finish_page = gnome_druid_page_finish_new ();
+ gtk_widget_set_name (finish_page, "finish_page");
+ gtk_widget_ref (finish_page);
+ gtk_object_set_data_full (GTK_OBJECT (window), "finish_page", finish_page,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (finish_page);
+ gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (finish_page));
+ gnome_druid_page_finish_set_bg_color (GNOME_DRUID_PAGE_FINISH (finish_page),
+ &finish_page_bg_color);
+ gnome_druid_page_finish_set_textbox_color (GNOME_DRUID_PAGE_FINISH (finish_page),
+ &finish_page_textbox_color);
+ gnome_druid_page_finish_set_logo_bg_color (GNOME_DRUID_PAGE_FINISH (finish_page),
+ &finish_page_logo_bg_color);
+ gnome_druid_page_finish_set_title_color (GNOME_DRUID_PAGE_FINISH (finish_page),
+ &finish_page_title_color);
+ gnome_druid_page_finish_set_title (GNOME_DRUID_PAGE_FINISH (finish_page), _("Finished"));
+ gnome_druid_page_finish_set_text (GNOME_DRUID_PAGE_FINISH (finish_page),
+ _("If the installation was successfull, you can\n"
+ "find the nautilus icon in the applications menu.\n\n"
+ "Thanks for taking the time to try out Nautilus.\n\n"
+ "May your life be a healthy and happy one."));
+
+ return finish_page;
+}
+
+GtkWidget*
+create_window (EazelInstaller *installer)
+{
+ GtkWidget *window;
+ GtkWidget *druid;
+ GtkWidget *start_page;
+ GdkColor start_page_bg_color = { 0, 3341, 23130, 26214 };
+ GdkColor start_page_textbox_color = { 0, 65535, 65535, 65535 };
+ GdkColor start_page_logo_bg_color = { 0, 3341, 23130, 26214 };
+ GdkColor start_page_title_color = { 0, 65535, 65535, 65535 };
+ GtkWidget *what_to_do_page;
+ GtkWidget *install_page;
+ GtkWidget *finish_page;
+
+ window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+ gtk_widget_set_name (window, "window");
+ gtk_object_set_data (GTK_OBJECT (window), "window", window);
+ gtk_window_set_title (GTK_WINDOW (window), _("Nautilus install tool"));
+
+ druid = gnome_druid_new ();
+ gtk_widget_set_name (druid, "druid");
+ gtk_widget_ref (druid);
+ gtk_object_set_data_full (GTK_OBJECT (window), "druid", druid,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (druid);
+ gtk_container_add (GTK_CONTAINER (window), druid);
+
+ start_page = gnome_druid_page_start_new ();
+ gtk_widget_set_name (start_page, "start_page");
+ gtk_widget_ref (start_page);
+ gtk_object_set_data_full (GTK_OBJECT (window), "start_page", start_page,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (start_page);
+ gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (start_page));
+ gnome_druid_set_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (start_page));
+ gnome_druid_page_start_set_bg_color (GNOME_DRUID_PAGE_START (start_page),
+ &start_page_bg_color);
+ gnome_druid_page_start_set_textbox_color (GNOME_DRUID_PAGE_START (start_page),
+ &start_page_textbox_color);
+ gnome_druid_page_start_set_logo_bg_color (GNOME_DRUID_PAGE_START (start_page),
+ &start_page_logo_bg_color);
+ gnome_druid_page_start_set_title_color (GNOME_DRUID_PAGE_START (start_page),
+ &start_page_title_color);
+ gnome_druid_page_start_set_title (GNOME_DRUID_PAGE_START (start_page), _("Step one:"));
+ gnome_druid_page_start_set_text (GNOME_DRUID_PAGE_START (start_page),
+ _("This is the internal Nautilus installer.\n\n"
+ "Lots of text should go here letting you know what you need\n"
+ "to have installed before you should even begin to think about\n"
+ "using this. For example:\n"
+ "\n"
+ " * Stuff\n"
+ " * More stuff\n"
+ " * Other stuff\n"
+ "\n"
+ "If you meet these requirements, hit the \"Next\" button to continue!\n\n"));
+
+ what_to_do_page = create_what_to_do_page (druid, window);
+ install_page = create_install_page (druid, window);
+ finish_page = create_finish_page (druid, window);
+
+ gtk_signal_connect (GTK_OBJECT (druid), "cancel",
+ GTK_SIGNAL_FUNC (druid_cancel),
+ installer);
+ gtk_signal_connect (GTK_OBJECT (install_page), "finish",
+ GTK_SIGNAL_FUNC (druid_finish),
+ installer);
+ gtk_signal_connect (GTK_OBJECT (install_page), "prepare",
+ GTK_SIGNAL_FUNC (prep_install),
+ installer);
+ gtk_signal_connect (GTK_OBJECT (finish_page), "finish",
+ GTK_SIGNAL_FUNC (druid_finish),
+ installer);
+
+ return window;
+}
+
+static void
+set_images (GtkWidget *window)
+{
+
+ GnomeDruidPage *page;
+
+ page = GNOME_DRUID_PAGE (gtk_object_get_data(GTK_OBJECT (window), "start_page"));
+ gnome_druid_page_start_set_logo (GNOME_DRUID_PAGE_START (page),
+ gdk_imlib_create_image_from_xpm_data (step_one_top));
+ gnome_druid_page_start_set_watermark (GNOME_DRUID_PAGE_START (page),
+ gdk_imlib_create_image_from_xpm_data (banner_left));
+
+ page = GNOME_DRUID_PAGE (gtk_object_get_data(GTK_OBJECT (window), "what_to_do_page"));
+ gnome_druid_page_standard_set_logo (GNOME_DRUID_PAGE_STANDARD (page),
+ gdk_imlib_create_image_from_xpm_data (step_two_top));
+
+ page = GNOME_DRUID_PAGE (gtk_object_get_data(GTK_OBJECT (window), "install_page"));
+ gnome_druid_page_standard_set_logo (GNOME_DRUID_PAGE_STANDARD (page),
+ gdk_imlib_create_image_from_xpm_data (step_three_top));
+
+ page = GNOME_DRUID_PAGE (gtk_object_get_data(GTK_OBJECT (window), "finish_page"));
+ gnome_druid_page_finish_set_logo (GNOME_DRUID_PAGE_FINISH (page),
+ gdk_imlib_create_image_from_xpm_data (final_top));
+ gnome_druid_page_finish_set_watermark (GNOME_DRUID_PAGE_FINISH (page),
+ gdk_imlib_create_image_from_xpm_data (banner_left));
+}
+
+static void
+eazel_install_progress (EazelInstall *service,
+ const PackageData *package,
+ int package_num, int num_packages,
+ int amount, int total,
+ int total_size_completed, int total_size,
+ EazelInstaller *installer)
+{
+ GtkProgressBar *progressbar, *progress_overall;
+ GtkWidget *summary;
+ GtkLabel *package_label;
+
+ package_label = gtk_object_get_data (GTK_OBJECT (installer->window), "package_label");
+ summary = gtk_object_get_data (GTK_OBJECT (installer->window), "summary");
+ progressbar = gtk_object_get_data (GTK_OBJECT (installer->window), "progressbar_single");
+ progress_overall = gtk_object_get_data (GTK_OBJECT (installer->window), "progressbar_overall");
+
+ if (amount == 0) {
+ char *tmp;
+ tmp = g_strdup_printf ("Installing %s", package->name);
+ gtk_label_set_text (package_label, tmp);
+ g_free (tmp);
+
+ gtk_progress_set_format_string (GTK_PROGRESS (progressbar), "%p%% (%v of %u kb)");
+ gtk_progress_configure (GTK_PROGRESS (progressbar), 0, 0, (float)(total/1024));
+
+ gtk_label_set_text (GTK_LABEL (summary), package->description);
+ fprintf (stdout, "\n");
+ }
+
+ if (installer_output) {
+ float pct;
+ pct = ( (total > 0) ? ((float) ((((float) amount) / total) * 100)): 100.0);
+ fprintf (stdout, "Install Progress - %s - %d %d (%d %d) %% %f\r",
+ package->name?package->name:"(null)",
+ amount, total,
+ total_size_completed, total_size,
+ pct);
+ }
+
+ gtk_progress_set_value (GTK_PROGRESS (progressbar),
+ (float)(amount/1024 > total/1024 ? total/1024 : amount/1024));
+ gtk_progress_set_value (GTK_PROGRESS (progress_overall),
+ (float)total_size_completed>total_size ? total_size : total_size_completed);
+
+ fflush (stdout);
+ if (amount == total && installer_output) {
+ fprintf (stdout, "\n");
+ }
+}
+
+
+static void
+eazel_download_progress (EazelInstall *service,
+ const char *name,
+ int amount,
+ int total,
+ EazelInstaller *installer)
+{
+ GtkProgressBar *progressbar;
+ GtkLabel *package_label;
+
+ package_label = gtk_object_get_data (GTK_OBJECT (installer->window), "package_label");
+ progressbar = gtk_object_get_data (GTK_OBJECT (installer->window), "progressbar_single");
+
+ if (amount == 0) {
+ char *tmp;
+ tmp = g_strdup_printf ("Retrieving %s", name);
+ gtk_label_set_text (package_label, tmp);
+ g_free (tmp);
+
+ gtk_progress_set_format_string (GTK_PROGRESS (progressbar), "%p%% (%v of %u kb)");
+ gtk_progress_configure (GTK_PROGRESS (progressbar), 0, 0, (float)(total/1024));
+ }
+
+ if (installer_output) {
+ float pct;
+ pct = ( (total > 0) ? ((float) ((((float) amount) / total) * 100)): 100.0);
+ fprintf (stdout, "DOWNLOAD Progress - %s - %d %d %% %f\r",
+ name?name:"(null)", amount, total, pct);
+ fflush (stdout);
+ }
+
+ gtk_progress_set_value (GTK_PROGRESS (progressbar), amount/1024);
+
+ if (amount != total) {
+ /* g_main_iteration (FALSE); */
+ /* gtk_main_iteration (); */
+ } else if (amount == total) {
+ /*
+ gtk_progress_set_format_string (GTK_OBJECT (progressbar), "done...");
+ g_main_iteration (FALSE);
+ */
+ }
+}
+
+static void
+install_failed_helper (EazelInstall *service,
+ const PackageData *pd,
+ char *indent,
+ char **str)
+{
+ GList *iterator;
+
+ if (pd->toplevel) {
+ char *tmp;
+ tmp = g_strdup_printf ("%s\n***The package %s failed. Here's the dep tree\n",
+ (*str)?*str:"", pd->name ? pd->name : pd->filename);
+ g_free (*str);
+ (*str) = tmp;
+ }
+ switch (pd->status) {
+ case PACKAGE_DEPENDENCY_FAIL: {
+ char *tmp;
+ tmp = g_strdup_printf ("%s%s-%s failed\n",
+ (*str)?*str:"", indent, pd->name ? pd->name : pd->filename);
+ g_free (*str);
+ (*str) = tmp;
+ break;
+ }
+ case PACKAGE_CANNOT_OPEN: {
+ char *tmp;
+ tmp = g_strdup_printf ("%s%s-%s NOT FOUND\n",
+ (*str)?*str:"", indent, pd->name ? pd->name : pd->filename);
+ g_free (*str);
+ (*str) = tmp;
+ break;
+ }
+ case PACKAGE_SOURCE_NOT_SUPPORTED: {
+ char *tmp;
+ tmp = g_strdup_printf ("%s%s-%s is a source\n",
+ (*str)?*str:"", indent, pd->name ? pd->name : pd->filename);
+ g_free (*str);
+ (*str) = tmp;
+ break;
+ }
+ case PACKAGE_BREAKS_DEPENDENCY: {
+ char *tmp;
+ tmp = g_strdup_printf ("%s%s-%s breaks\n",
+ (*str)?*str:"", indent, pd->name ? pd->name : pd->filename);
+ g_free (*str);
+ (*str) = tmp;
+ break;
+ }
+ default: {
+ char *tmp;
+ tmp = g_strdup_printf ("%s%s-%s\n",
+ (*str)?*str:"", indent, pd->name ? pd->name : pd->filename);
+ g_free (*str);
+ (*str) = tmp;
+ break;
+ }
+ }
+
+ for (iterator = pd->soft_depends; iterator; iterator = iterator->next) {
+ PackageData *pack;
+ char *indent2;
+ indent2 = g_strconcat (indent, iterator->next ? " |" : " " , NULL);
+ pack = (PackageData*)iterator->data;
+ install_failed_helper (service, pack, indent2, str);
+ g_free (indent2);
+ }
+ for (iterator = pd->breaks; iterator; iterator = iterator->next) {
+ PackageData *pack;
+ char *indent2;
+ indent2 = g_strconcat (indent, iterator->next ? " |" : " " , NULL);
+ pack = (PackageData*)iterator->data;
+ install_failed_helper (service, pack, indent2, str);
+ g_free (indent2);
+ }
+}
+
+
+static void
+install_failed (EazelInstall *service,
+ const PackageData *pd,
+ EazelInstaller *installer)
+{
+ if (pd->toplevel == TRUE) {
+ install_failed_helper (service, pd, g_strdup (""), &installer->failure_info);
+ }
+}
+
+static void
+download_failed (EazelInstall *service,
+ const char *name,
+ EazelInstaller *installer)
+{
+ char *output;
+
+ if (output) {
+ output = g_strdup_printf ("%s\nDownload of %s failed", installer->failure_info, name);
+ } else {
+ output = g_strdup_printf ("Download of %s failed", name);
+ }
+ g_free (installer->failure_info);
+ installer->failure_info = output;
+}
+
+static void
+eazel_install_preflight (EazelInstall *service,
+ int total_size,
+ int num_packages,
+ EazelInstaller *installer)
+{
+ GtkProgressBar *progress_overall;
+ GtkLabel *package_label;
+ GtkWidget *summary;
+ char *summary_string;
+ char *tmp;
+
+ summary = gtk_object_get_data (GTK_OBJECT (installer->window), "summary");
+ package_label = gtk_object_get_data (GTK_OBJECT (installer->window), "package_label");
+ progress_overall = gtk_object_get_data (GTK_OBJECT (installer->window), "progressbar_overall");
+
+ gtk_progress_set_format_string (GTK_PROGRESS (progress_overall), "Total completion %p%%");
+ gtk_progress_configure (GTK_PROGRESS (progress_overall), 0, 0, (float)total_size);
+ gtk_widget_show (GTK_WIDGET (progress_overall));
+
+ summary_string = g_strdup_printf (_("Now starting the install process.\n"
+ "Starting the process takes some time, please be patient.\n"
+ "In total, %d mb of software will be installed"),
+ total_size/(1024*1024));
+ tmp = g_strdup_printf ("Preparing RPM, %d packages (%d mb)", num_packages, total_size/(1024*1024));
+
+ if (installer_output) {
+ fprintf (stdout, "PREFLIGHT: %s\n", tmp);
+ }
+
+ gtk_label_set_text (package_label, tmp);
+ gtk_label_set_text (GTK_LABEL (summary), summary_string);
+ g_main_iteration (FALSE);
+}
+
+static void
+eazel_install_dep_check (EazelInstall *service,
+ const PackageData *pack,
+ const PackageData *needs,
+ EazelInstaller *installer)
+{
+ GtkLabel *package_label;
+ GtkWidget *summary;
+ char *tmp;
+
+ package_label = gtk_object_get_data (GTK_OBJECT (installer->window), "package_label");
+ summary = gtk_object_get_data (GTK_OBJECT (installer->window), "summary");
+
+ tmp = g_strdup_printf ("%s needs %s", pack->name, needs->name);
+
+ if (installer_output) {
+ fprintf (stdout, "DEP CHECK : %s\n", tmp);
+ }
+
+ gtk_label_set_text (package_label, tmp);
+ g_free (tmp);
+ tmp = g_strdup_printf ("Fetching dependencies for %s", pack->name);
+
+ gtk_label_set_text (GTK_LABEL (summary), tmp);
+ g_free (tmp);
+
+ g_main_iteration (FALSE);
+}
+
+static gboolean
+eazel_install_delete_files (EazelInstall *service,
+ EazelInstaller *installer)
+{
+ if (installer_output) {
+ fprintf (stdout, "Deleting rpm's\n");
+ }
+ return TRUE ;
+}
+
+static void
+eazel_installer_add_category (EazelInstaller *installer,
+ CategoryData *category)
+{
+ static int magic = 24;
+ GtkWidget *button;
+ GtkWidget *fixed;
+ static GSList *fixed_group = NULL;
+
+ if (installer->debug) {
+ fprintf (stdout, "Read category \"%s\"\n", category->name);
+ }
+
+ fixed = GTK_WIDGET (gtk_object_get_data (GTK_OBJECT (installer->window), "fixed3"));
+
+ button = gtk_check_button_new_with_label (category->name);
+ gtk_widget_set_name (button, category->name);
+ gtk_widget_ref (button);
+ gtk_object_set_data_full (GTK_OBJECT (installer->window), category->name, button,
+ (GtkDestroyNotify) gtk_widget_unref);
+ gtk_widget_show (button);
+ gtk_fixed_put (GTK_FIXED (fixed), button, 72, magic);
+ gtk_widget_set_uposition (button, 72, magic);
+ gtk_widget_set_usize (button, 0, 0);
+
+ magic += 32;
+}
static void
make_dirs ()
@@ -71,10 +749,26 @@ void
check_system (EazelInstaller *installer)
{
DistributionInfo dist;
+ struct utsname ub;
dist = trilobite_get_distribution ();
#ifndef NAUTILUS_INSTALLER_RELEASE
+ uname (&ub);
+ /* This codes tells Eskil that he's an idiot if he runs it on his own machine
+ without the testflag... */
+ g_message ("host = %s", ub.nodename);
+ if (!installer_test && g_strncasecmp (ub.nodename, "toothgnasher", 12)==0) {
+ GnomeDialog *d;
+ d = GNOME_DIALOG (gnome_warning_dialog_parented ("Eskil, din nar. Du må aldrig nogensinde\n"
+ "udføre denne installation på din egen\n"
+ "maskine! Den smadrer jo alt!\n"
+ "Jeg slår lige --test til...",
+ GTK_WINDOW (installer->window)));
+ installer->test = 1;
+ gnome_dialog_run_and_close (d);
+ }
+
if (!installer->test) {
GnomeDialog *d;
d = GNOME_DIALOG (gnome_warning_dialog_parented (_("This is a warning, you're running\n"
@@ -135,7 +829,11 @@ eazel_installer_do_install (EazelInstaller *installer,
#if 0
revert_nautilus_install (service, NULL);
#endif
-
+/*
+ FIXME: bugzilla.eazel.com 2604
+ g_list_foreach (categories, (GFunc)categorydata_destroy_foreach, NULL);
+ g_list_free (categories);
+*/
if (installer->failure_info && strlen (installer->failure_info)>1) {
if (installer->debug) {
fprintf (stdout, "ERROR :\n%s", installer->failure_info);
@@ -146,8 +844,187 @@ eazel_installer_do_install (EazelInstaller *installer,
}
-/* Dummy functions to make linking work */
-const gpointer oaf_popt_options = NULL;
-gpointer oaf_init (int argc, char *argv[]) {}
-int bonobo_init (gpointer a, gpointer b, gpointer c) {};
+/*****************************************
+ GTK+ object stuff
+*****************************************/
+
+static void
+eazel_installer_finalize (GtkObject *object)
+{
+ EazelInstaller *installer;
+
+ g_message ("eazel_installer_finalize");
+
+ g_return_if_fail (object != NULL);
+ g_return_if_fail (EAZEL_INSTALLER (object));
+
+ installer = EAZEL_INSTALLER (object);
+
+ /* Free the objects own crap */
+ g_list_foreach (installer->categories, (GFunc)categorydata_destroy_foreach, NULL);
+ g_list_free (installer->categories);
+ eazel_install_unref (GTK_OBJECT (installer->service));
+
+ /* Call parents destroy */
+ if (GTK_OBJECT_CLASS (eazel_installer_parent_class)->finalize) {
+ GTK_OBJECT_CLASS (eazel_installer_parent_class)->finalize (object);
+ }
+}
+
+ void
+eazel_installer_unref (GtkObject *object)
+{
+ gtk_object_unref (object);
+}
+
+static void
+eazel_installer_class_initialize (EazelInstallerClass *klass)
+{
+ GtkObjectClass *object_class;
+
+ object_class = (GtkObjectClass*)klass;
+ object_class->finalize = (void(*)(GtkObject*))eazel_installer_finalize;
+
+ eazel_installer_parent_class = gtk_type_class (gtk_object_get_type ());
+}
+
+static void
+eazel_installer_initialize (EazelInstaller *object) {
+ EazelInstaller *installer;
+ GList *iterator;
+ char *tmpdir;
+ char *package_destination;
+
+ g_assert (object != NULL);
+ g_assert (IS_EAZEL_INSTALLER (object));
+
+ installer = EAZEL_INSTALLER (object);
+
+ /* The manpage says not to use this, but I can't be arsed */
+ tmpdir = g_strdup ("/tmp/eazel-installer.XXXXXX");
+ mktemp (tmpdir);
+
+ if (!tmpdir || mkdir (tmpdir, 0700) != 0) {
+ g_error (_("Cannot create %s"), tmpdir);
+ }
+
+ package_destination = g_strdup_printf ("%s/package-list.xml", tmpdir);
+
+ installer->test = installer_test;
+ installer->debug = installer_debug;
+ installer->output = installer_output;
+ installer->category_deps = g_hash_table_new (g_str_hash, g_str_equal);
+ installer->window = create_window (installer);
+ set_images (installer->window);
+ check_system (installer);
+ gtk_widget_show (installer->window);
+
+ installer->failure_info = NULL;
+
+ installer->service =
+ EAZEL_INSTALL (gtk_object_new (TYPE_EAZEL_INSTALL,
+ "verbose", TRUE,
+ "silent", FALSE,
+ "debug", TRUE,
+ "test", installer_test ? TRUE : FALSE,
+ "force", installer_force ? TRUE : FALSE,
+ "depend", FALSE,
+ "update", TRUE,
+ "uninstall", FALSE,
+ "downgrade", TRUE,
+ "protocol", installer_local ? PROTOCOL_LOCAL: PROTOCOL_HTTP,
+ "tmp_dir", tmpdir,
+ "rpmrc_file", RPMRC,
+ "server", installer_server ? installer_server : HOSTNAME,
+ "server_port",
+ installer_server_port ? installer_server_port : PORT_NUMBER,
+ "package_list", package_destination,
+ "package_list_storage_path", "package-list.xml",
+ "transaction_dir", "/tmp",
+ NULL));
+
+
+ gtk_signal_connect (GTK_OBJECT (installer->service),
+ "download_progress",
+ GTK_SIGNAL_FUNC (eazel_download_progress),
+ installer);
+ gtk_signal_connect (GTK_OBJECT (installer->service),
+ "install_progress",
+ GTK_SIGNAL_FUNC (eazel_install_progress),
+ installer);
+ gtk_signal_connect (GTK_OBJECT (installer->service),
+ "preflight_check",
+ GTK_SIGNAL_FUNC (eazel_install_preflight),
+ installer);
+ gtk_signal_connect (GTK_OBJECT (installer->service),
+ "dependency_check",
+ GTK_SIGNAL_FUNC (eazel_install_dep_check),
+ installer);
+ gtk_signal_connect (GTK_OBJECT (installer->service),
+ "delete_files",
+ GTK_SIGNAL_FUNC (eazel_install_delete_files),
+ installer);
+ gtk_signal_connect (GTK_OBJECT (installer->service),
+ "download_failed",
+ download_failed,
+ installer);
+ gtk_signal_connect (GTK_OBJECT (installer->service),
+ "install_failed",
+ GTK_SIGNAL_FUNC (install_failed),
+ installer);
+
+ if (!installer->debug) {
+ char *log;
+ log = g_strdup_printf ("%s/installer.log", tmpdir);
+ eazel_install_open_log (installer->service, log);
+ g_free (log);
+ }
+
+ eazel_install_fetch_remote_package_list (installer->service);
+ installer->categories = parse_local_xml_package_list (package_destination);
+ for (iterator = installer->categories; iterator; iterator=iterator->next) {
+ eazel_installer_add_category (installer, (CategoryData*)iterator->data);
+ }
+ g_free (package_destination);
+ g_free (tmpdir);
+}
+
+GtkType
+eazel_installer_get_type() {
+ static GtkType installer_type = 0;
+
+ if (!installer_type)
+ {
+ static const GtkTypeInfo installer_info =
+ {
+ "EazelInstaller",
+ sizeof (EazelInstaller),
+ sizeof (EazelInstallerClass),
+ (GtkClassInitFunc) eazel_installer_class_initialize,
+ (GtkObjectInitFunc) eazel_installer_initialize,
+ /* reserved_1 */ NULL,
+ /* reserved_2 */ NULL,
+ (GtkClassInitFunc) NULL,
+ };
+
+ /* Get a unique GtkType */
+ installer_type = gtk_type_unique (gtk_object_get_type (), &installer_info);
+ }
+
+ return installer_type;
+}
+
+/*
+ The _new method simply builds the service
+ using gtk_object_new
+*/
+EazelInstaller*
+eazel_installer_new()
+{
+ EazelInstaller *installer;
+
+ installer = EAZEL_INSTALLER (gtk_object_new (TYPE_EAZEL_INSTALLER, NULL));
+
+ return installer;
+}
diff --git a/nautilus-installer/src/installer.h b/nautilus-installer/src/installer.h
index f697df45b..5077df28a 100644
--- a/nautilus-installer/src/installer.h
+++ b/nautilus-installer/src/installer.h
@@ -55,7 +55,9 @@ struct _EazelInstaller
char *failure_info;
- gboolean debug;
+ GHashTable *category_deps;
+
+ gboolean debug, output;
gboolean test;
};
diff --git a/nautilus-installer/src/interface.c b/nautilus-installer/src/interface.c
deleted file mode 100644
index 3b243541e..000000000
--- a/nautilus-installer/src/interface.c
+++ /dev/null
@@ -1,941 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * Copyright (C) 2000 Eazel, Inc
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- *
- * Authors: Eskil Heyn Olsen <eskil@eazel.com>
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <string.h>
-
-#include <gnome.h>
-
-#include "callbacks.h"
-#include "installer.h"
-#include "support.h"
-
-#include <eazel-install-xml-package-list.h>
-
-/* Include the pixmaps */
-#include "Banner_Left.xpm"
-#include "Step_Two_Top.xpm"
-#include "Step_Three_Top.xpm"
-#include "Step_One_Top.xpm"
-#include "Final_Top.xpm"
-
-#define HOSTNAME "testmachine.eazel.com"
-#define PORT_NUMBER 80
-#define TMP_DIR "/tmp/eazel-install"
-#define RPMRC "/usr/lib/rpm/rpmrc"
-#define REMOTE_RPM_DIR "/RPMS"
-
-int installer_debug = 0;
-int installer_test = 0;
-int installer_force = 0;
-int installer_local = 0;
-char *installer_server =NULL;
-int installer_server_port = 0;
-
-
-static GtkObjectClass *eazel_installer_parent_class;
-
-
-static void
-set_white_stuff (GtkWidget *w)
-{
- GtkStyle *style;
- GdkColor *color;
-
- style = gtk_style_copy (w->style);
- style->bg[GTK_STATE_NORMAL].red = 65000;
- style->bg[GTK_STATE_NORMAL].blue = 65000;
- style->bg[GTK_STATE_NORMAL].green = 65000;
- gtk_widget_set_style (w, style);
- gtk_style_unref (style);
-}
-
-GtkWidget*
-create_what_to_do_page (GtkWidget *druid, GtkWidget *window)
-{
- GtkWidget *what_to_do_page;
- GdkColor what_to_do_page_bg_color = { 0, 3341, 23130, 26214 };
- GdkColor what_to_do_page_logo_bg_color = { 0, 3341, 23130, 26214 };
- GdkColor what_to_do_page_title_color = { 0, 65535, 65535, 65535 };
- GtkWidget *druid_vbox1;
- GtkWidget *vbox3;
- GtkWidget *label10;
- GtkWidget *fixed3;
-
- what_to_do_page = gnome_druid_page_standard_new_with_vals ("", NULL);
-
- set_white_stuff (GTK_WIDGET (what_to_do_page));
-
- gtk_widget_set_name (what_to_do_page, "what_to_do_page");
- gtk_widget_ref (what_to_do_page);
- gtk_object_set_data_full (GTK_OBJECT (window), "what_to_do_page", what_to_do_page,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show_all (what_to_do_page);
- gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (what_to_do_page));
- gnome_druid_page_standard_set_bg_color (GNOME_DRUID_PAGE_STANDARD (what_to_do_page),
- &what_to_do_page_bg_color);
- gnome_druid_page_standard_set_logo_bg_color (GNOME_DRUID_PAGE_STANDARD (what_to_do_page),
- &what_to_do_page_logo_bg_color);
- gnome_druid_page_standard_set_title_color (GNOME_DRUID_PAGE_STANDARD (what_to_do_page),
- &what_to_do_page_title_color);
- gnome_druid_page_standard_set_title (GNOME_DRUID_PAGE_STANDARD (what_to_do_page), _("What to do ?"));
-
- druid_vbox1 = GNOME_DRUID_PAGE_STANDARD (what_to_do_page)->vbox;
- set_white_stuff (GTK_WIDGET (druid_vbox1));
- gtk_widget_set_name (druid_vbox1, "druid_vbox1");
- gtk_widget_ref (druid_vbox1);
- gtk_object_set_data_full (GTK_OBJECT (window), "druid_vbox1", druid_vbox1,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (druid_vbox1);
-
- vbox3 = gtk_vbox_new (FALSE, 0);
- gtk_widget_set_name (vbox3, "vbox3");
- gtk_widget_ref (vbox3);
- gtk_object_set_data_full (GTK_OBJECT (window), "vbox3", vbox3,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (vbox3);
- gtk_box_pack_start (GTK_BOX (druid_vbox1), vbox3, TRUE, TRUE, 0);
-
- label10 = gtk_label_new (_("You have several choices for what you would like the installer to do.\n"
- "Please choose one and click on the \"Next\" button to begin install."));
- gtk_widget_set_name (label10, "label10");
- gtk_widget_ref (label10);
- gtk_object_set_data_full (GTK_OBJECT (window), "label10", label10,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (label10);
- gtk_box_pack_start (GTK_BOX (vbox3), label10, FALSE, FALSE, 0);
- gtk_label_set_justify (GTK_LABEL (label10), GTK_JUSTIFY_LEFT);
-
- fixed3 = gtk_fixed_new ();
- set_white_stuff (GTK_WIDGET (fixed3));
- gtk_widget_set_name (fixed3, "fixed3");
- gtk_widget_ref (fixed3);
- gtk_object_set_data_full (GTK_OBJECT (window), "fixed3", fixed3,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (fixed3);
- gtk_box_pack_start (GTK_BOX (vbox3), fixed3, TRUE, TRUE, 0);
-
- return what_to_do_page;
-}
-
-GtkWidget*
-create_install_page (GtkWidget *druid, GtkWidget *window)
-{
- GtkWidget *install_page;
- GdkColor install_page_bg_color = { 0, 3341, 23130, 26214 };
- GdkColor install_page_logo_bg_color = { 0, 3341, 23130, 26214 };
- GdkColor install_page_title_color = { 0, 65535, 65535, 65535 };
- GtkWidget *druid_vbox2;
- GtkWidget *vbox5;
- GtkWidget *label11;
- GtkWidget *table2;
- GtkWidget *label12;
- GtkWidget *label13;
- GtkWidget *action_label;
- GtkWidget *progressbar1;
- GtkWidget *progressbar2;
- GtkWidget *package_label;
- GtkWidget *fixed1;
- GtkWidget *textbox;
- GtkWidget *scrolledwindow;
- const char *download_description;
- int download_description_length;
-
- download_description = g_strdup (_("Currently downloading packages required to "
- "install Nautilus\n"));
- download_description_length = strlen (download_description);
-
- install_page = gnome_druid_page_standard_new_with_vals ("", NULL);
- set_white_stuff (GTK_WIDGET (install_page));
- gtk_widget_set_name (install_page, "install_page");
- gtk_widget_ref (install_page);
- gtk_object_set_data_full (GTK_OBJECT (window), "install_page", install_page,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show_all (install_page);
- gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (install_page));
- gnome_druid_page_standard_set_bg_color (GNOME_DRUID_PAGE_STANDARD (install_page),
- &install_page_bg_color);
- gnome_druid_page_standard_set_logo_bg_color (GNOME_DRUID_PAGE_STANDARD (install_page),
- &install_page_logo_bg_color);
- gnome_druid_page_standard_set_title_color (GNOME_DRUID_PAGE_STANDARD (install_page),
- &install_page_title_color);
- gnome_druid_page_standard_set_title (GNOME_DRUID_PAGE_STANDARD (install_page), _("Progress..."));
-
- druid_vbox2 = GNOME_DRUID_PAGE_STANDARD (install_page)->vbox;
- gtk_widget_set_name (druid_vbox2, "druid_vbox2");
- gtk_widget_ref (druid_vbox2);
- gtk_object_set_data_full (GTK_OBJECT (window), "druid_vbox2", druid_vbox2,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (druid_vbox2);
-
- vbox5 = gtk_vbox_new (FALSE, 0);
- set_white_stuff (GTK_WIDGET (vbox5));
- gtk_widget_set_name (vbox5, "vbox5");
- gtk_widget_ref (vbox5);
- gtk_object_set_data_full (GTK_OBJECT (window), "vbox5", vbox5,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (vbox5);
- gtk_box_pack_start (GTK_BOX (druid_vbox2), vbox5, TRUE, TRUE, 0);
-
- table2 = gtk_table_new (3, 2, FALSE);
- set_white_stuff (GTK_WIDGET (table2));
- gtk_widget_set_name (table2, "table2");
- gtk_widget_ref (table2);
- gtk_object_set_data_full (GTK_OBJECT (window), "table2", table2,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (table2);
- gtk_table_set_row_spacings (GTK_TABLE (table2), 16);
- gtk_box_pack_start (GTK_BOX (vbox5), table2, FALSE, FALSE, 16);
-
- progressbar1 = gtk_progress_bar_new ();
- gtk_widget_set_name (progressbar1, "progressbar_single");
- gtk_widget_ref (progressbar1);
- gtk_object_set_data_full (GTK_OBJECT (window), "progressbar_single", progressbar1,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_progress_set_show_text (GTK_PROGRESS (progressbar1), TRUE);
- gtk_widget_show (progressbar1);
- gtk_table_attach (GTK_TABLE (table2), progressbar1, 1, 2, 1, 2,
- /* GTK_EXPAND */ 0,
- /* GTK_EXPAND */ GTK_SHRINK,
- 0, 0);
-
- progressbar2 = gtk_progress_bar_new ();
- gtk_widget_set_name (progressbar2, "progressbar_overall");
- gtk_widget_ref (progressbar2);
- gtk_object_set_data_full (GTK_OBJECT (window), "progressbar_overall", progressbar2,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_progress_set_format_string (GTK_PROGRESS (progressbar2), "Waiting for download...");
- gtk_progress_set_show_text (GTK_PROGRESS (progressbar2), TRUE);
- gtk_widget_show (progressbar2);
- gtk_table_attach (GTK_TABLE (table2), progressbar2, 1, 2, 2, 3,
- /* GTK_EXPAND */ 0,
- /* GTK_EXPAND */ GTK_SHRINK,
- 0, 0);
-
- package_label = gtk_label_new (_("En fjæsing hedder Bent"));
- gtk_widget_set_name (package_label, "package_label");
- gtk_widget_ref (package_label);
- gtk_object_set_data_full (GTK_OBJECT (window), "package_label", package_label,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (package_label);
- gtk_table_attach (GTK_TABLE (table2), package_label, 1, 2, 0, 1,
- GTK_EXPAND,
- GTK_EXPAND,
- 0, 0);
-/*
- fixed1 = gtk_fixed_new ();
- gtk_widget_set_name (fixed1, "fixed1");
- set_white_stuff (GTK_WIDGET (fixed1));
- gtk_widget_ref (fixed1);
- gtk_object_set_data_full (GTK_OBJECT (window), "fixed1", fixed1,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (fixed1);
- gtk_box_pack_start (GTK_BOX (vbox5), fixed1, TRUE, TRUE, 16);
-*/
-
-
-#ifdef NO_TEXT_BOX
- textbox = gtk_label_new ("");
- gtk_widget_set_name (textbox, "textbox");
- gtk_widget_ref (textbox);
- gtk_object_set_data_full (GTK_OBJECT (window), "summary", textbox,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (textbox);
- gtk_label_set_text (GTK_LABEL (textbox), download_description);
- gtk_box_pack_start (GTK_BOX (vbox5), textbox, TRUE, TRUE, 0);
-#else
- scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
- gtk_widget_set_name (scrolledwindow, "scrolledwindow");
- gtk_widget_ref (scrolledwindow);
- gtk_object_set_data_full (GTK_OBJECT (window), "scrolledwindow", scrolledwindow,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_NEVER);
- gtk_widget_show (scrolledwindow);
- gtk_box_pack_start (GTK_BOX (vbox5), scrolledwindow, TRUE, TRUE, 0);
-
- textbox = gtk_text_new (NULL, NULL);
- gtk_widget_set_name (textbox, "summary");
- gtk_widget_ref (textbox);
- gtk_text_set_editable (GTK_TEXT (textbox), FALSE);
- gtk_text_set_word_wrap (GTK_TEXT (textbox), TRUE);
- gtk_object_set_data_full (GTK_OBJECT (window), "summary", textbox,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_text_insert (GTK_TEXT (textbox), NULL, NULL, NULL,
- download_description, download_description_length);
- gtk_widget_show (textbox);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolledwindow),
- textbox);
-#endif
- return install_page;
-}
-
-GtkWidget*
-create_finish_page (GtkWidget *druid, GtkWidget *window)
-{
- GtkWidget *finish_page;
- GdkColor finish_page_bg_color = { 0, 3341, 23130, 26214 };
- GdkColor finish_page_textbox_color = { 0, 65535, 65535, 65535 };
- GdkColor finish_page_logo_bg_color = { 0, 3341, 23130, 26214 };
- GdkColor finish_page_title_color = { 0, 65535, 65535, 65535 };
-
- finish_page = gnome_druid_page_finish_new ();
- gtk_widget_set_name (finish_page, "finish_page");
- gtk_widget_ref (finish_page);
- gtk_object_set_data_full (GTK_OBJECT (window), "finish_page", finish_page,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (finish_page);
- gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (finish_page));
- gnome_druid_page_finish_set_bg_color (GNOME_DRUID_PAGE_FINISH (finish_page),
- &finish_page_bg_color);
- gnome_druid_page_finish_set_textbox_color (GNOME_DRUID_PAGE_FINISH (finish_page),
- &finish_page_textbox_color);
- gnome_druid_page_finish_set_logo_bg_color (GNOME_DRUID_PAGE_FINISH (finish_page),
- &finish_page_logo_bg_color);
- gnome_druid_page_finish_set_title_color (GNOME_DRUID_PAGE_FINISH (finish_page),
- &finish_page_title_color);
- gnome_druid_page_finish_set_title (GNOME_DRUID_PAGE_FINISH (finish_page), _("Finished"));
- gnome_druid_page_finish_set_text (GNOME_DRUID_PAGE_FINISH (finish_page),
- _("If the installation was successfull, you can\n"
- "find the nautilus icon in the applications menu.\n\n"
- "Thanks for taking the time to try out Nautilus.\n\n"
- "May your life be a healthy and happy one."));
-
- return finish_page;
-}
-
-GtkWidget*
-create_window (EazelInstaller *installer)
-{
- GtkWidget *window;
- GtkWidget *druid;
- GtkWidget *start_page;
- GdkColor start_page_bg_color = { 0, 3341, 23130, 26214 };
- GdkColor start_page_textbox_color = { 0, 65535, 65535, 65535 };
- GdkColor start_page_logo_bg_color = { 0, 3341, 23130, 26214 };
- GdkColor start_page_title_color = { 0, 65535, 65535, 65535 };
- GtkWidget *what_to_do_page;
- GtkWidget *install_page;
- GtkWidget *finish_page;
-
- window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- gtk_widget_set_name (window, "window");
- gtk_object_set_data (GTK_OBJECT (window), "window", window);
- gtk_window_set_title (GTK_WINDOW (window), _("Nautilus install tool"));
-
- druid = gnome_druid_new ();
- gtk_widget_set_name (druid, "druid");
- gtk_widget_ref (druid);
- gtk_object_set_data_full (GTK_OBJECT (window), "druid", druid,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (druid);
- gtk_container_add (GTK_CONTAINER (window), druid);
-
- start_page = gnome_druid_page_start_new ();
- gtk_widget_set_name (start_page, "start_page");
- gtk_widget_ref (start_page);
- gtk_object_set_data_full (GTK_OBJECT (window), "start_page", start_page,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (start_page);
- gnome_druid_append_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (start_page));
- gnome_druid_set_page (GNOME_DRUID (druid), GNOME_DRUID_PAGE (start_page));
- gnome_druid_page_start_set_bg_color (GNOME_DRUID_PAGE_START (start_page),
- &start_page_bg_color);
- gnome_druid_page_start_set_textbox_color (GNOME_DRUID_PAGE_START (start_page),
- &start_page_textbox_color);
- gnome_druid_page_start_set_logo_bg_color (GNOME_DRUID_PAGE_START (start_page),
- &start_page_logo_bg_color);
- gnome_druid_page_start_set_title_color (GNOME_DRUID_PAGE_START (start_page),
- &start_page_title_color);
- gnome_druid_page_start_set_title (GNOME_DRUID_PAGE_START (start_page), _("Step one:"));
- gnome_druid_page_start_set_text (GNOME_DRUID_PAGE_START (start_page),
- _("This is the internal Nautilus installer.\n\n"
- "Lots of text should go here letting you know what you need\n"
- "to have installed before you should even begin to think about\n"
- "using this. For example:\n"
- "\n"
- " * Stuff\n"
- " * More stuff\n"
- " * Other stuff\n"
- "\n"
- "If you meet these requirements, hit the \"Next\" button to continue!\n\n"));
-
- what_to_do_page = create_what_to_do_page (druid, window);
- install_page = create_install_page (druid, window);
- finish_page = create_finish_page (druid, window);
-
- gtk_signal_connect (GTK_OBJECT (druid), "cancel",
- GTK_SIGNAL_FUNC (druid_cancel),
- installer);
- gtk_signal_connect (GTK_OBJECT (install_page), "finish",
- GTK_SIGNAL_FUNC (druid_finish),
- installer);
- gtk_signal_connect (GTK_OBJECT (install_page), "prepare",
- GTK_SIGNAL_FUNC (prep_install),
- installer);
- gtk_signal_connect (GTK_OBJECT (finish_page), "finish",
- GTK_SIGNAL_FUNC (druid_finish),
- installer);
-
- return window;
-}
-
-static void
-set_images (GtkWidget *window)
-{
-
- GnomeDruidPage *page;
-
- page = GNOME_DRUID_PAGE (gtk_object_get_data(GTK_OBJECT (window), "start_page"));
- gnome_druid_page_start_set_logo (GNOME_DRUID_PAGE_START (page),
- gdk_imlib_create_image_from_xpm_data (step_one_top));
- gnome_druid_page_start_set_watermark (GNOME_DRUID_PAGE_START (page),
- gdk_imlib_create_image_from_xpm_data (banner_left));
-
- page = GNOME_DRUID_PAGE (gtk_object_get_data(GTK_OBJECT (window), "what_to_do_page"));
- gnome_druid_page_standard_set_logo (GNOME_DRUID_PAGE_STANDARD (page),
- gdk_imlib_create_image_from_xpm_data (step_two_top));
-
- page = GNOME_DRUID_PAGE (gtk_object_get_data(GTK_OBJECT (window), "install_page"));
- gnome_druid_page_standard_set_logo (GNOME_DRUID_PAGE_STANDARD (page),
- gdk_imlib_create_image_from_xpm_data (step_three_top));
-
- page = GNOME_DRUID_PAGE (gtk_object_get_data(GTK_OBJECT (window), "finish_page"));
- gnome_druid_page_finish_set_logo (GNOME_DRUID_PAGE_FINISH (page),
- gdk_imlib_create_image_from_xpm_data (final_top));
- gnome_druid_page_finish_set_watermark (GNOME_DRUID_PAGE_FINISH (page),
- gdk_imlib_create_image_from_xpm_data (banner_left));
-}
-
-static void
-eazel_install_progress (EazelInstall *service,
- const PackageData *package,
- int package_num, int num_packages,
- int amount, int total,
- int total_size_completed, int total_size,
- EazelInstaller *installer)
-{
- GtkProgressBar *progressbar, *progress_overall;
- GtkWidget *summary;
- GtkLabel *package_label;
-
- package_label = gtk_object_get_data (GTK_OBJECT (installer->window), "package_label");
- summary = gtk_object_get_data (GTK_OBJECT (installer->window), "summary");
- progressbar = gtk_object_get_data (GTK_OBJECT (installer->window), "progressbar_single");
- progress_overall = gtk_object_get_data (GTK_OBJECT (installer->window), "progressbar_overall");
-
- if (amount == 0) {
- char *tmp;
- tmp = g_strdup_printf ("Installing %s", package->name);
- gtk_label_set_text (package_label, tmp);
- g_free (tmp);
-
- gtk_progress_set_format_string (GTK_PROGRESS (progressbar), "%p%% (%v of %u kb)");
- gtk_progress_configure (GTK_PROGRESS (progressbar), 0, 0, (float)(total/1024));
-#ifdef NO_TEXT_BOX
- gtk_label_set_text (GTK_LABEL (summary), package->description);
-#else
- gtk_text_backward_delete (GTK_TEXT (summary),
- gtk_text_get_length (GTK_TEXT (summary)));
- gtk_text_insert (GTK_TEXT (summary),
- NULL, NULL, NULL,
- package->description, strlen (package->description));
-#endif
- fprintf (stdout, "\n");
- }
-
- if (installer_debug) {
- float pct;
- pct = ( (total > 0) ? ((float) ((((float) amount) / total) * 100)): 100.0);
- fprintf (stdout, "Install Progress - %s - %d %d (%d %d) %% %f\r",
- package->name?package->name:"(null)",
- amount, total,
- total_size_completed, total_size,
- pct);
- }
-
- gtk_progress_set_value (GTK_PROGRESS (progressbar),
- (float)(amount/1024 > total/1024 ? total/1024 : amount/1024));
- gtk_progress_set_value (GTK_PROGRESS (progress_overall),
- (float)total_size_completed>total_size ? total_size : total_size_completed);
-
- fflush (stdout);
- if (amount == total && installer_debug) {
- fprintf (stdout, "\n");
- }
-}
-
-
-static void
-eazel_download_progress (EazelInstall *service,
- const char *name,
- int amount,
- int total,
- EazelInstaller *installer)
-{
- GtkProgressBar *progressbar;
- GtkLabel *package_label;
-
- package_label = gtk_object_get_data (GTK_OBJECT (installer->window), "package_label");
- progressbar = gtk_object_get_data (GTK_OBJECT (installer->window), "progressbar_single");
-
- if (amount == 0) {
- char *tmp;
- tmp = g_strdup_printf ("Retrieving %s", name);
- gtk_label_set_text (package_label, tmp);
- g_free (tmp);
-
- gtk_progress_set_format_string (GTK_PROGRESS (progressbar), "%p%% (%v of %u kb)");
- gtk_progress_configure (GTK_PROGRESS (progressbar), 0, 0, (float)(total/1024));
- }
-
- if (installer_debug) {
- float pct;
- pct = ( (total > 0) ? ((float) ((((float) amount) / total) * 100)): 100.0);
- fprintf (stdout, "DOWNLOAD Progress - %s - %d %d %% %f\r",
- name?name:"(null)", amount, total, pct);
- fflush (stdout);
- }
-
- gtk_progress_set_value (GTK_PROGRESS (progressbar), amount/1024);
-
- if (amount != total) {
- /* g_main_iteration (FALSE); */
- /* gtk_main_iteration (); */
- } else if (amount == total) {
- /*
- gtk_progress_set_format_string (GTK_OBJECT (progressbar), "done...");
- g_main_iteration (FALSE);
- */
- }
-}
-
-static void
-install_failed_helper (EazelInstall *service,
- const PackageData *pd,
- char *indent,
- char **str)
-{
- GList *iterator;
-
- if (pd->toplevel) {
- char *tmp;
- tmp = g_strdup_printf ("%s\n***The package %s failed. Here's the dep tree\n",
- (*str)?*str:"", pd->name);
- g_free (*str);
- (*str) = tmp;
- }
- switch (pd->status) {
- case PACKAGE_DEPENDENCY_FAIL: {
- char *tmp;
- tmp = g_strdup_printf ("%s%s-%s failed\n",
- (*str)?*str:"", indent, rpmfilename_from_packagedata (pd));
- g_free (*str);
- (*str) = tmp;
- break;
- }
- case PACKAGE_CANNOT_OPEN: {
- char *tmp;
- tmp = g_strdup_printf ("%s%s-%s NOT FOUND\n",
- (*str)?*str:"", indent, rpmfilename_from_packagedata (pd));
- g_free (*str);
- (*str) = tmp;
- break;
- }
- case PACKAGE_SOURCE_NOT_SUPPORTED: {
- char *tmp;
- tmp = g_strdup_printf ("%s%s-%s is a source\n",
- (*str)?*str:"", indent, rpmfilename_from_packagedata (pd));
- g_free (*str);
- (*str) = tmp;
- break;
- }
- case PACKAGE_BREAKS_DEPENDENCY: {
- char *tmp;
- tmp = g_strdup_printf ("%s%s-%s breaks\n",
- (*str)?*str:"", indent, rpmfilename_from_packagedata (pd));
- g_free (*str);
- (*str) = tmp;
- break;
- }
- default: {
- char *tmp;
- tmp = g_strdup_printf ("%s%s-%s\n",
- (*str)?*str:"", indent, rpmfilename_from_packagedata (pd));
- g_free (*str);
- (*str) = tmp;
- break;
- }
- }
- for (iterator = pd->soft_depends; iterator; iterator = iterator->next) {
- PackageData *pack;
- char *indent2;
- indent2 = g_strconcat (indent, iterator->next ? " |" : " " , NULL);
- pack = (PackageData*)iterator->data;
- install_failed_helper (service, pack, indent2, str);
- g_free (indent2);
- }
- for (iterator = pd->breaks; iterator; iterator = iterator->next) {
- PackageData *pack;
- char *indent2;
- indent2 = g_strconcat (indent, iterator->next ? " |" : " " , NULL);
- pack = (PackageData*)iterator->data;
- install_failed_helper (service, pack, indent2, str);
- g_free (indent2);
- }
-}
-
-
-static void
-install_failed (EazelInstall *service,
- const PackageData *pd,
- EazelInstaller *installer)
-{
- if (pd->toplevel == TRUE) {
- install_failed_helper (service, pd, g_strdup (""), &installer->failure_info);
- }
-}
-
-static void
-download_failed (EazelInstall *service,
- const char *name,
- EazelInstaller *installer)
-{
- char *output;
-
- if (output) {
- output = g_strdup_printf ("%s\nDownload of %s failed", installer->failure_info, name);
- } else {
- output = g_strdup_printf ("Download of %s failed", name);
- }
- g_free (installer->failure_info);
- installer->failure_info = output;
-}
-
-static void
-eazel_install_preflight (EazelInstall *service,
- int total_size,
- int num_packages,
- EazelInstaller *installer)
-{
- GtkProgressBar *progress_overall;
- GtkLabel *package_label;
- GtkWidget *summary;
- char *summary_string;
- char *tmp;
-
- summary = gtk_object_get_data (GTK_OBJECT (installer->window), "summary");
- package_label = gtk_object_get_data (GTK_OBJECT (installer->window), "package_label");
- progress_overall = gtk_object_get_data (GTK_OBJECT (installer->window), "progressbar_overall");
-
- gtk_progress_set_format_string (GTK_PROGRESS (progress_overall), "Total completion %p%%");
- gtk_progress_configure (GTK_PROGRESS (progress_overall), 0, 0, (float)total_size);
- gtk_widget_show (GTK_WIDGET (progress_overall));
-
- summary_string = g_strdup_printf (_("Now starting the install process.\n"
- "Starting the process takes some time, please be patient.\n"
- "In total, %d mb of software will be installed"),
- total_size/(1024*1024));
- tmp = g_strdup_printf ("Preparing RPM, %d packages (%d mb)", num_packages, total_size/(1024*1024));
-
- if (installer_debug) {
- fprintf (stdout, "PREFLIGHT: %s\n", tmp);
- }
-
- gtk_label_set_text (package_label, tmp);
-#ifdef NO_TEXT_BOX
- gtk_label_set_text (GTK_LABEL (summary), summary_string);
-#else
- gtk_text_backward_delete (GTK_TEXT (summary),
- gtk_text_get_length (GTK_TEXT (summary)));
- gtk_text_insert (GTK_TEXT (summary),
- NULL, NULL, NULL,
- summary_string, strlen (summary_string));
-#endif
- g_main_iteration (FALSE);
-}
-
-static void
-eazel_install_dep_check (EazelInstall *service,
- const PackageData *pack,
- const PackageData *needs,
- EazelInstaller *installer)
-{
- GtkLabel *package_label;
- GtkWidget *summary;
- char *tmp;
-
- package_label = gtk_object_get_data (GTK_OBJECT (installer->window), "package_label");
- summary = gtk_object_get_data (GTK_OBJECT (installer->window), "summary");
-
- tmp = g_strdup_printf ("%s needs %s", pack->name, needs->name);
-
- if (installer_debug) {
- fprintf (stdout, "DEP CHECK : %s\n", tmp);
- }
-
- gtk_label_set_text (package_label, tmp);
- g_free (tmp);
- tmp = g_strdup_printf ("Fetching dependencies for %s", pack->name);
-
-#ifdef NO_TEXT_BOX
- gtk_label_set_text (GTK_LABEL (summary), tmp);
-#else
- gtk_text_backward_delete (GTK_TEXT (summary),
- gtk_text_get_length (GTK_TEXT (summary)));
- gtk_text_insert (GTK_TEXT (summary),
- NULL, NULL, NULL,
- tmp, strlen (tmp));
-#endif
- g_free (tmp);
-
- g_main_iteration (FALSE);
-}
-
-static gboolean
-eazel_install_delete_files (EazelInstall *service,
- EazelInstaller *installer)
-{
- if (installer_debug) {
- fprintf (stdout, "Deleting rpm's\n");
- }
- return TRUE ;
-}
-
-static void
-eazel_installer_add_category (EazelInstaller *installer,
- CategoryData *category)
-{
- static int magic = 24;
- GtkWidget *button;
- GtkWidget *fixed;
- static GSList *fixed_group = NULL;
-
- if (installer->debug) {
- fprintf (stdout, "Read category \"%s\"\n", category->name);
- }
-
- fixed = GTK_WIDGET (gtk_object_get_data (GTK_OBJECT (installer->window), "fixed3"));
-
- button = gtk_radio_button_new_with_label (fixed_group, category->name);
- fixed_group = gtk_radio_button_group (GTK_RADIO_BUTTON (button));
- gtk_widget_set_name (button, category->name);
- gtk_widget_ref (button);
- gtk_object_set_data_full (GTK_OBJECT (installer->window), category->name, button,
- (GtkDestroyNotify) gtk_widget_unref);
- gtk_widget_show (button);
- gtk_fixed_put (GTK_FIXED (fixed), button, 72, magic);
- gtk_widget_set_uposition (button, 72, magic);
- gtk_widget_set_usize (button, 0, 0);
-
- magic += 32;
-}
-
-/*****************************************
- GTK+ object stuff
-*****************************************/
-
-static void
-eazel_installer_finalize (GtkObject *object)
-{
- EazelInstaller *installer;
-
- g_message ("eazel_installer_finalize");
-
- g_return_if_fail (object != NULL);
- g_return_if_fail (EAZEL_INSTALLER (object));
-
- installer = EAZEL_INSTALLER (object);
-
- /* Free the objects own crap */
- g_list_foreach (installer->categories, (GFunc)categorydata_destroy_foreach, NULL);
- g_list_free (installer->categories);
- eazel_install_unref (GTK_OBJECT (installer->service));
-
- /* Call parents destroy */
- if (GTK_OBJECT_CLASS (eazel_installer_parent_class)->finalize) {
- GTK_OBJECT_CLASS (eazel_installer_parent_class)->finalize (object);
- }
-}
-
- void
-eazel_installer_unref (GtkObject *object)
-{
- gtk_object_unref (object);
-}
-
-static void
-eazel_installer_class_initialize (EazelInstallerClass *klass)
-{
- GtkObjectClass *object_class;
-
- object_class = (GtkObjectClass*)klass;
- object_class->finalize = (void(*)(GtkObject*))eazel_installer_finalize;
-
- eazel_installer_parent_class = gtk_type_class (gtk_object_get_type ());
-}
-
-static void
-eazel_installer_initialize (EazelInstaller *object) {
- EazelInstaller *installer;
- GList *iterator;
- char *tmpdir;
- char *package_destination;
-
- g_assert (object != NULL);
- g_assert (IS_EAZEL_INSTALLER (object));
-
- installer = EAZEL_INSTALLER (object);
-
- /* The manpage says not to use this, but I can't be arsed */
- tmpdir = g_strdup ("/tmp/eazel-installer.XXXXXX");
- mktemp (tmpdir);
-
- if (!tmpdir || mkdir (tmpdir, 0700) != 0) {
- g_error (_("Cannot create %s"), tmpdir);
- }
-
- package_destination = g_strdup_printf ("%s/package-list.xml", tmpdir);
-
- installer->test = installer_test;
- installer->debug = installer_debug;
-
- installer->window = create_window (installer);
- set_images (installer->window);
- check_system (installer->window);
- gtk_widget_show (installer->window);
-
- installer->failure_info = NULL;
-
- installer->service =
- EAZEL_INSTALL (gtk_object_new (TYPE_EAZEL_INSTALL,
- "verbose", TRUE,
- "silent", FALSE,
- "debug", TRUE,
- "test", installer_test ? TRUE : FALSE,
- "force", installer_force ? TRUE : FALSE,
- "depend", FALSE,
- "update", TRUE,
- "uninstall", TRUE,
- "downgrade", TRUE,
- "protocol", installer_local ? PROTOCOL_LOCAL: PROTOCOL_HTTP,
- "tmp_dir", tmpdir,
- "rpmrc_file", RPMRC,
- "server", installer_server ? installer_server : HOSTNAME,
- "server_port",
- installer_server_port ? installer_server_port : PORT_NUMBER,
- "package_list", package_destination,
- "package_list_storage_path", "package-list.xml",
- "transaction_dir", "/tmp",
- NULL));
-
-
- gtk_signal_connect (GTK_OBJECT (installer->service),
- "download_progress",
- GTK_SIGNAL_FUNC (eazel_download_progress),
- installer);
- gtk_signal_connect (GTK_OBJECT (installer->service),
- "install_progress",
- GTK_SIGNAL_FUNC (eazel_install_progress),
- installer);
- gtk_signal_connect (GTK_OBJECT (installer->service),
- "preflight_check",
- GTK_SIGNAL_FUNC (eazel_install_preflight),
- installer);
- gtk_signal_connect (GTK_OBJECT (installer->service),
- "dependency_check",
- GTK_SIGNAL_FUNC (eazel_install_dep_check),
- installer);
- gtk_signal_connect (GTK_OBJECT (installer->service),
- "delete_files",
- GTK_SIGNAL_FUNC (eazel_install_delete_files),
- installer);
- gtk_signal_connect (GTK_OBJECT (installer->service),
- "download_failed",
- download_failed,
- installer);
- gtk_signal_connect (GTK_OBJECT (installer->service),
- "install_failed",
- GTK_SIGNAL_FUNC (install_failed),
- installer);
-
- if (!installer->debug) {
- char *log;
- log = g_strdup_printf ("%s/installer.log", tmpdir);
- eazel_install_open_log (installer->service, log);
- g_free (log);
- }
-
- eazel_install_fetch_remote_package_list (installer->service);
- installer->categories = parse_local_xml_package_list (package_destination);
- for (iterator = installer->categories; iterator; iterator=iterator->next) {
- eazel_installer_add_category (installer, (CategoryData*)iterator->data);
- }
- g_free (package_destination);
- g_free (tmpdir);
-}
-
-GtkType
-eazel_installer_get_type() {
- static GtkType installer_type = 0;
-
- if (!installer_type)
- {
- static const GtkTypeInfo installer_info =
- {
- "EazelInstaller",
- sizeof (EazelInstaller),
- sizeof (EazelInstallerClass),
- (GtkClassInitFunc) eazel_installer_class_initialize,
- (GtkObjectInitFunc) eazel_installer_initialize,
- /* reserved_1 */ NULL,
- /* reserved_2 */ NULL,
- (GtkClassInitFunc) NULL,
- };
-
- /* Get a unique GtkType */
- installer_type = gtk_type_unique (gtk_object_get_type (), &installer_info);
- }
-
- return installer_type;
-}
-
-/*
- The _new method simply builds the service
- using gtk_object_new
-*/
-EazelInstaller*
-eazel_installer_new()
-{
- EazelInstaller *installer;
-
- installer = EAZEL_INSTALLER (gtk_object_new (TYPE_EAZEL_INSTALLER, NULL));
-
- return installer;
-}
diff --git a/nautilus-installer/src/interface.h b/nautilus-installer/src/interface.h
deleted file mode 100644
index e69de29bb..000000000
--- a/nautilus-installer/src/interface.h
+++ /dev/null
diff --git a/nautilus-installer/src/link.sh b/nautilus-installer/src/link.sh
index 7021efdb5..8a3432a40 100755
--- a/nautilus-installer/src/link.sh
+++ b/nautilus-installer/src/link.sh
@@ -3,12 +3,13 @@
pushd `pwd`
cd ../../components/services/install/lib
make -f makefile.staticlib clean
-make -f makefile.staticlib
+make CFLAGS="-g -Werror" DEFINES="-DEAZEL_INSTALL_NO_CORBA -DEAZEL_INSTALL_SLIM -DEAZEL_INSTALL_PROTOCOL_USE_OLD_CGI" -f makefile.staticlib
+#make CFLAGS="-O -Werror" DEFINES="-DEAZEL_INSTALL_NO_CORBA -DEAZEL_INSTALL_SLIM -DEAZEL_INSTALL_PROTOCOL_USE_OLD_CGI" -f makefile.staticlib
popd
make clean
-make CFLAGS="-O -Werror -DNO_TEXT_BOX $*" LDFLAGS="-static"
-gcc -static -O -Werror -o nautilus-installer main.o support.o interface.o callbacks.o installer.o \
+make CFLAGS="-O -Werror -DNO_TEXT_BOX $*" LDFLAGS="-static" DEFINES="-DNAUTILUS_INSTALLER_RELEASE"
+gcc -static -O -Werror -o nautilus-installer main.o support.o callbacks.o installer.o \
../../components/services/install/lib/libeazelinstall_minimal.a \
../../components/services/trilobite/libtrilobite/helixcode-utils.o \
../../components/services/trilobite/libtrilobite/trilobite-core-distribution.o \
diff --git a/nautilus-installer/src/main.c b/nautilus-installer/src/main.c
index bf0ef34aa..b4f3ced63 100644
--- a/nautilus-installer/src/main.c
+++ b/nautilus-installer/src/main.c
@@ -26,12 +26,13 @@
#include <gnome.h>
-#include "interface.h"
+#include "installer.h"
#include "support.h"
#include "callbacks.h"
#include <libtrilobite/helixcode-utils.h>
extern int installer_debug;
+extern int installer_output;
extern int installer_test;
extern int installer_force;
extern char *installer_server;
@@ -39,7 +40,8 @@ extern int installer_server_port;
extern char* installer_local;
static const struct poptOption options[] = {
- {"debug", 'd', POPT_ARG_NONE, &installer_debug, 0 , N_("Show debug output"), NULL},
+ {"debug", 'd', POPT_ARG_NONE, &installer_debug, 0 , N_("Show confusing debug output"), NULL},
+ {"output", 'd', POPT_ARG_NONE, &installer_output, 0 , N_("Show debug output"), NULL},
{"test", 't', POPT_ARG_NONE, &installer_test, 0, N_("Test run"), NULL},
{"force", 'f', POPT_ARG_NONE, &installer_force, 0, N_("Forced install"), NULL},
{"local", '\0', POPT_ARG_STRING, &installer_local, 0, N_("Use local, specify xml file to yse"), NULL},
@@ -66,3 +68,9 @@ main (int argc, char *argv[])
return 0;
}
+
+/* Dummy functions to make linking work */
+
+const gpointer oaf_popt_options = NULL;
+gpointer oaf_init (int argc, char *argv[]) {}
+int bonobo_init (gpointer a, gpointer b, gpointer c) {};
diff --git a/nautilus-installer/src/support.c b/nautilus-installer/src/support.c
index affce6f92..889109a93 100644
--- a/nautilus-installer/src/support.c
+++ b/nautilus-installer/src/support.c
@@ -43,107 +43,4 @@ lookup_widget (GtkWidget *widget,
return found_widget;
}
-/* This is a dummy pixmap we use when a pixmap can't be found. */
-static char *dummy_pixmap_xpm[] = {
-/* columns rows colors chars-per-pixel */
-"1 1 1 1",
-" c None",
-/* pixels */
-" ",
-" "
-};
-
-/* This is an internally used function to create pixmaps. */
-static GtkWidget*
-create_dummy_pixmap (GtkWidget *widget,
- gboolean gnome_pixmap)
-{
- GdkColormap *colormap;
- GdkPixmap *gdkpixmap;
- GdkBitmap *mask;
- GtkWidget *pixmap;
-
- if (gnome_pixmap)
- {
- return gnome_pixmap_new_from_xpm_d (dummy_pixmap_xpm);
- }
-
- colormap = gtk_widget_get_colormap (widget);
- gdkpixmap = gdk_pixmap_colormap_create_from_xpm_d (NULL, colormap, &mask,
- NULL, dummy_pixmap_xpm);
- if (gdkpixmap == NULL)
- g_error ("Couldn't create replacement pixmap.");
- pixmap = gtk_pixmap_new (gdkpixmap, mask);
- gdk_pixmap_unref (gdkpixmap);
- gdk_bitmap_unref (mask);
- return pixmap;
-}
-
-/* This is an internally used function to create pixmaps. */
-GtkWidget*
-create_pixmap (GtkWidget *widget,
- const gchar *filename,
- gboolean gnome_pixmap)
-{
- GtkWidget *pixmap;
- GdkColormap *colormap;
- GdkPixmap *gdkpixmap;
- GdkBitmap *mask;
- gchar *pathname;
-
- /* FIXME bugzilla.eazel.com 2546: If we try to use this to get "nautilus/" pixmaps it
- * won't work unless our prefix matches the one from gnome-libs.
- */
- pathname = gnome_pixmap_file (filename);
- if (!pathname)
- {
- g_warning (_("Couldn't find pixmap file: %s"), filename);
- return create_dummy_pixmap (widget, gnome_pixmap);
- }
-
- if (gnome_pixmap)
- {
- pixmap = gnome_pixmap_new_from_file (pathname);
- g_free (pathname);
- return pixmap;
- }
-
- colormap = gtk_widget_get_colormap (widget);
- gdkpixmap = gdk_pixmap_colormap_create_from_xpm (NULL, colormap, &mask,
- NULL, pathname);
- if (gdkpixmap == NULL)
- {
- g_warning (_("Couldn't create pixmap from file: %s"), pathname);
- g_free (pathname);
- return create_dummy_pixmap (widget, gnome_pixmap);
- }
- g_free (pathname);
-
- pixmap = gtk_pixmap_new (gdkpixmap, mask);
- gdk_pixmap_unref (gdkpixmap);
- gdk_bitmap_unref (mask);
- return pixmap;
-}
-
-/* This is an internally used function to create imlib images. */
-GdkImlibImage*
-create_image (const gchar *filename)
-{
- GdkImlibImage *image;
- gchar *pathname;
-
- /* FIXME bugzilla.eazel.com 2546: If we try to use this to get "nautilus/" pixmaps it
- * won't work unless our prefix matches the one from gnome-libs.
- */
- pathname = gnome_pixmap_file (filename);
- if (!pathname)
- {
- g_warning (_("Couldn't find pixmap file: %s"), filename);
- return NULL;
- }
-
- image = gdk_imlib_load_image (pathname);
- g_free (pathname);
- return image;
-}
diff --git a/nautilus-installer/src/support.h b/nautilus-installer/src/support.h
index d9bb0728a..34652b068 100644
--- a/nautilus-installer/src/support.h
+++ b/nautilus-installer/src/support.h
@@ -21,14 +21,3 @@ GtkWidget* lookup_widget (GtkWidget *widget,
#define get_widget lookup_widget
-/*
- * Private Functions.
- */
-
-/* This is used to create the pixmaps in the interface. */
-GtkWidget* create_pixmap (GtkWidget *widget,
- const gchar *filename,
- gboolean gnome_pixmap);
-
-GdkImlibImage* create_image (const gchar *filename);
-