Advertisement
Guest User

WebkitGtk+ ArticleView

a guest
Jan 4th, 2016
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Vala 3.59 KB | None | 0 0
  1. constructor()
  2. {
  3.     var settings = new WebKit.Settings();
  4.     settings.set_enable_accelerated_2d_canvas(true);
  5.     settings.set_enable_html5_database(false);
  6.     settings.set_enable_html5_local_storage(false);
  7.     settings.set_enable_java(false);
  8.     settings.set_enable_media_stream(false);
  9.     settings.set_enable_page_cache(false);
  10.     settings.set_enable_plugins(false);
  11.     settings.set_enable_private_browsing(true);
  12.     settings.set_enable_smooth_scrolling(true);
  13.     settings.set_javascript_can_access_clipboard(false);
  14.     settings.set_javascript_can_open_windows_automatically(false);
  15.     settings.set_media_playback_requires_user_gesture(true);
  16.     settings.set_user_agent_with_application_details("FeedReader", AboutInfo.version);
  17.  
  18.     m_view = new WebKit.WebView();
  19.     m_view.set_settings(settings);
  20.     m_view.load_changed.connect(open_link);
  21.     m_view.context_menu.connect(() => { return true; });
  22.     m_view.set_events(Gdk.EventMask.POINTER_MOTION_MASK);
  23.     m_view.set_events(Gdk.EventMask.BUTTON_PRESS_MASK);
  24.     m_view.set_events(Gdk.EventMask.BUTTON_RELEASE_MASK);
  25.     m_view.button_press_event.connect(onClick);
  26.     m_view.button_release_event.connect(onRelease);
  27.     m_view.enter_fullscreen.connect(() => { enterFullscreen(); return false;});
  28.     m_view.leave_fullscreen.connect(() => { leaveFullscreen(); return false;});
  29.     m_search = m_view.get_find_controller();
  30.  
  31.     WebKit.WebContext.get_default().set_cache_model(WebKit.CacheModel.DOCUMENT_BROWSER);
  32. }
  33.  
  34. public void fillContent(string articleID)
  35. {
  36.     m_currentArticle = articleID;
  37.     logger.print(LogMessage.DEBUG, "ArticleView: load article %s".printf(articleID));
  38.  
  39.     if(isLoading())
  40.     {
  41.         m_view.load_failed.connect(loadFailed);
  42.         m_view.stop_loading();
  43.         return;
  44.     }
  45.  
  46.     //.........................
  47.     // load article
  48.     //.........................
  49.  
  50.  
  51.  
  52.     m_view.load_html(
  53.         html
  54.         "file://" + GLib.Environment.get_home_dir() + "/.local/share/feedreader/data/images/");
  55. }
  56.  
  57. public bool isLoading()
  58. {
  59.     return m_view.is_loading;
  60. }
  61.  
  62. public void open_link(WebKit.LoadEvent load_event)
  63. {
  64.     switch (load_event)
  65.     {
  66.         case WebKit.LoadEvent.STARTED:
  67.             logger.print(LogMessage.DEBUG, "ArticleView: load STARTED");
  68.             string url = m_view.get_uri();
  69.  
  70.             // sometimes these "file://"-urls appear when opening lots of articles very fast oO no idea why
  71.             if(url != "file://" + GLib.Environment.get_home_dir() + "/.local/share/feedreader/data/images/")
  72.             {
  73.                 logger.print(LogMessage.DEBUG, "ArticleView: open external url: %s".printf(url));
  74.                 try{
  75.                     Gtk.show_uri(Gdk.Screen.get_default(), url, Gdk.CURRENT_TIME);
  76.                 }
  77.                 catch(GLib.Error e){
  78.                     logger.print(LogMessage.DEBUG, "could not open the link in an external browser: %s".printf(e.message));
  79.                 }
  80.                 m_view.stop_loading();
  81.             }
  82.             break;
  83.         case WebKit.LoadEvent.COMMITTED:
  84.             logger.print(LogMessage.DEBUG, "ArticleView: load COMMITTED");
  85.             if(m_searchTerm != "")
  86.                 m_search.search(m_searchTerm, WebKit.FindOptions.CASE_INSENSITIVE, 99);
  87.             break;
  88.         case WebKit.LoadEvent.FINISHED:
  89.             logger.print(LogMessage.DEBUG, "ArticleView: load FINISHED");
  90.             break;
  91.     }
  92. }
  93.  
  94.  
  95. private bool loadFailed(WebKit.LoadEvent event, string failing_uri, void* error)
  96. {
  97.     GLib.Error e = (GLib.Error)error;
  98.     logger.print(LogMessage.DEBUG, "ArticleView: load failed: message: \"%s\", domain \"%s\", code \"%i\"".printf(e.message, e.domain.to_string(), e.code));
  99.     if(e.matches(WebKit.NetworkError.quark(), 302))
  100.     {
  101.         logger.print(LogMessage.DEBUG, "ArticleView: loading canceled " + m_currentArticle);
  102.         WebKit.WebContext.get_default().clear_cache();
  103.         m_view.load_failed.disconnect(loadFailed);
  104.         fillContent(m_currentArticle);
  105.     }
  106.     return true;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement