예제 #1
0
static void
web_service_set_property (GObject      *object,
			  guint         property_id,
			  const GValue *value,
			  GParamSpec   *pspec)
{
	WebService *self = WEB_SERVICE (object);

	switch (property_id) {
	case PROP_SERVICE_NAME:
		_g_strset (&self->priv->service_name, g_value_get_string (value));
		break;
	case PROP_SERVICE_ADDRESS:
		_g_strset (&self->priv->service_address, g_value_get_string (value));
		break;
	case PROP_SERVICE_PROTOCOL:
		_g_strset (&self->priv->service_protocol, g_value_get_string (value));
		break;
	case PROP_ACCOUNT_TYPE:
		self->priv->account_type = g_value_get_gtype (value);
		break;
	case PROP_CANCELLABLE:
		_g_object_unref (self->priv->cancellable);
		self->priv->cancellable = g_value_dup_object (value);
		break;
	case PROP_BROWSER:
		self->priv->browser = g_value_get_pointer (value);
		break;
	case PROP_DIALOG:
		self->priv->dialog = g_value_get_pointer (value);
		break;
	default:
		break;
	}
}
예제 #2
0
static void
picasa_web_service_get_user_info (WebService          *base,
				  GCancellable        *cancellable,
				  GAsyncReadyCallback  callback,
				  gpointer	       user_data)
{
	PicasaWebService *self = PICASA_WEB_SERVICE (base);
	OAuthAccount     *account;
	GHashTable       *data_set;
	SoupMessage      *msg;

	account = web_service_get_current_account (WEB_SERVICE (self));
	if (account != NULL) {
		_g_strset (&self->priv->refresh_token, account->token_secret);
		_g_strset (&self->priv->access_token, account->token);
	}

	data_set = g_hash_table_new (g_str_hash, g_str_equal);
	if (self->priv->access_token != NULL) {
		msg = soup_form_request_new_from_hash ("GET", "https://www.googleapis.com/oauth2/v2/userinfo", data_set);
		_picasa_web_service_add_headers (self, msg);
		_web_service_send_message (WEB_SERVICE (self),
					   msg,
					   cancellable,
					   callback,
					   user_data,
					   picasa_web_service_get_user_info,
					   picasa_web_service_get_user_info_ready_cb,
					   self);
	}
	else {
		/* Get the access token from the refresh token */

		AccessTokenData *data;

		data = g_new0 (AccessTokenData, 1);
		data->service = self;
		data->cancellable = _g_object_ref (cancellable);
		data->callback = callback;
		data->user_data = user_data;
		_picasa_web_service_get_access_token (self,
						      self->priv->refresh_token,
						      cancellable,
						      access_token_ready_cb,
						      data);
	}

	g_hash_table_destroy (data_set);
}
예제 #3
0
static void
_picasa_web_service_get_access_token_ready_cb (SoupSession *session,
					       SoupMessage *msg,
					       gpointer     user_data)
{
	PicasaWebService   *self = user_data;
	GSimpleAsyncResult *result;
	GError             *error = NULL;
	JsonNode           *node;

	result = _web_service_get_result (WEB_SERVICE (self));

	if (picasa_web_utils_parse_json_response (msg, &node, &error)) {
		JsonObject   *obj;
		OAuthAccount *account;

		obj = json_node_get_object (node);
		account = web_service_get_current_account (WEB_SERVICE (self));
		if (account != NULL)
			g_object_set (account,
				      "token", json_object_get_string_member (obj, "access_token"),
				      NULL);
		else
			_g_strset (&self->priv->access_token, json_object_get_string_member (obj, "access_token"));
	}
	else
		g_simple_async_result_set_from_error (result, error);

	g_simple_async_result_complete_in_idle (result);
}
예제 #4
0
static void
_picasa_web_service_get_access_token (PicasaWebService    *self,
				      const char          *refresh_token,
				      GCancellable        *cancellable,
				      GAsyncReadyCallback  callback,
				      gpointer             user_data)
{
	GHashTable  *data_set;
	SoupMessage *msg;

	_g_strset (&self->priv->access_token, NULL);

	data_set = g_hash_table_new (g_str_hash, g_str_equal);
	g_hash_table_insert (data_set, "refresh_token", (gpointer) refresh_token);
	g_hash_table_insert (data_set, "client_id", GTHUMB_PICASA_WEB_CLIENT_ID);
	g_hash_table_insert (data_set, "client_secret", GTHUMB_PICASA_WEB_CLIENT_SECRET);
	g_hash_table_insert (data_set, "grant_type", "refresh_token");
	msg = soup_form_request_new_from_hash ("POST", "https://accounts.google.com/o/oauth2/token", data_set);
	_picasa_web_service_add_headers (self, msg);
	_web_service_send_message (WEB_SERVICE (self),
				   msg,
				   cancellable,
				   callback,
				   user_data,
				   _picasa_web_service_get_access_token,
				   _picasa_web_service_get_access_token_ready_cb,
				   self);

	g_hash_table_destroy (data_set);
}
예제 #5
0
static void
facebook_photo_set_property (GObject      *object,
                             guint         property_id,
                             const GValue *value,
                             GParamSpec   *pspec)
{
    FacebookPhoto *self;

    self = FACEBOOK_PHOTO (object);

    switch (property_id) {
    case PROP_ID:
        _g_strset (&self->id, g_value_get_string (value));
        break;
    case PROP_PICTURE:
        _g_strset (&self->picture, g_value_get_string (value));
        break;
    case PROP_SOURCE:
        _g_strset (&self->source, g_value_get_string (value));
        break;
    case PROP_WIDTH:
        self->width = g_value_get_int (value);
        break;
    case PROP_HEIGHT:
        self->height = g_value_get_int (value);
        break;
    case PROP_LINK:
        _g_strset (&self->link, g_value_get_string (value));
        break;
    case PROP_CREATED_TIME:
        gth_datetime_free (self->created_time);
        self->created_time = g_value_dup_boxed (value);
        break;
    case PROP_UPDATED_TIME:
        gth_datetime_free (self->updated_time);
        self->updated_time = g_value_dup_boxed (value);
        break;
    case PROP_IMAGES:
        facebook_image_list_free (self->images);
        self->images = g_value_dup_boxed (value);
        break;
    default:
        break;
    }
}
예제 #6
0
static void
facebook_user_load_from_element (DomDomizable *base,
			         DomElement   *element)
{
	FacebookUser *self;
	DomElement *node;

	self = FACEBOOK_USER (base);

	for (node = element->first_child; node; node = node->next_sibling) {
		if (g_strcmp0 (node->tag_name, "uid") == 0) {
			_g_strset (&self->id, dom_element_get_inner_text (node));
		}
		else if (g_strcmp0 (node->tag_name, "name") == 0) {
			_g_strset (&self->username, dom_element_get_inner_text (node));
		}
	}
}
예제 #7
0
void
facebook_photo_set_original_format (FacebookPhoto *self,
				  const char  *value)
{
	_g_strset (&self->original_format, value);

	g_free (self->mime_type);
	self->mime_type = NULL;
	if (self->original_format != NULL)
		self->mime_type = g_strconcat ("image/", self->original_format, NULL);
}
예제 #8
0
static void
picasa_web_service_ask_authorization (WebService *base)
{
	PicasaWebService *self = PICASA_WEB_SERVICE (base);
	GtkWidget        *dialog;

	_g_strset (&self->priv->refresh_token, NULL);
	_g_strset (&self->priv->access_token, NULL);

	dialog = oauth_ask_authorization_dialog_new (picasa_web_service_get_authorization_url (self));
	gtk_window_set_default_size (GTK_WINDOW (dialog), 680, 580);
	_web_service_set_auth_dialog (WEB_SERVICE (self), GTK_DIALOG (dialog));

	g_signal_connect (OAUTH_ASK_AUTHORIZATION_DIALOG (dialog),
			  "loaded",
			  G_CALLBACK (ask_authorization_dialog_loaded_cb),
			  self);

	gtk_widget_show (dialog);
}
예제 #9
0
static FacebookImage *
facebook_image_copy (FacebookImage *source)
{
    FacebookImage *dest;

    dest = facebook_image_new ();
    _g_strset (&dest->source, source->source);
    dest->width = source->width;
    dest->height = source->height;

    return dest;
}
예제 #10
0
static void
ask_authorization_dialog_load_request_cb (OAuthAskAuthorizationDialog *dialog,
					  gpointer                     user_data)
{
	OAuthService *self = user_data;
	const char   *uri;

	uri = oauth_ask_authorization_dialog_get_uri (dialog);
	if (uri == NULL)
		return;

	if (g_str_has_prefix (uri, OAUTH_CALLBACK)) {
		const char *uri_data;
		GHashTable *data;
		gboolean    success = FALSE;

		uri_data = uri + strlen (OAUTH_CALLBACK "?");

		data = soup_form_decode (uri_data);
		_g_strset (&self->priv->token, g_hash_table_lookup (data, "oauth_token"));

		if (self->priv->token != NULL) {
			gtk_widget_hide (GTK_WIDGET (dialog));
			gth_task_dialog (GTH_TASK (self), FALSE, NULL);

			success = TRUE;
			_oauth_service_get_access_token (self,
							 g_hash_table_lookup (data, "oauth_verifier"),
							 gth_task_get_cancellable (GTH_TASK (self)),
							 get_access_token_ready_cb,
							 self);
		}

		if (! success)
			gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_CANCEL);

		g_hash_table_destroy (data);
	}
}
예제 #11
0
void
picasa_web_album_set_edit_url (PicasaWebAlbum *self,
			       const char     *value)
{
	_g_strset (&self->edit_url, value);
}
예제 #12
0
void
picasa_web_album_set_alternate_url (PicasaWebAlbum *self,
				    const char     *value)
{
	_g_strset (&self->alternate_url, value);
}
예제 #13
0
void
picasa_web_album_set_location (PicasaWebAlbum *self,
			       const char     *value)
{
	_g_strset (&self->location, value);
}
예제 #14
0
void
picasa_web_album_set_summary (PicasaWebAlbum *self,
			      const char     *value)
{
	_g_strset (&self->summary, value);
}
예제 #15
0
void
facebook_photo_set_title (FacebookPhoto *self,
			const char  *value)
{
	_g_strset (&self->title, value);
}
예제 #16
0
void
facebook_user_set_username (FacebookUser *self,
			    const char   *value)
{
	_g_strset (&self->username, value);
}
예제 #17
0
void
facebook_photo_set_url_o (FacebookPhoto *self,
			const char  *value)
{
	_g_strset (&self->url_o, value);
}
예제 #18
0
void
oauth_service_set_token_secret (OAuthService *self,
				const char   *token_secret)
{
	_g_strset (&self->priv->token_secret, token_secret);
}
예제 #19
0
void
oauth_service_set_token (OAuthService *self,
			 const char   *token)
{
	_g_strset (&self->priv->token, token);
}
예제 #20
0
void
picasa_web_album_set_keywords (PicasaWebAlbum *self,
			       const char     *value)
{
	_g_strset (&self->keywords, value);
}
예제 #21
0
void
facebook_photo_set_server (FacebookPhoto *self,
			 const char  *value)
{
	_g_strset (&self->server, value);
}
예제 #22
0
void
photobucket_album_set_name (PhotobucketAlbum *self,
			    const char       *value)
{
	_g_strset (&self->name, value);
}
예제 #23
0
void
picasa_web_album_set_id (PicasaWebAlbum *self,
			 const char     *value)
{
	_g_strset (&self->id, value);
}
예제 #24
0
static gboolean
facebook_photo_deserialize_property (JsonSerializable *serializable,
                                     const gchar      *property_name,
                                     GValue           *value,
                                     GParamSpec       *pspec,
                                     JsonNode         *property_node)
{
    FacebookPhoto *self = FACEBOOK_PHOTO (serializable);

    if (pspec->value_type == GTH_TYPE_DATETIME) {
        GTimeVal timeval;

        if (g_time_val_from_iso8601 (json_node_get_string (property_node), &timeval)) {
            GthDateTime *datetime;

            datetime = gth_datetime_new ();
            gth_datetime_from_timeval (datetime, &timeval);
            g_object_set (self, property_name, datetime, NULL);

            gth_datetime_free (datetime);

            return TRUE;
        }

        return FALSE;
    }

    if (pspec->value_type == FACEBOOK_TYPE_IMAGE_LIST) {
        GList     *images = NULL;
        JsonArray *array;
        int        i;

        array = json_node_get_array (property_node);
        for (i = 0; i < json_array_get_length (array); i++) {
            JsonObject *image_obj;

            image_obj = json_array_get_object_element (array, i);
            if (image_obj != NULL) {
                FacebookImage *image;

                image = facebook_image_new ();
                _g_strset (&image->source, json_object_get_string_member (image_obj, "source"));
                image->width = json_object_get_int_member (image_obj, "width");
                image->height = json_object_get_int_member (image_obj, "height");

                images = g_list_prepend (images, image);
            }
        }

        images = g_list_reverse (images);
        g_object_set (self, property_name, images, NULL);

        facebook_image_list_free (images);

        return TRUE;
    }

    return json_serializable_default_deserialize_property (serializable,
            property_name,
            value,
            pspec,
            property_node);
}
예제 #25
0
void
picasa_web_album_set_title (PicasaWebAlbum *self,
			    const char     *value)
{
	_g_strset (&self->title, value);
}
예제 #26
0
void
facebook_user_set_id (FacebookUser *self,
		      const char   *value)
{
	_g_strset (&self->id, value);
}
예제 #27
0
void
flickr_account_set_accountname (FlickrAccount *self,
				const char    *value)
{
	_g_strset (&self->accountname, value);
}
예제 #28
0
void
picasa_web_album_set_etag (PicasaWebAlbum *self,
			   const char     *value)
{
	_g_strset (&self->etag, value);
}
예제 #29
0
void
facebook_photo_set_id (FacebookPhoto *self,
		     const char  *value)
{
	_g_strset (&self->id, value);
}