X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/3986744ba1895257f41b9bbec2148cf662579b80..e087b0d95b0c951bbd0a514d5f66ddc1ffae4635:/src/file.c diff --git a/src/file.c b/src/file.c index ceed0c24..de287a10 100644 --- a/src/file.c +++ b/src/file.c @@ -49,6 +49,8 @@ #define FILE_SEP '/' #endif +#define VIKING_FILE_VERSION 1 + typedef struct _Stack Stack; struct _Stack { @@ -189,7 +191,9 @@ static void file_write ( VikAggregateLayer *top, FILE *f, gpointer vp ) g_critical("Houston, we've had a problem. mode=%d", mode); } - fprintf ( f, "#VIKING GPS Data file " VIKING_URL "\n\nxmpp=%f\nympp=%f\nlat=%f\nlon=%f\nmode=%s\ncolor=%s\nhighlightcolor=%s\ndrawscale=%s\ndrawcentermark=%s\ndrawhighlight=%s\n", + fprintf ( f, "#VIKING GPS Data file " VIKING_URL "\n" ); + fprintf ( f, "FILE_VERSION=%d\n", VIKING_FILE_VERSION ); + fprintf ( f, "\nxmpp=%f\nympp=%f\nlat=%f\nlon=%f\nmode=%s\ncolor=%s\nhighlightcolor=%s\ndrawscale=%s\ndrawcentermark=%s\ndrawhighlight=%s\n", vik_viewport_get_xmpp ( VIK_VIEWPORT(vp) ), vik_viewport_get_ympp ( VIK_VIEWPORT(vp) ), ll.lat, ll.lon, modestring, vik_viewport_get_background_color(VIK_VIEWPORT(vp)), vik_viewport_get_highlight_color(VIK_VIEWPORT(vp)), @@ -427,7 +431,14 @@ static gboolean file_read ( VikAggregateLayer *top, FILE *f, VikViewport *vp ) if ( line[i] == '=' ) eq_pos = i; - if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "xmpp", eq_pos ) == 0) /* "hard coded" params: global & for all layer-types */ + if ( stack->under == NULL && eq_pos == 12 && strncasecmp ( line, "FILE_VERSION", eq_pos ) == 0) { + gint version = strtol(line+13, NULL, 10); + g_debug ( "%s: reading file version %d", __FUNCTION__, version ); + if ( version > VIKING_FILE_VERSION ) + successful_read = FALSE; + // However we'll still carry and attempt to read whatever we can + } + else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "xmpp", eq_pos ) == 0) /* "hard coded" params: global & for all layer-types */ vik_viewport_set_xmpp ( VIK_VIEWPORT(vp), strtod ( line+5, NULL ) ); else if ( stack->under == NULL && eq_pos == 4 && strncasecmp ( line, "ympp", eq_pos ) == 0) vik_viewport_set_ympp ( VIK_VIEWPORT(vp), strtod ( line+5, NULL ) ); @@ -635,7 +646,7 @@ VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar // In fact both kml & gpx files start the same as they are in xml if ( check_file_ext ( filename, ".kml" ) && check_magic ( f, GPX_MAGIC ) ) { // Implicit Conversion - if ( ! ( success = a_babel_convert_from ( VIK_TRW_LAYER(vtl), "-i kml", filename, NULL, NULL ) ) ) { + if ( ! ( success = a_babel_convert_from ( VIK_TRW_LAYER(vtl), "-i kml", filename, NULL, NULL, NULL ) ) ) { load_answer = LOAD_TYPE_GPSBABEL_FAILURE; } } @@ -734,13 +745,15 @@ gboolean check_file_ext ( const gchar *filename, const gchar *fileext ) */ gboolean a_file_export ( VikTrwLayer *vtl, const gchar *filename, VikFileType_t file_type, VikTrack *trk, gboolean write_hidden ) { - GpxWritingOptions options = { FALSE, FALSE, write_hidden }; + GpxWritingOptions options = { FALSE, FALSE, write_hidden, FALSE }; FILE *f = g_fopen ( filename, "w" ); if ( f ) { if ( trk ) { switch ( file_type ) { case FILE_TYPE_GPX: + // trk defined so can set the option + options.is_route = trk->is_route; a_gpx_write_track_file ( trk, f, &options ); break; default: