diff --git a/.github/labeler.yml b/.github/labeler.yml
index 987b551..720c70c 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -65,7 +65,7 @@ type/build:
- changed-files:
- any-glob-to-any-file:
- '**/*.csproj'
- - '**/*.sln'
+ - '**/*.slnx'
- '.github/**/*'
# Changes
diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml
index d369df2..711df76 100644
--- a/.github/workflows/benchmark.yml
+++ b/.github/workflows/benchmark.yml
@@ -38,11 +38,11 @@ jobs:
- name: Restore dependencies
working-directory: repo
- run: dotnet restore CheapShotcutRandomizer.sln
+ run: dotnet restore CheapShotcutRandomizer.slnx
- name: Build Release
working-directory: repo
- run: dotnet build CheapShotcutRandomizer.sln --configuration Release --no-restore
+ run: dotnet build CheapShotcutRandomizer.slnx --configuration Release --no-restore
- name: Check for benchmark project
id: check
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index acbf7e4..a235955 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -57,11 +57,11 @@ jobs:
- name: Restore dependencies
working-directory: repo
- run: dotnet restore CheapShotcutRandomizer.sln
+ run: dotnet restore CheapShotcutRandomizer.slnx
- name: Build solution
working-directory: repo
- run: dotnet build CheapShotcutRandomizer.sln --configuration ${{ matrix.configuration }} --no-restore
+ run: dotnet build CheapShotcutRandomizer.slnx --configuration ${{ matrix.configuration }} --no-restore
- name: Run tests
working-directory: repo
@@ -120,16 +120,16 @@ jobs:
- name: Restore dependencies
working-directory: repo
- run: dotnet restore CheapShotcutRandomizer.sln
+ run: dotnet restore CheapShotcutRandomizer.slnx
- name: Check code formatting
working-directory: repo
- run: dotnet format CheapShotcutRandomizer.sln --verify-no-changes --verbosity diagnostic
+ run: dotnet format CheapShotcutRandomizer.slnx --verify-no-changes --verbosity diagnostic
continue-on-error: true
- name: Run code analysis
working-directory: repo
- run: dotnet build CheapShotcutRandomizer.sln --configuration Release /p:TreatWarningsAsErrors=false /p:WarningLevel=4
+ run: dotnet build CheapShotcutRandomizer.slnx --configuration Release /p:TreatWarningsAsErrors=false /p:WarningLevel=4
dependency-check:
name: Dependency Vulnerability Scan
@@ -156,7 +156,7 @@ jobs:
- name: Restore dependencies
working-directory: repo
- run: dotnet restore CheapShotcutRandomizer.sln
+ run: dotnet restore CheapShotcutRandomizer.slnx
- name: Check for vulnerable packages
working-directory: repo
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index cc04703..9c24f82 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -51,11 +51,11 @@ jobs:
- name: Restore dependencies
working-directory: repo
- run: dotnet restore CheapShotcutRandomizer.sln
+ run: dotnet restore CheapShotcutRandomizer.slnx
- name: Build for CodeQL
working-directory: repo
- run: dotnet build CheapShotcutRandomizer.sln --configuration Release --no-restore
+ run: dotnet build CheapShotcutRandomizer.slnx --configuration Release --no-restore
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml
index bc832bd..a679c67 100644
--- a/.github/workflows/coverage.yml
+++ b/.github/workflows/coverage.yml
@@ -37,11 +37,11 @@ jobs:
- name: Restore dependencies
working-directory: repo
- run: dotnet restore CheapShotcutRandomizer.sln
+ run: dotnet restore CheapShotcutRandomizer.slnx
- name: Build solution
working-directory: repo
- run: dotnet build CheapShotcutRandomizer.sln --configuration Debug --no-restore
+ run: dotnet build CheapShotcutRandomizer.slnx --configuration Debug --no-restore
- name: Run tests with coverage
working-directory: repo
diff --git a/.github/workflows/pr-review.yml b/.github/workflows/pr-review.yml
index 52d9a9d..bec55cd 100644
--- a/.github/workflows/pr-review.yml
+++ b/.github/workflows/pr-review.yml
@@ -12,7 +12,7 @@ permissions:
contents: read
env:
- CLAUDE_MODEL: "claude-sonnet-4-5-20250929"
+ CLAUDE_MODEL: "claude-sonnet-4-6"
MAX_TOKENS: 4096
MAX_DIFF_SIZE_BYTES: 100000
@@ -87,15 +87,24 @@ jobs:
CHANGED_FILES=$(jq -r '.changedFiles' pr-details.json)
# Build the review prompt
- PROMPT="You are an expert code reviewer for C#, .NET, Blazor, and Avalonia projects. Review this pull request and provide:
+ PROMPT="You are an expert code reviewer for C#, .NET, Blazor, and Avalonia projects.
- 1. **Summary**: Brief overview of changes
- 2. **Code Quality**: Assessment of code organization, patterns, and best practices
- 3. **Potential Issues**: Security concerns, bugs, performance issues, or breaking changes
- 4. **Recommendations**: Suggestions for improvements
- 5. **Verdict**: APPROVE, REQUEST CHANGES, or COMMENT
+ Review this pull request. Be extremely concise - only flag things that actually matter.
- Be constructive, concise, and focus on important issues. Use markdown formatting.
+ Format your review as:
+ 1. **Summary** (1-2 sentences max)
+ 2. **Code Quality** followed by a 1-5 star rating using filled ⭐ and empty ☆ (e.g. ⭐⭐⭐⭐☆). Below the rating, add one short sentence highlighting a strength or positive aspect of the PR.
+ 3. **Issues** (only bugs, security problems, deadlocks, resource leaks, or breaking changes - skip this section entirely if none found). Prefix each issue with a severity orb: 🔴 Critical, 🟡 Warning, 🟢 Minor. Place the orb directly before the issue title, e.g. 🔴 DependencyChecker.cs — process not disposed. Do NOT put orbs on section headers.
+ 4. **Verdict**: One of these three:
+ - **APPROVE** — code is good to merge
+ - **REQUEST CHANGES** — there are issues that should be fixed before merging. List the specific changes needed as a short bullet list directly under the verdict
+ - **REJECT** — code has fundamental or critical problems that require a rethink
+
+ Rules:
+ - Do NOT comment on style, naming, or minor preferences
+ - Do NOT suggest nice-to-have improvements or refactors
+ - Only raise issues you are confident are real problems
+ - If everything looks fine, just say so in 1-2 lines and approve
---
@@ -159,7 +168,7 @@ jobs:
INPUT_TOKENS=$(echo "$RESPONSE" | jq -r '.usage.input_tokens // 0')
OUTPUT_TOKENS=$(echo "$RESPONSE" | jq -r '.usage.output_tokens // 0')
- # Calculate estimated cost (Sonnet 4.5: $3/MTok input, $15/MTok output)
+ # Calculate estimated cost (Sonnet 4.6: $3/MTok input, $15/MTok output)
COST=$(echo "scale=4; ($INPUT_TOKENS * 3 + $OUTPUT_TOKENS * 15) / 1000000" | bc)
echo "📊 Token usage: ${INPUT_TOKENS} input + ${OUTPUT_TOKENS} output"
@@ -222,7 +231,7 @@ jobs:
echo "" >> comment.md
echo "---" >> comment.md
echo "📊 **Tokens**: ${INPUT_TOKENS} input + ${OUTPUT_TOKENS} output | 💰 **Cost**: ~\$${COST}" >> comment.md
- echo "*Generated by Claude Sonnet 4.5 via GitHub Actions*" >> comment.md
+ echo "*Generated by Claude Sonnet 4.6 via GitHub Actions*" >> comment.md
# Post or update comment
if [ "$UPDATE_MODE" = "edit" ]; then
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index a0621bd..0c1e02b 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -57,7 +57,7 @@ jobs:
- name: Restore dependencies
working-directory: repo
- run: dotnet restore CheapShotcutRandomizer.sln
+ run: dotnet restore CheapShotcutRandomizer.slnx
- name: Build Release (Self-Contained)
working-directory: repo
diff --git a/CheapShotcutRandomizer.Core/CheapShotcutRandomizer.Core.csproj b/CheapShotcutRandomizer.Core/CheapShotcutRandomizer.Core.csproj
index 9a41a85..8acef40 100644
--- a/CheapShotcutRandomizer.Core/CheapShotcutRandomizer.Core.csproj
+++ b/CheapShotcutRandomizer.Core/CheapShotcutRandomizer.Core.csproj
@@ -12,13 +12,13 @@
-
-
-
-
+
+
+
+
-
-
+
+
diff --git a/CheapShotcutRandomizer.Tests/CheapShotcutRandomizer.Tests.csproj b/CheapShotcutRandomizer.Tests/CheapShotcutRandomizer.Tests.csproj
index 6db2f25..130d00f 100644
--- a/CheapShotcutRandomizer.Tests/CheapShotcutRandomizer.Tests.csproj
+++ b/CheapShotcutRandomizer.Tests/CheapShotcutRandomizer.Tests.csproj
@@ -8,18 +8,21 @@
-
-
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
-
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/CheapShotcutRandomizer.csproj b/CheapShotcutRandomizer.csproj
index b1ead21..b238763 100644
--- a/CheapShotcutRandomizer.csproj
+++ b/CheapShotcutRandomizer.csproj
@@ -35,29 +35,29 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
+
-
+
-
+
-
-
-
+
+
+
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -72,7 +72,7 @@
-
+
diff --git a/CheapShotcutRandomizer.sln b/CheapShotcutRandomizer.sln
deleted file mode 100644
index e2bdc43..0000000
--- a/CheapShotcutRandomizer.sln
+++ /dev/null
@@ -1,65 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 18
-VisualStudioVersion = 18.0.11123.170
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CheapShotcutRandomizer", "CheapShotcutRandomizer.csproj", "{04F8EA5B-08BB-4856-AD67-D44069080E62}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CheapShotcutRandomizer.Tests", "CheapShotcutRandomizer.Tests\CheapShotcutRandomizer.Tests.csproj", "{99847745-2A37-451B-BE5F-726B8DC0308F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CheapShotcutRandomizer.Core", "CheapShotcutRandomizer.Core\CheapShotcutRandomizer.Core.csproj", "{CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Debug|x64.ActiveCfg = Debug|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Debug|x64.Build.0 = Debug|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Debug|x86.ActiveCfg = Debug|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Debug|x86.Build.0 = Debug|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Release|Any CPU.Build.0 = Release|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Release|x64.ActiveCfg = Release|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Release|x64.Build.0 = Release|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Release|x86.ActiveCfg = Release|Any CPU
- {04F8EA5B-08BB-4856-AD67-D44069080E62}.Release|x86.Build.0 = Release|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Debug|x64.ActiveCfg = Debug|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Debug|x64.Build.0 = Debug|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Debug|x86.Build.0 = Debug|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Release|Any CPU.Build.0 = Release|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Release|x64.ActiveCfg = Release|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Release|x64.Build.0 = Release|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Release|x86.ActiveCfg = Release|Any CPU
- {99847745-2A37-451B-BE5F-726B8DC0308F}.Release|x86.Build.0 = Release|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Debug|x64.ActiveCfg = Debug|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Debug|x64.Build.0 = Debug|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Debug|x86.ActiveCfg = Debug|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Debug|x86.Build.0 = Debug|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Release|Any CPU.Build.0 = Release|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Release|x64.ActiveCfg = Release|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Release|x64.Build.0 = Release|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Release|x86.ActiveCfg = Release|Any CPU
- {CC8ACBC6-028B-47FE-A12C-9A70D7EA549F}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {80AC644A-DC8C-4997-9A4F-32610A60940E}
- EndGlobalSection
-EndGlobal
diff --git a/CheapShotcutRandomizer.slnx b/CheapShotcutRandomizer.slnx
new file mode 100644
index 0000000..5ce4d1a
--- /dev/null
+++ b/CheapShotcutRandomizer.slnx
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Components/Pages/RenderQueue.razor b/Components/Pages/RenderQueue.razor
index cf6e21b..66e50ac 100644
--- a/Components/Pages/RenderQueue.razor
+++ b/Components/Pages/RenderQueue.razor
@@ -655,7 +655,7 @@
private async Task HandleClearAllJobs()
{
// Show confirmation dialog
- bool? dialogResult = await DialogService.ShowMessageBox(
+ bool? dialogResult = await DialogService.ShowMessageBoxAsync(
"Clear All Jobs",
"Are you sure you want to clear all jobs from the queue? This will cancel any running jobs and delete all completed and failed jobs. This action cannot be undone.",
yesText: "Clear All",
diff --git a/Components/Pages/Settings.razor b/Components/Pages/Settings.razor
index 84af8d0..097d613 100644
--- a/Components/Pages/Settings.razor
+++ b/Components/Pages/Settings.razor
@@ -4,8 +4,8 @@
@using CheapAvaloniaBlazor.Services
@using CheapHelpers.MediaProcessing.Services
@using SharpCompress.Archives
-@using SharpCompress.Common
-@inject SettingsService SettingsService
+@using SharpCompress.Readers
+@inject CheapShotcutRandomizer.Services.SettingsService SettingsService
@inject SvpDetectionService SvpDetection
@inject IDesktopInteropService DesktopInterop
@inject ISnackbar Snackbar
@@ -1681,18 +1681,15 @@ except Exception as e:
{
System.Diagnostics.Debug.WriteLine($"Starting extraction of {downloadPath}...");
- using (var archive = ArchiveFactory.Open(downloadPath))
+ var extractionReaderOptions = new ReaderOptions { ExtractFullPath = true, Overwrite = true };
+ using (var archive = ArchiveFactory.OpenArchive(downloadPath, extractionReaderOptions))
{
System.Diagnostics.Debug.WriteLine($"Archive opened, extracting {archive.Entries.Count()} entries...");
int extractedCount = 0;
foreach (var entry in archive.Entries.Where(e => !e.IsDirectory))
{
- entry.WriteToDirectory(extractPath, new ExtractionOptions()
- {
- ExtractFullPath = true,
- Overwrite = true
- });
+ entry.WriteToDirectory(extractPath);
extractedCount++;
// Log progress every 10 files
@@ -2211,10 +2208,11 @@ except Exception as e:
{
try
{
- using var archive = SharpCompress.Archives.SevenZip.SevenZipArchive.Open(modelDownloadPath);
+ var modelReaderOptions = new ReaderOptions { ExtractFullPath = true, Overwrite = true };
+ using var archive = SharpCompress.Archives.SevenZip.SevenZipArchive.OpenArchive(modelDownloadPath, modelReaderOptions);
foreach (var entry in archive.Entries.Where(e => !e.IsDirectory))
{
- entry.WriteToDirectory(modelExtractPath, new SharpCompress.Common.ExtractionOptions { ExtractFullPath = true, Overwrite = true });
+ entry.WriteToDirectory(modelExtractPath);
}
modelExtracted = true;
}
diff --git a/Components/Shared/AddRenderJobDialog.razor b/Components/Shared/AddRenderJobDialog.razor
index fcfb890..26d3da0 100644
--- a/Components/Shared/AddRenderJobDialog.razor
+++ b/Components/Shared/AddRenderJobDialog.razor
@@ -5,7 +5,7 @@
@inject IDesktopInteropService DesktopInterop
@inject HardwareDetectionService HardwareService
@inject ShotcutService ShotcutService
-@inject SettingsService SettingsService
+@inject CheapShotcutRandomizer.Services.SettingsService SettingsService
ReassembleVideoWithAudioAsync(
string audioPath,
string outputPath,
FFmpegRenderSettings settings,
- IProgress progress = null,
+ IProgress? progress = null,
CancellationToken cancellationToken = default)
{
if (!settings.UseHardwareAcceleration)
@@ -286,7 +286,7 @@ public async Task ExtractFramesAsync(
string outputFolder,
int fps,
bool useHardwareDecode = true,
- IProgress progress = null,
+ IProgress? progress = null,
CancellationToken cancellationToken = default)
{
Directory.CreateDirectory(outputFolder);
diff --git a/Services/MeltRenderService.cs b/Services/MeltRenderService.cs
index 7f24e47..e2b9662 100644
--- a/Services/MeltRenderService.cs
+++ b/Services/MeltRenderService.cs
@@ -42,7 +42,7 @@ public async Task RenderAsync(
string mltFilePath,
string outputPath,
MeltRenderSettings settings,
- IProgress progress = null,
+ IProgress? progress = null,
CancellationToken cancellationToken = default,
int? inPoint = null,
int? outPoint = null,