From a339b0cd1ae5623cea1834efef4174fc5315d0ed Mon Sep 17 00:00:00 2001 From: Adrian Petrescu Date: Sun, 4 Sep 2022 01:19:38 -0300 Subject: [PATCH] Perform theme copy natively without recursive-copy (#901) There's some sort of issue with recursive-copy's interaction with Electron's ASAR-patched fs module. --- package.json | 1 - src/components/drawers/PreferencesDrawer.js | 15 ++++++++++----- src/modules/helper.js | 12 ++++++++++++ 3 files changed, 22 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 8ca6f576..ba9544f1 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,6 @@ "pikaday": "^1.8.0", "preact": "^10.4.0", "react-markdown": "^8.0.3", - "recursive-copy": "^2.0.10", "remark-breaks": "^3.0.2", "rimraf": "^3.0.2", "uuid": "^7.0.3", diff --git a/src/components/drawers/PreferencesDrawer.js b/src/components/drawers/PreferencesDrawer.js index bcc25a4f..b5039013 100644 --- a/src/components/drawers/PreferencesDrawer.js +++ b/src/components/drawers/PreferencesDrawer.js @@ -4,7 +4,6 @@ import * as remote from '@electron/remote' import {h, Component} from 'preact' import classNames from 'classnames' import {join} from 'path' -import copy from 'recursive-copy' import rimraf from 'rimraf' import {v4 as uuid} from 'uuid' import natsort from 'natsort' @@ -12,7 +11,11 @@ import natsort from 'natsort' import i18n from '../../i18n.js' import sabaki from '../../modules/sabaki.js' import {showOpenDialog, showMessageBox} from '../../modules/dialog.js' -import {noop, isWritableDirectory} from '../../modules/helper.js' +import { + copyFolderSync, + noop, + isWritableDirectory +} from '../../modules/helper.js' import * as gtplogger from '../../modules/gtplogger.js' import Drawer from './Drawer.js' @@ -449,12 +452,14 @@ class ThemesTab extends Component { let id = uuid() - copy(result[0], join(setting.themesDirectory, id), err => { - if (err) return showMessageBox(t('Installation failed.'), 'error') + try { + copyFolderSync(result[0], join(setting.themesDirectory, id)) setting.loadThemes() setting.set('theme.current', id) - }) + } catch (err) { + return showMessageBox(t('Installation failed.'), 'error') + } } setting.events.on(sabaki.window.id, 'change', ({key, value}) => { diff --git a/src/modules/helper.js b/src/modules/helper.js index 9c21a138..728073c6 100644 --- a/src/modules/helper.js +++ b/src/modules/helper.js @@ -1,4 +1,5 @@ import fs from 'fs' +import {join} from 'path' let id = 0 @@ -142,6 +143,17 @@ export function isWritableDirectory(path) { } } +export function copyFolderSync(from, to) { + fs.mkdirSync(to) + fs.readdirSync(from).forEach(element => { + if (fs.lstatSync(join(from, element)).isFile()) { + fs.copyFileSync(join(from, element), join(to, element)) + } else { + copyFolderSync(join(from, element), join(to, element)) + } + }) +} + export function getScore(board, areaMap, {komi = 0, handicap = 0} = {}) { let score = { area: [0, 0],