Initial commit

This commit is contained in:
2026-02-09 10:27:26 -05:00
commit a5d079b211
6 changed files with 510 additions and 0 deletions

79
Program.cs Normal file
View File

@@ -0,0 +1,79 @@
using System.Text.Json;
using System.Text.RegularExpressions;
using Microsoft.Extensions.Configuration;
namespace RandomWallpaper
{
internal class Program
{
private static Queue<String> previouslyDisplayed;
private static int maxDisplayQueueLength = 1000;
const String queueFileName = ".queue";
private static String[] targetDisplays = ["2"];
static void Main(string[] args)
{
var configurationBuilder = new ConfigurationBuilder();
configurationBuilder.SetBasePath(System.IO.Directory.GetCurrentDirectory());
configurationBuilder.AddJsonFile(path: "appSettings.json", optional: false, reloadOnChange: true);
var config = configurationBuilder.Build();
if(File.Exists(queueFileName))
previouslyDisplayed = JsonSerializer.Deserialize<Queue<String>>(File.ReadAllText(queueFileName));
else
previouslyDisplayed = new Queue<String>();
String wallpaperFolder = config["WallpaperFolder"];
foreach(String display in targetDisplays)
{
String id = "";
String randomPaper;
do
{
randomPaper = GetRandomWallpaper(wallpaperFolder);
id = GetWallhavenID(randomPaper);
}
while(previouslyDisplayed.Contains(id));
//set wallpaper
String setWallpaperScript = KDEScripts.GetChangeWallpaperScript(display, randomPaper);
KDEScripts.RunPlasmaScript(setWallpaperScript);
AddToDisplayed(randomPaper);
}
File.WriteAllText(queueFileName, JsonSerializer.Serialize(previouslyDisplayed));
Console.WriteLine("Changed");
}
static void AddToDisplayed(String fileName)
{
String pop;
String wallhavenID = GetWallhavenID(fileName);
if(previouslyDisplayed.Count >= maxDisplayQueueLength)
previouslyDisplayed.TryDequeue(out pop);
previouslyDisplayed.Enqueue(wallhavenID);
}
static String GetRandomWallpaper(String path)
{
String[] wallpaperFiles = Directory.GetFiles(path);
int fileCount = wallpaperFiles.Length;
Random rand = new ();
int randomIndex = rand.Next(fileCount - 1);
return wallpaperFiles[randomIndex];
}
static String GetWallhavenID(String fileName)
{
String id = Regex.Match(fileName, @"wallhaven-(?<id>[^\.]+)").Groups["id"].Value;
return id;
}
}
}