[gnome-maps/wip/jonasdn/vector-tiles] Add notifcation on parse-error



commit e1207a5103d8242bfb89cdef0d97eb96f03309a8
Author: Jonas Danielsson <jonas threetimestwo org>
Date:   Fri May 8 21:24:22 2015 +0200

    Add notifcation on parse-error

 lib/maps-mapbox-renderer.c |   38 ++++++++++++++++++++++++++++++++++++--
 src/mapView.js             |   12 ++++++++++--
 2 files changed, 46 insertions(+), 4 deletions(-)
---
diff --git a/lib/maps-mapbox-renderer.c b/lib/maps-mapbox-renderer.c
index 1b50207..a3b13cf 100644
--- a/lib/maps-mapbox-renderer.c
+++ b/lib/maps-mapbox-renderer.c
@@ -23,6 +23,14 @@
 #include "maps-mapbox-renderer.h"
 #include "maps-mapbox-text-layer.h"
 
+enum
+{
+  PARSE_ERROR,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0, };
+
 struct _MapsMapboxRendererPrivate
 {
   gchar *data;
@@ -80,6 +88,22 @@ maps_mapbox_renderer_class_init (MapsMapboxRendererClass *klass)
 
   renderer_class->set_data = set_data;
   renderer_class->render = render;
+
+    /**
+     * MapsMapboxRenderer::parse-error:
+     *
+     * Indicates that the parsing of the style file failed.
+     *
+     */
+  signals[PARSE_ERROR] =
+    g_signal_new ("parse-error",
+                  G_OBJECT_CLASS_TYPE (object_class),
+                  G_SIGNAL_RUN_LAST,
+                  0, NULL, NULL,
+                  g_cclosure_marshal_VOID__OBJECT,
+                  G_TYPE_NONE,
+                  1,
+                  G_TYPE_STRING);
 }
 
 
@@ -124,8 +148,18 @@ on_stylesheet_changed (GFileMonitor *monitor,
                        MapsMapboxRenderer *renderer)
 {
   if (event_type == G_FILE_MONITOR_EVENT_CHANGED) {
-    vtile_mapcss_load (renderer->priv->stylesheet,
-                       g_file_get_path (file), NULL);
+    VTileMapCSS *stylesheet;
+    GError *error = NULL;
+
+    stylesheet = vtile_mapcss_new();
+    if (!vtile_mapcss_load (stylesheet, g_file_get_path (file), &error)) {
+      g_object_unref (stylesheet);
+      g_signal_emit_by_name (renderer, "parse-error",
+                             g_strdup (error->message));
+      return;
+    }
+    g_object_unref (renderer->priv->stylesheet);
+    renderer->priv->stylesheet = stylesheet;
 
     maps_mapbox_text_layer_remove_all (renderer->priv->layer);
     champlain_view_zoom_out (renderer->priv->view);
diff --git a/src/mapView.js b/src/mapView.js
index 51f8b72..f85b691 100644
--- a/src/mapView.js
+++ b/src/mapView.js
@@ -151,8 +151,16 @@ const MapView = new Lang.Class({
         let renderer = new Maps.MapboxRenderer();
         renderer.set_view(this.view);
 
-        renderer.load_css(GLib.build_filenamev([pkg.pkgdatadir,
-                                                'gnome-maps.mapcss']));
+        renderer.connect('parse-error', (function(renderer, error) {
+            Application.notificationManager.showMessage(error);
+        }).bind(this));
+
+        try {
+            renderer.load_css(GLib.build_filenamev([pkg.pkgdatadir,
+                                                    'gnome-maps.mapcss']));
+        } catch(e) {
+            Application.notificationManager.showMessage(e.message);
+        }
 
         let tile = Champlain.NetworkTileSource.new_full(
             id,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]