]> spindle.queued.net Git - midori/commitdiff
Log bookmarks, history and downloads to zeitgeist
authorChristian Dywan <christian@twotoasts.de>
Sun, 5 Aug 2012 20:20:13 +0000 (22:20 +0200)
committerChristian Dywan <christian@twotoasts.de>
Sun, 5 Aug 2012 22:32:01 +0000 (00:32 +0200)
Fixes: https://bugs.launchpad.net/midori/+bug/783588
midori/midori-browser.c
midori/midori-browser.h
midori/midori-view.c
midori/wscript_build
tests/wscript_build
toolbars/midori-transferbar.c
wscript

index c4cbe60970285539e553622d772e806f5c9fad4e..d5b95402a2335193bca0abc5b36baabf76b667ee 100644 (file)
     #include <granite.h>
 #endif
 
+#if HAVE_ZEITGEIST
+    #include <zeitgeist.h>
+#endif
+
 #ifdef HAVE_UNISTD_H
     #include <unistd.h>
 #endif
@@ -460,6 +464,46 @@ _midori_browser_update_progress (MidoriBrowser* browser,
     midori_location_action_set_progress (action, progress);
 }
 
+/**
+ * midori_browser_update_history:
+ * @item: a #KatzeItem
+ * @type: "website", "bookmark" or "download"
+ * @event: "access", "leave", "modify", "delete"
+ *
+ * Since: 0.4.7
+ **/
+void
+midori_browser_update_history (KatzeItem*   item,
+                               const gchar* type,
+                               const gchar* event)
+{
+    #if HAVE_ZEITGEIST
+    const gchar* inter;
+    if (strstr (event, "access"))
+        inter = ZEITGEIST_ZG_ACCESS_EVENT;
+    else if (strstr (event, "leave"))
+        inter = ZEITGEIST_ZG_LEAVE_EVENT;
+    else if (strstr (event, "modify"))
+        inter = ZEITGEIST_ZG_MODIFY_EVENT;
+    else if (strstr (event, "create"))
+        inter = ZEITGEIST_ZG_CREATE_EVENT;
+    else if (strstr (event, "delete"))
+        inter = ZEITGEIST_ZG_DELETE_EVENT;
+    else
+        g_assert_not_reached ();
+    zeitgeist_log_insert_events_no_reply (zeitgeist_log_get_default (),
+        zeitgeist_event_new_full (inter, ZEITGEIST_ZG_USER_ACTIVITY,
+                                  "application://midori.desktop",
+                                  zeitgeist_subject_new_full (
+            item->uri,
+            strstr (type, "bookmark") ? ZEITGEIST_NFO_BOOKMARK : ZEITGEIST_NFO_WEBSITE,
+            zeitgeist_manifestation_for_uri (item->uri),
+            katze_item_get_meta_string (item, "mime-type"), NULL, item->name, NULL),
+                                  NULL),
+        NULL);
+    #endif
+}
+
 static void
 midori_browser_update_history_title (MidoriBrowser* browser,
                                      KatzeItem*     item)
@@ -486,6 +530,8 @@ midori_browser_update_history_title (MidoriBrowser* browser,
         g_printerr (_("Failed to update title: %s\n"), sqlite3_errmsg (db));
     sqlite3_reset (stmt);
     sqlite3_clear_bindings (stmt);
+
+    midori_browser_update_history (item, "website", "access");
 }
 
 static void
@@ -590,9 +636,6 @@ midori_view_notify_title_cb (GtkWidget*     widget,
                              MidoriBrowser* browser)
 {
     MidoriView* view = MIDORI_VIEW (widget);
-    const gchar* title;
-
-    title = midori_view_get_display_title (view);
 
     if (midori_view_get_load_status (view) == MIDORI_LOAD_COMMITTED)
     {
@@ -622,7 +665,7 @@ midori_view_notify_title_cb (GtkWidget*     widget,
     }
 
     if (widget == midori_browser_get_current_tab (browser))
-        midori_browser_set_title (browser, title);
+        midori_browser_set_title (browser, midori_view_get_display_title (view));
 }
 
 static void
@@ -933,6 +976,7 @@ midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser,
             katze_array_add_item (browser->bookmarks, bookmark);
         else
             midori_bookmarks_update_item_db (db, bookmark);
+        midori_browser_update_history (bookmark, "bookmark", "modify");
 
         if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (check_toolbar)))
             if (!gtk_widget_get_visible (browser->bookmarkbar))
