Get electron working on windows

This commit is contained in:
jobevers 2017-02-10 13:11:26 -06:00
parent 23da217634
commit eebe8d9b37
21 changed files with 169 additions and 93 deletions

6
.gitignore vendored
View file

@ -2,4 +2,8 @@ app/dist
app/node_modules
node_modules
LBRY-darwin-x64
dist
dist
lbrynet/build
lbrynet/venv
.#*
build_venv

View file

@ -1,6 +1,12 @@
const {app, BrowserWindow} = require('electron')
const {app, BrowserWindow} = require('electron');
var path = require('path');
var jayson = require('jayson');
var client = jayson.client.http('http://localhost:5279/lbryapi');
// tree-kill has better cross-platform handling of
// killing a process. child-process.kill was unreliable
var kill = require('tree-kill');
let client = jayson.client.http('http://localhost:5279/lbryapi');
// Keep a global reference of the window object, if you don't, the window will
@ -35,8 +41,14 @@ function lauchDaemon() {
if (subpy) {
return;
}
console.log(`${__dirname}/dist/lbry`);
subpy = require('child_process').spawn(`${__dirname}/dist/lbry`, ['--verbose'], {stdio: ['ignore', process.stdout, process.stderr]})
console.log(`${__dirname}`);
executable = path.join(__dirname, 'dist', 'lbrynet-daemon');
subpy = require('child_process').spawn(executable, ['--verbose'])//, {stdio: ['ignore', process.stdout, process.stderr]});
// Need to handle the data event instead of attaching to
// process.stdout because the latter doesn't work. I believe on
// windows it buffers stdout and we don't get any meaningful output
subpy.stdout.on('data', (buf) => {console.log(String(buf).trim());});
subpy.stderr.on('data', (buf) => {console.log(String(buf).trim());});
subpy.on('exit', () => {
console.log('The daemon has exited. Quitting the app');
subpy = null;
@ -88,8 +100,11 @@ app.on('before-quit', (event) => {
if (win) {
win.loadURL(`file://${__dirname}/dist/quit.html`);
}
quitting = true;
subpy.kill('SIGINT');
quitting = true;
console.log('Killing lbrynet-daemon process');
kill(subpy.pid, undefined, (err) => {
console.log('Killed lbrynet-daemon process');
});
}
})

View file

@ -8,6 +8,9 @@
"name": "Job Evers-Meltzer"
},
"dependencies": {
"jayson": "^2.0.2"
"install": "^0.8.7",
"jayson": "^2.0.2",
"npm": "^4.2.0",
"tree-kill": "^1.1.0"
}
}

42
appveyor.yml Normal file
View file

@ -0,0 +1,42 @@
# Test against the latest version of this Node.js version
environment:
nodejs_version: "6"
clone_folder: C:\projects\lbry-electron
# Install scripts. (runs after repo cloning)
install:
# needed to deal with submodules
- git submodule update --init --recursive
- python set-version.py
# Get the latest stable version of Node.js or io.js
- ps: Install-Product node $env:nodejs_version
# install modules
- npm install
- cd app
- npm install
- cd ..
# create lbrynet-daemon executable
- cd lbrynet
- ps: .\build.ps1
- cd ..
# build ui
- cd lbry-web-ui
- npm install
- node_modules\.bin\node-sass --output dist\css --sourcemap=none scss\
- node_modules\.bin\webpack
- ps: Copy-Item dist ..\app\ -recurse
- cd ..
- ps: Copy-Item lbrynet\dist\lbrynet-daemon.exe app\dist
build_script:
# build electron app
- node_modules\.bin\build -p never
# for debugging, see what was built
- dir dist
test: off
artifacts:
- path: dist\*.zip
name: LBRY

View file

@ -10,8 +10,14 @@ else
ICON="$ROOT/build/icons/lbry48.png"
fi
FULL_BUILD="${FULL_BUILD:-false}"
if [ -n "${TEAMCITY_VERSION:-}" ]; then
FULL_BUILD="true"
elif [ -n "${APPVEYOR:-}" ]; then
FULL_BUILD="true"
fi
if [ "$FULL_BUILD" == "true" ]; then
# install dependencies
$ROOT/prebuild.sh
@ -56,10 +62,10 @@ popd
cp -r dist "$ROOT/app/dist"
)
mv "$ROOT/lbrynet/dist/lbry" "$ROOT/app/dist"
mv "$ROOT/lbrynet/dist/lbrynet-daemon" "$ROOT/app/dist"
if [ -n "${TEAMCITY_VERSION:-}" ]; then
if [ "$FULL_BUILD" == "true" ]; then
if [ "$(uname)" == "Darwin" ]; then
security unlock-keychain -p ${KEYCHAIN_PASSWORD} osx-build.keychain
fi
@ -71,7 +77,7 @@ else
echo 'Build complete. Run `./node_modules/.bin/electron app` to launch the app'
fi
if [ -n "${TEAMCITY_VERSION:-}" ]; then
if [ "$FULL_BUILD" == "true" ]; then
# electron-build has a publish feature, but I had a hard time getting
# it to reliably work and it also seemed difficult to configure. Not proud of
# this, but it seemed better to write my own.

BIN
build/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

BIN
build/icons/lbry128.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

BIN
build/icons/lbry16.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
build/icons/lbry256.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 361 KiB

BIN
build/icons/lbry32.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
build/icons/lbry48.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
build/icons/lbry96.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

2
lbry

@ -1 +1 @@
Subproject commit 07233a885225c76f826f2b6f44e852fc3cbfa9db
Subproject commit 9f358e05ff58518bbf11437218f688a0d4b0f168

