]>
Commit | Line | Data |
---|---|---|
3a4b95f6 GB |
1 | /* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 4; tab-width: 4 -*- */ |
2 | /* | |
3 | * viking | |
82aa018d | 4 | * Copyright (C) 2009-2010, Guilhem Bonnefille <guilhem.bonnefille@gmail.com> |
3a4b95f6 GB |
5 | * |
6 | * viking is free software: you can redistribute it and/or modify it | |
7 | * under the terms of the GNU General Public License as published by the | |
8 | * Free Software Foundation, either version 3 of the License, or | |
9 | * (at your option) any later version. | |
10 | * | |
11 | * viking is distributed in the hope that it will be useful, but | |
12 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
14 | * See the GNU General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License along | |
17 | * with this program. If not, see <http://www.gnu.org/licenses/>. | |
18 | */ | |
19 | ||
aa69d106 GB |
20 | /** |
21 | * SECTION:vikmapsourcedefault | |
22 | * @short_description: the base class implementing most of generic features | |
23 | * | |
24 | * The #VikMapSourceDefault class is the base class implementing most of | |
25 | * generic feature, using properties or reducing complexity of some | |
26 | * functions. | |
27 | */ | |
28 | ||
3a4b95f6 | 29 | #include "vikmapsourcedefault.h" |
31f3c5e7 | 30 | #include "vikenumtypes.h" |
f66ea3ec | 31 | #include "download.h" |
3a4b95f6 | 32 | |
551ee033 | 33 | static void map_source_get_copyright (VikMapSource *self, LatLonBBox bbox, gdouble zoom, void (*fct)(VikViewport*,const gchar*), void *data); |
53ac8302 GB |
34 | static const gchar *map_source_get_license (VikMapSource *self); |
35 | static const gchar *map_source_get_license_url (VikMapSource *self); | |
26336cf0 | 36 | static const GdkPixbuf *map_source_get_logo (VikMapSource *self); |
82aa018d | 37 | |
2eb18edc | 38 | static const gchar *map_source_get_name (VikMapSource *self); |
d7e495b2 | 39 | static guint16 map_source_get_uniq_id (VikMapSource *self); |
db03733a | 40 | static const gchar *map_source_get_label (VikMapSource *self); |
3a4b95f6 GB |
41 | static guint16 map_source_get_tilesize_x (VikMapSource *self); |
42 | static guint16 map_source_get_tilesize_y (VikMapSource *self); | |
43 | static VikViewportDrawMode map_source_get_drawmode (VikMapSource *self); | |
14b57d17 | 44 | static const gchar *map_source_get_file_extension (VikMapSource *self); |
3a4b95f6 | 45 | |
4e815e90 | 46 | static DownloadResult_t _download ( VikMapSource *self, MapCoord *src, const gchar *dest_fn, void *handle ); |
f66ea3ec GB |
47 | static void * _download_handle_init ( VikMapSource *self ); |
48 | static void _download_handle_cleanup ( VikMapSource *self, void *handle ); | |
49 | ||
3a4b95f6 GB |
50 | typedef struct _VikMapSourceDefaultPrivate VikMapSourceDefaultPrivate; |
51 | struct _VikMapSourceDefaultPrivate | |
52 | { | |
82aa018d GB |
53 | /* legal stuff */ |
54 | gchar *copyright; | |
53ac8302 GB |
55 | gchar *license; |
56 | gchar *license_url; | |
26336cf0 GB |
57 | GdkPixbuf *logo; |
58 | ||
2eb18edc | 59 | gchar *name; |
d7e495b2 | 60 | guint16 uniq_id; |
db03733a | 61 | gchar *label; |
3a4b95f6 GB |
62 | guint16 tilesize_x; |
63 | guint16 tilesize_y; | |
64 | VikViewportDrawMode drawmode; | |
14b57d17 | 65 | gchar *file_extension; |
3a4b95f6 GB |
66 | }; |
67 | ||
68 | #define VIK_MAP_SOURCE_DEFAULT_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VIK_TYPE_MAP_SOURCE_DEFAULT, VikMapSourceDefaultPrivate)) | |
69 | ||
31f3c5e7 GB |
70 | /* properties */ |
71 | enum | |
72 | { | |
73 | PROP_0, | |
74 | ||
2eb18edc | 75 | PROP_NAME, |
31f3c5e7 | 76 | PROP_ID, |
db03733a | 77 | PROP_LABEL, |
31f3c5e7 GB |
78 | PROP_TILESIZE_X, |
79 | PROP_TILESIZE_Y, | |
80 | PROP_DRAWMODE, | |
82aa018d | 81 | PROP_COPYRIGHT, |
53ac8302 GB |
82 | PROP_LICENSE, |
83 | PROP_LICENSE_URL, | |
14b57d17 | 84 | PROP_FILE_EXTENSION, |
31f3c5e7 | 85 | }; |
3a4b95f6 | 86 | |
d840e6de | 87 | G_DEFINE_ABSTRACT_TYPE (VikMapSourceDefault, vik_map_source_default, VIK_TYPE_MAP_SOURCE); |
3a4b95f6 GB |
88 | |
89 | static void | |
90 | vik_map_source_default_init (VikMapSourceDefault *object) | |
91 | { | |
db03733a GB |
92 | VikMapSourceDefault *self = VIK_MAP_SOURCE_DEFAULT (object); |
93 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE (self); | |
94 | ||
95 | priv->label = NULL; | |
82aa018d | 96 | priv->copyright = NULL; |
53ac8302 GB |
97 | priv->license = NULL; |
98 | priv->license_url = NULL; | |
26336cf0 | 99 | priv->logo = NULL; |
2eb18edc | 100 | priv->name = NULL; |
14b57d17 | 101 | priv->file_extension = NULL; |
3a4b95f6 GB |
102 | } |
103 | ||
104 | static void | |
105 | vik_map_source_default_finalize (GObject *object) | |
106 | { | |
db03733a GB |
107 | VikMapSourceDefault *self = VIK_MAP_SOURCE_DEFAULT (object); |
108 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE (self); | |
3a4b95f6 | 109 | |
db03733a GB |
110 | g_free (priv->label); |
111 | priv->label = NULL; | |
82aa018d GB |
112 | g_free (priv->copyright); |
113 | priv->copyright = NULL; | |
53ac8302 GB |
114 | g_free (priv->license); |
115 | priv->license = NULL; | |
116 | g_free (priv->license_url); | |
117 | priv->license_url = NULL; | |
26336cf0 GB |
118 | g_free (priv->logo); |
119 | priv->license_url = NULL; | |
2eb18edc RN |
120 | g_free (priv->name); |
121 | priv->name = NULL; | |
14b57d17 RN |
122 | g_free (priv->file_extension); |
123 | priv->file_extension = NULL; | |
2eb18edc | 124 | |
db03733a | 125 | G_OBJECT_CLASS (vik_map_source_default_parent_class)->finalize (object); |
3a4b95f6 GB |
126 | } |
127 | ||
31f3c5e7 GB |
128 | static void |
129 | vik_map_source_default_set_property (GObject *object, | |
130 | guint property_id, | |
131 | const GValue *value, | |
132 | GParamSpec *pspec) | |
133 | { | |
134 | VikMapSourceDefault *self = VIK_MAP_SOURCE_DEFAULT (object); | |
135 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE (self); | |
136 | ||
137 | switch (property_id) | |
138 | { | |
2eb18edc RN |
139 | case PROP_NAME: |
140 | // Sanitize the name here for file usage | |
141 | // A simple check just to prevent containing slashes ATM | |
142 | g_free (priv->name); | |
143 | priv->name = g_strdup(g_value_get_string (value)); | |
144 | g_strdelimit (priv->name, "\\/", 'x' ); | |
145 | break; | |
146 | ||
31f3c5e7 GB |
147 | case PROP_ID: |
148 | priv->uniq_id = g_value_get_uint (value); | |
149 | break; | |
150 | ||
9f58c4b4 | 151 | case PROP_LABEL: |
db03733a GB |
152 | g_free (priv->label); |
153 | priv->label = g_strdup(g_value_get_string (value)); | |
154 | break; | |
155 | ||
31f3c5e7 GB |
156 | case PROP_TILESIZE_X: |
157 | priv->tilesize_x = g_value_get_uint (value); | |
158 | break; | |
159 | ||
160 | case PROP_TILESIZE_Y: | |
161 | priv->tilesize_y = g_value_get_uint (value); | |
162 | break; | |
163 | ||
164 | case PROP_DRAWMODE: | |
165 | priv->drawmode = g_value_get_enum(value); | |
166 | break; | |
167 | ||
82aa018d GB |
168 | case PROP_COPYRIGHT: |
169 | g_free (priv->copyright); | |
170 | priv->copyright = g_strdup(g_value_get_string (value)); | |
171 | break; | |
172 | ||
53ac8302 GB |
173 | case PROP_LICENSE: |
174 | g_free (priv->license); | |
175 | priv->license = g_strdup(g_value_get_string (value)); | |
176 | break; | |
177 | ||
178 | case PROP_LICENSE_URL: | |
179 | g_free (priv->license_url); | |
180 | priv->license_url = g_strdup(g_value_get_string (value)); | |
181 | break; | |
182 | ||
14b57d17 RN |
183 | case PROP_FILE_EXTENSION: |
184 | g_free (priv->file_extension); | |
185 | priv->file_extension = g_strdup(g_value_get_string(value)); | |
186 | break; | |
187 | ||
31f3c5e7 GB |
188 | default: |
189 | /* We don't have any other property... */ | |
190 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); | |
191 | break; | |
192 | } | |
193 | } | |
194 | ||
195 | static void | |
196 | vik_map_source_default_get_property (GObject *object, | |
197 | guint property_id, | |
198 | GValue *value, | |
199 | GParamSpec *pspec) | |
200 | { | |
201 | VikMapSourceDefault *self = VIK_MAP_SOURCE_DEFAULT (object); | |
202 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE (self); | |
203 | ||
204 | switch (property_id) | |
205 | { | |
2eb18edc RN |
206 | case PROP_NAME: |
207 | g_value_set_string (value, priv->name); | |
208 | break; | |
209 | ||
31f3c5e7 GB |
210 | case PROP_ID: |
211 | g_value_set_uint (value, priv->uniq_id); | |
212 | break; | |
213 | ||
db03733a GB |
214 | case PROP_LABEL: |
215 | g_value_set_string (value, priv->label); | |
216 | break; | |
217 | ||
31f3c5e7 GB |
218 | case PROP_TILESIZE_X: |
219 | g_value_set_uint (value, priv->tilesize_x); | |
220 | break; | |
221 | ||
222 | case PROP_TILESIZE_Y: | |
223 | g_value_set_uint (value, priv->tilesize_y); | |
224 | break; | |
225 | ||
226 | case PROP_DRAWMODE: | |
227 | g_value_set_enum (value, priv->drawmode); | |
228 | break; | |
229 | ||
82aa018d GB |
230 | case PROP_COPYRIGHT: |
231 | g_value_set_string (value, priv->copyright); | |
232 | break; | |
233 | ||
53ac8302 GB |
234 | case PROP_LICENSE: |
235 | g_value_set_string (value, priv->license); | |
236 | break; | |
237 | ||
238 | case PROP_LICENSE_URL: | |
239 | g_value_set_string (value, priv->license_url); | |
240 | break; | |
241 | ||
14b57d17 RN |
242 | case PROP_FILE_EXTENSION: |
243 | g_value_set_string (value, priv->file_extension); | |
244 | break; | |
245 | ||
31f3c5e7 GB |
246 | default: |
247 | /* We don't have any other property... */ | |
248 | G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); | |
249 | break; | |
250 | } | |
251 | } | |
252 | ||
3a4b95f6 GB |
253 | static void |
254 | vik_map_source_default_class_init (VikMapSourceDefaultClass *klass) | |
255 | { | |
256 | GObjectClass* object_class = G_OBJECT_CLASS (klass); | |
257 | VikMapSourceClass* parent_class = VIK_MAP_SOURCE_CLASS (klass); | |
31f3c5e7 GB |
258 | GParamSpec *pspec = NULL; |
259 | ||
260 | object_class->set_property = vik_map_source_default_set_property; | |
261 | object_class->get_property = vik_map_source_default_get_property; | |
262 | ||
3a4b95f6 | 263 | /* Overiding methods */ |
82aa018d | 264 | parent_class->get_copyright = map_source_get_copyright; |
53ac8302 GB |
265 | parent_class->get_license = map_source_get_license; |
266 | parent_class->get_license_url = map_source_get_license_url; | |
26336cf0 | 267 | parent_class->get_logo = map_source_get_logo; |
2eb18edc | 268 | parent_class->get_name = map_source_get_name; |
3a4b95f6 | 269 | parent_class->get_uniq_id = map_source_get_uniq_id; |
db03733a | 270 | parent_class->get_label = map_source_get_label; |
3a4b95f6 GB |
271 | parent_class->get_tilesize_x = map_source_get_tilesize_x; |
272 | parent_class->get_tilesize_y = map_source_get_tilesize_y; | |
273 | parent_class->get_drawmode = map_source_get_drawmode; | |
14b57d17 | 274 | parent_class->get_file_extension = map_source_get_file_extension; |
f66ea3ec GB |
275 | parent_class->download = _download; |
276 | parent_class->download_handle_init = _download_handle_init; | |
277 | parent_class->download_handle_cleanup = _download_handle_cleanup; | |
278 | ||
279 | /* Default implementation of methods */ | |
280 | klass->get_uri = NULL; | |
281 | klass->get_hostname = NULL; | |
282 | klass->get_download_options = NULL; | |
3a4b95f6 | 283 | |
2eb18edc RN |
284 | pspec = g_param_spec_string ("name", |
285 | "Name", | |
286 | "The name of the map that may be used as the file cache directory", | |
287 | "Unknown" /* default value */, | |
288 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); | |
289 | g_object_class_install_property (object_class, PROP_NAME, pspec); | |
290 | ||
31f3c5e7 GB |
291 | pspec = g_param_spec_uint ("id", |
292 | "Id of the tool", | |
293 | "Set the id", | |
294 | 0 /* minimum value */, | |
9593ef7d | 295 | G_MAXUINT /* maximum value */, |
31f3c5e7 GB |
296 | 0 /* default value */, |
297 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); | |
298 | g_object_class_install_property (object_class, PROP_ID, pspec); | |
299 | ||
db03733a GB |
300 | pspec = g_param_spec_string ("label", |
301 | "Label", | |
302 | "The label of the map source", | |
303 | "<no-set>" /* default value */, | |
304 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); | |
305 | g_object_class_install_property (object_class, PROP_LABEL, pspec); | |
306 | ||
31f3c5e7 GB |
307 | pspec = g_param_spec_uint ("tilesize-x", |
308 | "TileSizeX", | |
309 | "Set the size of the tile (x)", | |
310 | 0 /* minimum value */, | |
311 | G_MAXUINT16 /* maximum value */, | |
312 | 0 /* default value */, | |
f0d4496f | 313 | G_PARAM_READWRITE); |
31f3c5e7 GB |
314 | g_object_class_install_property (object_class, PROP_TILESIZE_X, pspec); |
315 | ||
316 | pspec = g_param_spec_uint ("tilesize-y", | |
317 | "TileSizeY", | |
318 | "Set the size of the tile (y)", | |
319 | 0 /* minimum value */, | |
320 | G_MAXUINT16 /* maximum value */, | |
321 | 0 /* default value */, | |
f0d4496f | 322 | G_PARAM_READWRITE); |
31f3c5e7 GB |
323 | g_object_class_install_property (object_class, PROP_TILESIZE_Y, pspec); |
324 | ||
325 | pspec = g_param_spec_enum("drawmode", | |
326 | "Drawmode", | |
327 | "The mode used to draw map", | |
328 | VIK_TYPE_VIEWPORT_DRAW_MODE, | |
329 | VIK_VIEWPORT_DRAWMODE_UTM, | |
330 | G_PARAM_READWRITE); | |
331 | g_object_class_install_property(object_class, PROP_DRAWMODE, pspec); | |
332 | ||
82aa018d GB |
333 | pspec = g_param_spec_string ("copyright", |
334 | "Copyright", | |
335 | "The copyright of the map source", | |
336 | NULL, | |
9f58c4b4 | 337 | G_PARAM_READWRITE); |
82aa018d GB |
338 | g_object_class_install_property (object_class, PROP_COPYRIGHT, pspec); |
339 | ||
53ac8302 GB |
340 | pspec = g_param_spec_string ("license", |
341 | "License", | |
342 | "The license of the map source", | |
343 | NULL, | |
344 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); | |
345 | g_object_class_install_property (object_class, PROP_LICENSE, pspec); | |
346 | ||
347 | pspec = g_param_spec_string ("license-url", | |
348 | "License URL", | |
349 | "The URL of the license of the map source", | |
350 | NULL, | |
351 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); | |
352 | g_object_class_install_property (object_class, PROP_LICENSE_URL, pspec); | |
353 | ||
14b57d17 RN |
354 | pspec = g_param_spec_string ("file-extension", |
355 | "File Extension", | |
356 | "The file extension of tile files on disk", | |
357 | ".png" /* default value */, | |
358 | G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE); | |
359 | g_object_class_install_property (object_class, PROP_FILE_EXTENSION, pspec); | |
360 | ||
3a4b95f6 GB |
361 | g_type_class_add_private (klass, sizeof (VikMapSourceDefaultPrivate)); |
362 | ||
363 | object_class->finalize = vik_map_source_default_finalize; | |
364 | } | |
365 | ||
68b1d6c0 | 366 | static void |
551ee033 | 367 | map_source_get_copyright (VikMapSource *self, LatLonBBox bbox, gdouble zoom, void (*fct)(VikViewport*,const gchar*), void *data) |
82aa018d | 368 | { |
68b1d6c0 GB |
369 | /* Just ignore bbox and zoom level */ |
370 | g_return_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self)); | |
371 | ||
82aa018d GB |
372 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); |
373 | ||
68b1d6c0 | 374 | (*fct) (data, priv->copyright); |
82aa018d GB |
375 | } |
376 | ||
53ac8302 GB |
377 | static const gchar * |
378 | map_source_get_license (VikMapSource *self) | |
379 | { | |
380 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL); | |
381 | ||
382 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); | |
383 | ||
384 | return priv->license; | |
385 | } | |
386 | ||
387 | static const gchar * | |
388 | map_source_get_license_url (VikMapSource *self) | |
389 | { | |
390 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL); | |
391 | ||
392 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); | |
393 | ||
394 | return priv->license_url; | |
395 | } | |
396 | ||
26336cf0 GB |
397 | static const GdkPixbuf * |
398 | map_source_get_logo (VikMapSource *self) | |
399 | { | |
400 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL); | |
401 | ||
402 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); | |
403 | ||
404 | return priv->logo; | |
405 | } | |
406 | ||
2eb18edc RN |
407 | static const gchar * |
408 | map_source_get_name (VikMapSource *self) | |
409 | { | |
410 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL); | |
411 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); | |
412 | return priv->name; | |
413 | } | |
414 | ||
d7e495b2 | 415 | static guint16 |
3a4b95f6 GB |
416 | map_source_get_uniq_id (VikMapSource *self) |
417 | { | |
d7e495b2 | 418 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), (guint16)0); |
3a84e537 GB |
419 | |
420 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); | |
3a4b95f6 GB |
421 | |
422 | return priv->uniq_id; | |
423 | } | |
424 | ||
db03733a GB |
425 | static const gchar * |
426 | map_source_get_label (VikMapSource *self) | |
427 | { | |
428 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL); | |
429 | ||
430 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); | |
431 | ||
432 | return priv->label; | |
433 | } | |
434 | ||
3a4b95f6 GB |
435 | static guint16 |
436 | map_source_get_tilesize_x (VikMapSource *self) | |
437 | { | |
3a84e537 GB |
438 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), (guint16)0); |
439 | ||
3a4b95f6 | 440 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); |
3a4b95f6 GB |
441 | |
442 | return priv->tilesize_x; | |
443 | } | |
444 | ||
445 | static guint16 | |
446 | map_source_get_tilesize_y (VikMapSource *self) | |
447 | { | |
3a84e537 GB |
448 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), (guint16)0); |
449 | ||
3a4b95f6 | 450 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); |
3a4b95f6 GB |
451 | |
452 | return priv->tilesize_y; | |
453 | } | |
454 | ||
455 | static VikViewportDrawMode | |
456 | map_source_get_drawmode (VikMapSource *self) | |
457 | { | |
3a84e537 GB |
458 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), (VikViewportDrawMode)0); |
459 | ||
3a4b95f6 | 460 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); |
3a4b95f6 GB |
461 | |
462 | return priv->drawmode; | |
463 | } | |
f66ea3ec | 464 | |
4e815e90 | 465 | static DownloadResult_t |
f66ea3ec GB |
466 | _download ( VikMapSource *self, MapCoord *src, const gchar *dest_fn, void *handle ) |
467 | { | |
f66ea3ec GB |
468 | gchar *uri = vik_map_source_default_get_uri(VIK_MAP_SOURCE_DEFAULT(self), src); |
469 | gchar *host = vik_map_source_default_get_hostname(VIK_MAP_SOURCE_DEFAULT(self)); | |
470 | DownloadMapOptions *options = vik_map_source_default_get_download_options(VIK_MAP_SOURCE_DEFAULT(self)); | |
4e815e90 | 471 | DownloadResult_t res = a_http_download_get_url ( host, uri, dest_fn, options, handle ); |
f66ea3ec GB |
472 | g_free ( uri ); |
473 | g_free ( host ); | |
474 | return res; | |
475 | } | |
476 | ||
14b57d17 RN |
477 | static const gchar * |
478 | map_source_get_file_extension (VikMapSource *self) | |
479 | { | |
480 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT(self), NULL); | |
481 | VikMapSourceDefaultPrivate *priv = VIK_MAP_SOURCE_DEFAULT_PRIVATE(self); | |
482 | return priv->file_extension; | |
483 | } | |
484 | ||
f66ea3ec GB |
485 | static void * |
486 | _download_handle_init ( VikMapSource *self ) | |
487 | { | |
488 | return a_download_handle_init (); | |
489 | } | |
490 | ||
491 | ||
492 | static void | |
493 | _download_handle_cleanup ( VikMapSource *self, void *handle ) | |
494 | { | |
41810542 | 495 | a_download_handle_cleanup ( handle ); |
f66ea3ec GB |
496 | } |
497 | ||
498 | gchar * | |
499 | vik_map_source_default_get_uri( VikMapSourceDefault *self, MapCoord *src ) | |
500 | { | |
501 | VikMapSourceDefaultClass *klass; | |
502 | g_return_val_if_fail (self != NULL, 0); | |
503 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT (self), 0); | |
504 | klass = VIK_MAP_SOURCE_DEFAULT_GET_CLASS(self); | |
505 | ||
506 | g_return_val_if_fail (klass->get_uri != NULL, 0); | |
507 | ||
508 | return (*klass->get_uri)(self, src); | |
509 | } | |
510 | ||
511 | gchar * | |
512 | vik_map_source_default_get_hostname( VikMapSourceDefault *self ) | |
513 | { | |
514 | VikMapSourceDefaultClass *klass; | |
515 | g_return_val_if_fail (self != NULL, 0); | |
516 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT (self), 0); | |
517 | klass = VIK_MAP_SOURCE_DEFAULT_GET_CLASS(self); | |
518 | ||
519 | g_return_val_if_fail (klass->get_hostname != NULL, 0); | |
520 | ||
521 | return (*klass->get_hostname)(self); | |
522 | } | |
523 | ||
524 | DownloadMapOptions * | |
525 | vik_map_source_default_get_download_options( VikMapSourceDefault *self ) | |
526 | { | |
527 | VikMapSourceDefaultClass *klass; | |
528 | g_return_val_if_fail (self != NULL, 0); | |
529 | g_return_val_if_fail (VIK_IS_MAP_SOURCE_DEFAULT (self), 0); | |
530 | klass = VIK_MAP_SOURCE_DEFAULT_GET_CLASS(self); | |
531 | ||
532 | g_return_val_if_fail (klass->get_download_options != NULL, 0); | |
533 | ||
534 | return (*klass->get_download_options)(self); | |
535 | } |