Add project files.

This commit is contained in:
Blade / SCOPEDD
2026-02-22 11:31:35 -05:00
parent 3612bf40db
commit c1a425a7ad
84 changed files with 2323 additions and 0 deletions

View File

@@ -0,0 +1,85 @@
using System;
using System.Collections.ObjectModel;
using System.IO;
namespace ClipForge
{
public class ClipLibraryService
{
private FileSystemWatcher? _watcher;
public ObservableCollection<ClipFile> Clips { get; } = new();
public string ClipsDirectory { get; } = Path.Combine(
Environment.GetFolderPath(
Environment.SpecialFolder.MyVideos), "ClipForge");
public void Initialize()
{
// Create directory if it doesn't exist
if (!Directory.Exists(ClipsDirectory))
Directory.CreateDirectory(ClipsDirectory);
// Load existing clips
LoadExistingClips();
// Watch for new clips being saved
_watcher = new FileSystemWatcher(ClipsDirectory, "*.mp4")
{
EnableRaisingEvents = true,
NotifyFilter = NotifyFilters.FileName
};
_watcher.Created += OnClipCreated;
_watcher.Deleted += OnClipDeleted;
}
private void LoadExistingClips()
{
Clips.Clear();
var files = Directory.GetFiles(ClipsDirectory, "*.mp4");
// Sort newest first
Array.Sort(files, (a, b) =>
File.GetCreationTime(b).CompareTo(File.GetCreationTime(a)));
foreach (var file in files)
Clips.Add(ClipFile.FromPath(file));
}
private void OnClipCreated(object sender, FileSystemEventArgs e)
{
// Must update UI on main thread
App.MainQueue?.TryEnqueue(() =>
{
Clips.Insert(0, ClipFile.FromPath(e.FullPath));
});
}
private void OnClipDeleted(object sender, FileSystemEventArgs e)
{
App.MainQueue?.TryEnqueue(() =>
{
for (int i = Clips.Count - 1; i >= 0; i--)
{
if (Clips[i].Path == e.FullPath)
{
Clips.RemoveAt(i);
break;
}
}
});
}
public void DeleteClip(ClipFile clip)
{
if (File.Exists(clip.Path))
File.Delete(clip.Path);
}
public void OpenInExplorer(ClipFile clip)
{
System.Diagnostics.Process.Start("explorer.exe",
$"/select,\"{clip.Path}\"");
}
}
}