static void list_albums_ready_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { DialogData *data = user_data; PicasaWebService *picasaweb = PICASA_WEB_SERVICE (source_object); GError *error = NULL; _g_object_list_unref (data->albums); data->albums = picasa_web_service_list_albums_finish (picasaweb, result, &error); if (error != NULL) { gth_task_dialog (GTH_TASK (data->service), TRUE, NULL); _gtk_error_dialog_from_gerror_show (GTK_WINDOW (data->browser), _("Could not get the album list"), error); g_clear_error (&error); gtk_dialog_response (GTK_DIALOG (data->dialog), GTK_RESPONSE_DELETE_EVENT); return; } update_album_list (data); gth_task_dialog (GTH_TASK (data->service), TRUE, NULL); gtk_window_set_transient_for (GTK_WINDOW (data->dialog), GTK_WINDOW (data->browser)); gtk_window_set_modal (GTK_WINDOW (data->dialog), FALSE); gtk_window_present (GTK_WINDOW (data->dialog)); }
static void picasa_web_service_finalize (GObject *object) { PicasaWebService *self = PICASA_WEB_SERVICE (object); post_photos_data_free (self->priv->post_photos); g_free (self->priv->access_token); g_free (self->priv->refresh_token); G_OBJECT_CLASS (picasa_web_service_parent_class)->finalize (object); }
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); }
static void post_photos_ready_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { DialogData *data = user_data; PicasaWebService *picasaweb = PICASA_WEB_SERVICE (source_object); GError *error = NULL; if (! picasa_web_service_post_photos_finish (picasaweb, result, &error)) { gth_task_dialog (GTH_TASK (data->service), TRUE, NULL); _gtk_error_dialog_from_gerror_show (GTK_WINDOW (data->browser), _("Could not upload the files"), error); g_clear_error (&error); return; } export_completed_with_success (data); }
static void update_album_list (DialogData *data) { GtkTreeIter iter; GList *scan; char *free_space; free_space = g_format_size (picasa_web_service_get_free_space (PICASA_WEB_SERVICE (data->service))); gtk_label_set_text (GTK_LABEL (GET_WIDGET ("free_space_label")), free_space); g_free (free_space); gtk_list_store_clear (GTK_LIST_STORE (GET_WIDGET ("album_liststore"))); for (scan = data->albums; scan; scan = scan->next) { PicasaWebAlbum *album = scan->data; char *n_photos_remaining; char *used_bytes; n_photos_remaining = g_strdup_printf ("%d", album->n_photos_remaining); used_bytes = g_format_size (album->used_bytes); gtk_list_store_append (GTK_LIST_STORE (GET_WIDGET ("album_liststore")), &iter); gtk_list_store_set (GTK_LIST_STORE (GET_WIDGET ("album_liststore")), &iter, ALBUM_DATA_COLUMN, album, ALBUM_ICON_COLUMN, "file-catalog", ALBUM_NAME_COLUMN, album->title, ALBUM_REMAINING_IMAGES_COLUMN, n_photos_remaining, ALBUM_USED_BYTES_COLUMN, used_bytes, -1); if (album->access == PICASA_WEB_ACCESS_PRIVATE) gtk_list_store_set (GTK_LIST_STORE (GET_WIDGET ("album_liststore")), &iter, ALBUM_EMBLEM_COLUMN, "emblem-readonly", -1); g_free (used_bytes); g_free (n_photos_remaining); } gtk_dialog_set_response_sensitive (GTK_DIALOG (data->dialog), GTK_RESPONSE_OK, FALSE); }
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); }
static void create_album_ready_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { DialogData *data = user_data; PicasaWebService *picasaweb = PICASA_WEB_SERVICE (source_object); PicasaWebAlbum *album; GError *error = NULL; album = picasa_web_service_create_album_finish (picasaweb, result, &error); if (error != NULL) { gth_task_dialog (GTH_TASK (data->service), TRUE, NULL); _gtk_error_dialog_from_gerror_show (GTK_WINDOW (data->browser), _("Could not create the album"), error); g_clear_error (&error); return; } data->albums = g_list_append (data->albums, album); update_album_list (data); }
static void list_photos_ready_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { DialogData *data = user_data; PicasaWebService *picasaweb = PICASA_WEB_SERVICE (source_object); GError *error = NULL; GList *list; GList *scan; gth_task_dialog (GTH_TASK (data->service), TRUE, NULL); _g_object_list_unref (data->photos); data->photos = picasa_web_service_list_albums_finish (picasaweb, result, &error); if (error != NULL) { gth_task_dialog (GTH_TASK (data->service), TRUE, NULL); _gtk_error_dialog_from_gerror_show (GTK_WINDOW (data->browser), _("Could not get the photo list"), error); g_clear_error (&error); gtk_widget_destroy (data->dialog); return; } list = NULL; for (scan = data->photos; scan; scan = scan->next) { PicasaWebPhoto *photo = scan->data; GthFileData *file_data; file_data = gth_file_data_new_for_uri (photo->uri, photo->mime_type); g_file_info_set_file_type (file_data->info, G_FILE_TYPE_REGULAR); g_file_info_set_size (file_data->info, photo->size); g_file_info_set_attribute_object (file_data->info, "gphoto::object", G_OBJECT (photo)); list = g_list_prepend (list, file_data); } gth_file_list_set_files (GTH_FILE_LIST (data->file_list), list); update_selection_status (data); gtk_dialog_set_response_sensitive (GTK_DIALOG (data->dialog), GTK_RESPONSE_OK, TRUE); _g_object_list_unref (list); }
static void list_albums_ready_cb (GObject *source_object, GAsyncResult *result, gpointer user_data) { DialogData *data = user_data; PicasaWebService *picasaweb = PICASA_WEB_SERVICE (source_object); GError *error = NULL; _g_object_list_unref (data->albums); data->albums = picasa_web_service_list_albums_finish (picasaweb, result, &error); if (error != NULL) { if (data->conn != NULL) gth_task_dialog (GTH_TASK (data->conn), TRUE); _gtk_error_dialog_from_gerror_show (GTK_WINDOW (data->browser), _("Could not get the album list"), &error); gtk_dialog_response (GTK_DIALOG (data->dialog), GTK_RESPONSE_DELETE_EVENT); return; } _g_object_unref (data->user); data->user = g_object_ref (picasa_web_service_get_user (picasaweb)); show_export_dialog (data); }