diff options
author | Robey Pointer <robey@src.gnome.org> | 2001-02-15 03:24:32 +0000 |
---|---|---|
committer | Robey Pointer <robey@src.gnome.org> | 2001-02-15 03:24:32 +0000 |
commit | 33b508ce527671055792705e0b3662cb8e52560f (patch) | |
tree | 9542f4fdaea1599f170e0311219fc3460a168043 | |
parent | 7be7beef6b1865aa74e00856f6c407b8937582ae (diff) | |
download | nautilus-33b508ce527671055792705e0b3662cb8e52560f.tar.gz |
reviewed by: Eskil Heyn Olsen <eskil@eazel.com>
* components/services/install/lib/eazel-install-xml-package-list.c:
(osd_parse_shared), (eazel_install_packagelist_parse):
* components/services/install/lib/eazel-install-xml-package-list.h:
* components/services/install/lib/eazel-softcat-private.h:
* components/services/install/lib/eazel-softcat.c:
(eazel_softcat_finalize), (eazel_softcat_initialize),
(eazel_softcat_reset_server_update_flag), (eazel_softcat_query):
Return the softcat DB revision with the parsed package list, and
use that info to hook into Eskil's error trap. Also free up the
softcat private data when the object goes away.
-rw-r--r-- | ChangeLog | 16 | ||||
-rw-r--r-- | components/services/install/lib/eazel-install-xml-package-list.c | 24 | ||||
-rw-r--r-- | components/services/install/lib/eazel-install-xml-package-list.h | 2 | ||||
-rw-r--r-- | components/services/install/lib/eazel-softcat-private.h | 3 | ||||
-rw-r--r-- | components/services/install/lib/eazel-softcat.c | 43 |
5 files changed, 61 insertions, 27 deletions
@@ -1,3 +1,19 @@ +2001-02-14 Robey Pointer <robey@eazel.com> + + reviewed by: Eskil Heyn Olsen <eskil@eazel.com> + + * components/services/install/lib/eazel-install-xml-package-list.c: + (osd_parse_shared), (eazel_install_packagelist_parse): + * components/services/install/lib/eazel-install-xml-package-list.h: + * components/services/install/lib/eazel-softcat-private.h: + * components/services/install/lib/eazel-softcat.c: + (eazel_softcat_finalize), (eazel_softcat_initialize), + (eazel_softcat_reset_server_update_flag), (eazel_softcat_query): + + Return the softcat DB revision with the parsed package list, and + use that info to hook into Eskil's error trap. Also free up the + softcat private data when the object goes away. + 2001-02-14 Gene Z. Ragan <gzr@eazel.com> Fixed bug 6653, throwing away something with the desktop not on will diff --git a/components/services/install/lib/eazel-install-xml-package-list.c b/components/services/install/lib/eazel-install-xml-package-list.c index bee39d8c8..71bf9ce4d 100644 --- a/components/services/install/lib/eazel-install-xml-package-list.c +++ b/components/services/install/lib/eazel-install-xml-package-list.c @@ -871,14 +871,14 @@ osd_parse_softpkg (xmlNodePtr softpkg) return result; } -static GList* -osd_parse_shared (xmlDocPtr doc) +static GList * +osd_parse_shared (xmlDocPtr doc, char **db_revision) { GList *result; xmlNodePtr base, child; - char *tmp; result = NULL; + *db_revision = NULL; base = doc->root; if (base == NULL) { @@ -902,9 +902,17 @@ osd_parse_shared (xmlDocPtr doc) trilobite_debug ("SOFTPKG parse failed"); } } else if (g_strcasecmp (child->name, "DB_CONTROL") == 0) { - tmp = trilobite_xml_get_string (child, "VALUE"); - trilobite_debug ("(softcat db revision %s)", tmp); - g_free (tmp); + if (*db_revision != NULL) { + g_warning ("weird: softcat has multiple DB versions simultaneously"); + g_free (*db_revision); + } + *db_revision = trilobite_xml_get_string (child, "VALUE"); + if ((*db_revision != NULL) && (strlen (*db_revision) == 0)) { + /* empty revision of "" should just be dropped */ + g_free (*db_revision); + *db_revision = NULL; + } + trilobite_debug ("(softcat db revision %s)", *db_revision); } else { trilobite_debug ("child is not a SOFTPKG, but a \"%s\"", child->name); } @@ -916,7 +924,7 @@ osd_parse_shared (xmlDocPtr doc) /* returns FALSE if the XML was all horked */ gboolean -eazel_install_packagelist_parse (GList **list, const char *mem, int size) +eazel_install_packagelist_parse (GList **list, const char *mem, int size, char **db_revision) { xmlDocPtr doc; char *ptr, *docptr, *end; @@ -950,7 +958,7 @@ eazel_install_packagelist_parse (GList **list, const char *mem, int size) return FALSE; } - *list = osd_parse_shared (doc); + *list = osd_parse_shared (doc, db_revision); xmlFreeDoc (doc); g_free (docptr); diff --git a/components/services/install/lib/eazel-install-xml-package-list.h b/components/services/install/lib/eazel-install-xml-package-list.h index f36054fc4..5f7967f03 100644 --- a/components/services/install/lib/eazel-install-xml-package-list.h +++ b/components/services/install/lib/eazel-install-xml-package-list.h @@ -45,6 +45,6 @@ xmlNodePtr eazel_install_packagedata_to_xml (const PackageData *pack, gboolean i xmlNodePtr eazel_install_packagelist_to_xml (GList *packages, gboolean include_provides); xmlNodePtr eazel_install_categorydata_to_xml (const CategoryData *category); -gboolean eazel_install_packagelist_parse (GList **list, const char *mem, int size); +gboolean eazel_install_packagelist_parse (GList **list, const char *mem, int size, char **db_revision); #endif /* EAZEL_INSTALL_XML_PACKAGE_LIST_H */ diff --git a/components/services/install/lib/eazel-softcat-private.h b/components/services/install/lib/eazel-softcat-private.h index d35b2e868..a09e0054b 100644 --- a/components/services/install/lib/eazel-softcat-private.h +++ b/components/services/install/lib/eazel-softcat-private.h @@ -43,8 +43,7 @@ struct _EazelSoftCatPrivate { unsigned int delay; /* This is used to track the server update status */ - gboolean server_update_set; - guint server_update_val; + char *db_revision; }; #endif /* EAZEL_SOFTCAT_PRIVATE_H */ diff --git a/components/services/install/lib/eazel-softcat.c b/components/services/install/lib/eazel-softcat.c index e35e7d139..45d301bd8 100644 --- a/components/services/install/lib/eazel-softcat.c +++ b/components/services/install/lib/eazel-softcat.c @@ -51,6 +51,19 @@ eazel_softcat_finalize (GtkObject *object) softcat = EAZEL_SOFTCAT (object); + g_free (softcat->private->server); + softcat->private->server = NULL; + g_free (softcat->private->server_str); + softcat->private->server_str = NULL; + g_free (softcat->private->cgi_path); + softcat->private->cgi_path = NULL; + g_free (softcat->private->username); + softcat->private->username = NULL; + g_free (softcat->private->db_revision); + softcat->private->db_revision = NULL; + + g_free (softcat->private); + if (GTK_OBJECT_CLASS (eazel_softcat_parent_class)->finalize) { GTK_OBJECT_CLASS (eazel_softcat_parent_class)->finalize (object); } @@ -113,8 +126,7 @@ eazel_softcat_initialize (EazelSoftCat *softcat) { softcat->private = g_new0 (EazelSoftCatPrivate, 1); softcat->private->retries = 3; softcat->private->delay = 100; - softcat->private->server_update_set = FALSE; - softcat->private->server_update_val = 0; + softcat->private->db_revision = NULL; } GtkType @@ -282,8 +294,8 @@ eazel_softcat_set_retry (EazelSoftCat *softcat, unsigned int retries, unsigned i void eazel_softcat_reset_server_update_flag (EazelSoftCat *softcat) { - softcat->private->server_update_set = FALSE; - softcat->private->server_update_val = 0; + g_free (softcat->private->db_revision); + softcat->private->db_revision = NULL; } const char * @@ -624,8 +636,10 @@ eazel_softcat_query (EazelSoftCat *softcat, PackageData *package, int sense_flag int tries_left; gboolean got_happy; GList *packages; + char *db_revision; int err; + db_revision = NULL; search_url = get_search_url_for_package (softcat, package, sense_flags); if (search_url == NULL) { trilobite_debug ("no search url :("); @@ -640,7 +654,7 @@ eazel_softcat_query (EazelSoftCat *softcat, PackageData *package, int sense_flag tries_left--) { got_happy = trilobite_fetch_uri (search_url, &body, &length); if (got_happy) { - got_happy = eazel_install_packagelist_parse (&packages, body, length); + got_happy = eazel_install_packagelist_parse (&packages, body, length, &db_revision); if (! got_happy) { /* boo. bogus xml. long live softcat! */ trilobite_debug ("bogus xml."); @@ -671,21 +685,17 @@ eazel_softcat_query (EazelSoftCat *softcat, PackageData *package, int sense_flag return EAZEL_SOFTCAT_ERROR_SERVER_UNREACHABLE; } - /* FIXME: bugzilla.eazel.com 4470 - Somehow check the majick db update int in the xml : - - if (softcat->private->server_update_set == FALSE) { - softcat->private->server_update_set = TRUE; - softcat->private->server_update_val = majick; - } else { - if (softcat->private->server_update_val != majick) { - trilobite_debug ("Server has been updated since last request"); + if ((db_revision != NULL) && (softcat->private->db_revision == NULL)) { + softcat->private->db_revision = db_revision; + db_revision = NULL; + } else if (db_revision != NULL) { + if (strcmp (softcat->private->db_revision, db_revision) != 0) { + g_warning ("SoftCat has been updated since last request!"); err = EAZEL_SOFTCAT_ERROR_SERVER_UPDATED; goto out; } } - */ - + if (g_list_length (packages) == 0) { trilobite_debug ("no matches for that package."); err = EAZEL_SOFTCAT_ERROR_NO_SUCH_PACKAGE; @@ -699,6 +709,7 @@ eazel_softcat_query (EazelSoftCat *softcat, PackageData *package, int sense_flag out: g_free (body); g_free (search_url); + g_free (db_revision); return err; } |