*/
GList *a_babel_device_list;
+/**
+ * Run a function on all file formats supporting a given mode.
+ */
+void a_babel_foreach_file_with_mode (BabelMode mode, GFunc func, gpointer user_data)
+{
+ GList *current;
+ for ( current = g_list_first (a_babel_file_list) ;
+ current != NULL ;
+ current = g_list_next (current) )
+ {
+ BabelFile *currentFile = current->data;
+ /* Check compatibility of modes */
+ gboolean compat = TRUE;
+ if (mode.waypointsRead && ! currentFile->mode.waypointsRead) compat = FALSE;
+ if (mode.waypointsWrite && ! currentFile->mode.waypointsWrite) compat = FALSE;
+ if (mode.tracksRead && ! currentFile->mode.tracksRead) compat = FALSE;
+ if (mode.tracksWrite && ! currentFile->mode.tracksWrite) compat = FALSE;
+ if (mode.routesRead && ! currentFile->mode.routesRead) compat = FALSE;
+ if (mode.routesWrite && ! currentFile->mode.routesWrite) compat = FALSE;
+ /* Do call */
+ if (compat)
+ func (currentFile, user_data);
+ }
+}
+
/**
* a_babel_convert:
* @vt: The TRW layer to modify. All data will be deleted, and replaced by what gpsbabel outputs.
gboolean a_babel_convert_from_url ( VikTrwLayer *vt, const char *url, const char *input_type, BabelStatusFunc cb, gpointer user_data, DownloadMapOptions *options )
{
// If no download options specified, use defaults:
- DownloadMapOptions myoptions = { FALSE, FALSE, NULL, 0, NULL, NULL };
+ DownloadMapOptions myoptions = { FALSE, FALSE, NULL, 2, NULL, NULL, NULL };
if ( options )
myoptions = *options;
gint fd_src;
return ret;
}
-static void set_mode(BabelMode mode, gchar *smode)
+static void set_mode(BabelMode *mode, gchar *smode)
{
- mode.waypointsRead = smode[0] == 'r';
- mode.waypointsWrite = smode[1] == 'w';
- mode.tracksRead = smode[2] == 'r';
- mode.tracksWrite = smode[3] == 'w';
- mode.routesRead = smode[4] == 'r';
- mode.routesWrite = smode[5] == 'w';
+ mode->waypointsRead = smode[0] == 'r';
+ mode->waypointsWrite = smode[1] == 'w';
+ mode->tracksRead = smode[2] == 'r';
+ mode->tracksWrite = smode[3] == 'w';
+ mode->routesRead = smode[4] == 'r';
+ mode->routesWrite = smode[5] == 'w';
}
/**
&& tokens[3] != NULL
&& tokens[4] != NULL ) {
BabelDevice *device = g_malloc ( sizeof (BabelDevice) );
- set_mode (device->mode, tokens[1]);
+ set_mode (&(device->mode), tokens[1]);
device->name = g_strdup (tokens[2]);
device->label = g_strndup (tokens[4], 50); // Limit really long label text
a_babel_device_list = g_list_append (a_babel_device_list, device);
- g_debug ("New gpsbabel device: %s", device->name);
+ g_debug ("New gpsbabel device: %s, %d%d%d%d%d%d(%s)",
+ device->name,
+ device->mode.waypointsRead, device->mode.waypointsWrite,
+ device->mode.tracksRead, device->mode.tracksWrite,
+ device->mode.routesRead, device->mode.routesWrite,
+ tokens[1]);
} else {
g_warning ( "Unexpected gpsbabel format string: %s", line);
}
&& tokens[3] != NULL
&& tokens[4] != NULL ) {
BabelFile *file = g_malloc ( sizeof (BabelFile) );
- set_mode (file->mode, tokens[1]);
+ set_mode (&(file->mode), tokens[1]);
file->name = g_strdup (tokens[2]);
file->ext = g_strdup (tokens[3]);
file->label = g_strdup (tokens[4]);
a_babel_file_list = g_list_append (a_babel_file_list, file);
- g_debug ("New gpsbabel file: %s", file->name);
+ g_debug ("New gpsbabel file: %s, %d%d%d%d%d%d(%s)",
+ file->name,
+ file->mode.waypointsRead, file->mode.waypointsWrite,
+ file->mode.tracksRead, file->mode.tracksWrite,
+ file->mode.routesRead, file->mode.routesWrite,
+ tokens[1]);
} else {
g_warning ( "Unexpected gpsbabel format string: %s", line);
}
}
}
+
+/**
+ * a_babel_available:
+ *
+ * Indicates if babel is available or not.
+ *
+ * Returns: true if babel available
+ */
+gboolean a_babel_available ()
+{
+ return a_babel_device_list != NULL;
+}