@ -1 +1 @@
Subproject commit 06f226d57b839c2cbca8dacac4a418dd7bcfe192
Subproject commit 9c89652d462fae1765791b9bee1cb23ddc35fcb4

24
lbrynet/build.ps1 Normal file
View file

@ -0,0 +1,24 @@
$env:Path += ";C:\MinGW\bin\"
$env:Path += ";C:\Program Files (x86)\Windows Kits\10\bin\x86\"
gcc --version
mingw32-make --version
mkdir temp
Invoke-WebRequest "https://pypi.python.org/packages/55/90/e987e28ed29b571f315afea7d317b6bf4a551e37386b344190cffec60e72/miniupnpc-1.9.tar.gz" -OutFile "temp\miniupnpc-1.9.tar.gz"
cd temp
tar zxf miniupnpc-1.9.tar.gz
cd miniupnpc-1.9
mingw32-make.exe -f Makefile.mingw
python.exe setupmingw32.py build --compiler=mingw32
python.exe setupmingw32.py install
cd ..\..\
Remove-Item -Recurse -Force temp
pip.exe install -r windows-requirements.txt
pip.exe install ..\lbryum
pip.exe install ..\lbry
pip.exe install pyinstaller
pyinstaller -y lbry.onefile.spec

View file

@ -4,34 +4,48 @@ import os
import lbryum
cwd = os.getcwd()
if os.path.basename(cwd) != 'lbrynet':
raise Exception('The build needs to be run from the same directory as the spec file')
repo_base = os.path.abspath(os.path.join(cwd, '..'))
system = platform.system()
if system == 'Darwin':
icns = os.path.join(repo_base, 'build', 'icon.icns')
elif system == 'Linux':
icns = os.path.join(repo_base, 'build', 'icons', '256x256.png')
elif system == 'Windows':
icns = os.path.join(repo_base, 'build', 'icons', 'lbry256.ico')
else:
icns = os.path.join(repo_base, 'package', 'icons', '256x256.png')
print 'Warning: System {} has no icons'.format(system)
icns = None
block_cipher = None
languages = (
'chinese_simplified.txt', 'japanese.txt', 'spanish.txt',
'english.txt', 'portuguese.txt'
)
datas = [
(
os.path.join(os.path.dirname(lbryum.__file__), 'wordlist', language),
'lbryum/wordlist'
)
for language in languages
]
a = Analysis(
['lbry.py'],
pathex=[cwd],
binaries=None,
datas=[
(
os.path.join(os.path.dirname(lbryum.__file__), 'wordlist', language),
'lbryum/wordlist'
)
for language in languages
],
datas=datas,
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
@ -41,28 +55,23 @@ a = Analysis(
cipher=block_cipher
)
pyz = PYZ(
a.pure, a.zipped_data,
cipher=block_cipher
)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name='lbry',
name='lbrynet-daemon',
debug=False,
strip=False,
upx=True,
console=False,
console=True,
icon=icns
)
app = BUNDLE(
exe,
name='lbry.app',
icon=icns,
bundle_identifier=None
)

View file

@ -1,4 +1,5 @@
from lbrynet.lbrynet_daemon import DaemonControl
if __name__ == '__main__':
DaemonControl.start()

View file

@ -1,61 +0,0 @@
# -*- mode: python -*-
import lbryum
block_cipher = None
languages = (
'chinese_simplified.txt', 'japanese.txt', 'spanish.txt',
'english.txt', 'portuguese.txt'
)
a = Analysis(
['lbry.py'],
pathex=['/Users/jobevers/projects/lbryio/lbry-electron/lbrynet'],
binaries=None,
# Not sure why these files are not already include as they are
# listed in package_data and the MANIFEST.in, but they don't seem
# to make it in unless we explicitly add them here
datas=[
(
os.path.join(os.path.dirname(lbryum.__file__), 'wordlist', language),
'lbryum/wordlist'
)
for language in languages
],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=['win32com'],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher
)
pyz = PYZ(
a.pure, a.zipped_data,
cipher=block_cipher
)
exe = EXE(
pyz,
a.scripts,
exclude_binaries=True,
name='lbry',
debug=False,
strip=False,
upx=True,
console=True,
)
coll = COLLECT(
exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='lbry'
)
app = BUNDLE(
coll,
name='lbry.app',
icon=None,
bundle_identifier=None
)

View file

@ -0,0 +1,30 @@
pypiwin32==219
six==1.10.0
requests[security]==2.13.0
zope.interface==4.3.3
Twisted==16.6.0
appdirs==1.4.0
argparse==1.2.1
colorama==0.3.7
dnspython==1.12.0
ecdsa==0.13
envparse==0.2.0
jsonrpc==1.2
jsonrpclib==0.1.7
loggly-python-handler==1.0.0
pbkdf2==1.3
protobuf==3.0.0
pycrypto==2.6.1
python-bitcoinrpc==0.1
pyyaml==3.12
qrcode==5.2.2
requests_futures==0.9.7
seccure==0.3.1.3
simplejson==3.8.2
slowaes==0.1a1
txJSON-RPC==0.5
wsgiref==0.1.2
base58==0.2.2
googlefinance==0.7
jsonschema==2.5.1
https://github.com/lbryio/lbry/raw/master/packaging/windows/libs/gmpy-1.17-cp27-none-win32.whl

2
lbryum

@ -1 +1 @@
Subproject commit bd370d353069ef02566c9082fe876e4924861e68
Subproject commit b3c6815d43222ae739aa1d2c1c670aa09d83bb2d

View file

@ -34,6 +34,9 @@
},
"linux": {
"target": "deb"
},
"win": {
"target": "zip"
}
},
"devDependencies": {