@@ -1659,9 +1703,16 @@ midori_browser_tab_destroy_cb (MidoriView*    view,
     if (browser->proxy_array)
     {
         KatzeItem* item = midori_view_get_proxy_item (view);
-        if (browser->trash && !midori_view_is_blank (view))
-            katze_array_add_item (browser->trash, item);
-        katze_array_remove_item (browser->proxy_array, item);
+        if (katze_array_get_item_index (browser->proxy_array, item) != -1)
+        {
+            if (!midori_view_is_blank (view))
+            {
+                if (browser->trash)
+                    katze_array_add_item (browser->trash, item);
+                midori_browser_update_history (item, "website", "leave");
+            }
+            katze_array_remove_item (browser->proxy_array, item);
+        }
 
     /* We don't ever want to be in a situation with no tabs,
        so just create an empty one if the last one is closed.
@@ -2719,10 +2770,11 @@ _action_print_activate (GtkAction*     action,
     gchar* blacklisted_contracts[] = { "print", NULL }; */
     /* FIXME: granite: should return GtkWidget* like GTK+ */
     GtkWidget* dialog = (GtkWidget*)granite_widgets_pop_over_new ();
-    gchar* mime_type = katze_object_get_string (view, "mime-type");
     GtkWidget* content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
     /* FIXME: granite: should return GtkWidget* like GTK+ */
     gchar* filename = midori_view_save_source (MIDORI_VIEW (view), NULL, NULL);
+    const gchar* mime_type = katze_item_get_meta_string (
+        midori_view_get_proxy_item (MIDORI_VIEW (view)), "mime-type");
     GtkWidget* contractor = (GtkWidget*)granite_widgets_contractor_view_new (
         filename, mime_type, 32, TRUE);
     /* granite_widgets_contractor_view_add_item (GRANITE_WIDGETS_CONTRACTOR_VIEW (
@@ -2731,7 +2783,6 @@ _action_print_activate (GtkAction*     action,
     granite_widgets_contractor_view_name_blacklist (GRANITE_WIDGETS_CONTRACTOR_VIEW (
         contractor), blacklisted_contracts, -1); */
     g_free (filename);
-    g_free (mime_type);
     gtk_container_add (GTK_CONTAINER (content_area), contractor);
     gtk_widget_show (contractor);
     gtk_widget_show (dialog);
@@ -7317,6 +7368,7 @@ midori_bookmarkbar_remove_item_cb (KatzeArray*    bookmarks,
 {
     if (gtk_widget_get_visible (browser->bookmarkbar))
         midori_bookmarkbar_populate (browser);
+    midori_browser_update_history (item, "bookmark", "delete");
 }
 
 static void
index bedbacf18b58849631e78b8d6d2e3c1da442549c..320006a3fb1e0250a257ee5f01a49fb9cf7a47e3 100644 (file)
@@ -180,6 +180,11 @@ midori_browser_get_toolbar_actions    (MidoriBrowser*     browser);
 MidoriWebSettings*
 midori_browser_get_settings           (MidoriBrowser*     browser);
 
+void
+midori_browser_update_history         (KatzeItem*         item,
+                                       const gchar*       type,
+                                       const gchar*       event);
+
 G_END_DECLS
 
 #endif /* __MIDORI_BROWSER_H__ */
index 6110b116d023a5eb0577700c915993321af19f12..6d77319dc2e6a1604ac1a9068a151ac1e6b9e43b 100644 (file)
@@ -3150,6 +3150,7 @@ webkit_web_view_mime_type_decision_cb (GtkWidget*               web_view,
         if (web_frame == webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (web_view)))
         {
             katze_assign (view->mime_type, g_strdup (mime_type));
+            katze_item_set_meta_string (view->item, "mime-type", mime_type);
             midori_view_unset_icon (view);
             g_object_notify (G_OBJECT (view), "mime-type");
         }
@@ -4387,6 +4388,7 @@ midori_view_set_uri (MidoriView*  view,
 
             katze_assign (view->uri, NULL);
             katze_assign (view->mime_type, NULL);
+            katze_item_set_meta_string (view->item, "mime-type", NULL);
             katze_item_set_meta_integer (view->item, "delay", -1);
 
             if (speeddial_markup == NULL)
@@ -5455,7 +5457,7 @@ midori_view_item_meta_data_changed (KatzeItem*   item,
  * Retrieves a proxy item that can be used for bookmark storage as
  * well as session management.
  *
- * The item reflects changes to the title and uri automatically.
+ * The item reflects changes to title (name), URI and MIME type (mime-type).
  *
  * Return value: the proxy #KatzeItem
  **/
index 62ea67477bab2d41a06e9d65cad7c03f2b76ee97..697d36e6e10b86e8b43c9b9b1d66bab995f37707 100644 (file)
@@ -8,7 +8,7 @@ import platform
 progressive = True
 libs = 'M UNIQUE LIBSOUP GMODULE GTHREAD LIBIDN GIO GTK SQLITE ' \
        'LIBNOTIFY WEBKIT JAVASCRIPTCOREGTK LIBXML X11 XSS WS2_32 HILDON' \
-       'HILDON_FM GCR GRANITE'
+       'HILDON_FM GCR GRANITE ZEITGEIST'
 
 if progressive or Options.commands['check']:
     obj = bld.new_task_gen ('cc', 'staticlib')
index 66735ae75a5f3d6382c4a622f00d0894e9d3998e..3ed6eecda8f63077bfe81f2708d3076b025ae41e 100644 (file)
@@ -39,6 +39,6 @@ for test in tests:
         obj.packages += ' gtk+-3.0 webkitgtk-3.0'
     else:
         obj.packages += ' gtk+-2.0 webkit-1.0'
-    obj.uselib = 'UNIQUE LIBSOUP GIO GTK SQLITE WEBKIT LIBXML GRANITE'
+    obj.uselib = 'UNIQUE LIBSOUP GIO GTK SQLITE WEBKIT LIBXML GRANITE ZEITGEIST'
     obj.uselib_local = 'midori-core'
     obj.unit_test = 1
index 5ab4ca98ac64c5b10ec352900e411ca0b8779c09..52113c7ead96916d7e88e28e0ef367073d055ebb 100644 (file)
@@ -122,10 +122,16 @@ midori_transferbar_download_notify_status_cb (WebKitDownload* download,
                 gchar* filename = g_strrstr (path, "/") + 1;
                 gchar* msg = g_strdup_printf (
                     _("The file '<b>%s</b>' has been downloaded."), filename);
-                g_free (path);
+                KatzeItem* item = katze_item_new ();
+                item->uri = (gchar*)uri;
+                item->name = filename;
                 g_signal_emit_by_name (browser, "send-notification",
                                        _("Transfer completed"), msg);
                 g_free (msg);
+                midori_browser_update_history (item, "download", "create");
+                item->uri = item->name = NULL;
+                g_object_unref (item);
+                g_free (path);
             }
 
             /* Link Fingerprint */
diff --git a/wscript b/wscript
index 1a3b61f03b5c0987605b6a603b847f9fa125bd25..e6c0d4907f54bf603a78e90c206d26a534d56460 100644 (file)
--- a/wscript
+++ b/wscript
@@ -237,6 +237,7 @@ def configure (conf):
         granite = 'no '
         conf.define ('GRANITE_VERSION', 'No')
 
+    check_pkg ('zeitgeist-1.0', '0.3.14', mandatory=False)
     conf.check (lib='m', mandatory=True)
     check_pkg ('gmodule-2.0', '2.8.0', False)
     check_pkg ('gthread-2.0', '2.8.0', False)