summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobey Pointer <robey@src.gnome.org>2001-02-15 03:24:32 +0000
committerRobey Pointer <robey@src.gnome.org>2001-02-15 03:24:32 +0000
commit33b508ce527671055792705e0b3662cb8e52560f (patch)
tree9542f4fdaea1599f170e0311219fc3460a168043
parent7be7beef6b1865aa74e00856f6c407b8937582ae (diff)
downloadnautilus-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--ChangeLog16
-rw-r--r--components/services/install/lib/eazel-install-xml-package-list.c24
-rw-r--r--components/services/install/lib/eazel-install-xml-package-list.h2
-rw-r--r--components/services/install/lib/eazel-softcat-private.h3
-rw-r--r--components/services/install/lib/eazel-softcat.c43
5 files changed, 61 insertions, 27 deletions
diff --git a/ChangeLog b/ChangeLog
index d74313836..6ac9de4f0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;
}