diff options
Diffstat (limited to 'web')
-rw-r--r-- | web/CMakeLists.txt | 4 | ||||
-rw-r--r-- | web/activatable.vala | 29 |
2 files changed, 32 insertions, 1 deletions
diff --git a/web/CMakeLists.txt b/web/CMakeLists.txt index a74ccf83..6224e812 100644 --- a/web/CMakeLists.txt +++ b/web/CMakeLists.txt @@ -15,11 +15,13 @@ foreach(UNIT_SRC ${EXTENSIONS}) include(ValaPrecompile) vala_precompile(UNIT_SRC_C ${UNIT} ${UNIT_SRC} + ${CMAKE_SOURCE_DIR}/core/database.vala + ${CMAKE_SOURCE_DIR}/core/history.vala ${CMAKE_SOURCE_DIR}/core/loggable.vala ${CMAKE_SOURCE_DIR}/core/plugins.vala ${CMAKE_SOURCE_DIR}/core/settings.vala PACKAGES - libsoup-2.4 libpeas-1.0 + libsoup-2.4 libpeas-1.0 sqlite3 OPTIONS ${VALAFLAGS} CUSTOM_VAPIS 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 (); }); |