]> git.street.me.uk Git - andy/viking.git/blobdiff - src/modules.c
Fix routes not saved in GPX when tracks are made invisible.
[andy/viking.git] / src / modules.c
index 638fae70331a41e5094d0a9e6ef3c5aa7159a5f0..85b6820bb94391b9883c7bdfe84e07cd97f2e60c 100644 (file)
@@ -32,7 +32,6 @@
 #include "modules.h"
 
 #include "bing.h"
-#include "spotmaps.h"
 #include "google.h"
 #include "terraserver.h"
 #include "expedia.h"
@@ -41,6 +40,7 @@
 #include "bluemarble.h"
 #include "geonames.h"
 #include "dir.h"
+#include "datasources.h"
 #include "vikmapslayer.h"
 #include "vikexttools.h"
 #include "vikexttool_datasources.h"
 
 #include "vikgobjectbuilder.h"
 
+#ifdef HAVE_LIBMAPNIK
+#include "vikmapniklayer.h"
+#endif
+
 #define VIKING_MAPS_FILE "maps.xml"
 #define VIKING_EXTTOOLS_FILE "external_tools.xml"
 #define VIKING_DATASOURCES_FILE "datasources.xml"
@@ -120,6 +124,7 @@ modules_load_config_dir(const gchar *dir)
        vik_gobject_builder_parse (builder, maps);
        g_object_unref (builder);
   }
+  g_free ( maps );
 
   /* External tools */
   gchar *tools = g_build_filename(dir, VIKING_EXTTOOLS_FILE, NULL);
@@ -130,6 +135,7 @@ modules_load_config_dir(const gchar *dir)
        vik_gobject_builder_parse (builder, tools);
        g_object_unref (builder);
   }
+  g_free ( tools );
 
   gchar *datasources = g_build_filename(dir, VIKING_DATASOURCES_FILE, NULL);
   if (g_access (datasources, R_OK) == 0)
@@ -139,6 +145,7 @@ modules_load_config_dir(const gchar *dir)
        vik_gobject_builder_parse (builder, datasources);
        g_object_unref (builder);
   }
+  g_free ( datasources );
 
   /* Go-to search engines */
   gchar *go_to = g_build_filename(dir, VIKING_GOTOTOOLS_FILE, NULL);
@@ -149,6 +156,7 @@ modules_load_config_dir(const gchar *dir)
        vik_gobject_builder_parse (builder, go_to);
        g_object_unref (builder);
   }
+  g_free ( go_to );
 
   /* Routing engines */
   gchar *routing = g_build_filename(dir, VIKING_ROUTING_FILE, NULL);
@@ -159,6 +167,7 @@ modules_load_config_dir(const gchar *dir)
        vik_gobject_builder_parse (builder, routing);
        g_object_unref (builder);
   }
+  g_free ( routing );
 }
 
 static void
@@ -171,19 +180,13 @@ modules_load_config(void)
      But our logic is to load all existing files and overwrite
      overlapping config with last recent one.
      So, we have to process directories in reverse order. */
-  /* First: find the last element */
-  gchar * * ptr = data_dirs;
-  while (*ptr != NULL) ptr++;
-  /* Second: deduce the number of directories */
-  int nb_data_dirs = 0;
-  nb_data_dirs = ptr - data_dirs;
-  /* Last: parse them in reverse order */
+  int nb_data_dirs = g_strv_length ( data_dirs );
   for (; nb_data_dirs > 0 ; nb_data_dirs--)
   {
     modules_load_config_dir(data_dirs[nb_data_dirs-1]);
   }
   g_strfreev(data_dirs);
-       
+
   /* Check if system config is set */
   modules_load_config_dir(VIKING_SYSCONFDIR);
 
@@ -192,7 +195,7 @@ modules_load_config(void)
   {
     modules_load_config_dir(data_home);
   }
-       
+
   /* Check user's home config */
   modules_load_config_dir(a_get_viking_dir());
 }
@@ -221,12 +224,22 @@ register_loadable_types(void)
     VIK_ROUTING_WEB_ENGINE_TYPE
   };
 
-  /* kill 'unused variable'  warning */
-  g_debug("%ld types loaded", sizeof(types)/sizeof(GType));
+  /* kill 'unused variable' + argument type warnings */
+  g_debug("%d types loaded", (int)sizeof(types)/(int)sizeof(GType));
 }
 
+/**
+ * First stage initialization
+ * Can not use a_get_preferences() yet...
+ * See comment in main.c
+ */
 void modules_init()
 {
+// OSM done first so this will be the default service for searching/routing/etc...
+#ifdef VIK_CONFIG_OPENSTREETMAP
+  osm_init();
+  osm_traces_init();
+#endif
 #ifdef VIK_CONFIG_BING
   bing_init();
 #endif
@@ -239,18 +252,18 @@ void modules_init()
 #ifdef VIK_CONFIG_TERRASERVER
   terraserver_init();
 #endif
-#ifdef VIK_CONFIG_OPENSTREETMAP
-  osm_init();
-  osm_traces_init();
-#endif
 #ifdef VIK_CONFIG_BLUEMARBLE
   bluemarble_init();
 #endif
 #ifdef VIK_CONFIG_GEONAMES
   geonames_init();
 #endif
-#ifdef VIK_CONFIG_SPOTMAPS
-  spotmaps_init();
+#ifdef VIK_CONFIG_GEOCACHES
+  a_datasource_gc_init();
+#endif
+
+#ifdef HAVE_LIBMAPNIK
+  vik_mapnik_layer_init();
 #endif
 
   register_loadable_types ();
@@ -259,3 +272,31 @@ void modules_init()
   modules_load_config ();
 }
 
+/**
+ * modules_post_init:
+ *
+ * Secondary stage initialization
+ * Can now use a_get_preferences() and a_babel_available()
+ */
+void modules_post_init ()
+{
+#ifdef VIK_CONFIG_GOOGLE
+  google_post_init();
+#endif
+#ifdef HAVE_LIBMAPNIK
+  vik_mapnik_layer_post_init();
+#endif
+}
+
+/**
+ *
+ */
+void modules_uninit()
+{
+#ifdef VIK_CONFIG_OPENSTREETMAP
+  osm_traces_uninit();
+#endif
+#ifdef HAVE_LIBMAPNIK
+  vik_mapnik_layer_uninit();
+#endif
+}