static void audit_exit (GvaProcess *process, gint status, GvaAuditData *data) { gchar *sql; GError *error = NULL; if (process->error != NULL) return; gva_db_transaction_begin (&error); gva_error_handle (&error); sql = g_strdup_printf ("UPDATE game SET %s=NULL", data->column); gva_db_execute (sql, &error); gva_error_handle (&error); g_free (sql); g_hash_table_foreach ( data->status_index, (GHFunc) audit_exit_foreach, data); gva_db_transaction_commit (&error); gva_error_handle (&error); }
/** * gva_play_back_window_hide_cb: * @window: the "Recorded Games" window * * Handler for #GtkWidget::hide signals to the "Recorded Games" window. * * Saves the contents of the "Recorded Games" tree view to the game database. **/ void gva_play_back_window_hide_cb (GtkWindow *window) { GtkTreeView *view; GtkTreeModel *model; GtkTreeIter iter; sqlite3_stmt *stmt; gboolean valid; GError *error = NULL; view = GTK_TREE_VIEW (GVA_WIDGET_PLAY_BACK_TREE_VIEW); model = gtk_tree_view_get_model (view); valid = gtk_tree_model_get_iter_first (model, &iter); if (!gva_db_transaction_begin (&error)) goto exit; if (!gva_db_execute (SQL_DELETE_PLAY_BACK, &error)) goto rollback; if (!gva_db_prepare (SQL_INSERT_PLAY_BACK, &stmt, &error)) goto rollback; while (valid) { gchar *comment; gchar *name; gchar *utf8; gint64 inode; gint index; gint errcode; gtk_tree_model_get ( model, &iter, GVA_GAME_STORE_COLUMN_NAME, &name, GVA_GAME_STORE_COLUMN_INODE, &inode, GVA_GAME_STORE_COLUMN_COMMENT, &comment, -1); index = sqlite3_bind_parameter_index (stmt, "@name"); utf8 = g_locale_to_utf8 (name, -1, NULL, NULL, &error); gva_error_handle (&error); if (utf8 == NULL) { g_free (name); g_free (comment); sqlite3_finalize (stmt); goto rollback; } errcode = sqlite3_bind_text (stmt, index, utf8, -1, g_free); if (errcode != SQLITE_OK) { g_free (name); g_free (comment); sqlite3_finalize (stmt); goto rollback; } index = sqlite3_bind_parameter_index (stmt, "@inode"); errcode = sqlite3_bind_int64 (stmt, index, inode); if (errcode != SQLITE_OK) { g_free (name); g_free (comment); sqlite3_finalize (stmt); goto rollback; } index = sqlite3_bind_parameter_index (stmt, "@comment"); utf8 = g_locale_to_utf8 (comment, -1, NULL, NULL, &error); gva_error_handle (&error); if (utf8 == NULL) { g_free (name); g_free (comment); sqlite3_finalize (stmt); goto rollback; } errcode = sqlite3_bind_text (stmt, index, utf8, -1, g_free); if (errcode != SQLITE_OK) { g_free (name); g_free (comment); sqlite3_finalize (stmt); goto rollback; } g_free (name); g_free (comment); if (sqlite3_step (stmt) != SQLITE_DONE) { gva_db_set_error (&error, 0, NULL); gva_error_handle (&error); sqlite3_finalize (stmt); goto rollback; } sqlite3_reset (stmt); sqlite3_clear_bindings (stmt); valid = gtk_tree_model_iter_next (model, &iter); } sqlite3_finalize (stmt); if (!gva_db_transaction_commit (&error)) goto rollback; goto exit; rollback: gva_error_handle (&error); gva_db_transaction_rollback (&error); exit: gva_error_handle (&error); }