]> git.street.me.uk Git - andy/viking.git/blame - src/modules.c
Remove unused define
[andy/viking.git] / src / modules.c
CommitLineData
cdcaf41c
QT
1/*
2 * viking -- GPS Data and Topo Analyzer, Explorer, and Manager
3 *
29f1598c 4 * Copyright (C) 2006-2012, Guilhem Bonnefille <guilhem.bonnefille@gmail.com>
cdcaf41c
QT
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 *
20 */
21
22#ifdef HAVE_CONFIG_H
23#include "config.h"
24#endif
25
54b5d793
GB
26#include <glib.h>
27#include <glib/gstdio.h>
28#ifdef HAVE_UNISTD_H
29#include <unistd.h>
30#endif
31
cdcaf41c
QT
32#include "modules.h"
33
9f58c4b4 34#include "bing.h"
cdcaf41c 35#include "google.h"
cdcaf41c 36#include "terraserver.h"
cdcaf41c 37#include "expedia.h"
67209ca8 38#include "osm.h"
843b99df 39#include "osm-traces.h"
7363caa7 40#include "bluemarble.h"
bf5cef41 41#include "geonames.h"
29f1598c 42#include "dir.h"
5534e7a2 43#include "datasources.h"
df82a41c 44#include "vikmapslayer.h"
54b5d793 45#include "vikexttools.h"
82993cc7 46#include "vikexttool_datasources.h"
4c629122 47#include "vikgoto.h"
b44a5ac5 48#include "vikrouting.h"
82c4d692
GB
49
50/* Loadable types */
51#include "vikslippymapsource.h"
52#include "viktmsmapsource.h"
53#include "vikwmscmapsource.h"
54#include "vikwebtoolcenter.h"
55#include "vikwebtoolbounds.h"
56#include "vikgotoxmltool.h"
57#include "vikwebtool_datasource.h"
b44a5ac5 58#include "vikroutingwebengine.h"
82c4d692 59
54b5d793
GB
60#include "vikgobjectbuilder.h"
61
5fa4fe86
RN
62#ifdef HAVE_LIBMAPNIK
63#include "vikmapniklayer.h"
64#endif
65
df82a41c 66#define VIKING_MAPS_FILE "maps.xml"
54b5d793 67#define VIKING_EXTTOOLS_FILE "external_tools.xml"
82993cc7 68#define VIKING_DATASOURCES_FILE "datasources.xml"
4c629122 69#define VIKING_GOTOTOOLS_FILE "goto_tools.xml"
b44a5ac5 70#define VIKING_ROUTING_FILE "routing.xml"
54b5d793 71
df82a41c
GB
72static void
73modules_register_map_source(VikGobjectBuilder *self, GObject *object)
74{
75 g_debug (__FUNCTION__);
76 VikMapSource *mapsource = VIK_MAP_SOURCE (object);
77 /* FIXME label should be hosted by object */
78 maps_layer_register_map_source (mapsource);
79}
80
54b5d793
GB
81static void
82modules_register_exttools(VikGobjectBuilder *self, GObject *object)
83{
84 g_debug (__FUNCTION__);
85 VikExtTool *tool = VIK_EXT_TOOL (object);
86 vik_ext_tools_register (tool);
87}
88
82993cc7
RN
89static void
90modules_register_datasources(VikGobjectBuilder *self, GObject *object)
91{
92 g_debug (__FUNCTION__);
93 VikExtTool *tool = VIK_EXT_TOOL (object);
94 vik_ext_tool_datasources_register (tool);
95}
96
4c629122
GB
97static void
98modules_register_gototools(VikGobjectBuilder *self, GObject *object)
99{
100 g_debug (__FUNCTION__);
101 VikGotoTool *tool = VIK_GOTO_TOOL (object);
102 vik_goto_register (tool);
103}
104
b44a5ac5
GB
105static void
106modules_register_routing_engine(VikGobjectBuilder *self, GObject *object)
107{
108 g_debug (__FUNCTION__);
109 VikRoutingEngine *engine = VIK_ROUTING_ENGINE (object);
110 vik_routing_register (engine);
111}
112
54b5d793 113static void
29f1598c 114modules_load_config_dir(const gchar *dir)
54b5d793 115{
29f1598c
GB
116 g_debug("Loading configurations from directory %s", dir);
117
df82a41c 118 /* Maps sources */
29f1598c 119 gchar *maps = g_build_filename(dir, VIKING_MAPS_FILE, NULL);
df82a41c
GB
120 if (g_access (maps, R_OK) == 0)
121 {
122 VikGobjectBuilder *builder = vik_gobject_builder_new ();
123 g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_map_source), NULL);
124 vik_gobject_builder_parse (builder, maps);
125 g_object_unref (builder);
126 }
644eea0e 127 g_free ( maps );
df82a41c 128
54b5d793 129 /* External tools */
29f1598c 130 gchar *tools = g_build_filename(dir, VIKING_EXTTOOLS_FILE, NULL);
54b5d793
GB
131 if (g_access (tools, R_OK) == 0)
132 {
133 VikGobjectBuilder *builder = vik_gobject_builder_new ();
134 g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_exttools), NULL);
135 vik_gobject_builder_parse (builder, tools);
136 g_object_unref (builder);
137 }
644eea0e 138 g_free ( tools );
4c629122 139
82993cc7
RN
140 gchar *datasources = g_build_filename(dir, VIKING_DATASOURCES_FILE, NULL);
141 if (g_access (datasources, R_OK) == 0)
142 {
143 VikGobjectBuilder *builder = vik_gobject_builder_new ();
144 g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_datasources), NULL);
145 vik_gobject_builder_parse (builder, datasources);
146 g_object_unref (builder);
147 }
644eea0e 148 g_free ( datasources );
82993cc7 149
4c629122 150 /* Go-to search engines */
29f1598c 151 gchar *go_to = g_build_filename(dir, VIKING_GOTOTOOLS_FILE, NULL);
4c629122
GB
152 if (g_access (go_to, R_OK) == 0)
153 {
154 VikGobjectBuilder *builder = vik_gobject_builder_new ();
155 g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_gototools), NULL);
156 vik_gobject_builder_parse (builder, go_to);
157 g_object_unref (builder);
158 }
644eea0e 159 g_free ( go_to );
b44a5ac5
GB
160
161 /* Routing engines */
162 gchar *routing = g_build_filename(dir, VIKING_ROUTING_FILE, NULL);
163 if (g_access (routing, R_OK) == 0)
164 {
165 VikGobjectBuilder *builder = vik_gobject_builder_new ();
166 g_signal_connect (builder, "new-object", G_CALLBACK (modules_register_routing_engine), NULL);
167 vik_gobject_builder_parse (builder, routing);
168 g_object_unref (builder);
169 }
644eea0e 170 g_free ( routing );
54b5d793 171}
cdcaf41c 172
29f1598c
GB
173static void
174modules_load_config(void)
175{
176 /* Look in the directories of data path */
177 gchar * * data_dirs = a_get_viking_data_path();
178 /* Priority is standard one:
179 left element is more important than right one.
180 But our logic is to load all existing files and overwrite
181 overlapping config with last recent one.
182 So, we have to process directories in reverse order. */
e2e65875 183 int nb_data_dirs = g_strv_length ( data_dirs );
29f1598c
GB
184 for (; nb_data_dirs > 0 ; nb_data_dirs--)
185 {
186 modules_load_config_dir(data_dirs[nb_data_dirs-1]);
187 }
188 g_strfreev(data_dirs);
e2e65875 189
29f1598c
GB
190 /* Check if system config is set */
191 modules_load_config_dir(VIKING_SYSCONFDIR);
192
193 const gchar *data_home = a_get_viking_data_home ();
194 if (data_home)
195 {
196 modules_load_config_dir(data_home);
197 }
e2e65875 198
29f1598c
GB
199 /* Check user's home config */
200 modules_load_config_dir(a_get_viking_dir());
201}
202
82c4d692
GB
203static void
204register_loadable_types(void)
205{
206 /* Force registering of loadable types */
207 volatile GType types[] = {
208 /* Maps */
209 VIK_TYPE_SLIPPY_MAP_SOURCE,
210 VIK_TYPE_TMS_MAP_SOURCE,
211 VIK_TYPE_WMSC_MAP_SOURCE,
212
213 /* Goto */
214 VIK_GOTO_XML_TOOL_TYPE,
215
216 /* Tools */
217 VIK_WEBTOOL_CENTER_TYPE,
218 VIK_WEBTOOL_BOUNDS_TYPE,
219
220 /* Datasource */
221 VIK_WEBTOOL_DATASOURCE_TYPE,
222
223 /* Routing */
224 VIK_ROUTING_WEB_ENGINE_TYPE
225 };
226
e36bb2f5
RN
227 /* kill 'unused variable' + argument type warnings */
228 g_debug("%d types loaded", (int)sizeof(types)/(int)sizeof(GType));
82c4d692
GB
229}
230
e530cc9f
RN
231/**
232 * First stage initialization
233 * Can not use a_get_preferences() yet...
234 * See comment in main.c
235 */
cdcaf41c
QT
236void modules_init()
237{
7cb69eee
RN
238// OSM done first so this will be the default service for searching/routing/etc...
239#ifdef VIK_CONFIG_OPENSTREETMAP
240 osm_init();
241 osm_traces_init();
242#endif
9f58c4b4
GB
243#ifdef VIK_CONFIG_BING
244 bing_init();
245#endif
36c78d6d
QT
246#ifdef VIK_CONFIG_GOOGLE
247 google_init();
248#endif
cdcaf41c
QT
249#ifdef VIK_CONFIG_EXPEDIA
250 expedia_init();
251#endif
252#ifdef VIK_CONFIG_TERRASERVER
253 terraserver_init();
254#endif
7363caa7
GB
255#ifdef VIK_CONFIG_BLUEMARBLE
256 bluemarble_init();
257#endif
bf5cef41
GB
258#ifdef VIK_CONFIG_GEONAMES
259 geonames_init();
260#endif
5534e7a2
RN
261#ifdef VIK_CONFIG_GEOCACHES
262 a_datasource_gc_init();
263#endif
dd84b6d1 264
5fa4fe86
RN
265#ifdef HAVE_LIBMAPNIK
266 vik_mapnik_layer_init();
267#endif
268
82c4d692 269 register_loadable_types ();
b44a5ac5 270
54b5d793
GB
271 /* As modules are loaded, we can load configuration files */
272 modules_load_config ();
cdcaf41c
QT
273}
274
e530cc9f
RN
275/**
276 * modules_post_init:
277 *
278 * Secondary stage initialization
c6556e61 279 * Can now use a_get_preferences() and a_babel_available()
e530cc9f
RN
280 */
281void modules_post_init ()
282{
c6556e61
RN
283#ifdef VIK_CONFIG_GOOGLE
284 google_post_init();
285#endif
e530cc9f
RN
286#ifdef HAVE_LIBMAPNIK
287 vik_mapnik_layer_post_init();
288#endif
289}
290
e3da2277
RN
291/**
292 *
293 */
294void modules_uninit()
295{
296#ifdef VIK_CONFIG_OPENSTREETMAP
297 osm_traces_uninit();
298#endif
892a9205
RN
299#ifdef HAVE_LIBMAPNIK
300 vik_mapnik_layer_uninit();
301#endif
e3da2277 302}