diff --git a/pkgs/by-name/dd/ddm/0001-Make-findPath-its-calls-behave-well-with-store.patch b/pkgs/by-name/dd/ddm/0001-Make-findPath-its-calls-behave-well-with-store.patch new file mode 100644 index 000000000000..3dcc79124ec3 --- /dev/null +++ b/pkgs/by-name/dd/ddm/0001-Make-findPath-its-calls-behave-well-with-store.patch @@ -0,0 +1,58 @@ +From 3b1bcc92389e8468cd3790dfd223cb653b5f753f Mon Sep 17 00:00:00 2001 +From: OPNA2608 +Date: Sun, 16 Mar 2025 19:56:39 +0100 +Subject: [PATCH] Make findPath & its calls behave well with store + +- images is a cache of downloaded card images. + put that into ~/.cache/ddm/images and allow it to be created. +- campaigns, cubes & constructed are user-downloaded files that set up possible game styles. + create & populate them for the game, and tell it to not try to create them on its own. +--- + index.js | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/index.js b/index.js +index 738bfca..3ac32e8 100755 +--- a/index.js ++++ b/index.js +@@ -75,16 +75,16 @@ app.on('ready', () => { + const isDir = fs.statSync(fullPath).isDirectory(); + if (containsDanger(fullPath)) throw new Error ("Dangerous files detected"); + if (isDir) return fullPath; +- } catch (err) { throw new Error("Bad path Error 1", err); } ++ } catch (err) { throw new Error(`Bad path Error 1: ${err.message}`, err); } + + else try { //dev +- const fullPath = path.join(__dirname, folderName); ++ const fullPath = path.join(allowFolderCreation ? (process.env.HOME + "/.cache/ddm") : __dirname, folderName); + if (!fs.existsSync(fullPath) && allowFolderCreation) fs.mkdirSync(fullPath, {recursive: true}); + const isDir = fs.statSync(fullPath).isDirectory(); + console.log(fullPath) + if (containsDanger(fullPath)) throw new Error (`DDM refused entry to path: ${fullPath}`); + if (isDir) return fullPath; +- } catch (err) { throw new Error("Bad path Error 2", err); } ++ } catch (err) { throw new Error(`Bad path Error 2: ${err.message}`, err); } + + } + +@@ -108,7 +108,7 @@ app.on('ready', () => { + + try { + if (!["campaigns", "cubes", "constructed"].includes(folderName)) throw new Error(`bad folder name ${folderName}`); +- const folderPath = findPath(folderName, true); ++ const folderPath = findPath(folderName, false); + if (!fs.existsSync(folderPath)) fs.mkdirSync(folderPath); + const files = fs.readdirSync(folderPath); + if (folderName === "campaigns" ) return files.filter(file => fs.statSync (path.join(folderPath, file)).isDirectory()); +@@ -127,7 +127,7 @@ app.on('ready', () => { + + ipcMain.handle('open-local-folder', async (event, folderName) => { + if (!["campaigns", "cubes", "constructed"].includes(folderName)) throw new Error(`bad folder name ${constructed}`); +- const folderPath = findPath(folderName, true); ++ const folderPath = findPath(folderName, false); + try { shell.openPath(folderPath); } + catch (error) { console.error(error); } + }); +-- +2.48.1 + diff --git a/pkgs/by-name/dd/ddm/package.nix b/pkgs/by-name/dd/ddm/package.nix index ca3cc7af51ec..5443a7b4beec 100644 --- a/pkgs/by-name/dd/ddm/package.nix +++ b/pkgs/by-name/dd/ddm/package.nix @@ -2,6 +2,7 @@ stdenvNoCC, lib, requireFile, + asar, copyDesktopItems, electron, makeDesktopItem, @@ -10,21 +11,23 @@ campaigns ? [ ], cubes ? [ ], + constructed ? [ ], }: stdenvNoCC.mkDerivation (finalAttrs: { pname = "ddm"; - version = "3.0.2"; + version = "4.0.0"; src = requireFile { name = "DungeonDuelMonsters-linux-x64.zip"; - hash = "sha256-APIFQC5k6J0K5Q/e5poW8wKGL67NUbqKTJL4Ohd1K18="; + hash = "sha256-Ycy5Cbd4NR/TptVnl5wV154uA0JU0UzIRHTAi/xm0cs="; url = "https://mikaygo.itch.io/ddm"; }; strictDeps = true; nativeBuildInputs = [ + asar copyDesktopItems makeWrapper unzip @@ -39,14 +42,18 @@ stdenvNoCC.mkDerivation (finalAttrs: { mkdir -p $out/{bin,share/icons/hicolor/512x512/apps,share/ddm} - mv -t $out/share/ddm/ ./resources/app/* + asar extract ./resources/app.asar $out/share/ddm/ + + patch -d $out/share/ddm/ -p1 < ${./0001-Make-findPath-its-calls-behave-well-with-store.patch} + ln -s $out/share/ddm/icon.png $out/share/icons/hicolor/512x512/apps/ddm.png makeWrapper ${lib.getExe electron} $out/bin/ddm \ --add-flags "\''${NIXOS_OZONE_WL:+\''${WAYLAND_DISPLAY:+--ozone-platform-hint=auto --enable-features=WaylandWindowDecorations --enable-wayland-ime=true}}" \ --add-flags "$out/share/ddm" - # Install externally-downloaded campaign packs & cube lists + # Install externally-downloaded campaign packs and cube & constructed lists + mkdir $out/share/ddm/{campaigns,cubes,constructed} '' + lib.concatMapStringsSep "\n" (campaignZip: '' unzip "${campaignZip}" -d $out/share/ddm/campaigns/ @@ -54,6 +61,9 @@ stdenvNoCC.mkDerivation (finalAttrs: { + lib.concatMapStringsSep "\n" (cubeFile: '' cp "${cubeFile}" $out/share/ddm/cubes/ '') cubes + + lib.concatMapStringsSep "\n" (constructedFile: '' + cp "${constructedFile}" $out/share/ddm/constructed/ + '') constructed + '' runHook postInstall