Compare commits

..

No commits in common. "6de76da8ad70016dcbd0d36f90f3f2b5d55cc676" and "d1df235af05700c2bfdd953bd0caf75f42a1302c" have entirely different histories.

3 changed files with 19 additions and 47 deletions

View File

@ -5,58 +5,45 @@ using BarRaider.SdTools;
using System.Drawing;
using System.Runtime.InteropServices;
using FocusVolumeControl.UI;
using BitFaster.Caching.Lru;
namespace FocusVolumeControl.AudioSessions;
public sealed class ActiveAudioSessionWrapper : IAudioSession
{
static ConcurrentLru<string, string> _iconCache = new ConcurrentLru<string, string>(10);
public string DisplayName { get; set; }
public string ExecutablePath { get; set; }
public string IconPath { get; set; }
private List<IAudioSessionControl2> Sessions { get; } = new List<IAudioSessionControl2>();
private IEnumerable<ISimpleAudioVolume> Volume => Sessions.Cast<ISimpleAudioVolume>();
string GetIconFromIconPath()
{
return _iconCache.GetOrAdd(IconPath, (key) =>
{
var tmp = (Bitmap)Bitmap.FromFile(IconPath);
tmp.MakeTransparent();
return Tools.ImageToBase64(tmp, true);
});
}
string GetIconFromExecutablePath()
{
return _iconCache.GetOrAdd(ExecutablePath, (key) =>
{
var tmp = IconExtraction.GetIcon(ExecutablePath);
//var tmp = Icon.ExtractAssociatedIcon(ExecutablePath);
return Tools.ImageToBase64(tmp, true);
});
}
string _icon;
public string GetIcon()
{
if (string.IsNullOrEmpty(_icon))
{
try
{
if (!string.IsNullOrEmpty(IconPath))
if(!string.IsNullOrEmpty(IconPath))
{
return GetIconFromIconPath();
var tmp = (Bitmap)Bitmap.FromFile(IconPath);
tmp.MakeTransparent();
_icon = Tools.ImageToBase64(tmp, true);
}
else
{
return GetIconFromExecutablePath();
var tmp = IconExtraction.GetIcon(ExecutablePath);
//var tmp = Icon.ExtractAssociatedIcon(ExecutablePath);
_icon = Tools.ImageToBase64(tmp, true);
}
}
catch
{
return "Images/encoderIcon";
_icon = "Images/encoderIcon";
}
}
return _icon;
}
public bool Any()
{

View File

@ -97,9 +97,6 @@
</Content>
</ItemGroup>
<ItemGroup>
<PackageReference Include="BitFaster.Caching">
<Version>2.2.1</Version>
</PackageReference>
<PackageReference Include="IsExternalInit">
<Version>1.0.3</Version>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

View File

@ -39,24 +39,12 @@ namespace FocusVolumeControl
public event Action WindowChanged;
CancellationTokenSource? _cancellationTokenSource = null;
private async void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
private void WinEventProc(IntPtr hWinEventHook, uint eventType, IntPtr hwnd, int idObject, int idChild, uint dwEventThread, uint dwmsEventTime)
{
try
{
//debounce the window changed events by 100 ms because if you click mouse over an application on the start bar
//and then click on the preview window, it will quickly go from current -> fallback -> new app
//which can often result in it getting stuck on the fallback app
_cancellationTokenSource?.Cancel();
_cancellationTokenSource = new CancellationTokenSource();
await Task.Delay(100, _cancellationTokenSource.Token);
WindowChanged?.Invoke();
}
catch (TaskCanceledException)
{
//ignored
}
catch (Exception ex)
{
Logger.Instance.LogMessage(TracingLevel.ERROR, $"Unexpected Error in EventHandler:\n {ex}");