Add function ag_chart_save_to_db() to save the chart to the db
This commit is contained in:
		| @@ -10,6 +10,7 @@ | ||||
| #include <locale.h> | ||||
| #include <math.h> | ||||
|  | ||||
| #include "ag-db.h" | ||||
| #include "ag-chart.h" | ||||
|  | ||||
| typedef struct _AgChartPrivate { | ||||
| @@ -1538,3 +1539,74 @@ const gchar *ag_chart_get_note(AgChart *chart) | ||||
|     return priv->note; | ||||
| } | ||||
|  | ||||
| gboolean | ||||
| ag_chart_save_to_db(AgChart *chart, AgDbSave **old_save, GtkWidget *window) | ||||
| { | ||||
|     GsweCoordinates *coords; | ||||
|     AgDb            *db        = ag_db_get(); | ||||
|     AgChartPrivate  *priv      = ag_chart_get_instance_private(chart); | ||||
|     AgDbSave        *save_data = g_new0(AgDbSave, 1); | ||||
|     GError          *err       = NULL; | ||||
|     GsweTimestamp   *timestamp = gswe_moment_get_timestamp(GSWE_MOMENT(chart)); | ||||
|     GEnumClass      *house_system_class; | ||||
|     GEnumValue      *house_system_enum; | ||||
|     gboolean        ret; | ||||
|  | ||||
|     if (old_save && *old_save) { | ||||
|         save_data->db_id = (*old_save)->db_id; | ||||
|     } else { | ||||
|         save_data->db_id = -1; | ||||
|     } | ||||
|  | ||||
|     save_data->name         = g_strdup(priv->name); | ||||
|     save_data->country      = g_strdup(priv->country); | ||||
|     save_data->city         = g_strdup(priv->city); | ||||
|     coords                  = gswe_moment_get_coordinates(GSWE_MOMENT(chart)); | ||||
|     save_data->longitude    = coords->longitude; | ||||
|     save_data->latitude     = coords->latitude; | ||||
|     save_data->altitude     = coords->altitude; | ||||
|     g_free(coords); | ||||
|     save_data->year         = gswe_timestamp_get_gregorian_year( | ||||
|             timestamp, | ||||
|             NULL | ||||
|         ); | ||||
|     save_data->month        = gswe_timestamp_get_gregorian_month( | ||||
|             timestamp, | ||||
|             NULL | ||||
|         ); | ||||
|     save_data->day          = gswe_timestamp_get_gregorian_day(timestamp, NULL); | ||||
|     save_data->hour         = gswe_timestamp_get_gregorian_hour( | ||||
|             timestamp, | ||||
|             NULL | ||||
|         ); | ||||
|     save_data->minute       = gswe_timestamp_get_gregorian_minute( | ||||
|             timestamp, | ||||
|             NULL | ||||
|         ); | ||||
|     save_data->second       = gswe_timestamp_get_gregorian_second( | ||||
|             timestamp, | ||||
|             NULL | ||||
|         ); | ||||
|     save_data->timezone     = gswe_timestamp_get_gregorian_timezone(timestamp); | ||||
|     house_system_class      = g_type_class_ref(GSWE_TYPE_HOUSE_SYSTEM); | ||||
|     house_system_enum       = g_enum_get_value( | ||||
|             house_system_class, | ||||
|             gswe_moment_get_house_system(GSWE_MOMENT(chart)) | ||||
|         ); | ||||
|     save_data->house_system = g_strdup(house_system_enum->value_nick); | ||||
|     g_type_class_unref(house_system_class); | ||||
|     save_data->note         = g_strdup(priv->note); | ||||
|  | ||||
|     if ( | ||||
|             (!old_save || !*old_save) | ||||
|             || !ag_db_save_identical(*old_save, save_data) | ||||
|         ) { | ||||
|         ret = ag_db_save_chart(db, save_data, window, &err); | ||||
|     } else { | ||||
|         ret = TRUE; | ||||
|     } | ||||
|  | ||||
|     ag_db_save_data_free(save_data); | ||||
|  | ||||
|     return ret; | ||||
| } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
| #define __AG_CHART_H__ | ||||
|  | ||||
| #include <glib-object.h> | ||||
| #include <gtk/gtk.h> | ||||
| #include <swe-glib.h> | ||||
|  | ||||
| #include "ag-db.h" | ||||
| @@ -85,6 +86,10 @@ void ag_chart_set_note(AgChart *chart, const gchar *note); | ||||
|  | ||||
| const gchar *ag_chart_get_note(AgChart *chart); | ||||
|  | ||||
| gboolean ag_chart_save_to_db(AgChart *chart, | ||||
|                              AgDbSave **old_save, | ||||
|                              GtkWidget *window); | ||||
|  | ||||
| #define AG_CHART_ERROR (ag_chart_error_quark()) | ||||
| GQuark ag_chart_error_quark(void); | ||||
|  | ||||
|   | ||||
| @@ -178,30 +178,12 @@ ag_window_save_action(GSimpleAction *action, | ||||
|                       GVariant      *parameter, | ||||
|                       gpointer      user_data) | ||||
| { | ||||
|     gchar           *uri; | ||||
|     AgWindow        *window = AG_WINDOW(user_data); | ||||
|     GError          *err    = NULL; | ||||
|     AgWindowPrivate *priv   = ag_window_get_instance_private(window); | ||||
|  | ||||
|     recalculate_chart(window); | ||||
|     uri = ag_window_get_uri(window); | ||||
|  | ||||
|     if (uri != NULL) { | ||||
|         GFile *file = g_file_new_for_uri(uri); | ||||
|         g_free(uri); | ||||
|  | ||||
|         ag_chart_save_to_file(priv->chart, file, &err); | ||||
|     } else { | ||||
|         ag_window_save_as(window, &err); | ||||
|     } | ||||
|  | ||||
|     if (err) { | ||||
|         ag_app_message_dialog( | ||||
|                 GTK_WIDGET(window), | ||||
|                 GTK_MESSAGE_ERROR, | ||||
|                 "%s", err->message | ||||
|             ); | ||||
|     } | ||||
|     ag_chart_save_to_db(priv->chart, &(priv->saved_data), GTK_WIDGET(window)); | ||||
| } | ||||
|  | ||||
| static void | ||||
|   | ||||
		Reference in New Issue
	
	Block a user