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);
}
Beispiel #5
0
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);
}