From f1f7d78c4e01132868122e7201e206bf36835d54 Mon Sep 17 00:00:00 2001 From: Subhamoy Biswas Date: Thu, 20 Feb 2025 12:43:35 +0530 Subject: [PATCH] (feat): added support for arch linux --- src-tauri/capabilities/shell.json | 7 +++ src/lib/utils.ts | 1 + src/pages/home.tsx | 73 ++++++++++++++++++++++++++++--- src/types.ts | 4 ++ 4 files changed, 78 insertions(+), 7 deletions(-) diff --git a/src-tauri/capabilities/shell.json b/src-tauri/capabilities/shell.json index 2eafe4d..ef4774d 100644 --- a/src-tauri/capabilities/shell.json +++ b/src-tauri/capabilities/shell.json @@ -49,6 +49,13 @@ "--version" ] }, + { + "name": "is-pacman-installed", + "cmd": "pacman", + "args": [ + "--version" + ] + }, { "name": "is-python3-installed", "cmd": "python3", diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 87f48f6..5e91a55 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -103,6 +103,7 @@ export function extractVersion(output: string): string | null { /OS Version:.*Build (\d+)/, // Pattern for Windows build /apt (\d+\.\d+\.\d+)/, // Pattern for apt /(\d+\.\d+\.\d+)/, // Pattern for dnf + /Pacman v(\d+\.\d+\.\d+)/, // Pattern for pacman /ProductVersion:\s+(\d+\.\d+(\.\d+)?)/, // Pattern for macOS version /Homebrew (\d+\.\d+\.\d+)/, // Pattern for Homebrew ]; diff --git a/src/pages/home.tsx b/src/pages/home.tsx index ab574da..aded403 100644 --- a/src/pages/home.tsx +++ b/src/pages/home.tsx @@ -36,6 +36,10 @@ export default function HomePage() { installed: false, version: null, }, + pacman: { + installed: false, + version: null, + }, brew: { installed: false, version: null, @@ -99,6 +103,15 @@ export default function HomePage() { } })); }), + isInstalled('pacman', '--version').then((result) => { + setInstalledPrograms((prevState) => ({ + ...prevState, + pacman: { + installed: result.installed, + version: result.output ? extractVersion(result.output) : null, + } + })); + }), isInstalled('homebrew', '--version').then((result) => { setInstalledPrograms((prevState) => ({ ...prevState, @@ -299,7 +312,7 @@ export default function HomePage() {

PytubePP: {installedPrograms.pytubepp.installed ? 'installed' : 'not installed'} {installedPrograms.pytubepp.version ? `(${installedPrograms.pytubepp.version})` : ''}

{installedPrograms.pytubepp.installed ? : installedPrograms.pip3.installed ? : null} - {(!installedPrograms.apt.installed && (!installedPrograms.python3.installed || !installedPrograms.ffmpeg.installed)) ? + {(!installedPrograms.apt.installed && (!installedPrograms.python3.installed || !installedPrograms.ffmpeg.installed || !installedPrograms.nodejs.installed)) ? APT Not Found @@ -317,7 +330,7 @@ export default function HomePage() { : null} - {(installedPrograms.python3.installed && installedPrograms.ffmpeg.installed && installedPrograms.pytubepp.installed) ? + {(installedPrograms.python3.installed && installedPrograms.ffmpeg.installed && installedPrograms.nodejs.installed && installedPrograms.pytubepp.installed) ? Ready @@ -345,7 +358,7 @@ export default function HomePage() {

PytubePP: {installedPrograms.pytubepp.installed ? 'installed' : 'not installed'} {installedPrograms.pytubepp.version ? `(${installedPrograms.pytubepp.version})` : ''}

{installedPrograms.pytubepp.installed ? : installedPrograms.pip3.installed ? : null} - {(!installedPrograms.dnf.installed && (!installedPrograms.python3.installed || !installedPrograms.ffmpeg.installed)) ? + {(!installedPrograms.dnf.installed && (!installedPrograms.python3.installed || !installedPrograms.ffmpeg.installed || !installedPrograms.nodejs.installed)) ? DNF Not Found @@ -363,7 +376,53 @@ export default function HomePage() { : null} - {(installedPrograms.python3.installed && installedPrograms.ffmpeg.installed && installedPrograms.pytubepp.installed) ? + {(installedPrograms.python3.installed && installedPrograms.ffmpeg.installed && installedPrograms.nodejs.installed && installedPrograms.pytubepp.installed) ? + + + Ready + + Everything looks ok! You can close this window now. Make sure it's always running in the background. + + + : null} + + : distroId && distroPkgMngr && distroPkgMngr === 'pacman' ? /* Section for Arch Linux */ +
+
+

Python: {installedPrograms.python3.installed ? 'installed' : 'not installed'} {installedPrograms.python3.version ? `(${installedPrograms.python3.version})` : ''}

+ {installedPrograms.python3.installed ? installedPrograms.python3.version ? compareVersions(installedPrograms.python3.version, '3.8') < 0 ? : : installedPrograms.pacman.installed ? : : null} +
+
+

FFmpeg: {installedPrograms.ffmpeg.installed ? 'installed' : 'not installed'} {installedPrograms.ffmpeg.version ? `(${installedPrograms.ffmpeg.version})` : ''}

+ {installedPrograms.ffmpeg.installed ? : installedPrograms.pacman.installed ? : null} +
+
+

Node.js: {installedPrograms.nodejs.installed ? 'installed' : 'not installed'} {installedPrograms.nodejs.version ? `(${installedPrograms.nodejs.version})` : ''}

+ {installedPrograms.nodejs.installed ? : installedPrograms.pacman.installed ? : null} +
+
+

PytubePP: {installedPrograms.pytubepp.installed ? 'installed' : 'not installed'} {installedPrograms.pytubepp.version ? `(${installedPrograms.pytubepp.version})` : ''}

+ {installedPrograms.pytubepp.installed ? : installedPrograms.pip3.installed ? : null} +
+ {(!installedPrograms.pacman.installed && (!installedPrograms.python3.installed || !installedPrograms.ffmpeg.installed || !installedPrograms.nodejs.installed)) ? + + + Pacman Not Found + + Pacman is required to install necessary packages. Please install it manually for your distro. + + + : null} + {(!installedPrograms.pip3.installed && !installedPrograms.pytubepp.installed) ? + + + PIP Not Found + + PIP is required to install necessary python packages. Please install it now to continue: + + + : null} + {(installedPrograms.python3.installed && installedPrograms.ffmpeg.installed && installedPrograms.nodejs.installed && installedPrograms.pytubepp.installed) ? Ready @@ -391,7 +450,7 @@ export default function HomePage() {

PytubePP: {installedPrograms.pytubepp.installed ? 'installed' : 'not installed'} {installedPrograms.pytubepp.version ? `(${installedPrograms.pytubepp.version})` : ''}

{installedPrograms.pytubepp.installed ? : installedPrograms.pip.installed ? : null}
- {(!installedPrograms.winget.installed && (!installedPrograms.python.installed || !installedPrograms.ffmpeg.installed)) ? + {(!installedPrograms.winget.installed && (!installedPrograms.python.installed || !installedPrograms.ffmpeg.installed || !installedPrograms.nodejs.installed)) ? WinGet Not Found @@ -400,7 +459,7 @@ export default function HomePage() { : null} - {(installedPrograms.python.installed && installedPrograms.ffmpeg.installed && installedPrograms.pytubepp.installed) ? + {(installedPrograms.python.installed && installedPrograms.ffmpeg.installed && installedPrograms.nodejs.installed && installedPrograms.pytubepp.installed) ? Ready @@ -428,7 +487,7 @@ export default function HomePage() {

PytubePP: {installedPrograms.pytubepp.installed ? 'installed' : 'not installed'} {installedPrograms.pytubepp.version ? `(${installedPrograms.pytubepp.version})` : ''}

{installedPrograms.pytubepp.installed ? : installedPrograms.pip3.installed ? : null} - {(!installedPrograms.brew.installed && (!installedPrograms.python3.installed || !installedPrograms.ffmpeg.installed)) ? + {(!installedPrograms.brew.installed && (!installedPrograms.python3.installed || !installedPrograms.ffmpeg.installed || !installedPrograms.nodejs.installed)) ? Homebrew Not Found diff --git a/src/types.ts b/src/types.ts index 87b6951..b8932fb 100644 --- a/src/types.ts +++ b/src/types.ts @@ -24,6 +24,10 @@ export interface InstalledPrograms { installed: boolean; version: string | null; }; + pacman: { + installed: boolean; + version: string | null; + }; brew: { installed: boolean; version: string | null;