[devhelp/gnome-2-28] Look for a local copy of URIs hosted on library.gnome.org (GNOME bug 598598)



commit 5428a516a7f83d6a3d18ad281bbcddadc5866b74
Author: Frédéric Péters <fpeters 0d be>
Date:   Fri Oct 16 12:09:26 2009 +0200

    Look for a local copy of URIs hosted on library.gnome.org (GNOME bug 598598)

 src/dh-window.c |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)
---
diff --git a/src/dh-window.c b/src/dh-window.c
index c6ff219..4943ef2 100644
--- a/src/dh-window.c
+++ b/src/dh-window.c
@@ -913,6 +913,43 @@ window_populate (DhWindow *window)
         window_open_new_tab (window, NULL, TRUE);
 }
 
+
+static gchar*
+find_library_equivalent (DhWindow    *window,
+                         const gchar *uri)
+{
+        DhWindowPriv *priv;
+        gchar **components;
+        GList *iter;
+        DhLink *link;
+        gchar *book_id;
+        gchar *filename;
+        gchar *local_uri = NULL;
+
+        components = g_strsplit (uri, "/", 0);
+        book_id = components[4];
+        filename = components[6];
+
+        priv = window->priv;
+
+        for (iter = dh_base_get_keywords (priv->base); iter; iter = g_list_next (iter)) {
+                link = iter->data;
+                if (g_strcmp0 (dh_link_get_book_id (link), book_id) != 0) {
+                        continue;
+                }
+                if (g_strcmp0 (dh_link_get_file_name (link), filename) != 0) {
+                        continue;
+                }
+                local_uri = dh_link_get_uri (link);
+                break;
+        }
+
+        g_strfreev (components);
+
+        return local_uri;
+}
+
+
 static gboolean
 window_web_view_navigation_policy_decision_requested (WebKitWebView             *web_view,
                                                       WebKitWebFrame            *frame,
@@ -938,6 +975,16 @@ window_web_view_navigation_policy_decision_requested (WebKitWebView
                 return FALSE;
         }
 
+        if (strncmp (uri, "http://library.gnome.org/devel/";, 31) == 0) {
+                gchar *local_uri = find_library_equivalent (window, uri);
+                if (local_uri) {
+                        webkit_web_policy_decision_ignore (policy_decision);
+                        _dh_window_display_uri (window, local_uri);
+                        g_free (local_uri);
+                        return TRUE;
+                }
+        }
+
         if (strncmp (uri, "file://", 7) != 0) {
                 webkit_web_policy_decision_ignore (policy_decision);
                 gtk_show_uri (NULL, uri, GDK_CURRENT_TIME, NULL);



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