From c003bb4e718b98aee6051edd82c32b346232f0f4 Mon Sep 17 00:00:00 2001 From: chylex <contact@chylex.com> Date: Fri, 26 Jan 2018 17:32:54 +0100 Subject: [PATCH] Add a way to display the TweetDuck logo in the browser --- Core/Notification/FormNotificationBase.cs | 1 + Core/Notification/TweetNotification.cs | 4 ++++ Core/TweetDeckBrowser.cs | 2 ++ Properties/Resources.Designer.cs | 12 +++++++++++- Properties/Resources.resx | 3 +++ Resources/avatar.png | Bin 0 -> 4456 bytes TweetDuck.csproj | 13 +++++++------ 7 files changed, 28 insertions(+), 7 deletions(-) create mode 100644 Resources/avatar.png diff --git a/Core/Notification/FormNotificationBase.cs b/Core/Notification/FormNotificationBase.cs index a4ae66d3..1582574b 100644 --- a/Core/Notification/FormNotificationBase.cs +++ b/Core/Notification/FormNotificationBase.cs @@ -140,6 +140,7 @@ protected FormNotificationBase(FormBrowser owner, bool enableContextMenu){ DpiScale = this.GetDPIScale(); browser.SetupResourceHandler(TwitterUtils.TweetDeckURL, this.resourceHandler); + browser.SetupResourceHandler(TweetNotification.AppLogoLink, TweetNotification.AppLogoHandler); Controls.Add(browser); diff --git a/Core/Notification/TweetNotification.cs b/Core/Notification/TweetNotification.cs index b16405af..12487773 100644 --- a/Core/Notification/TweetNotification.cs +++ b/Core/Notification/TweetNotification.cs @@ -1,5 +1,6 @@ using System; using System.Text; +using CefSharp; using TweetDuck.Core.Bridge; using TweetDuck.Resources; @@ -8,6 +9,9 @@ sealed class TweetNotification{ private const string DefaultHeadLayout = @"<html id='tduck' class='os-windows txt-size--14' data-td-font='medium' data-td-theme='dark'><head><meta charset='utf-8'><meta http-equiv='X-UA-Compatible' content='chrome=1'><link rel='stylesheet' href='https://ton.twimg.com/tweetdeck-web/web/css/font.5ef884f9f9.css'><link rel='stylesheet' href='https://ton.twimg.com/tweetdeck-web/web/css/app-dark.5631e0dd42.css'><style type='text/css'>body{background:#222426}</style>"; private static readonly string CustomCSS = ScriptLoader.LoadResource("styles/notification.css"); + public const string AppLogoLink = "https://ton.twimg.com/tduck/avatar"; + public static readonly IResourceHandler AppLogoHandler = ResourceHandler.FromByteArray(Properties.Resources.avatar, "image/png"); + public static TweetNotification Example(string html, int characters){ return new TweetNotification(string.Empty, string.Empty, "Home", html, characters, string.Empty, string.Empty, true); } diff --git a/Core/TweetDeckBrowser.cs b/Core/TweetDeckBrowser.cs index 3680b39b..318ddd67 100644 --- a/Core/TweetDeckBrowser.cs +++ b/Core/TweetDeckBrowser.cs @@ -66,6 +66,8 @@ public TweetDeckBrowser(FormBrowser owner, PluginManager plugins, TweetDeckBridg this.browser.Dock = DockStyle.None; this.browser.Location = ControlExtensions.InvisibleLocation; + this.browser.SetupResourceHandler(TweetNotification.AppLogoLink, TweetNotification.AppLogoHandler); + owner.Controls.Add(browser); this.plugins = plugins; diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs index b3403071..b2731f44 100644 --- a/Properties/Resources.Designer.cs +++ b/Properties/Resources.Designer.cs @@ -19,7 +19,7 @@ namespace TweetDuck.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { @@ -60,6 +60,16 @@ internal Resources() { } } + /// <summary> + /// Looks up a localized resource of type System.Byte[]. + /// </summary> + internal static byte[] avatar { + get { + object obj = ResourceManager.GetObject("avatar", resourceCulture); + return ((byte[])(obj)); + } + } + /// <summary> /// Looks up a localized resource of type System.Drawing.Icon similar to (Icon). /// </summary> diff --git a/Properties/Resources.resx b/Properties/Resources.resx index d6afc110..d01687dc 100644 --- a/Properties/Resources.resx +++ b/Properties/Resources.resx @@ -118,6 +118,9 @@ <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> </resheader> <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> + <data name="avatar" type="System.Resources.ResXFileRef, System.Windows.Forms"> + <value>..\Resources\avatar.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </data> <data name="icon" type="System.Resources.ResXFileRef, System.Windows.Forms"> <value>..\Resources\icon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> </data> diff --git a/Resources/avatar.png b/Resources/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..e61b1caedf43a7744432f2c65c9d28bbcddb8622 GIT binary patch literal 4456 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 literal 0 HcmV?d00001 diff --git a/TweetDuck.csproj b/TweetDuck.csproj index fdb03ed8..04ba3a36 100644 --- a/TweetDuck.csproj +++ b/TweetDuck.csproj @@ -280,6 +280,11 @@ <Compile Include="Plugins\Events\PluginErrorEventArgs.cs" /> <Compile Include="Plugins\PluginManager.cs" /> <Compile Include="Plugins\PluginScriptGenerator.cs" /> + <Compile Include="Properties\Resources.Designer.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>Resources.resx</DependentUpon> + </Compile> <Compile Include="Reporter.cs" /> <Compile Include="Updates\FormUpdateDownload.cs"> <SubType>Form</SubType> @@ -301,11 +306,6 @@ <Compile Include="Updates\UpdateInfo.cs" /> <Compile Include="Program.cs" /> <Compile Include="Properties\AssemblyInfo.cs" /> - <Compile Include="Properties\Resources.Designer.cs"> - <AutoGen>True</AutoGen> - <DesignTime>True</DesignTime> - <DependentUpon>Resources.resx</DependentUpon> - </Compile> <Compile Include="Resources\ScriptLoader.cs" /> <Compile Include="Updates\UpdateEventArgs.cs" /> <Compile Include="Updates\UpdaterSettings.cs" /> @@ -343,8 +343,8 @@ </EmbeddedResource> <EmbeddedResource Include="Properties\Resources.resx"> <Generator>ResXFileCodeGenerator</Generator> - <LastGenOutput>Resources.Designer.cs</LastGenOutput> <SubType>Designer</SubType> + <LastGenOutput>Resources.Designer.cs</LastGenOutput> </EmbeddedResource> </ItemGroup> <ItemGroup> @@ -363,6 +363,7 @@ <Folder Include="Resources\Plugins\" /> </ItemGroup> <ItemGroup> + <Content Include="Resources\avatar.png" /> <Content Include="Resources\Scripts\code.js" /> <Content Include="Resources\Scripts\introduction.js" /> <Content Include="Resources\Scripts\notification.js" />