aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDemonKingSwarn <rockingswarn@gmail.com>2025-11-10 15:30:15 +0530
committerDemonKingSwarn <rockingswarn@gmail.com>2025-11-10 15:30:15 +0530
commit80ba776bfae57f2622caa0ecf8a5eb3821ab08b0 (patch)
treed769b644d47c4e19126c4b1b26dd7d14fed90987 /src
parenta98522b15e3819a5172a8a97b2057cb7c0c1196f (diff)
downloadhypr-wellbeing-80ba776bfae57f2622caa0ecf8a5eb3821ab08b0.zip
hypr-wellbeing-80ba776bfae57f2622caa0ecf8a5eb3821ab08b0.tar.gz
chore: widnows support added
Diffstat (limited to 'src')
-rw-r--r--src/GetWindows.cs113
-rw-r--r--src/WatchLog.cs141
2 files changed, 185 insertions, 69 deletions
diff --git a/src/GetWindows.cs b/src/GetWindows.cs
index ee72c39..336f8b1 100644
--- a/src/GetWindows.cs
+++ b/src/GetWindows.cs
@@ -1,66 +1,109 @@
namespace hyprwatch.Window
{
using System;
+ using System.Text;
+ using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Text.RegularExpressions;
+ using Newtonsoft.Json;
public partial class GetWindows
{
+
+ [DllImport("user32.dll")]
+ static extern IntPtr GetForegroundWindow();
+
+ [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
+ static extern int GetClassName(IntPtr hWnd, StringBuilder lpClassName, int nMaxCount);
+
public static string ActiveWindow()
{
string desktopEnv = Environment.GetEnvironmentVariable("XDG_CURRENT_DESKTOP");
+ string homeDir = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
string? activeWindow = null;
+ string? os = null;
- try {
- Process process = new Process();
- process.StartInfo = new ProcessStartInfo();
-
- process.StartInfo.RedirectStandardOutput = true;
- process.StartInfo.UseShellExecute = false;
- process.StartInfo.CreateNoWindow = true;
+ string configFile = Path.Combine(homeDir, ".config", "hypr-wellbeing", "config.json");
+ if(File.Exists(configFile))
+ {
+ string content = File.ReadAllText(configFile);
+ var config = JsonConvert.DeserializeObject<Dictionary<string, string>>(content);
+
+ os = config["os"];
+ }
+ else
+ {
+ os = "Linux";
+ }
+
+ if(os == "Linux")
+ {
+ try {
+ Process process = new Process();
+ process.StartInfo = new ProcessStartInfo();
+
+ process.StartInfo.RedirectStandardOutput = true;
+ process.StartInfo.UseShellExecute = false;
+ process.StartInfo.CreateNoWindow = true;
- if(desktopEnv == "Hyprland")
- {
- process.StartInfo.FileName = "hyprctl";
- process.StartInfo.Arguments = "activewindow";
- }
- else if(desktopEnv == "niri")
- {
- process.StartInfo.FileName = "niri";
- process.StartInfo.Arguments = "msg focused-window";
- }
- process.Start();
+ if(desktopEnv == "Hyprland")
+ {
+ process.StartInfo.FileName = "hyprctl";
+ process.StartInfo.Arguments = "activewindow";
+ }
+ else if(desktopEnv == "niri")
+ {
+ process.StartInfo.FileName = "niri";
+ process.StartInfo.Arguments = "msg focused-window";
+ }
- string output = process.StandardOutput.ReadToEnd();
- process.WaitForExit();
+ process.Start();
- var classMatch = ClassRegex().Match(output);
+ string output = process.StandardOutput.ReadToEnd();
+ process.WaitForExit();
- if(desktopEnv == "niri")
- {
- var match = Regex.Match(output, "App ID:\\s+\"([^\"]+)\"");
- if(match.Success)
+ var classMatch = ClassRegex().Match(output);
+
+ if(desktopEnv == "niri")
{
- activeWindow = match.Groups[1].Value.Trim();
- }
- }
+ var match = Regex.Match(output, "App ID:\\s+\"([^\"]+)\"");
+ if(match.Success)
+ {
+ activeWindow = match.Groups[1].Value.Trim();
+ }
+ }
- if(desktopEnv == "Hyprland")
- {
- if(classMatch.Success)
+ if(desktopEnv == "Hyprland")
{
- activeWindow = classMatch.Groups[1].Value.Trim();
+ if(classMatch.Success)
+ {
+ activeWindow = classMatch.Groups[1].Value.Trim();
+ }
}
- }
+ }
+ catch(Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
}
- catch(Exception ex)
+
+ else if (os == "Windows")
{
- Console.WriteLine(ex.Message);
+
+ IntPtr handle = GetForegroundWindow();
+ if(handle != IntPtr.Zero)
+ {
+ StringBuilder className = new StringBuilder(256);
+ if(GetClassName(handle, className, className.Capacity) > 0)
+ {
+ activeWindow = className.ToString();
+ }
+ }
}
if(activeWindow == null)
diff --git a/src/WatchLog.cs b/src/WatchLog.cs
index cb2aa7a..4a029d9 100644
--- a/src/WatchLog.cs
+++ b/src/WatchLog.cs
@@ -5,6 +5,7 @@ namespace hyprwatch.Logger
using System.Threading;
using System.Diagnostics;
using System.Collections.Generic;
+ using Newtonsoft.Json;
using hyprwatch.Window;
using hyprwatch.Time;
@@ -13,31 +14,55 @@ namespace hyprwatch.Logger
public static string GetTime()
{
string? t = null;
+ string? os = null;
- try
+ string homeDir = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
+ string configFile = Path.Combine(homeDir, ".config", "hypr-wellbeing", "config.json");
+
+ if(File.Exists(configFile))
+ {
+ string content = File.ReadAllText(configFile);
+ var config = JsonConvert.DeserializeObject<Dictionary<string, string>>(content);
+
+ os = config["os"];
+ }
+ else
+ {
+ os = "Linux";
+ }
+
+ if(os == "Linux")
{
- Process process = new Process
+ try
{
- StartInfo = new ProcessStartInfo
+ Process process = new Process
{
- FileName = "date",
- Arguments = "+%T",
- RedirectStandardOutput = true,
- UseShellExecute = false,
- CreateNoWindow = true,
- }
- };
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "date",
+ Arguments = "+%T",
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ CreateNoWindow = true,
+ }
+ };
- process.Start();
+ process.Start();
- string output = process.StandardOutput.ReadToEnd();
- process.WaitForExit();
+ string output = process.StandardOutput.ReadToEnd();
+ process.WaitForExit();
- t = output.Substring(0, output.Length - 1);
+ t = output.Substring(0, output.Length - 1);
+ }
+ catch(Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
}
- catch(Exception ex)
+
+ else if(os == "Windows")
{
- Console.WriteLine(ex.Message);
+ t = DateTime.Now.ToString("HH:mm:ss");
}
return t ?? string.Empty;
@@ -46,31 +71,79 @@ namespace hyprwatch.Logger
public static string GetDate()
{
string? d = null;
+ string? os = null;
+
+ string homeDir = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
+ string configFile = Path.Combine(homeDir, ".config", "hypr-wellbeing", "config.json");
+
+ if(File.Exists(configFile))
+ {
+ string content = File.ReadAllText(configFile);
+ var config = JsonConvert.DeserializeObject<Dictionary<string, string>>(content);
+
+ os = config["os"];
+ }
+ else
+ {
+ os = "Linux";
+ }
- try
+ if(os == "Linux")
{
- Process process = new Process
+ try
{
- StartInfo = new ProcessStartInfo
+ Process process = new Process
{
- FileName = "date",
- Arguments = "+%d-%m-%Y",
- RedirectStandardOutput = true,
- UseShellExecute = false,
- CreateNoWindow = true,
- }
- };
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "date",
+ Arguments = "+%d-%m-%Y",
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ CreateNoWindow = true,
+ }
+ };
- process.Start();
+ process.Start();
- string output = process.StandardOutput.ReadToEnd();
- process.WaitForExit();
+ string output = process.StandardOutput.ReadToEnd();
+ process.WaitForExit();
- d = output.Substring(0, output.Length - 1);
+ d = output.Substring(0, output.Length - 1);
+ }
+ catch(Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
}
- catch(Exception ex)
+
+ else if(os == "Windows")
{
- Console.WriteLine(ex.Message);
+ try
+ {
+ Process process = new Process
+ {
+ StartInfo = new ProcessStartInfo
+ {
+ FileName = "powershell",
+ Arguments = "-Command \"Get-Date -Format dd-MM-yyyy\"",
+ RedirectStandardOutput = true,
+ UseShellExecute = false,
+ CreateNoWindow = true,
+ }
+ };
+
+ process.Start();
+
+ string output = process.StandardOutput.ReadToEnd();
+ process.WaitForExit();
+
+ d = output.Substring(0, output.Length - 1);
+ }
+ catch(Exception ex)
+ {
+ Console.WriteLine(ex.Message);
+ }
}
return d ?? string.Empty;
@@ -78,7 +151,7 @@ namespace hyprwatch.Logger
static void UpdateCSV(string date, Dictionary<string, string> data)
{
- string homeDir = Environment.GetEnvironmentVariable("HOME") ?? throw new InvalidOperationException("HOME environment variable is not set.");
+ string homeDir = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
string filePath = Path.Combine(homeDir, ".cache", "hyprwatch", "daily_data", $"{date}.csv");
@@ -129,7 +202,7 @@ namespace hyprwatch.Logger
public static void LogCreation()
{
- string homeDir = Environment.GetEnvironmentVariable("HOME");
+ string homeDir = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
string currentDate = GetDate();
string filename = Path.Combine($"{homeDir}", ".cache", "hyprwatch", "daily_data", $"{currentDate}.csv");
if(!File.Exists(filename))