fix(desktop): work on older versions of windows

This commit is contained in:
Anna 2020-11-23 04:04:55 -05:00
parent adae837f70
commit 5e270e2540
2 changed files with 123 additions and 23 deletions

View File

@ -5,7 +5,9 @@ using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Markup;
using System.Windows.Media.Imaging;
using Windows.UI.Notifications;
using Hardcodet.Wpf.TaskbarNotification;
using Microsoft.Toolkit.Uwp.Notifications;
using ModernWpf;
using XIVChatCommon.Message;
@ -22,6 +24,10 @@ namespace XIVChat_Desktop {
public MainWindow Window { get; private set; } = null!;
public Configuration Config { get; private set; } = null!;
private Lazy<TaskbarIcon> TaskbarIcon { get; } = new Lazy<TaskbarIcon>(() => new TaskbarIcon {
IconSource = new BitmapImage(new Uri("pack://application:,,,/Resources/logo.ico")),
});
public string? LastHost { get; set; }
private Connection? connection;
@ -142,36 +148,54 @@ namespace XIVChat_Desktop {
this.Connection = null;
}
private void OnReceiveMessage(ServerMessage message) {
if (!this.Config.Notifications.Any(notif => notif.Matches(message))) {
return;
private static void Win10Notify(string title, string text, string? attribution) {
var builder = new ToastContentBuilder()
.AddText(title)
.AddText(text);
if (attribution != null) {
builder.AddAttributionText(attribution);
}
var sender = message.GetSenderPlayer();
var builder = new ToastContentBuilder();
if (sender != null) {
var name = sender.Name;
if (sender.Server != 0) {
name += $" ({Util.WorldName(sender.Server)})";
}
builder.AddText(name);
} else {
builder.AddText("Notification");
}
builder
.AddText(message.ContentText)
.AddAttributionText(message.Channel.Name());
var content = builder.GetToastContent();
var toast = new ToastNotification(content.GetXml());
DesktopNotificationManagerCompat.CreateToastNotifier().Show(toast);
}
private void Notify(string title, string text) {
this.TaskbarIcon.Value.ShowBalloonTip(title, text, BalloonIcon.None);
}
private void OnReceiveMessage(ServerMessage message) {
if (!this.Config.Notifications.Any(notif => notif.Matches(message))) {
return;
}
var sender = message.GetSenderPlayer();
string title;
if (sender != null) {
var name = sender.Name;
if (sender.Server != 0) {
name += $" ({Util.WorldName(sender.Server)})";
}
title = name;
} else {
title = "Notification";
}
var text = message.ContentText;
var attribution = message.Channel.Name();
if (Environment.OSVersion.Version.Major < 10) {
this.Notify(title, text);
} else {
Win10Notify(title, text, attribution);
}
}
}
}

View File

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1">
<assemblyIdentity version="1.0.0.0" name="XIVChat.XIVChat_Desktop"/>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
<!-- UAC Manifest Options
If you want to change the Windows User Account Control level replace the
requestedExecutionLevel node with one of the following.
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
<requestedExecutionLevel level="highestAvailable" uiAccess="false" />
Specifying requestedExecutionLevel element will disable file and registry virtualization.
Remove this element if your application requires this virtualization for backwards
compatibility.
-->
<requestedExecutionLevel level="asInvoker" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<!-- A list of the Windows versions that this application has been tested on
and is designed to work with. Uncomment the appropriate elements
and Windows will automatically select the most compatible environment. -->
<!-- Windows Vista -->
<supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
<!-- Windows 7 -->
<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
<!-- Windows 8 -->
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
<!-- Windows 8.1 -->
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
<!-- Windows 10 -->
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
</application>
</compatibility>
<!-- Indicates that the application is DPI-aware and will not be automatically scaled by Windows at higher
DPIs. Windows Presentation Foundation (WPF) applications are automatically DPI-aware and do not need
to opt in. Windows Forms applications targeting .NET Framework 4.6 that opt into this setting, should
also set the 'EnableWindowsFormsHighDpiAutoResizing' setting to 'true' in their app.config. -->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
<windowsSettings>
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>
</application>
-->
<!-- Enable themes for Windows common controls and dialogs (Windows XP and later) -->
<!--
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
-->
</assembly>