66 |
#include <gdk/gdkkeysyms.h> |
#include <gdk/gdkkeysyms.h> |
67 |
#endif |
#endif |
68 |
|
|
69 |
|
#define USER_AGENT "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11" |
70 |
|
|
71 |
struct _OsmGpsMapPrivate |
struct _OsmGpsMapPrivate |
72 |
{ |
{ |
73 |
GHashTable *tile_queue; |
GHashTable *tile_queue; |
97 |
char *proxy_uri; |
char *proxy_uri; |
98 |
|
|
99 |
//where downloaded tiles are cached |
//where downloaded tiles are cached |
100 |
|
char *tile_dir; |
101 |
char *cache_dir; |
char *cache_dir; |
102 |
|
|
103 |
//contains flags indicating the various special characters |
//contains flags indicating the various special characters |
351 |
inspect_map_uri(OsmGpsMap *map) |
inspect_map_uri(OsmGpsMap *map) |
352 |
{ |
{ |
353 |
OsmGpsMapPrivate *priv = map->priv; |
OsmGpsMapPrivate *priv = map->priv; |
354 |
|
priv->uri_format = 0; |
355 |
|
priv->the_google = FALSE; |
356 |
|
|
357 |
if (g_strrstr(priv->repo_uri, URI_MARKER_X)) |
if (g_strrstr(priv->repo_uri, URI_MARKER_X)) |
358 |
priv->uri_format |= URI_HAS_X; |
priv->uri_format |= URI_HAS_X; |
1099 |
} |
} |
1100 |
} |
} |
1101 |
|
|
1102 |
|
#ifdef LIBSOUP22 |
1103 |
|
soup_message_headers_append(msg->request_headers, |
1104 |
|
"User-Agent", USER_AGENT); |
1105 |
|
#endif |
1106 |
|
|
1107 |
g_hash_table_insert (priv->tile_queue, dl->uri, msg); |
g_hash_table_insert (priv->tile_queue, dl->uri, msg); |
1108 |
soup_session_queue_message (priv->soup_session, msg, osm_gps_map_tile_download_complete, dl); |
soup_session_queue_message (priv->soup_session, msg, osm_gps_map_tile_download_complete, dl); |
1109 |
} else { |
} else { |
1512 |
gboolean handled = FALSE; |
gboolean handled = FALSE; |
1513 |
int step = GTK_WIDGET(widget)->allocation.width/OSM_GPS_MAP_SCROLL_STEP; |
int step = GTK_WIDGET(widget)->allocation.width/OSM_GPS_MAP_SCROLL_STEP; |
1514 |
|
|
|
// printf("key event with keyval %x\n", event->keyval); |
|
|
|
|
1515 |
// the map handles some keys on its own ... |
// the map handles some keys on its own ... |
1516 |
switch(event->keyval) { |
switch(event->keyval) { |
1517 |
#ifdef OSM_GPS_MAP_KEY_FULLSCREEN |
#ifdef OSM_GPS_MAP_KEY_FULLSCREEN |
1578 |
#endif |
#endif |
1579 |
|
|
1580 |
default: |
default: |
|
// printf("unhandled key event with keyval %x\n", event->keyval); |
|
1581 |
break; |
break; |
1582 |
} |
} |
1583 |
|
|
1629 |
|
|
1630 |
#ifndef LIBSOUP22 |
#ifndef LIBSOUP22 |
1631 |
//Change naumber of concurrent connections option? |
//Change naumber of concurrent connections option? |
1632 |
priv->soup_session = soup_session_async_new_with_options( |
priv->soup_session = |
1633 |
SOUP_SESSION_USER_AGENT, |
soup_session_async_new_with_options(SOUP_SESSION_USER_AGENT, |
1634 |
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11", |
USER_AGENT, NULL); |
|
NULL); |
|
1635 |
#else |
#else |
1636 |
/* libsoup-2.2 seems not to be able to set the user agent */ |
/* libsoup-2.2 has no special way to set the user agent, so we */ |
1637 |
|
/* set it seperately as an extra header field for each reuest */ |
1638 |
priv->soup_session = soup_session_async_new(); |
priv->soup_session = soup_session_async_new(); |
1639 |
#endif |
#endif |
1640 |
|
|
1659 |
g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MASK, my_log_handler, NULL); |
g_log_set_handler (G_LOG_DOMAIN, G_LOG_LEVEL_MASK, my_log_handler, NULL); |
1660 |
|
|
1661 |
#ifdef OSM_GPS_MAP_KEYS |
#ifdef OSM_GPS_MAP_KEYS |
|
// GtkWidget *toplevel = gtk_widget_get_toplevel(GTK_WIDGET(object)); |
|
1662 |
g_signal_connect(G_OBJECT(object), "key_press_event", |
g_signal_connect(G_OBJECT(object), "key_press_event", |
1663 |
G_CALLBACK(on_window_key_press), priv); |
G_CALLBACK(on_window_key_press), priv); |
1664 |
#endif |
#endif |
1704 |
const char *fname = osm_gps_map_source_get_friendly_name(priv->map_source); |
const char *fname = osm_gps_map_source_get_friendly_name(priv->map_source); |
1705 |
if(!fname) fname = "_unknown_"; |
if(!fname) fname = "_unknown_"; |
1706 |
|
|
1707 |
if (priv->cache_dir) { |
if (priv->tile_dir) { |
1708 |
char *old = priv->cache_dir; |
//the new cachedir is the given cache dir + the friendly name of the repo_uri |
1709 |
//the new cachedir is the given cache dir + the md5 of the repo_uri |
priv->cache_dir = g_strdup_printf("%s%c%s", priv->tile_dir, G_DIR_SEPARATOR, fname); |
1710 |
priv->cache_dir = g_strdup_printf("%s%c%s", old, G_DIR_SEPARATOR, fname); |
g_debug("Adjusting cache dir %s -> %s", priv->tile_dir, priv->cache_dir); |
|
g_debug("Adjusting cache dir %s -> %s", old, priv->cache_dir); |
|
|
g_free(old); |
|
1711 |
} |
} |
1712 |
|
|
1713 |
inspect_map_uri(map); |
inspect_map_uri(map); |
1772 |
OsmGpsMap *map = OSM_GPS_MAP(object); |
OsmGpsMap *map = OSM_GPS_MAP(object); |
1773 |
OsmGpsMapPrivate *priv = map->priv; |
OsmGpsMapPrivate *priv = map->priv; |
1774 |
|
|
1775 |
g_free(priv->cache_dir); |
if(priv->tile_dir) |
1776 |
|
g_free(priv->tile_dir); |
1777 |
|
|
1778 |
|
if(priv->cache_dir) |
1779 |
|
g_free(priv->cache_dir); |
1780 |
|
|
1781 |
g_free(priv->repo_uri); |
g_free(priv->repo_uri); |
1782 |
g_free(priv->image_format); |
g_free(priv->image_format); |
1783 |
|
|
1834 |
break; |
break; |
1835 |
case PROP_TILE_CACHE_DIR: |
case PROP_TILE_CACHE_DIR: |
1836 |
if ( g_value_get_string(value) ) |
if ( g_value_get_string(value) ) |
1837 |
priv->cache_dir = g_value_dup_string (value); |
priv->tile_dir = g_value_dup_string (value); |
1838 |
break; |
break; |
1839 |
case PROP_ZOOM: |
case PROP_ZOOM: |
1840 |
priv->map_zoom = g_value_get_int (value); |
priv->map_zoom = g_value_get_int (value); |
1862 |
case PROP_GPS_POINT_R2: |
case PROP_GPS_POINT_R2: |
1863 |
priv->ui_gps_point_outer_radius = g_value_get_int (value); |
priv->ui_gps_point_outer_radius = g_value_get_int (value); |
1864 |
break; |
break; |
1865 |
case PROP_MAP_SOURCE: |
case PROP_MAP_SOURCE: { |
1866 |
|
gint old = priv->map_source; |
1867 |
priv->map_source = g_value_get_int (value); |
priv->map_source = g_value_get_int (value); |
1868 |
break; |
if(old >= OSM_GPS_MAP_SOURCE_NULL && |
1869 |
|
priv->map_source != old && |
1870 |
|
priv->map_source >= OSM_GPS_MAP_SOURCE_NULL && |
1871 |
|
priv->map_source <= OSM_GPS_MAP_SOURCE_LAST) { |
1872 |
|
|
1873 |
|
/* we now have to switch the entire map */ |
1874 |
|
|
1875 |
|
/* flush the ram cache */ |
1876 |
|
g_hash_table_remove_all(priv->tile_cache); |
1877 |
|
|
1878 |
|
//check if the source given is valid |
1879 |
|
const char *uri = osm_gps_map_source_get_repo_uri(priv->map_source); |
1880 |
|
if (uri) { |
1881 |
|
g_debug("Setting map source from ID"); |
1882 |
|
g_free(priv->repo_uri); |
1883 |
|
|
1884 |
|
priv->repo_uri = g_strdup(uri); |
1885 |
|
priv->image_format = g_strdup( |
1886 |
|
osm_gps_map_source_get_image_format(priv->map_source)); |
1887 |
|
priv->max_zoom = osm_gps_map_source_get_max_zoom(priv->map_source); |
1888 |
|
priv->min_zoom = osm_gps_map_source_get_min_zoom(priv->map_source); |
1889 |
|
} |
1890 |
|
|
1891 |
|
/* create a new disk cache path */ |
1892 |
|
const char *fname = osm_gps_map_source_get_friendly_name(priv->map_source); |
1893 |
|
if(!fname) fname = "_unknown_"; |
1894 |
|
|
1895 |
|
if (priv->tile_dir) { |
1896 |
|
//the new cachedir is the given cache dir + the friendly name of the repo_uri |
1897 |
|
priv->cache_dir = |
1898 |
|
g_strdup_printf("%s%c%s", priv->tile_dir, G_DIR_SEPARATOR, fname); |
1899 |
|
g_debug("Adjusting cache dir %s -> %s", priv->tile_dir, priv->cache_dir); |
1900 |
|
} |
1901 |
|
|
1902 |
|
/* adjust zoom if necessary */ |
1903 |
|
if(priv->map_zoom > priv->max_zoom) |
1904 |
|
osm_gps_map_set_zoom(map, priv->max_zoom); |
1905 |
|
|
1906 |
|
if(priv->map_zoom < priv->min_zoom) |
1907 |
|
osm_gps_map_set_zoom(map, priv->min_zoom); |
1908 |
|
|
1909 |
|
inspect_map_uri(map); |
1910 |
|
|
1911 |
|
} } break; |
1912 |
case PROP_IMAGE_FORMAT: |
case PROP_IMAGE_FORMAT: |
1913 |
priv->image_format = g_value_dup_string (value); |
priv->image_format = g_value_dup_string (value); |
1914 |
break; |
break; |
2512 |
-1, /* minimum property value */ |
-1, /* minimum property value */ |
2513 |
G_MAXINT, /* maximum property value */ |
G_MAXINT, /* maximum property value */ |
2514 |
-1, |
-1, |
2515 |
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY)); |
G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT)); |
2516 |
|
|
2517 |
g_object_class_install_property (object_class, |
g_object_class_install_property (object_class, |
2518 |
PROP_IMAGE_FORMAT, |
PROP_IMAGE_FORMAT, |
2533 |
case OSM_GPS_MAP_SOURCE_OPENSTREETMAP: |
case OSM_GPS_MAP_SOURCE_OPENSTREETMAP: |
2534 |
return "OpenStreetMap"; |
return "OpenStreetMap"; |
2535 |
case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER: |
case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER: |
2536 |
return "OpenStreetMap Renderer"; |
return "OpenStreetMap Tiles@Home"; |
2537 |
case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP: |
case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP: |
2538 |
return "OpenCycleMap"; |
return "OpenCycleMap"; |
2539 |
case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE: |
case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE: |
2618 |
case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER: |
case OSM_GPS_MAP_SOURCE_OPENSTREETMAP_RENDERER: |
2619 |
case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP: |
case OSM_GPS_MAP_SOURCE_OPENCYCLEMAP: |
2620 |
return "png"; |
return "png"; |
2621 |
|
case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE: |
2622 |
case OSM_GPS_MAP_SOURCE_GOOGLE_STREET: |
case OSM_GPS_MAP_SOURCE_GOOGLE_STREET: |
2623 |
|
case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE: |
2624 |
case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID: |
case OSM_GPS_MAP_SOURCE_GOOGLE_HYBRID: |
2625 |
case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET: |
case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_STREET: |
2626 |
case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE: |
case OSM_GPS_MAP_SOURCE_VIRTUAL_EARTH_SATELLITE: |
2628 |
case OSM_GPS_MAP_SOURCE_YAHOO_STREET: |
case OSM_GPS_MAP_SOURCE_YAHOO_STREET: |
2629 |
case OSM_GPS_MAP_SOURCE_YAHOO_SATELLITE: |
case OSM_GPS_MAP_SOURCE_YAHOO_SATELLITE: |
2630 |
case OSM_GPS_MAP_SOURCE_YAHOO_HYBRID: |
case OSM_GPS_MAP_SOURCE_YAHOO_HYBRID: |
|
case OSM_GPS_MAP_SOURCE_MAPS_FOR_FREE: |
|
|
case OSM_GPS_MAP_SOURCE_GOOGLE_SATELLITE: |
|
2631 |
return "jpg"; |
return "jpg"; |
2632 |
default: |
default: |
2633 |
return "bin"; |
return "bin"; |