static void google_subscription_opml_cb (subscriptionPtr subscription, const struct updateResult * const result, updateFlags flags) { AolSourcePtr gsource = (AolSourcePtr) subscription->node->data; subscription->updateJob = NULL; if (result->data) { xmlDocPtr doc = xml_parse (result->data, result->size, NULL); if(doc) { xmlNodePtr root = xmlDocGetRootElement (doc); /* Go through all existing nodes and remove those whose URLs are not in new feed list. Also removes those URLs from the list that have corresponding existing nodes. */ node_foreach_child_data (subscription->node, aol_source_check_for_removal, (gpointer)root); node_foreach_child (subscription->node, aol_source_migrate_node); opml_source_export (subscription->node); /* save new feed list tree to disk to ensure correct document in next step */ xpath_foreach_match (root, "/object/list[@name='subscriptions']/object", aol_source_merge_feed, (gpointer)gsource); opml_source_export (subscription->node); /* save new feeds to feed list */ subscription->node->available = TRUE; xmlFreeDoc (doc); } else { /** @todo The session seems to have expired */ g_warning ("Unable to parse OPML list from google, the session might have expired.\n"); } } else { subscription->node->available = FALSE; debug0 (DEBUG_UPDATE, "google_subscription_opml_cb(): ERROR: failed to get subscription list!\n"); } if (!(flags & NODE_SOURCE_UPDATE_ONLY_LIST)) node_foreach_child_data (subscription->node, node_update_subscription, GUINT_TO_POINTER (0)); }
static void inoreader_source_opml_quick_update_cb (const struct updateResult* const result, gpointer userdata, updateFlags flags) { InoreaderSourcePtr gsource = (InoreaderSourcePtr) userdata; xmlDocPtr doc; if (!result->data) { /* what do I do? */ debug0 (DEBUG_UPDATE, "InoreaderSource: Unable to get unread counts, this update is aborted."); return; } doc = xml_parse (result->data, result->size, NULL); if (!doc) { debug0 (DEBUG_UPDATE, "InoreaderSource: The XML failed to parse, maybe the session has expired. (FIXME)"); return; } xpath_foreach_match (xmlDocGetRootElement (doc), "/object/list[@name='unreadcounts']/object", inoreader_source_opml_quick_update_helper, gsource); xmlFreeDoc (doc); }