void *get_params(struct dt_imageio_module_storage_t *self) { dt_storage_facebook_gui_data_t *ui = (dt_storage_facebook_gui_data_t *)self->gui_data; if(!ui) return NULL; // gui not initialized, CLI mode if(ui->facebook_api == NULL || ui->facebook_api->token == NULL) { return NULL; } dt_storage_facebook_param_t *p = (dt_storage_facebook_param_t *)g_malloc0(sizeof(dt_storage_facebook_param_t)); p->hash = 1; p->facebook_ctx = ui->facebook_api; int index = gtk_combo_box_get_active(ui->comboBox_album); if(index < 0) { g_free(p); return NULL; } else if(index == 0) { p->facebook_ctx->album_id = NULL; p->facebook_ctx->album_title = g_strdup(gtk_entry_get_text(ui->entry_album_title)); p->facebook_ctx->album_summary = g_strdup(gtk_entry_get_text(ui->entry_album_summary)); GtkTreeModel *model = gtk_combo_box_get_model(ui->comboBox_privacy); GtkTreeIter iter; int permission = -1; gtk_combo_box_get_active_iter(ui->comboBox_privacy, &iter); gtk_tree_model_get(model, &iter, COMBO_PRIVACY_MODEL_VAL_COL, &permission, -1); p->facebook_ctx->album_permission = permission; } else { GtkTreeModel *model = gtk_combo_box_get_model(ui->comboBox_album); GtkTreeIter iter; gchar *albumid = NULL; gtk_combo_box_get_active_iter(ui->comboBox_album, &iter); gtk_tree_model_get(model, &iter, COMBO_ALBUM_MODEL_ID_COL, &albumid, -1); p->facebook_ctx->album_id = g_strdup(albumid); } // recreate a new context for further usages ui->facebook_api = fb_api_init(); ui->facebook_api->token = g_strdup(p->facebook_ctx->token); return p; }
static void ui_authenticate(dt_storage_facebook_gui_data_t *ui) { if(ui->facebook_api == NULL) { ui->facebook_api = fb_api_init(); } FBContext *ctx = ui->facebook_api; gboolean mustsaveaccount = FALSE; gchar *uiselectedaccounttoken = NULL; GtkTreeIter iter; gtk_combo_box_get_active_iter(ui->comboBox_username, &iter); GtkTreeModel *accountModel = gtk_combo_box_get_model(ui->comboBox_username); gtk_tree_model_get(accountModel, &iter, 1, &uiselectedaccounttoken, -1); gtk_button_set_label(ui->button_login, _("login")); gtk_widget_set_sensitive(GTK_WIDGET(ui->comboBox_album), FALSE); g_free(ctx->token); ctx->token = g_strdup(uiselectedaccounttoken); // check selected token if we already have one if(ctx->token != NULL && !fb_test_auth_token(ctx)) { g_free(ctx->token); ctx->token = NULL; } if(ctx->token == NULL) { mustsaveaccount = TRUE; #ifdef HAVE_HTTP_SERVER // try to get the token from the callback URL if(facebook_get_user_auth_token_from_server(ui)) return; #endif // if we reached this point we either have no http server support // or couldn't start it (no free port, ...) ctx->token = facebook_get_user_auth_token_from_url(ui); // ask user to log in } ui_authenticate_finish(ui, mustsaveaccount); }
static gboolean ui_authenticate(dt_storage_facebook_gui_data_t *ui) { if (ui->facebook_api == NULL) { ui->facebook_api = fb_api_init(); } FBContext *ctx = ui->facebook_api; gboolean mustsaveaccount = FALSE; gchar *uiselectedaccounttoken = NULL; GtkTreeIter iter; gtk_combo_box_get_active_iter(ui->comboBox_username, &iter); GtkTreeModel *accountModel = gtk_combo_box_get_model(ui->comboBox_username); gtk_tree_model_get(accountModel, &iter, 1, &uiselectedaccounttoken, -1); if (ctx->token != NULL) { g_free(ctx->token); ctx->token = NULL; } if (uiselectedaccounttoken != NULL) { ctx->token = g_strdup(uiselectedaccounttoken); } //check selected token if we already have one if (ctx->token != NULL && !fb_test_auth_token(ctx)) { g_free(ctx->token); ctx->token = NULL; } if(ctx->token == NULL) { mustsaveaccount = TRUE; ctx->token = facebook_get_user_auth_token(ui);//ask user to log in } if (ctx->token == NULL) { return FALSE; } else { if (mustsaveaccount) { FBAccountInfo *accountinfo = fb_get_account_info(ui->facebook_api); g_return_val_if_fail(accountinfo != NULL, FALSE); save_account_info(ui, accountinfo); //add account to user list and select it GtkListStore *model = GTK_LIST_STORE(gtk_combo_box_get_model(ui->comboBox_username)); GtkTreeIter iter; gboolean r; gchar *uid; gboolean updated = FALSE; for (r = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(model), &iter); r == TRUE; r = gtk_tree_model_iter_next (GTK_TREE_MODEL(model), &iter)) { gtk_tree_model_get (GTK_TREE_MODEL(model), &iter, COMBO_USER_MODEL_ID_COL, &uid, -1); if (g_strcmp0(uid, accountinfo->id) == 0) { gtk_list_store_set(model, &iter, COMBO_USER_MODEL_NAME_COL, accountinfo->username, COMBO_USER_MODEL_TOKEN_COL, accountinfo->token, -1); updated = TRUE; break; } } if (!updated) { gtk_list_store_append(model, &iter); gtk_list_store_set(model, &iter, COMBO_USER_MODEL_NAME_COL, accountinfo->username, COMBO_USER_MODEL_TOKEN_COL, accountinfo->token, COMBO_USER_MODEL_ID_COL, accountinfo->id, -1); } gtk_combo_box_set_active_iter(ui->comboBox_username, &iter); //we have to re-set the current token here since ui_combo_username_changed is called //on gtk_combo_box_set_active_iter (and thus is resetting the active token) ctx->token = g_strdup(accountinfo->token); fb_account_info_destroy(accountinfo); } return TRUE; } }
/* construct widget above */ void gui_init(struct dt_imageio_module_storage_t *self) { self->gui_data = g_malloc0(sizeof(dt_storage_facebook_gui_data_t)); dt_storage_facebook_gui_data_t *ui = self->gui_data; ui->facebook_api = fb_api_init(); self->widget = gtk_vbox_new(FALSE, 0); //create labels ui->label_album_title = GTK_LABEL( gtk_label_new( _("title") ) ); ui->label_album_summary = GTK_LABEL( gtk_label_new( _("summary") ) ); ui->label_album_privacy = GTK_LABEL(gtk_label_new(_("privacy"))); ui->label_status = GTK_LABEL(gtk_label_new(NULL)); gtk_misc_set_alignment(GTK_MISC(ui->label_album_title), 0.0, 0.5); gtk_misc_set_alignment(GTK_MISC(ui->label_album_summary), 0.0, 0.5); gtk_misc_set_alignment(GTK_MISC(ui->label_album_privacy), 0.0, 0.5); //create entries GtkListStore *model_username = gtk_list_store_new (COMBO_USER_MODEL_NB_COL, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); //text, token, id ui->comboBox_username = GTK_COMBO_BOX(gtk_combo_box_new_with_model(GTK_TREE_MODEL(model_username))); GtkCellRenderer *p_cell = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (ui->comboBox_username), p_cell, FALSE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (ui->comboBox_username), p_cell, "text", 0, NULL); ui->entry_album_title = GTK_ENTRY(gtk_entry_new()); ui->entry_album_summary = GTK_ENTRY(gtk_entry_new()); dt_gui_key_accel_block_on_focus_connect(GTK_WIDGET(ui->comboBox_username)); dt_gui_key_accel_block_on_focus_connect(GTK_WIDGET(ui->entry_album_title)); dt_gui_key_accel_block_on_focus_connect(GTK_WIDGET(ui->entry_album_summary)); //retrieve saved accounts ui_refresh_users(ui); //////// album list ///////// GtkWidget *albumlist = gtk_hbox_new(FALSE, 0); GtkListStore *model_album = gtk_list_store_new (COMBO_ALBUM_MODEL_NB_COL, G_TYPE_STRING, G_TYPE_STRING); //name, id ui->comboBox_album = GTK_COMBO_BOX(gtk_combo_box_new_with_model(GTK_TREE_MODEL(model_album))); p_cell = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT (ui->comboBox_album), p_cell, FALSE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (ui->comboBox_album), p_cell, "text", 0, NULL); gtk_widget_set_sensitive(GTK_WIDGET(ui->comboBox_album), FALSE); gtk_combo_box_set_row_separator_func(ui->comboBox_album,combobox_separator,ui->comboBox_album,NULL); gtk_box_pack_start(GTK_BOX(albumlist), GTK_WIDGET(ui->comboBox_album), TRUE, TRUE, 0); ui->comboBox_privacy= GTK_COMBO_BOX(gtk_combo_box_text_new()); GtkListStore *list_store = gtk_list_store_new (COMBO_ALBUM_MODEL_NB_COL, G_TYPE_STRING, G_TYPE_INT); GtkTreeIter iter; gtk_list_store_append(list_store, &iter); gtk_list_store_set(list_store, &iter, COMBO_PRIVACY_MODEL_NAME_COL, _("only me"), COMBO_PRIVACY_MODEL_VAL_COL, FBALBUM_PRIVACY_SELF, -1); gtk_list_store_append(list_store, &iter); gtk_list_store_set(list_store, &iter, COMBO_PRIVACY_MODEL_NAME_COL, _("friends"), COMBO_PRIVACY_MODEL_VAL_COL, FBALBUM_PRIVACY_ALL_FRIENDS, -1); gtk_list_store_append(list_store, &iter); gtk_list_store_set(list_store, &iter, COMBO_PRIVACY_MODEL_NAME_COL, _("public"), COMBO_PRIVACY_MODEL_VAL_COL, FBALBUM_PRIVACY_EVERYONE, -1); gtk_list_store_append(list_store, &iter); gtk_list_store_set(list_store, &iter, COMBO_PRIVACY_MODEL_NAME_COL, _("friends of friends"), COMBO_PRIVACY_MODEL_VAL_COL, FBALBUM_PRIVACY_FRIENDS_OF_FRIENDS, -1); gtk_combo_box_set_model(ui->comboBox_privacy, GTK_TREE_MODEL(list_store)); gtk_combo_box_set_active(GTK_COMBO_BOX(ui->comboBox_privacy), 1); // Set default permission to private ui->button_login = GTK_BUTTON(gtk_button_new_with_label(_("login"))); ui->connected = FALSE; //pack the ui ////the auth box GtkWidget *hbox_auth = gtk_hbox_new(FALSE,5); GtkWidget *vbox_auth_labels=gtk_vbox_new(FALSE,0); GtkWidget *vbox_auth_fields=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(hbox_auth), vbox_auth_labels, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(hbox_auth), vbox_auth_fields, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(hbox_auth), TRUE, FALSE, 2); gtk_box_pack_start(GTK_BOX(vbox_auth_fields), GTK_WIDGET(ui->comboBox_username), TRUE, FALSE, 2); gtk_box_pack_start(GTK_BOX(vbox_auth_labels), GTK_WIDGET(gtk_label_new("")), TRUE, TRUE, 2); gtk_box_pack_start(GTK_BOX(vbox_auth_fields), GTK_WIDGET(ui->button_login), TRUE, FALSE, 2); gtk_box_pack_start(GTK_BOX(vbox_auth_fields), GTK_WIDGET(albumlist), TRUE, FALSE, 2); ////the album creation box ui->hbox_album = GTK_BOX(gtk_hbox_new(FALSE,5)); gtk_widget_set_no_show_all(GTK_WIDGET(ui->hbox_album), TRUE); //hide it by default GtkWidget *vbox_album_labels=gtk_vbox_new(FALSE,0); GtkWidget *vbox_album_fields=gtk_vbox_new(FALSE,0); gtk_box_pack_start(GTK_BOX(self->widget), GTK_WIDGET(ui->hbox_album), TRUE, FALSE, 5); gtk_box_pack_start(GTK_BOX(ui->hbox_album), vbox_album_labels, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(ui->hbox_album), vbox_album_fields, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_album_labels), GTK_WIDGET(ui->label_album_title), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_album_fields), GTK_WIDGET(ui->entry_album_title), TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_album_labels), GTK_WIDGET(ui->label_album_summary), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_album_fields), GTK_WIDGET(ui->entry_album_summary), TRUE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox_album_labels), GTK_WIDGET(ui->label_album_privacy), TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox_album_fields), GTK_WIDGET(ui->comboBox_privacy), TRUE, FALSE, 0); //connect buttons to signals g_signal_connect(G_OBJECT(ui->button_login), "clicked", G_CALLBACK(ui_login_clicked), (gpointer)ui); g_signal_connect(G_OBJECT(ui->comboBox_username), "changed", G_CALLBACK(ui_combo_username_changed), (gpointer)ui); g_signal_connect(G_OBJECT(ui->comboBox_album), "changed", G_CALLBACK(ui_combo_album_changed), (gpointer)ui); g_object_unref(model_username); g_object_unref(model_album); g_object_unref(list_store); }