return result;
}
+/**
+ * append_file_ext:
+ *
+ * Append a file extension, if not already present.
+ *
+ * Returns: a newly allocated string
+ */
+gchar *append_file_ext ( const gchar *filename, VikLoadType_t type )
+{
+ gchar *new_name = NULL;
+ const gchar *ext = NULL;
+
+ /* Select an extension */
+ switch (type)
+ {
+ case FILE_TYPE_GPX:
+ ext = ".gpx";
+ break;
+ case FILE_TYPE_KML:
+ ext = ".kml";
+ break;
+ case FILE_TYPE_GPSMAPPER:
+ case FILE_TYPE_GPSPOINT:
+ default:
+ /* Do nothing, ext already set to NULL */
+ break;
+ }
+
+ /* Do */
+ if ( ext != NULL && ! check_file_ext ( filename, ext ) )
+ new_name = g_strconcat ( filename, ext, NULL );
+ else
+ /* Simply duplicate */
+ new_name = g_strdup ( filename );
+
+ return new_name;
+}
+
VikLoadType_t a_file_load ( VikAggregateLayer *top, VikViewport *vp, const gchar *filename_or_uri )
{
g_return_val_if_fail ( vp != NULL, LOAD_TYPE_READ_FAILURE );
if ( ! f )
return LOAD_TYPE_READ_FAILURE;
- // Enables relative paths in a .vik file to work
- // Also allows us to remember what directory we where using
- gchar *dir = g_path_get_dirname ( filename );
- if ( dir ) {
- if ( g_chdir ( dir ) ) {
- g_warning ( "Could not change directory to %s", dir );
- }
- g_free (dir);
- }
-
VikLoadType_t load_answer = LOAD_TYPE_OTHER_SUCCESS;
// Attempt loading the primary file type first - our internal .vik file:
if ( check_magic ( f, VIK_MAGIC ) )
{
+ // Enables relative paths in a .vik file to work
+ gchar *cwd = g_get_current_dir();
+ gchar *dir = g_path_get_dirname ( filename );
+ if ( dir ) {
+ if ( g_chdir ( dir ) ) {
+ g_warning ( "Could not change directory to %s", dir );
+ }
+ g_free (dir);
+ }
+
if ( file_read ( top, f, vp ) )
load_answer = LOAD_TYPE_VIK_SUCCESS;
else
load_answer = LOAD_TYPE_VIK_FAILURE_NON_FATAL;
+
+ // Restore previous working directory
+ if ( cwd ) {
+ if ( g_chdir ( cwd ) ) {
+ g_warning ( "Could not return to directory %s", cwd );
+ }
+ g_free (cwd);
+ }
}
else
{
return FALSE;
// Enable relative paths in .vik files to work
- // Also allows us to remember what directory we where using
+ gchar *cwd = g_get_current_dir();
gchar *dir = g_path_get_dirname ( filename );
if ( dir ) {
if ( g_chdir ( dir ) ) {
file_write ( top, f, vp );
+ // Restore previous working directory
+ if ( cwd ) {
+ if ( g_chdir ( cwd ) ) {
+ g_warning ( "Could not return to directory %s", cwd );
+ }
+ g_free (cwd);
+ }
+
fclose(f);
f = NULL;
return FALSE;
}
+/**
+ * a_file_export_babel:
+ */
+gboolean a_file_export_babel ( VikTrwLayer *vtl, const gchar *filename, const gchar *format,
+ gboolean tracks, gboolean routes, gboolean waypoints )
+{
+ gchar *args = g_strdup_printf("%s %s %s -o %s",
+ tracks ? "-t" : "",
+ routes ? "-r" : "",
+ waypoints ? "-w" : "",
+ format);
+ gboolean result = a_babel_convert_to ( vtl, NULL, args, filename, NULL, NULL );
+ g_free(args);
+ return result;
+}
+
/**
* Just a wrapper around realpath, which itself is platform dependent
*/