diff options
Diffstat (limited to 'web/activatable.vala')
-rw-r--r-- | web/activatable.vala | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/web/activatable.vala b/web/activatable.vala index bd75e51b..98c614ce 100644 --- a/web/activatable.vala +++ b/web/activatable.vala @@ -13,6 +13,35 @@ Midori.Plugins? plugins; public void webkit_web_extension_initialize_with_user_data (WebKit.WebExtension extension, Variant user_data) { plugins = Midori.Plugins.get_default (user_data.get_string ()); extension.page_created.connect ((page) => { + page.document_loaded.connect (() => { + try { + // cf. http://ogp.me + // Note: Some websites incorrectly use "name" instead of "property" + var image = page.get_dom_document ().query_selector ("meta[property=\"og:image\"],meta[name=\"og:image\"]"); + var uri = image != null ? image.get_attribute ("content") : null; + if (uri == null) { + // Fallback to high res apple-touch-icon or "shortcut icon" + image = page.get_dom_document ().query_selector ("link[sizes=\"any\"],link[sizes=\"152x152\"],link[sizes=\"144x144\"]"); + uri = image != null ? image.get_attribute ("href") : null; + } + if (uri != null && uri != "") { + // Relative URL + if (!("://" in uri)) { + var soup_uri = new Soup.URI (page.uri); + soup_uri.set_path ("/" + uri); + soup_uri.set_query (null); + uri = soup_uri.to_string (false); + } + debug ("Found thumbnail for %s: %s", page.uri, uri); + var history = Midori.HistoryDatabase.get_default (); + history.prepare ("UPDATE %s SET image = :image WHERE uri = :uri".printf (history.table), + ":image", typeof (string), uri, + ":uri", typeof (string), page.uri).exec (); + } + } catch (Error error) { + debug ("Failed to locate thumbnail for %s: %s", page.uri, error.message); + } + }); var extensions = plugins.plug<Peas.Activatable> ("object", page); extensions.extension_added.connect ((info, extension) => ((Peas.Activatable)extension).activate ()); extensions.extension_removed.connect ((info, extension) => { ((Peas.Activatable)extension).deactivate (); }); |