diff --git a/pkgs/by-name/vd/vdhcoapp/ffmpeg-filepicker.patch b/pkgs/by-name/vd/vdhcoapp/ffmpeg-filepicker.patch new file mode 100644 index 000000000000..f6fb777e186e --- /dev/null +++ b/pkgs/by-name/vd/vdhcoapp/ffmpeg-filepicker.patch @@ -0,0 +1,46 @@ +diff --git a/src/converter.js b/src/converter.js +index af7b4c3..20da407 100644 +--- a/src/converter.js ++++ b/src/converter.js +@@ -1,4 +1,4 @@ +-import open from 'open'; ++const open = import('open'); + + const os = require("os"); + const path = require('path'); +@@ -9,9 +9,9 @@ const rpc = require('./weh-rpc'); + + const exec_dir = path.dirname(process.execPath); + +-const ffmpeg = findExecutableFullPath("ffmpeg", exec_dir); +-const ffprobe = findExecutableFullPath("ffprobe", exec_dir); +-const filepicker = findExecutableFullPath("filepicker", exec_dir); ++const ffmpeg = "@ffmpeg@/bin/ffmpeg"; ++const ffprobe = "@ffmpeg@/bin/ffprobe"; ++const filepicker = "@filepicker@"; + + if (!fileExistsSync(ffmpeg)) { + logger.error("ffmpeg not found. Install ffmpeg and make sure it's in your path."); +diff --git a/src/main.js b/src/main.js +index 47b92de..e2e9402 100644 +--- a/src/main.js ++++ b/src/main.js +@@ -1,4 +1,4 @@ +-const config = require('config.json'); ++const config = require('./config.json'); + const converter = require('./converter'); + const os = require("os"); + +diff --git a/src/native-autoinstall.js b/src/native-autoinstall.js +index 556a22b..c729568 100644 +--- a/src/native-autoinstall.js ++++ b/src/native-autoinstall.js +@@ -1,7 +1,7 @@ + const os = require("os"); + const path = require("path"); + const { spawn, exec } = require('child_process'); +-const config = require('config.json'); ++const config = require('./config.json'); + + let fs; + if (process.versions.node.startsWith("10")) { \ No newline at end of file diff --git a/pkgs/by-name/vd/vdhcoapp/filepicker.nix b/pkgs/by-name/vd/vdhcoapp/filepicker.nix new file mode 100644 index 000000000000..7aec0f9e2838 --- /dev/null +++ b/pkgs/by-name/vd/vdhcoapp/filepicker.nix @@ -0,0 +1,40 @@ +{ lib +, rustPlatform +, fetchFromGitHub +, pkg-config +, atk +, gtk3 +, glib +}: + +rustPlatform.buildRustPackage rec { + pname = "filepicker"; + version = "1.0.1"; + + src = fetchFromGitHub { + owner = "paulrouget"; + repo = "static-filepicker"; + rev = "v${version}"; + hash = "sha256-7sRzf3SA9RSBf4O36olXgka8c6Bufdb0qsuTofVe55s="; + }; + + cargoHash = "sha256-aal7ppFkCpNc+QTS4Qklsb9WfJ65QqG6p1eOskiX+/Q="; + + buildInputs = [ + atk + gtk3 + glib + ]; + + nativeBuildInputs = [ + pkg-config + ]; + + meta = with lib; { + description = "File picker used by VDHCoApp"; + homepage = "https://github.com/paulrouget/static-filepicker"; + license = licenses.gpl2; + mainProgram = "filepicker"; + maintainers = with maintainers; [ hannesgith ]; + }; +} diff --git a/pkgs/by-name/vd/vdhcoapp/package.nix b/pkgs/by-name/vd/vdhcoapp/package.nix new file mode 100644 index 000000000000..ad61515b9ecb --- /dev/null +++ b/pkgs/by-name/vd/vdhcoapp/package.nix @@ -0,0 +1,83 @@ +{ lib +, fetchFromGitHub +, buildNpmPackage +, nodejs +, ffmpeg +, callPackage +, substituteAll +, makeWrapper +, toml2json +, jq +}: +buildNpmPackage rec { + pname = "vdhcoapp"; + version = "2.0.19"; + + src = fetchFromGitHub { + owner = "aclap-dev"; + repo = "vdhcoapp"; + rev = "v${version}"; + hash = "sha256-8xeZvqpRq71aShVogiwlVD3gQoPGseNOmz5E3KbsZxU="; + }; + + sourceRoot = "${src.name}/app"; + npmDepsHash = "sha256-E032U2XZdyTER6ROkBosOTn7bweDXHl8voC3BQEz8Wg="; + dontNpmBuild = true; + + nativeBuildInputs = [ + makeWrapper + toml2json + jq + ]; + + patches = [ + (substituteAll { + src = ./ffmpeg-filepicker.patch; + inherit ffmpeg; + filepicker = lib.getExe (callPackage ./filepicker.nix {}); + }) + ]; + + postPatch = '' + # Cannot use patch, setting placeholder here + substituteInPlace src/native-autoinstall.js \ + --replace process.execPath "\"${placeholder "out"}/bin/vdhcoapp\"" + ''; + + preBuild = '' + toml2json --pretty ../config.toml > src/config.json + ''; + + installPhase = '' + runHook preInstall + mkdir -p $out/opt/vdhcoapp + cp -r . "$out/opt/vdhcoapp" + + makeWrapper ${nodejs}/bin/node $out/bin/vdhcoapp \ + --add-flags $out/opt/vdhcoapp/src/main.js + + generateManifest() { + type=$1 + outputFolder=$2 + mkdir -p $outputFolder + manifestName=$(jq -r '.meta.id' src/config.json).json + jq '.store.'$type'.manifest * (.meta | with_entries(select (.key == "description")) * {"name": .id}) * {"path" : "${placeholder "out"}/bin/vdhcoapp"}' src/config.json > $outputFolder/$manifestName + } + + generateManifest google $out/etc/opt/chrome/native-messaging-hosts + generateManifest google $out/etc/chromium/native-messaging-hosts + generateManifest mozilla $out/lib/mozilla/native-messaging-hosts + generateManifest google $out/etc/opt/edge/native-messaging-hosts + + runHook postInstall + ''; + + meta = with lib; { + description = "Companion application for the Video DownloadHelper browser add-on"; + homepage = "https://www.downloadhelper.net/"; + license = licenses.gpl2; + platforms = lib.platforms.linux; + maintainers = with maintainers; [ hannesgith ]; + mainProgram = "vdhcoapp"; + }; +}