From 9b1a3d9da029f3696c41bb470d2d283bd2f4bf19 Mon Sep 17 00:00:00 2001 From: AntonyCorbett Date: Sun, 2 Dec 2018 22:58:49 +0000 Subject: [PATCH] web page load error handling --- Installer/OnlyMSetup.iss | 132 ++++++++++++--------- OnlyM/App.xaml.cs | 24 +++- OnlyM/Services/WebDisplayManager.cs | 14 +++ UrlLinkFiles/JW Broadcasting.url | 5 + UrlLinkFiles/JW.org website.url | 5 + UrlLinkFiles/Watchtower online library.url | 6 + 6 files changed, 128 insertions(+), 58 deletions(-) create mode 100644 UrlLinkFiles/JW Broadcasting.url create mode 100644 UrlLinkFiles/JW.org website.url create mode 100644 UrlLinkFiles/Watchtower online library.url diff --git a/Installer/OnlyMSetup.iss b/Installer/OnlyMSetup.iss index affa0948b..38b572516 100644 --- a/Installer/OnlyMSetup.iss +++ b/Installer/OnlyMSetup.iss @@ -35,16 +35,18 @@ RestartApplications=False CloseApplications=False AppMutex=OnlyMMeetingMedia +; for CefSharp refer here: https://github.com/cefsharp/CefSharp/wiki/Output-files-description-table-(Redistribution) + [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" [Files] -Source: "bin\Release\FFmpeg\*"; DestDir: "{app}\FFmpeg"; Flags: ignoreversion -Source: "bin\Release\x64\*"; DestDir: "{app}\x64"; Flags: ignoreversion -Source: "bin\Release\x86\*"; DestDir: "{app}\x86"; Flags: ignoreversion -Source: "bin\Release\AutoMapper.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\CommonServiceLocator.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\FFmpeg\*"; DestDir: "{app}\FFmpeg"; Flags: ignoreversion +Source: "bin\x86\Release\x64\*"; DestDir: "{app}\x64"; Flags: ignoreversion +Source: "bin\x86\Release\x86\*"; DestDir: "{app}\x86"; Flags: ignoreversion +Source: "bin\x86\Release\AutoMapper.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\CommonServiceLocator.dll"; DestDir: "{app}"; Flags: ignoreversion ; temp inclusion of updated ffme assemblies to correct subtitle bug (awaiting fix in 2.80) Source: "D:\ProjectsMisc\ffmediaelement-master\Unosquare.FFME.Windows.Sample\bin\Release\ffme.common.dll"; DestDir: "{app}"; Flags: ignoreversion Source: "D:\ProjectsMisc\ffmediaelement-master\Unosquare.FFME.Windows.Sample\bin\Release\ffme.win.dll"; DestDir: "{app}"; Flags: ignoreversion @@ -52,58 +54,80 @@ Source: "D:\ProjectsMisc\ffmediaelement-master\Unosquare.FFME.Windows.Sample\bin ;Source: "bin\Release\ffme.common.dll"; DestDir: "{app}"; Flags: ignoreversion ;Source: "bin\Release\ffme.win.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\FFmpeg.AutoGen.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\FluentCommandLineParser.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\GalaSoft.MvvmLight.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\GalaSoft.MvvmLight.Extras.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\GalaSoft.MvvmLight.Platform.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\HtmlAgilityPack.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\ImageProcessor.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\MaterialDesignColors.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\MaterialDesignThemes.Wpf.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\Microsoft.WindowsAPICodePack.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\Microsoft.WindowsAPICodePack.Shell.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\Microsoft.WindowsAPICodePack.ShellExtensions.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\Newtonsoft.Json.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\OnlyM.Core.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\OnlyM.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\OnlyM.exe.config"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\OnlyM.Slides.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\policy.2.0.taglib-sharp.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\Serilog.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\Serilog.Sinks.Console.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\Serilog.Sinks.File.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\Serilog.Sinks.RollingFile.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\System.Data.SQLite.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\System.ValueTuple.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\System.Windows.Interactivity.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\taglib-sharp.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\Xceed.Wpf.Toolkit.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\FFmpeg.AutoGen.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\FluentCommandLineParser.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\GalaSoft.MvvmLight.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\GalaSoft.MvvmLight.Extras.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\GalaSoft.MvvmLight.Platform.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\HtmlAgilityPack.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\ImageProcessor.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\MaterialDesignColors.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\MaterialDesignThemes.Wpf.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\Microsoft.WindowsAPICodePack.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\Microsoft.WindowsAPICodePack.Shell.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\Microsoft.WindowsAPICodePack.ShellExtensions.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\Newtonsoft.Json.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\OnlyM.Core.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\OnlyM.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\OnlyM.exe.config"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\OnlyM.Slides.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\policy.2.0.taglib-sharp.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\Serilog.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\Serilog.Sinks.Console.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\Serilog.Sinks.File.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\Serilog.Sinks.RollingFile.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\System.Data.SQLite.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\System.ValueTuple.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\System.Windows.Interactivity.dll"; DestDir: "{app}"; Flags: ignoreversion -Source: "bin\Release\taglib-sharp.dll"; DestDir: "{app}"; Flags: ignoreversion +; localisation.. +Source: "bin\x86\Release\ca-ES\*.dll"; DestDir: "{app}\ca-ES"; Flags: ignoreversion +Source: "bin\x86\Release\cs-CZ\*.dll"; DestDir: "{app}\cs-CZ"; Flags: ignoreversion +Source: "bin\x86\Release\de-DE\*.dll"; DestDir: "{app}\de-DE"; Flags: ignoreversion +Source: "bin\x86\Release\el-GR\*.dll"; DestDir: "{app}\el-GR"; Flags: ignoreversion +Source: "bin\x86\Release\en-US\*.dll"; DestDir: "{app}\en-US"; Flags: ignoreversion +Source: "bin\x86\Release\es-ES\*.dll"; DestDir: "{app}\es-ES"; Flags: ignoreversion +Source: "bin\x86\Release\es-MX\*.dll"; DestDir: "{app}\es-MX"; Flags: ignoreversion +Source: "bin\x86\Release\fi-FI\*.dll"; DestDir: "{app}\fi-FI"; Flags: ignoreversion +Source: "bin\x86\Release\fr-FR\*.dll"; DestDir: "{app}\fr-FR"; Flags: ignoreversion +;Source: "bin\x86\Release\id-ID\*.dll"; DestDir: "{app}\id-ID"; Flags: ignoreversion +Source: "bin\x86\Release\it-IT\*.dll"; DestDir: "{app}\it-IT"; Flags: ignoreversion +;Source: "bin\x86\Release\jv-Latn-ID\*.dll"; DestDir: "{app}\jv-Latn-ID"; Flags: ignoreversion +Source: "bin\x86\Release\nl-NL\*.dll"; DestDir: "{app}\nl-NL"; Flags: ignoreversion +;Source: "bin\x86\Release\no\*.dll"; DestDir: "{app}\no"; Flags: ignoreversion +Source: "bin\x86\Release\pap\*.dll"; DestDir: "{app}\pap"; Flags: ignoreversion +Source: "bin\x86\Release\pl-PL\*.dll"; DestDir: "{app}\pl-PL"; Flags: ignoreversion +Source: "bin\x86\Release\pt-BR\*.dll"; DestDir: "{app}\pt-BR"; Flags: ignoreversion +Source: "bin\x86\Release\pt-PT\*.dll"; DestDir: "{app}\pt-PT"; Flags: ignoreversion +Source: "bin\x86\Release\ro-RO\*.dll"; DestDir: "{app}\ro-RO"; Flags: ignoreversion +Source: "bin\x86\Release\ru-RU\*.dll"; DestDir: "{app}\ru-RU"; Flags: ignoreversion +Source: "bin\x86\Release\sk-SK\*.dll"; DestDir: "{app}\sk-SK"; Flags: ignoreversion +Source: "bin\x86\Release\sv-SE\*.dll"; DestDir: "{app}\sv-SE"; Flags: ignoreversion +Source: "bin\x86\Release\tr-TR\*.dll"; DestDir: "{app}\tr-TR"; Flags: ignoreversion -Source: "bin\Release\ca-ES\*.dll"; DestDir: "{app}\ca-ES"; Flags: ignoreversion -Source: "bin\Release\cs-CZ\*.dll"; DestDir: "{app}\cs-CZ"; Flags: ignoreversion -Source: "bin\Release\de-DE\*.dll"; DestDir: "{app}\de-DE"; Flags: ignoreversion -Source: "bin\Release\el-GR\*.dll"; DestDir: "{app}\el-GR"; Flags: ignoreversion -Source: "bin\Release\en-US\*.dll"; DestDir: "{app}\en-US"; Flags: ignoreversion -Source: "bin\Release\es-ES\*.dll"; DestDir: "{app}\es-ES"; Flags: ignoreversion -Source: "bin\Release\es-MX\*.dll"; DestDir: "{app}\es-MX"; Flags: ignoreversion -Source: "bin\Release\fi-FI\*.dll"; DestDir: "{app}\fi-FI"; Flags: ignoreversion -Source: "bin\Release\fr-FR\*.dll"; DestDir: "{app}\fr-FR"; Flags: ignoreversion -;Source: "bin\Release\id-ID\*.dll"; DestDir: "{app}\id-ID"; Flags: ignoreversion -Source: "bin\Release\it-IT\*.dll"; DestDir: "{app}\it-IT"; Flags: ignoreversion -;Source: "bin\Release\jv-Latn-ID\*.dll"; DestDir: "{app}\jv-Latn-ID"; Flags: ignoreversion -Source: "bin\Release\nl-NL\*.dll"; DestDir: "{app}\nl-NL"; Flags: ignoreversion -;Source: "bin\Release\no\*.dll"; DestDir: "{app}\no"; Flags: ignoreversion -Source: "bin\Release\pap\*.dll"; DestDir: "{app}\pap"; Flags: ignoreversion -Source: "bin\Release\pl-PL\*.dll"; DestDir: "{app}\pl-PL"; Flags: ignoreversion -Source: "bin\Release\pt-BR\*.dll"; DestDir: "{app}\pt-BR"; Flags: ignoreversion -Source: "bin\Release\pt-PT\*.dll"; DestDir: "{app}\pt-PT"; Flags: ignoreversion -Source: "bin\Release\ro-RO\*.dll"; DestDir: "{app}\ro-RO"; Flags: ignoreversion -Source: "bin\Release\ru-RU\*.dll"; DestDir: "{app}\ru-RU"; Flags: ignoreversion -Source: "bin\Release\sk-SK\*.dll"; DestDir: "{app}\sk-SK"; Flags: ignoreversion -Source: "bin\Release\sv-SE\*.dll"; DestDir: "{app}\sv-SE"; Flags: ignoreversion -Source: "bin\Release\tr-TR\*.dll"; DestDir: "{app}\tr-TR"; Flags: ignoreversion +; CefSharp files... +Source: "bin\x86\Release\locales\*"; DestDir: "{app}\locales"; Flags: ignoreversion +Source: "bin\x86\Release\swiftshader\*"; DestDir: "{app}\swiftshader"; Flags: ignoreversion +Source: "bin\x86\Release\cef*.pak"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\CefSharp*.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\CefSharp.BrowserSubprocess.exe"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\chrome_elf.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\d3dcompiler_47.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\devtools_resources.pak"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\icudtl.dat"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\libcef.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\libEGL.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\libGLESv2.dll"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\natives_blob.bin"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\snapshot_blob.bin"; DestDir: "{app}"; Flags: ignoreversion +Source: "bin\x86\Release\v8_context_snapshot.bin"; DestDir: "{app}"; Flags: ignoreversion +; web shortcuts... +Source: "..\UrlLinkFiles\JW Broadcasting.url"; DestDir: "{commonappdata}\OnlyM\Websites" +Source: "..\UrlLinkFiles\JW.org website.url"; DestDir: "{commonappdata}\OnlyM\Websites" +Source: "..\UrlLinkFiles\Watchtower online library.url"; DestDir: "{commonappdata}\OnlyM\Websites" [Icons] Name: "{group}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" diff --git a/OnlyM/App.xaml.cs b/OnlyM/App.xaml.cs index 73367562f..9fc283f3b 100644 --- a/OnlyM/App.xaml.cs +++ b/OnlyM/App.xaml.cs @@ -24,6 +24,7 @@ public partial class App : Application { private readonly string _appString = "OnlyMMeetingMedia"; private Mutex _appMutex; + private readonly bool _successCefSharp; public App() { @@ -34,7 +35,7 @@ public App() // pre-load the CefSharp assemblies otherwise 1st instantiation is too long. System.Reflection.Assembly.Load("CefSharp.Wpf"); - InitCef(); + _successCefSharp = InitCef(); } public static string FMpegFolderName { get; } = $"{AppDomain.CurrentDomain.BaseDirectory}\\FFmpeg"; @@ -56,6 +57,11 @@ protected override void OnStartup(StartupEventArgs e) ConfigureLogger(); } + if (!_successCefSharp) + { + Log.Logger.Error("Could not initialise CefSharp"); + } + Process.GetCurrentProcess().PriorityClass = ProcessPriorityClass.AboveNormal; } @@ -86,8 +92,11 @@ private void RegisterMappings() AutoMapper.Mapper.Initialize(cfg => cfg.CreateMap()); } - private void InitCef() + private bool InitCef() { + //// refer here: + //// https://github.com/cefsharp/CefSharp/blob/cefsharp/43/CefSharp.Example/CefExample.cs#L54 + var settings = new CefSettings { CachePath = FileUtils.GetBrowserCacheFolder(), @@ -97,8 +106,15 @@ private void InitCef() settings.CefCommandLineArgs.Add("no-proxy-server", "1"); settings.CefCommandLineArgs.Add("force-device-scale-factor", "1"); - - Cef.Initialize(settings); + + // does this help? + ////settings.SetOffScreenRenderingBestPerformanceArgs(); + + //// this setting is automatically added. It means that if the user has + //// Pepper Flash installed it will be detected and used. + //// settings.CefCommandLineArgs.Add("enable-system-flash", "1"); + + return Cef.Initialize(settings); } } } diff --git a/OnlyM/Services/WebDisplayManager.cs b/OnlyM/Services/WebDisplayManager.cs index 0f152cd1a..de0731e4e 100644 --- a/OnlyM/Services/WebDisplayManager.cs +++ b/OnlyM/Services/WebDisplayManager.cs @@ -183,7 +183,21 @@ private void RemoveAnimation() private void InitBrowser() { _browser.LoadingStateChanged += HandleBrowserLoadingStateChanged; + _browser.LoadError += HandleBrowserLoadError; _browser.LifeSpanHandler = new BrowserLifeSpanHandler(); } + + private void HandleBrowserLoadError(object sender, LoadErrorEventArgs e) + { + // Don't display an error for downloaded files where the user aborted the download. + if (e.ErrorCode == CefErrorCode.Aborted) + { + return; + } + + // todo: localise + var errorMessage = $"

Failed to load URL {e.FailedUrl} with error {e.ErrorText} ({e.ErrorCode}).

"; + _browser.LoadHtml(errorMessage, e.FailedUrl); + } } } diff --git a/UrlLinkFiles/JW Broadcasting.url b/UrlLinkFiles/JW Broadcasting.url new file mode 100644 index 000000000..8d119620d --- /dev/null +++ b/UrlLinkFiles/JW Broadcasting.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,2 +[InternetShortcut] +IDList= +URL=http://tv.jw.org/ diff --git a/UrlLinkFiles/JW.org website.url b/UrlLinkFiles/JW.org website.url new file mode 100644 index 000000000..0cd3882ca --- /dev/null +++ b/UrlLinkFiles/JW.org website.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,2 +[InternetShortcut] +IDList= +URL=http://www.jw.org/ diff --git a/UrlLinkFiles/Watchtower online library.url b/UrlLinkFiles/Watchtower online library.url new file mode 100644 index 000000000..45a06e72e --- /dev/null +++ b/UrlLinkFiles/Watchtower online library.url @@ -0,0 +1,6 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,2 +[InternetShortcut] +IDList= +URL=http://wol.jw.org/ +HotKey=0