diff --git a/src/ag-app.c b/src/ag-app.c index 0c7961e..7bcae22 100644 --- a/src/ag-app.c +++ b/src/ag-app.c @@ -133,14 +133,31 @@ quit_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data) } static void -ag_app_import_chart(AgApp *app, GFile *file) +ag_app_import_file(AgApp *app, GFile *file, AgAppImportType type) { GtkWidget *window; AgChart *chart; GError *err = NULL; - if ((chart = ag_chart_load_from_file(file, &err)) == NULL) { - g_print("Error: '%s'\n", err->message); + switch (type) { + case AG_APP_IMPORT_AGC: + chart = ag_chart_load_from_agc(file, &err); + + break; + + default: + g_error("Unknown import type!"); + + break; + } + + if (chart == NULL) { + ag_app_message_dialog( + NULL, + GTK_MESSAGE_ERROR, + "Error while loading: %s", + err->message + ); return; } @@ -155,9 +172,19 @@ ag_app_import_chart(AgApp *app, GFile *file) static void ag_app_import_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data) { - gint response; - GtkWidget *fs; - GSList *filenames = NULL; + gint response; + GtkWidget *fs; + GtkFileFilter *filter; + GSList *filenames = NULL; + const gchar *target_type = g_variant_get_string(parameter, NULL); + AgAppImportType type = AG_APP_IMPORT_NONE; + + if (strncmp("agc", target_type, 3) == 0) { + type = AG_APP_IMPORT_AGC; + filter = filter_chart; + } else { + g_error("Unknown import type!"); + } fs = gtk_file_chooser_dialog_new(_("Select charts"), NULL, @@ -166,8 +193,8 @@ ag_app_import_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data) _("_Import"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fs), filter_all); - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fs), filter_chart); - gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fs), filter_chart); + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fs), filter); + gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fs), filter); gtk_dialog_set_default_response(GTK_DIALOG(fs), GTK_RESPONSE_ACCEPT); gtk_file_chooser_set_select_multiple(GTK_FILE_CHOOSER(fs), TRUE); gtk_file_chooser_set_local_only(GTK_FILE_CHOOSER(fs), FALSE); @@ -190,7 +217,7 @@ ag_app_import_cb(GSimpleAction *action, GVariant *parameter, gpointer user_data) } file = g_file_new_for_commandline_arg(data); - ag_app_import_chart(AG_APP(user_data), file); + ag_app_import_file(AG_APP(user_data), file, type); } } @@ -250,7 +277,7 @@ static GActionEntry app_entries[] = { { "about", about_cb, NULL, NULL, NULL }, { "quit", quit_cb, NULL, NULL, NULL }, { "raise", raise_cb, NULL, NULL, NULL }, - { "import", ag_app_import_cb, NULL, NULL, NULL }, + { "import", ag_app_import_cb, "s", NULL, NULL }, { "help", help_cb, NULL, NULL, NULL }, }; @@ -335,7 +362,7 @@ ag_app_import(GApplication *gapp, gint i; for (i = 0; i < n_files; i++) { - ag_app_import_chart(AG_APP(gapp), files[i]); + ag_app_import_file(AG_APP(gapp), files[i], AG_APP_IMPORT_AGC); } } diff --git a/src/ag-app.h b/src/ag-app.h index 6b55258..4f34ce5 100644 --- a/src/ag-app.h +++ b/src/ag-app.h @@ -7,6 +7,11 @@ G_BEGIN_DECLS +typedef enum { + AG_APP_IMPORT_NONE, + AG_APP_IMPORT_AGC, +} AgAppImportType; + #define AG_TYPE_APP (ag_app_get_type()) #define AG_APP(o) (G_TYPE_CHECK_INSTANCE_CAST((o), \ AG_TYPE_APP, \ diff --git a/src/ag-chart.c b/src/ag-chart.c index 1ff2a41..3f62156 100644 --- a/src/ag-chart.c +++ b/src/ag-chart.c @@ -577,7 +577,7 @@ get_by_xpath(xmlXPathContextPtr xpath_context, } AgChart * -ag_chart_load_from_file(GFile *file, GError **err) +ag_chart_load_from_agc(GFile *file, GError **err) { AgChart *chart = NULL; gchar *uri, diff --git a/src/ag-chart.h b/src/ag-chart.h index 735f546..79dd8ea 100644 --- a/src/ag-chart.h +++ b/src/ag-chart.h @@ -48,8 +48,8 @@ AgChart *ag_chart_new_full(GsweTimestamp *timestamp, gdouble altitude, GsweHouseSystem house_system); -AgChart *ag_chart_load_from_file(GFile *file, - GError **err); +AgChart *ag_chart_load_from_agc(GFile *file, + GError **err); AgChart *ag_chart_new_from_db_save(AgDbSave *save_data, GError **err); diff --git a/src/resources/ui/astrognome.ui b/src/resources/ui/astrognome.ui index b862b47..1ac37ec 100644 --- a/src/resources/ui/astrognome.ui +++ b/src/resources/ui/astrognome.ui @@ -11,6 +11,7 @@ Import app.import + agc <Primary>o