From 728d0f8aef6abe82520071b119966806b0ccc25c Mon Sep 17 00:00:00 2001 From: Sam Chau Date: Thu, 15 Jan 2026 17:04:24 +1030 Subject: [PATCH] refactor(parser): move parser into src/services, remove docker setup for dev environment, add dev startup script --- .gitignore | 7 + deno.json | 4 +- deno.lock | 3 +- scripts/dev.ts | 77 ++++++++++ services/parser/Dockerfile | 17 --- services/parser/docker-compose.yml | 14 -- src/lib/client/ui/form/IconCheckbox.svelte | 132 ++++++------------ .../ui/navigation/pageNav/groupHeader.svelte | 3 +- .../general/components/UISettings.svelte | 4 +- .../services}/parser/Core/EpisodeParser.cs | 0 .../services}/parser/Core/Language.cs | 0 .../services}/parser/Core/LanguageParser.cs | 0 .../services}/parser/Core/ParserCommon.cs | 0 .../services}/parser/Core/QualityParser.cs | 0 .../services}/parser/Core/RegexReplace.cs | 0 .../parser/Core/ReleaseGroupParser.cs | 0 .../services}/parser/Core/TitleParser.cs | 0 .../services}/parser/Core/Types.cs | 0 .../services}/parser/Parser.csproj | 0 {services => src/services}/parser/Program.cs | 0 20 files changed, 138 insertions(+), 123 deletions(-) create mode 100644 scripts/dev.ts delete mode 100644 services/parser/Dockerfile delete mode 100644 services/parser/docker-compose.yml rename {services => src/services}/parser/Core/EpisodeParser.cs (100%) rename {services => src/services}/parser/Core/Language.cs (100%) rename {services => src/services}/parser/Core/LanguageParser.cs (100%) rename {services => src/services}/parser/Core/ParserCommon.cs (100%) rename {services => src/services}/parser/Core/QualityParser.cs (100%) rename {services => src/services}/parser/Core/RegexReplace.cs (100%) rename {services => src/services}/parser/Core/ReleaseGroupParser.cs (100%) rename {services => src/services}/parser/Core/TitleParser.cs (100%) rename {services => src/services}/parser/Core/Types.cs (100%) rename {services => src/services}/parser/Parser.csproj (100%) rename {services => src/services}/parser/Program.cs (100%) diff --git a/.gitignore b/.gitignore index eeb5c91..bb64ede 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,10 @@ Thumbs.db # Vite vite.config.js.timestamp-* vite.config.ts.timestamp-* + +# .NET +bin/ +obj/ +*.user +*.suo +.vs/ diff --git a/deno.json b/deno.json index 7133cb5..abc9cec 100644 --- a/deno.json +++ b/deno.json @@ -27,7 +27,9 @@ "@std/yaml": "jsr:@std/yaml@^1.0.10" }, "tasks": { - "dev": "DENO_ENV=development PORT=6969 HOST=0.0.0.0 APP_BASE_PATH=./dist/dev PARSER_HOST=localhost PARSER_PORT=5000 deno run -A npm:vite dev", + "dev": "deno run -A scripts/dev.ts", + "dev:vite": "DENO_ENV=development PORT=6969 HOST=0.0.0.0 APP_BASE_PATH=./dist/dev PARSER_HOST=localhost PARSER_PORT=5000 deno run -A npm:vite dev", + "dev:parser": "cd src/services/parser && dotnet watch run --urls http://localhost:5000", "build": "APP_BASE_PATH=./dist/build deno run -A npm:vite build && deno compile --no-check --allow-net --allow-read --allow-write --allow-env --allow-ffi --allow-run --target x86_64-unknown-linux-gnu --output dist/build/profilarr dist/build/mod.ts", "build:windows": "APP_BASE_PATH=./dist/build deno run -A npm:vite build && deno compile --no-check --allow-net --allow-read --allow-write --allow-env --allow-ffi --allow-run --target x86_64-pc-windows-msvc --output dist/windows/profilarr.exe dist/build/mod.ts", "preview": "PORT=6868 HOST=0.0.0.0 APP_BASE_PATH=./dist/dev PARSER_HOST=localhost PARSER_PORT=5000 ./dist/build/profilarr", diff --git a/deno.lock b/deno.lock index 41d8247..957fac1 100644 --- a/deno.lock +++ b/deno.lock @@ -2112,7 +2112,8 @@ "npm:tailwindcss@^4.1.13", "npm:typescript-eslint@^8.44.1", "npm:typescript@^5.9.2", - "npm:vite@^7.1.7" + "npm:vite@^7.1.7", + "npm:yaml@^2.8.2" ] } } diff --git a/scripts/dev.ts b/scripts/dev.ts new file mode 100644 index 0000000..4b80a03 --- /dev/null +++ b/scripts/dev.ts @@ -0,0 +1,77 @@ +/** + * Dev script that runs parser and server concurrently with labeled output + */ + +const colors = { + parser: '\x1b[33m', // yellow + server: '\x1b[34m', // blue + reset: '\x1b[0m' +}; + +async function streamOutput( + reader: ReadableStreamDefaultReader, + label: string, + color: string +) { + const decoder = new TextDecoder(); + while (true) { + const { done, value } = await reader.read(); + if (done) break; + const text = decoder.decode(value); + for (const line of text.split('\n')) { + if (line.trim()) { + console.log(`${color}[${label}]${colors.reset} ${line}`); + } + } + } +} + +async function runParser() { + const cmd = new Deno.Command('dotnet', { + args: ['watch', 'run', '--urls', 'http://localhost:5000'], + cwd: 'src/services/parser', + stdout: 'piped', + stderr: 'piped' + }); + + const process = cmd.spawn(); + + await Promise.all([ + streamOutput(process.stdout.getReader(), 'parser', colors.parser), + streamOutput(process.stderr.getReader(), 'parser', colors.parser) + ]); + + return process.status; +} + +async function runVite() { + const cmd = new Deno.Command('deno', { + args: ['run', '-A', 'npm:vite', 'dev'], + env: { + ...Deno.env.toObject(), + DENO_ENV: 'development', + PORT: '6969', + HOST: '0.0.0.0', + APP_BASE_PATH: './dist/dev', + PARSER_HOST: 'localhost', + PARSER_PORT: '5000' + }, + stdout: 'piped', + stderr: 'piped' + }); + + const process = cmd.spawn(); + + await Promise.all([ + streamOutput(process.stdout.getReader(), 'server', colors.server), + streamOutput(process.stderr.getReader(), 'server', colors.server) + ]); + + return process.status; +} + +console.log(`${colors.parser}[parser]${colors.reset} Starting .NET parser service...`); +console.log(`${colors.server}[server]${colors.reset} Starting Vite dev server...`); +console.log(''); + +await Promise.all([runParser(), runVite()]); diff --git a/services/parser/Dockerfile b/services/parser/Dockerfile deleted file mode 100644 index c41943a..0000000 --- a/services/parser/Dockerfile +++ /dev/null @@ -1,17 +0,0 @@ -FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build -WORKDIR /src - -COPY *.csproj . -RUN dotnet restore - -COPY . . -RUN dotnet publish -c Release -o /app - -FROM mcr.microsoft.com/dotnet/aspnet:8.0 -WORKDIR /app -COPY --from=build /app . - -ENV ASPNETCORE_URLS=http://+:5000 -EXPOSE 5000 - -ENTRYPOINT ["dotnet", "Parser.dll"] diff --git a/services/parser/docker-compose.yml b/services/parser/docker-compose.yml deleted file mode 100644 index a235f31..0000000 --- a/services/parser/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -services: - parser: - container_name: profilarr_parser - build: . - ports: - - "5000:5000" - environment: - - ASPNETCORE_ENVIRONMENT=Development - healthcheck: - test: ["CMD", "curl", "-f", "http://localhost:5000/health"] - interval: 30s - timeout: 10s - retries: 3 - start_period: 10s diff --git a/src/lib/client/ui/form/IconCheckbox.svelte b/src/lib/client/ui/form/IconCheckbox.svelte index dde175c..e5c436e 100644 --- a/src/lib/client/ui/form/IconCheckbox.svelte +++ b/src/lib/client/ui/form/IconCheckbox.svelte @@ -1,11 +1,24 @@ {#if isCustomColor} @@ -25,104 +52,35 @@ role="checkbox" aria-checked={checked} {disabled} - on:click + {onclick} class="flex h-5 w-5 items-center justify-center border-2 transition-all {shapeClass} {disabled ? 'cursor-not-allowed opacity-50' : 'cursor-pointer focus:outline-none'} {checked ? 'hover:brightness-110' - : 'bg-neutral-50 hover:bg-neutral-100 hover:border-neutral-400 dark:bg-neutral-800 dark:hover:bg-neutral-700 dark:hover:border-neutral-500'}" + : uncheckedClass}" style="background-color: {checked ? color : ''}; border-color: {checked ? color : 'rgb(229, 231, 235)'};" > {#if checked} - - {/if} - -{:else if isAccent} - -{:else if color === 'green'} - -{:else if color === 'red'} - -{:else if color === 'blue'} - {:else} - {/if} diff --git a/src/lib/client/ui/navigation/pageNav/groupHeader.svelte b/src/lib/client/ui/navigation/pageNav/groupHeader.svelte index 4cbf6eb..cb41419 100644 --- a/src/lib/client/ui/navigation/pageNav/groupHeader.svelte +++ b/src/lib/client/ui/navigation/pageNav/groupHeader.svelte @@ -28,7 +28,8 @@ : ''}" > {#if icon} - + {@const Icon = icon} + {/if} {label} diff --git a/src/routes/settings/general/components/UISettings.svelte b/src/routes/settings/general/components/UISettings.svelte index 79e6468..0cb3e8d 100644 --- a/src/routes/settings/general/components/UISettings.svelte +++ b/src/routes/settings/general/components/UISettings.svelte @@ -32,12 +32,12 @@