static void fetch_opml (IrisTask *task, gpointer user_data) { MarinaGoogleReaderSourcePrivate *priv; const gchar *cookie; SoupMessage *msg; GValue value = {0,}; g_return_if_fail (MARINA_IS_GOOGLE_READER_SOURCE (user_data)); priv = MARINA_GOOGLE_READER_SOURCE (user_data)->priv; iris_task_get_result (task, &value); cookie = g_value_get_string (&value); g_value_unset (&value); msg = soup_message_new ("GET", OPML_URI); soup_message_headers_append (msg->request_headers, "Cookie", cookie); if (soup_session_send_message (priv->session, msg) == 200) IRIS_TASK_RETURN_VALUE (task, G_TYPE_STRING, msg->response_body->data); else IRIS_TASK_THROW_NEW (task, GOOGLE_READER_ERROR_QUARK, 0, "Error retrieving OPML from google"); }
static void ask_user_pass (IrisTask *task, gpointer user_data) { GtkWidget *dialog = NULL; GtkWidget *entry = NULL; const gchar *passwd; /* no more error, we are handling */ IRIS_TASK_CATCH (task, NULL); get_pass_dialog (&dialog, &entry); g_debug ("Bringing up dialog to ask instead"); /* show user dialog */ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { passwd = gtk_entry_get_text (GTK_ENTRY (entry)); IRIS_TASK_RETURN_VALUE (task, G_TYPE_STRING, passwd); g_debug ("Got a password and stored it"); } else { IRIS_TASK_THROW_NEW (task, GOOGLE_READER_ERROR_QUARK, 0, "No password for google account"); g_debug ("Couldn't get password from dialog"); } gtk_widget_destroy (dialog); }
static void get_cookie (IrisTask *task, gpointer user_data) { MarinaGoogleReaderSourcePrivate *priv; SoupMessage *msg; gchar *uri; GValue value = {0,}; g_debug ("get_cookie here"); g_return_if_fail (IRIS_IS_TASK (task)); g_return_if_fail (MARINA_IS_GOOGLE_READER_SOURCE (user_data)); priv = MARINA_GOOGLE_READER_SOURCE (user_data)->priv; iris_task_get_result (task, &value); if (!G_VALUE_HOLDS_STRING (&value)) goto cleanup; if (!priv->cookie) { g_debug ("%d", __LINE__); uri = g_markup_printf_escaped (LOGIN_URI_FORMAT, priv->username, g_value_get_string (&value)); msg = soup_message_new ("GET", uri); g_free (uri); if (soup_session_send_message (priv->session, msg) == 200) { gchar *tmp = strstr (msg->response_body->data, "SID="); if (!tmp) ; // set error gchar *sid = tmp; gchar *end = strstr (sid, "\n"); if (!end) ; // set error *end = '\0'; priv->cookie = g_strdup (sid); g_object_unref (msg); } else { // set error } } if (priv->cookie) IRIS_TASK_RETURN_VALUE (task, G_TYPE_STRING, priv->cookie); cleanup: g_value_unset (&value); }
static void find_password_cb (GnomeKeyringResult res, const gchar *password, gpointer user_data) { IrisTask *task = IRIS_TASK (user_data); if (res == GNOME_KEYRING_RESULT_OK) IRIS_TASK_RETURN_VALUE (task, G_TYPE_STRING, password); else IRIS_TASK_THROW_NEW (task, GOOGLE_READER_ERROR_QUARK, 0, "No password found in keyring"); iris_task_complete (task); }
void worker (IrisTask *task, gpointer user_data) { GList *list = NULL; GDir *dir; const gchar *name; dir = g_dir_open ((gchar*)user_data, 0, NULL); while ((name = g_dir_read_name (dir)) != NULL) { list = g_list_prepend (list, g_strdup (name)); } IRIS_TASK_RETURN_VALUE (task, G_TYPE_POINTER, list); }