void subscription_update (subscriptionPtr subscription, guint flags) { updateRequestPtr request; GTimeVal now; if (!subscription) return; if (subscription->updateJob) return; debug1 (DEBUG_UPDATE, "Scheduling %s to be updated", node_get_title (subscription->node)); if (subscription_can_be_updated (subscription)) { liferea_shell_set_status_bar (_("Updating \"%s\""), node_get_title (subscription->node)); g_get_current_time (&now); subscription_reset_update_counter (subscription, &now); request = update_request_new (); request->updateState = update_state_copy (subscription->updateState); request->options = update_options_copy (subscription->updateOptions); request->source = g_strdup (subscription_get_source (subscription)); if (subscription_get_filter (subscription)) request->filtercmd = g_strdup (subscription_get_filter (subscription)); if (SUBSCRIPTION_TYPE (subscription)->prepare_update_request (subscription, request)) subscription->updateJob = update_execute_request (subscription, request, subscription_process_update_result, subscription, flags); else update_request_free (request); } }
gboolean aol_source_opml_quick_update(AolSourcePtr source) { updateRequestPtr request = update_request_new (); request->updateState = update_state_copy (source->root->subscription->updateState); request->options = update_options_copy (source->root->subscription->updateOptions); update_request_set_source (request, AOL_READER_UNREAD_COUNTS_URL); update_request_set_auth_value(request, source->root->source->authToken); update_execute_request (source, request, aol_source_opml_quick_update_cb, source, 0); return TRUE; }
gboolean inoreader_source_opml_quick_update(InoreaderSourcePtr gsource) { updateRequestPtr request = update_request_new (); request->updateState = update_state_copy (gsource->root->subscription->updateState); request->options = update_options_copy (gsource->root->subscription->updateOptions); update_request_set_source (request, INOREADER_UNREAD_COUNTS_URL); update_request_set_auth_value(request, gsource->authHeaderValue); update_execute_request (gsource, request, inoreader_source_opml_quick_update_cb, gsource, 0); return TRUE; }
static void ttrss_source_update_subscription_list (ttrssSourcePtr source, subscriptionPtr subscription) { updateRequestPtr request; gchar *source_uri; request = update_request_new (); request->updateState = update_state_copy (subscription->updateState); request->options = update_options_copy (subscription->updateOptions); source_uri = g_strdup_printf (TTRSS_URL, source->url); update_request_set_source (request, source_uri); g_free (source_uri); request->postdata = g_strdup_printf (TTRSS_JSON_SUBSCRIPTION_LIST, source->session_id); subscription->updateJob = update_execute_request (subscription, request, ttrss_source_subscription_list_cb, subscription, 0); }
static void inoreader_feed_subscription_process_update_result (subscriptionPtr subscription, const struct updateResult* const result, updateFlags flags) { debug_start_measurement (DEBUG_UPDATE); if (result->data) { updateResultPtr resultCopy; /* FIXME: The following is a very dirty hack to edit the feed's XML before processing it */ resultCopy = update_result_new () ; resultCopy->source = g_strdup (result->source); resultCopy->httpstatus = result->httpstatus; resultCopy->contentType = g_strdup (result->contentType); g_free (resultCopy->updateState); resultCopy->updateState = update_state_copy (result->updateState); /* update the XML by removing 'read', 'reading-list' etc. as labels. */ xmlDocPtr doc = xml_parse (result->data, result->size, NULL); xmlXPathContextPtr xpathCtxt = xmlXPathNewContext (doc) ; xmlXPathRegisterNs (xpathCtxt, "atom", "http://www.w3.org/2005/Atom"); inoreader_source_xpath_foreach_match ("/atom:feed/atom:entry/atom:category[@scheme='http://www.inoreader.com/reader/']", xpathCtxt, inoreader_source_xml_unlink_node, NULL); xmlXPathFreeContext (xpathCtxt); /* good now we have removed the read and unread labels. */ xmlChar *newXml; int newXmlSize ; xmlDocDumpMemory (doc, &newXml, &newXmlSize); resultCopy->data = g_strndup ((gchar*) newXml, newXmlSize); resultCopy->size = newXmlSize; xmlFree (newXml); xmlFreeDoc (doc); feed_get_subscription_type ()->process_update_result (subscription, resultCopy, flags); update_result_free (resultCopy); } else { feed_get_subscription_type ()->process_update_result (subscription, result, flags); return ; } xmlDocPtr doc = xml_parse (result->data, result->size, NULL); if (doc) { xmlNodePtr root = xmlDocGetRootElement (doc); xmlNodePtr entry = root->children ; GHashTable *cache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL); while (entry) { if (!g_str_equal (entry->name, "entry")) { entry = entry->next; continue; /* not an entry */ } inoreader_source_item_retrieve_status (entry, subscription, cache); entry = entry->next; } g_hash_table_unref (cache); xmlFreeDoc (doc); } else { debug0 (DEBUG_UPDATE, "google_feed_subscription_process_update_result(): Couldn't parse XML!"); g_warning ("google_feed_subscription_process_update_result(): Couldn't parse XML!"); } debug_end_measurement (DEBUG_UPDATE, "time taken to update statuses"); }