diff options
author | RaindropsSys <raindrops@equestria.dev> | 2023-10-24 17:43:37 +0200 |
---|---|---|
committer | RaindropsSys <raindrops@equestria.dev> | 2023-10-24 17:43:37 +0200 |
commit | ae187b6d75c8079da0be1dc288613bad8466fe61 (patch) | |
tree | 5ea0d34185a2270f29ffaa65e1f5258028d7d5d0 /desktop/node_modules/electron-packager/src/win32.js | |
download | mist-ae187b6d75c8079da0be1dc288613bad8466fe61.tar.gz mist-ae187b6d75c8079da0be1dc288613bad8466fe61.tar.bz2 mist-ae187b6d75c8079da0be1dc288613bad8466fe61.zip |
Initial commit
Diffstat (limited to 'desktop/node_modules/electron-packager/src/win32.js')
-rw-r--r-- | desktop/node_modules/electron-packager/src/win32.js | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/desktop/node_modules/electron-packager/src/win32.js b/desktop/node_modules/electron-packager/src/win32.js new file mode 100644 index 0000000..9416617 --- /dev/null +++ b/desktop/node_modules/electron-packager/src/win32.js @@ -0,0 +1,113 @@ +'use strict' + +const debug = require('debug')('electron-packager') +const path = require('path') +const { WrapperError } = require('cross-spawn-windows-exe') + +const App = require('./platform') +const common = require('./common') + +function updateWineMissingException (err) { + if (err instanceof WrapperError) { + err.message += '\n\n' + + 'Wine is required to use the appCopyright, appVersion, buildVersion, icon, and \n' + + 'win32metadata parameters for Windows targets.\n\n' + + 'See https://github.com/electron/electron-packager#building-windows-apps-from-non-windows-platforms for details.' + } + + return err +} + +class WindowsApp extends App { + get originalElectronName () { + return 'electron.exe' + } + + get newElectronName () { + return `${common.sanitizeAppName(this.executableName)}.exe` + } + + get electronBinaryPath () { + return path.join(this.stagingPath, this.newElectronName) + } + + generateRceditOptionsSansIcon () { + const win32metadata = { + FileDescription: this.opts.name, + InternalName: this.opts.name, + OriginalFilename: this.newElectronName, + ProductName: this.opts.name, + ...this.opts.win32metadata + } + + const rcOpts = { 'version-string': win32metadata } + + if (this.opts.appVersion) { + rcOpts['product-version'] = rcOpts['file-version'] = this.opts.appVersion + } + + if (this.opts.buildVersion) { + rcOpts['file-version'] = this.opts.buildVersion + } + + if (this.opts.appCopyright) { + rcOpts['version-string'].LegalCopyright = this.opts.appCopyright + } + + const manifestProperties = ['application-manifest', 'requested-execution-level'] + for (const manifestProperty of manifestProperties) { + if (win32metadata[manifestProperty]) { + rcOpts[manifestProperty] = win32metadata[manifestProperty] + } + } + + return rcOpts + } + + async getIconPath () { + if (!this.opts.icon) { + return Promise.resolve() + } + + return this.normalizeIconExtension('.ico') + } + + needsRcedit () { + return this.opts.icon || this.opts.win32metadata || this.opts.appCopyright || this.opts.appVersion || this.opts.buildVersion + } + + async runRcedit () { + /* istanbul ignore if */ + if (!this.needsRcedit()) { + return Promise.resolve() + } + + const rcOpts = this.generateRceditOptionsSansIcon() + + // Icon might be omitted or only exist in one OS's format, so skip it if normalizeExt reports an error + const icon = await this.getIconPath() + if (icon) { + rcOpts.icon = icon + } + + debug(`Running rcedit with the options ${JSON.stringify(rcOpts)}`) + try { + await require('rcedit')(this.electronBinaryPath, rcOpts) + } catch (err) { + throw updateWineMissingException(err) + } + } + + async create () { + await this.initialize() + await this.renameElectron() + await this.copyExtraResources() + await this.runRcedit() + return this.move() + } +} + +module.exports = { + App: WindowsApp, + updateWineMissingException: updateWineMissingException +} |