Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 29 additions & 30 deletions RunCat365/NetworkRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,20 @@ struct NetworkInfo

internal static class NetworkInfoExtension
{
internal static string GetDescription(this NetworkInfo networkInfo)
{
return $"Sent: {NetworkUtils.FormatSpeed(networkInfo.SentSpeed)}\nReceived: {NetworkUtils.FormatSpeed(networkInfo.ReceivedSpeed)}";
}

internal static List<string> GenerateIndicator(this NetworkInfo networkInfo)
{
return new List<string>
{
$"Network:",
$" ├─ Sent: {NetworkUtils.FormatSpeed(networkInfo.SentSpeed)}",
$" └─ Received: {NetworkUtils.FormatSpeed(networkInfo.ReceivedSpeed)}"
$" ├─ Sent: {FormatSpeed(networkInfo.SentSpeed)}",
$" └─ Received: {FormatSpeed(networkInfo.ReceivedSpeed)}"
};
}

private static string FormatSpeed(float speedBytes)
{
return ((long)speedBytes).ToByteFormatted() + "/s";
}
}

internal class NetworkRepository
Expand All @@ -50,14 +50,35 @@ internal class NetworkRepository

internal NetworkRepository()
{
networkInterface = NetworkUtils.GetNetworkInterface()
networkInterface = GetActiveNetworkInterface()
?? throw new InvalidOperationException("No valid network interface found.");
var stats = networkInterface.GetIPStatistics();
lastSent = stats.BytesSent;
lastReceived = stats.BytesReceived;
lastUpdate = DateTime.UtcNow;
}

private static NetworkInterface? GetActiveNetworkInterface()
{
var interfaces = NetworkInterface.GetAllNetworkInterfaces();
return interfaces.FirstOrDefault(IsValidNetworkInterface);
}

private static bool IsValidNetworkInterface(NetworkInterface networkInterface)
{
if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Loopback) return false;
if (networkInterface.NetworkInterfaceType == NetworkInterfaceType.Tunnel) return false;
if (networkInterface.OperationalStatus != OperationalStatus.Up) return false;

var description = networkInterface.Description.ToLower();
if (description.Contains("vpn")) return false;
if (description.Contains("tap")) return false;
if (description.Contains("virtual")) return false;
if (description.Contains("tun")) return false;

return true;
}

internal void Update()
{
var stats = networkInterface.GetIPStatistics();
Expand All @@ -79,26 +100,4 @@ internal NetworkInfo Get()
return networkInfo;
}
}

internal static class NetworkUtils
{
internal static string FormatSpeed(float speedBytes)
{
return ((long)speedBytes).ToByteFormatted() + "/s";
}

internal static NetworkInterface? GetNetworkInterface()
{
var interfaces = NetworkInterface.GetAllNetworkInterfaces();
var networkInterface = interfaces.FirstOrDefault(ni =>
ni.NetworkInterfaceType != NetworkInterfaceType.Loopback &&
ni.NetworkInterfaceType != NetworkInterfaceType.Tunnel &&
ni.OperationalStatus == OperationalStatus.Up &&
!ni.Description.ToLower().Contains("vpn") &&
!ni.Description.ToLower().Contains("tap") &&
!ni.Description.ToLower().Contains("virtual") &&
!ni.Description.ToLower().Contains("tun"));
return networkInterface;
}
}
}
11 changes: 6 additions & 5 deletions RunCat365/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ internal class RunCat365ApplicationContext : ApplicationContext
private readonly CPURepository cpuRepository;
private readonly MemoryRepository memoryRepository;
private readonly StorageRepository storageRepository;
private readonly NetworkRepository networkRepository;
private readonly LaunchAtStartupManager launchAtStartupManager;
private readonly ContextMenuManager contextMenuManager;
private readonly FormsTimer fetchTimer;
Expand All @@ -57,7 +58,6 @@ internal class RunCat365ApplicationContext : ApplicationContext
private Theme manualTheme = Theme.System;
private FPSMaxLimit fpsMaxLimit = FPSMaxLimit.FPS40;
private int fetchCounter = 5;
private readonly NetworkRepository networkRepository;

public RunCat365ApplicationContext()
{
Expand Down Expand Up @@ -179,17 +179,17 @@ private void AnimationTick(object? sender, EventArgs e)
private void FetchSystemInfo(
CPUInfo cpuInfo,
MemoryInfo memoryInfo,
List<StorageInfo> storageValue
List<StorageInfo> storageValue,
NetworkInfo networkInfo
)
{
contextMenuManager.SetNotifyIconText(cpuInfo.GetDescription());

var systemInfoValues = new List<string>();
systemInfoValues.AddRange(cpuInfo.GenerateIndicator());
var networkInfo = networkRepository.Get();
systemInfoValues.AddRange(networkInfo.GenerateIndicator());
systemInfoValues.AddRange(memoryInfo.GenerateIndicator());
systemInfoValues.AddRange(storageValue.GenerateIndicator());
systemInfoValues.AddRange(networkInfo.GenerateIndicator());
contextMenuManager.SetSystemInfoMenuText(string.Join("\n", [.. systemInfoValues]));
}

Expand All @@ -210,7 +210,8 @@ private void FetchTick(object? state, EventArgs e)
var cpuInfo = cpuRepository.Get();
var memoryInfo = memoryRepository.Get();
var storageInfo = storageRepository.Get();
FetchSystemInfo(cpuInfo, memoryInfo, storageInfo);
var networkInfo = networkRepository.Get();
FetchSystemInfo(cpuInfo, memoryInfo, storageInfo, networkInfo);

animateTimer.Stop();
animateTimer.Interval = CalculateInterval(cpuInfo.Total);
Expand Down