* viking -- GPS Data and Topo Analyzer, Explorer, and Manager
*
* Copyright (C) 2003-2005, Evan Battaglia <gtoevan@gmx.net>
+ * Copyright (C) 2012, Guilhem Bonnefille <guilhem.bonnefille@gmail.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
}
}
else if ( is_gpx_file || check_magic ( f, GPX_MAGIC ) ) {
- a_gpx_read_file ( VIK_TRW_LAYER(vtl), f );
+ success = a_gpx_read_file ( VIK_TRW_LAYER(vtl), f );
+ if ( ! success ) {
+ // free up layer
+ g_object_unref ( vtl );
+ xfclose(f);
+ return LOAD_TYPE_GPX_FAILURE;
+ }
}
else
success = a_gpspoint_read_file ( VIK_TRW_LAYER(vtl), f );
return FALSE;
}
-gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t file_type, const gchar *trackname )
+gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t file_type, VikTrack *trk )
{
FILE *f = g_fopen ( filename, "w" );
if ( f )
{
- if (trackname) {
- VikTrack *vt = vik_trw_layer_get_track ( vtl, trackname );
+ if ( trk ) {
switch ( file_type ) {
case FILE_TYPE_GPX:
- a_gpx_write_track_file ( trackname, vt, f );
+ a_gpx_write_track_file ( trk, f );
break;
default:
g_critical("Houston, we've had a problem. file_type=%d", file_type);
case FILE_TYPE_KML:
fclose ( f );
f = NULL;
- return a_babel_convert_to ( vtl, "-o kml", filename, NULL, NULL );
- break;
+ switch ( a_vik_get_kml_export_units () ) {
+ case VIK_KML_EXPORT_UNITS_STATUTE:
+ return a_babel_convert_to ( vtl, "-o kml", filename, NULL, NULL );
+ break;
+ case VIK_KML_EXPORT_UNITS_NAUTICAL:
+ return a_babel_convert_to ( vtl, "-o kml,units=n", filename, NULL, NULL );
+ break;
+ default:
+ // VIK_KML_EXPORT_UNITS_METRIC:
+ return a_babel_convert_to ( vtl, "-o kml,units=m", filename, NULL, NULL );
+ break;
+ }
+ break;
default:
g_critical("Houston, we've had a problem. file_type=%d", file_type);
}
return FALSE;
}
-const gchar *a_get_viking_dir()
-{
- static gchar *viking_dir = NULL;
-
- // TODO: use g_get_user_config_dir ?
-
- if (!viking_dir) {
- const gchar *home = g_getenv("HOME");
- if (!home || g_access(home, W_OK))
- home = g_get_home_dir ();
-#ifdef HAVE_MKDTEMP
- if (!home || g_access(home, W_OK))
- {
- static gchar temp[] = {"/tmp/vikXXXXXX"};
- home = mkdtemp(temp);
- }
-#endif
- if (!home || g_access(home, W_OK))
- /* Fatal error */
- g_critical("Unable to find a base directory");
-
- /* Build the name of the directory */
-#ifdef __APPLE__
- viking_dir = g_build_filename(home, "/Library/Application Support/Viking", NULL);
-#else
- viking_dir = g_build_filename(home, ".viking", NULL);
-#endif
- if (g_file_test(viking_dir, G_FILE_TEST_EXISTS) == FALSE)
- g_mkdir(viking_dir, 0755);
- }
-
- return viking_dir;
-}