Merge pull request #824 from lbryio/restructuring
Support Hot Module Replacement
This commit is contained in:
commit
204fd60f95
339 changed files with 7799 additions and 10265 deletions
|
@ -3,7 +3,7 @@ current_version = 0.18.2
|
||||||
commit = True
|
commit = True
|
||||||
tag = True
|
tag = True
|
||||||
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)((?P<release>[a-z]+)(?P<candidate>\d+))?
|
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)((?P<release>[a-z]+)(?P<candidate>\d+))?
|
||||||
serialize =
|
serialize =
|
||||||
{major}.{minor}.{patch}{release}{candidate}
|
{major}.{minor}.{patch}{release}{candidate}
|
||||||
{major}.{minor}.{patch}
|
{major}.{minor}.{patch}
|
||||||
|
|
||||||
|
@ -12,15 +12,11 @@ first_value = 1
|
||||||
|
|
||||||
[bumpversion:part:release]
|
[bumpversion:part:release]
|
||||||
optional_value = production
|
optional_value = production
|
||||||
values =
|
values =
|
||||||
rc
|
rc
|
||||||
production
|
production
|
||||||
|
|
||||||
[bumpversion:file:src/main/package.json]
|
[bumpversion:file:package.json]
|
||||||
search = "version": "{current_version}"
|
|
||||||
replace = "version": "{new_version}"
|
|
||||||
|
|
||||||
[bumpversion:file:src/renderer/package.json]
|
|
||||||
search = "version": "{current_version}"
|
search = "version": "{current_version}"
|
||||||
replace = "version": "{new_version}"
|
replace = "version": "{new_version}"
|
||||||
|
|
||||||
|
|
20
.flowconfig
Normal file
20
.flowconfig
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
[ignore]
|
||||||
|
.*/node_modules/**
|
||||||
|
|
||||||
|
[include]
|
||||||
|
|
||||||
|
[libs]
|
||||||
|
flow-typed
|
||||||
|
|
||||||
|
[lints]
|
||||||
|
|
||||||
|
[options]
|
||||||
|
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe
|
||||||
|
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue
|
||||||
|
module.name_mapper='^constants\(.*\)$' -> '<PROJECT_ROOT>/src/renderer/constants\1'
|
||||||
|
module.name_mapper='^util\(.*\)$' -> '<PROJECT_ROOT>/src/renderer/util\1'
|
||||||
|
module.name_mapper='^redux\(.*\)$' -> '<PROJECT_ROOT>/src/renderer/redux\1'
|
||||||
|
module.name_mapper='^types\(.*\)$' -> '<PROJECT_ROOT>/src/renderer/types\1'
|
||||||
|
module.name_mapper='^component\(.*\)$' -> '<PROJECT_ROOT>/src/renderer/component\1'
|
||||||
|
|
||||||
|
[strict]
|
8
.gitignore
vendored
8
.gitignore
vendored
|
@ -2,13 +2,6 @@
|
||||||
/LBRY-darwin-x64
|
/LBRY-darwin-x64
|
||||||
/dist
|
/dist
|
||||||
|
|
||||||
/src/renderer/dist/css/*
|
|
||||||
/src/renderer/dist/js/*
|
|
||||||
!/src/renderer/dist/js/mediaelement
|
|
||||||
/src/renderer/node_modules
|
|
||||||
/src/renderer/.sass-cache
|
|
||||||
|
|
||||||
|
|
||||||
/src/main/dist
|
/src/main/dist
|
||||||
/src/main/locales
|
/src/main/locales
|
||||||
/src/main/node_modules
|
/src/main/node_modules
|
||||||
|
@ -17,6 +10,7 @@
|
||||||
/lbry-app-venv
|
/lbry-app-venv
|
||||||
/lbry-app
|
/lbry-app
|
||||||
/lbry-venv
|
/lbry-venv
|
||||||
|
/static/daemon/lbrynet*
|
||||||
/daemon/build
|
/daemon/build
|
||||||
/daemon/venv
|
/daemon/venv
|
||||||
/daemon/requirements.txt
|
/daemon/requirements.txt
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
host = https://www.transifex.com
|
host = https://www.transifex.com
|
||||||
|
|
||||||
[lbry-app.app-strings]
|
[lbry-app.app-strings]
|
||||||
file_filter = src/main/dist/locales/<lang>.json
|
file_filter = dist/locales/<lang>.json
|
||||||
source_file = src/main/dist/locales/en.json
|
source_file = dist/locales/en.json
|
||||||
source_lang = en
|
source_lang = en
|
||||||
type = KEYVALUEJSON
|
type = KEYVALUEJSON
|
||||||
|
|
47
README.md
47
README.md
|
@ -27,22 +27,17 @@ To install from source or make changes to the application, continue reading belo
|
||||||
|
|
||||||
This will download and install the LBRY app and its dependencies, including [the LBRY daemon](https://github.com/lbryio/lbry) and command line utilities like `node` and `yarn`. The LBRY app requires Node >= 6; if you have an earlier version of Node installed and want to keep it, you can use [nvm](https://github.com/creationix/nvm) to switch back and forth.
|
This will download and install the LBRY app and its dependencies, including [the LBRY daemon](https://github.com/lbryio/lbry) and command line utilities like `node` and `yarn`. The LBRY app requires Node >= 6; if you have an earlier version of Node installed and want to keep it, you can use [nvm](https://github.com/creationix/nvm) to switch back and forth.
|
||||||
|
|
||||||
### Running
|
|
||||||
|
|
||||||
Run `./node_modules/.bin/electron src/main`
|
|
||||||
|
|
||||||
### Ongoing Development
|
### Ongoing Development
|
||||||
1. `cd src/renderer`
|
Run `yarn dev`
|
||||||
2. `./watch.sh`
|
|
||||||
|
|
||||||
This will set up a monitor that will automatically compile any changes to JS or CSS folders inside of the `src/renderer` folder. This allows you to make changes and see them immediately by reloading the app.
|
This will set up a server that will automatically compile any changes made inside `src\` folder and automatically reload the app without losing the state.
|
||||||
|
|
||||||
### Packaging
|
### Packaging
|
||||||
|
|
||||||
We use [electron-builder](https://github.com/electron-userland/electron-builder)
|
Run `yarn dist`
|
||||||
to create distributable packages, which is run by calling:
|
|
||||||
|
|
||||||
`node_modules/.bin/build -p never`
|
We use [electron-builder](https://github.com/electron-userland/electron-builder)
|
||||||
|
to create distributable packages.
|
||||||
|
|
||||||
## Development on Windows
|
## Development on Windows
|
||||||
|
|
||||||
|
@ -65,38 +60,18 @@ exit
|
||||||
python -m pip install -r build\requirements.txt
|
python -m pip install -r build\requirements.txt
|
||||||
npm install -g yarn
|
npm install -g yarn
|
||||||
yarn install
|
yarn install
|
||||||
|
yarn dist
|
||||||
```
|
```
|
||||||
|
3. Download the lbry daemon and cli [binaries](https://github.com/lbryio/lbry/releases) and place them in `dist\`
|
||||||
3. Change directory to `src\main` and run the following:
|
|
||||||
```
|
|
||||||
yarn install
|
|
||||||
node_modules\.bin\electron-rebuild
|
|
||||||
node_modules\.bin\electron-rebuild
|
|
||||||
cd ..\..
|
|
||||||
```
|
|
||||||
4. Change directory to `src\renderer` and run the following:
|
|
||||||
```
|
|
||||||
yarn install
|
|
||||||
npm rebuild node-sass
|
|
||||||
node node_modules\node-sass\bin\node-sass --output dist\css --sourcemap=none scss\
|
|
||||||
node_modules\.bin\webpack --config webpack.dev.config.js
|
|
||||||
xcopy /E dist ..\main\dist
|
|
||||||
cd ..\..
|
|
||||||
```
|
|
||||||
4. Download the lbry daemon and cli [binaries](https://github.com/lbryio/lbry/releases) and place them in `src\main\dist\`
|
|
||||||
|
|
||||||
### Building lbry-app
|
### Building lbry-app
|
||||||
1. run `node_modules\.bin\build -p never` from the root of the project.
|
Run `yarn dist`
|
||||||
|
|
||||||
### Running the electron app
|
|
||||||
1. Run `node_modules\.bin\electron src\main`
|
|
||||||
|
|
||||||
### Ongoing Development
|
### Ongoing Development
|
||||||
1. `cd src\renderer`
|
Run `yarn dev`
|
||||||
2. `watch.bat`
|
|
||||||
|
|
||||||
This will set up a monitor that will automatically compile any changes to JS or CSS folders inside of the `src\renderer` folder. This allows you to make changes and see them immediately by reloading the app.
|
This will set up a server that will automatically compile any changes made inside `src\` folder and automatically reload the app without losing the state.
|
||||||
|
|
||||||
## Internationalization
|
## Internationalization
|
||||||
|
|
||||||
If you want to help translating the lbry-app, you can copy the en.json file in /src/main/locales and modify the values while leaving the keys as their original English strings. An example for this would be: `"Skip": "Überspringen",` Translations should automatically show up in options.
|
If you want to help translating the lbry-app, you can copy the `en.json` file in `/dist/locales/` and modify the values while leaving the keys as their original English strings. An example for this would be: `"Skip": "Überspringen",` Translations should automatically show up in options.
|
||||||
|
|
|
@ -5,41 +5,26 @@ Install-Product node $env:nodejs_version
|
||||||
npm install -g yarn
|
npm install -g yarn
|
||||||
yarn install
|
yarn install
|
||||||
|
|
||||||
|
# clean dist\
|
||||||
# do app
|
if (Test-Path -Path dist\) {
|
||||||
cd src\main
|
Remove-Item -Recurse -Force dist\
|
||||||
yarn install
|
}
|
||||||
# necessary to ensure native Node modules (e.g. keytar) are built against the correct version of Node)
|
New-Item -ItemType directory -Path dist\
|
||||||
# yes, it needs to be run twice. it fails the first time, not sure why
|
|
||||||
node_modules\.bin\electron-rebuild
|
|
||||||
node_modules\.bin\electron-rebuild
|
|
||||||
cd ..\..
|
|
||||||
|
|
||||||
|
|
||||||
# build ui
|
|
||||||
cd src\renderer
|
|
||||||
yarn install
|
|
||||||
npm rebuild node-sass
|
|
||||||
node_modules\.bin\node-sass --output dist\css --sourcemap=none scss\
|
|
||||||
node_modules\.bin\webpack --config webpack.prod.js
|
|
||||||
Copy-Item dist ..\main\ -recurse
|
|
||||||
cd ..\..
|
|
||||||
|
|
||||||
|
|
||||||
# get daemon and cli executable
|
# get daemon and cli executable
|
||||||
$package_settings = (Get-Content src\main\package.json -Raw | ConvertFrom-Json).lbrySettings
|
$package_settings = (Get-Content package.json -Raw | ConvertFrom-Json).lbrySettings
|
||||||
$daemon_ver = $package_settings.lbrynetDaemonVersion
|
$daemon_ver = $package_settings.lbrynetDaemonVersion
|
||||||
$daemon_url_template = $package_settings.lbrynetDaemonUrlTemplate
|
$daemon_url_template = $package_settings.lbrynetDaemonUrlTemplate
|
||||||
$daemon_url = $daemon_url_template.Replace('OSNAME', 'windows').Replace('DAEMONVER', $daemon_ver)
|
$daemon_url = $daemon_url_template.Replace('OSNAME', 'windows').Replace('DAEMONVER', $daemon_ver)
|
||||||
Invoke-WebRequest -Uri $daemon_url -OutFile daemon.zip
|
Invoke-WebRequest -Uri $daemon_url -OutFile daemon.zip
|
||||||
Expand-Archive daemon.zip -DestinationPath src\main\dist\
|
Expand-Archive daemon.zip -DestinationPath static\daemon\
|
||||||
dir src\main\dist\ # verify that daemon binary is there
|
dir static\daemon\ # verify that daemon binary is there
|
||||||
rm daemon.zip
|
rm daemon.zip
|
||||||
|
|
||||||
|
|
||||||
# build electron app
|
# build electron app
|
||||||
node_modules\.bin\build -p never
|
yarn dist
|
||||||
$binary_name = Get-ChildItem -Path dist -Filter '*.exe' -Name
|
$binary_name = Get-ChildItem -Path dist -Filter 'LBRY Setup*.exe' -Name
|
||||||
$new_name = $binary_name -replace '^LBRY Setup (.*)\.exe$', 'LBRY_$1.exe'
|
$new_name = $binary_name -replace '^LBRY Setup (.*)\.exe$', 'LBRY_$1.exe'
|
||||||
Rename-Item -Path "dist\$binary_name" -NewName $new_name
|
Rename-Item -Path "dist\$binary_name" -NewName $new_name
|
||||||
dir dist # verify that binary was built/named correctly
|
dir dist # verify that binary was built/named correctly
|
||||||
|
|
|
@ -40,30 +40,9 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -d "$ROOT/dist" ] && rm -rf "$ROOT/dist"
|
[ -d "$ROOT/dist" ] && rm -rf "$ROOT/dist"
|
||||||
mkdir -p "$ROOT/dist"
|
|
||||||
[ -d "$ROOT/src/main/dist" ] && rm -rf "$ROOT/src/main/dist"
|
|
||||||
mkdir -p "$ROOT/src/main/dist"
|
|
||||||
|
|
||||||
yarn install
|
yarn install
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
############
|
|
||||||
# UI #
|
|
||||||
############
|
|
||||||
echo -e "\033[0;32mCompiling UI\x1b[m"
|
|
||||||
(
|
|
||||||
cd "$ROOT/src/renderer"
|
|
||||||
yarn install
|
|
||||||
npm rebuild node-sass
|
|
||||||
node extractLocals.js
|
|
||||||
node_modules/.bin/node-sass --output dist/css --sourcemap=none scss/
|
|
||||||
node_modules/.bin/webpack --config webpack.prod.js
|
|
||||||
cp -r dist/* "$ROOT/src/main/dist/"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####################
|
####################
|
||||||
# daemon and cli #
|
# daemon and cli #
|
||||||
####################
|
####################
|
||||||
|
@ -73,14 +52,14 @@ if $OSX; then
|
||||||
else
|
else
|
||||||
OSNAME="linux"
|
OSNAME="linux"
|
||||||
fi
|
fi
|
||||||
DAEMON_VER=$(node -e "console.log(require(\"$ROOT/src/main/package.json\").lbrySettings.lbrynetDaemonVersion)")
|
DAEMON_VER=$(node -e "console.log(require(\"$ROOT/package.json\").lbrySettings.lbrynetDaemonVersion)")
|
||||||
DAEMON_URL_TEMPLATE=$(node -e "console.log(require(\"$ROOT/src/main/package.json\").lbrySettings.lbrynetDaemonUrlTemplate)")
|
DAEMON_URL_TEMPLATE=$(node -e "console.log(require(\"$ROOT/package.json\").lbrySettings.lbrynetDaemonUrlTemplate)")
|
||||||
DAEMON_URL=$(echo ${DAEMON_URL_TEMPLATE//DAEMONVER/$DAEMON_VER} | sed "s/OSNAME/$OSNAME/g")
|
DAEMON_URL=$(echo ${DAEMON_URL_TEMPLATE//DAEMONVER/$DAEMON_VER} | sed "s/OSNAME/$OSNAME/g")
|
||||||
DAEMON_VER_PATH="$BUILD_DIR/daemon.ver"
|
DAEMON_VER_PATH="$BUILD_DIR/daemon.ver"
|
||||||
echo "$DAEMON_VER_PATH"
|
echo "$DAEMON_VER_PATH"
|
||||||
if [[ ! -f $DAEMON_VER_PATH || ! -f $ROOT/src/main/dist/lbrynet-daemon || "$(< "$DAEMON_VER_PATH")" != "$DAEMON_VER" ]]; then
|
if [[ ! -f $DAEMON_VER_PATH || ! -f $ROOT/static/daemon/lbrynet-daemon || "$(< "$DAEMON_VER_PATH")" != "$DAEMON_VER" ]]; then
|
||||||
curl -sL -o "$BUILD_DIR/daemon.zip" "$DAEMON_URL"
|
curl -sL -o "$BUILD_DIR/daemon.zip" "$DAEMON_URL"
|
||||||
unzip "$BUILD_DIR/daemon.zip" -d "$ROOT/src/main/dist/"
|
unzip "$BUILD_DIR/daemon.zip" -d "$ROOT/static/daemon/"
|
||||||
rm "$BUILD_DIR/daemon.zip"
|
rm "$BUILD_DIR/daemon.zip"
|
||||||
echo "$DAEMON_VER" > "$DAEMON_VER_PATH"
|
echo "$DAEMON_VER" > "$DAEMON_VER_PATH"
|
||||||
else
|
else
|
||||||
|
@ -93,26 +72,12 @@ fi
|
||||||
###################
|
###################
|
||||||
# Build the app #
|
# Build the app #
|
||||||
###################
|
###################
|
||||||
echo -e '\033[0;32mBuilding Lbry-app\x1b[m'
|
|
||||||
(
|
|
||||||
cd "$ROOT/src/main"
|
|
||||||
yarn install
|
|
||||||
|
|
||||||
# necessary to ensure native Node modules (e.g. keytar) are built against the correct version of Node)
|
|
||||||
# yes, it needs to be run twice. it fails the first time, not sure why
|
|
||||||
set +e
|
|
||||||
# DEBUG=electron-rebuild node_modules/.bin/electron-rebuild .
|
|
||||||
node_modules/.bin/electron-rebuild "$ROOT/src/main"
|
|
||||||
set -e
|
|
||||||
node_modules/.bin/electron-rebuild "$ROOT/src/main"
|
|
||||||
)
|
|
||||||
|
|
||||||
if [ "$FULL_BUILD" == "true" ]; then
|
if [ "$FULL_BUILD" == "true" ]; then
|
||||||
if $OSX; then
|
if $OSX; then
|
||||||
security unlock-keychain -p ${KEYCHAIN_PASSWORD} osx-build.keychain
|
security unlock-keychain -p ${KEYCHAIN_PASSWORD} osx-build.keychain
|
||||||
fi
|
fi
|
||||||
|
|
||||||
node_modules/.bin/build -p never
|
yarn dist
|
||||||
|
|
||||||
if $OSX; then
|
if $OSX; then
|
||||||
binary_name=$(find "$ROOT/dist" -iname "*dmg")
|
binary_name=$(find "$ROOT/dist" -iname "*dmg")
|
||||||
|
@ -133,5 +98,5 @@ if [ "$FULL_BUILD" == "true" ]; then
|
||||||
|
|
||||||
echo -e '\033[0;32mBuild and packaging complete.\x1b[m'
|
echo -e '\033[0;32mBuild and packaging complete.\x1b[m'
|
||||||
else
|
else
|
||||||
echo -e 'Build complete. Run \033[1;31m./node_modules/.bin/electron src/main\x1b[m to launch the app'
|
echo -e 'Build complete. Run \033[1;31myarn dev\x1b[m to launch the app'
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -17,7 +17,7 @@ import github
|
||||||
import changelog
|
import changelog
|
||||||
|
|
||||||
ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
ROOT = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
||||||
APP_PACKAGE_JSON_FILE = os.path.join(ROOT, 'src', 'main', 'package.json')
|
APP_PACKAGE_JSON_FILE = os.path.join(ROOT, 'package.json')
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
|
@ -19,7 +19,7 @@ def get_asset_filename():
|
||||||
this_dir = os.path.dirname(os.path.realpath(__file__))
|
this_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
system = platform.system()
|
system = platform.system()
|
||||||
if system == 'Darwin':
|
if system == 'Darwin':
|
||||||
return glob.glob(this_dir + '/../dist/mac/LBRY*.dmg')[0]
|
return glob.glob(this_dir + '/../dist/LBRY*.dmg')[0]
|
||||||
elif system == 'Linux':
|
elif system == 'Linux':
|
||||||
return glob.glob(this_dir + '/../dist/LBRY*.deb')[0]
|
return glob.glob(this_dir + '/../dist/LBRY*.deb')[0]
|
||||||
elif system == 'Windows':
|
elif system == 'Windows':
|
||||||
|
|
54
electron-builder.json
Normal file
54
electron-builder.json
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
{
|
||||||
|
"appId": "io.lbry.LBRY",
|
||||||
|
"mac": {
|
||||||
|
"category": "public.app-category.entertainment",
|
||||||
|
},
|
||||||
|
"dmg": {
|
||||||
|
"iconSize": 128,
|
||||||
|
"contents": [
|
||||||
|
{
|
||||||
|
"x": 115,
|
||||||
|
"y": 164
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"x": 387,
|
||||||
|
"y": 164,
|
||||||
|
"type": "link",
|
||||||
|
"path": "/Applications"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"window": {
|
||||||
|
"x": 200,
|
||||||
|
"y": 200,
|
||||||
|
"width": 500,
|
||||||
|
"height": 300
|
||||||
|
},
|
||||||
|
"background": "build/background.png"
|
||||||
|
},
|
||||||
|
"protocols": [
|
||||||
|
{
|
||||||
|
"name": "lbry",
|
||||||
|
"schemes": ["lbry"],
|
||||||
|
"role": "Viewer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"linux": {
|
||||||
|
"target": "deb",
|
||||||
|
"desktop": {
|
||||||
|
"MimeType": "x-scheme-handler/lbry",
|
||||||
|
"Exec": "/opt/LBRY/lbry %U"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"deb": {
|
||||||
|
"depends": [
|
||||||
|
"gconf2",
|
||||||
|
"gconf-service",
|
||||||
|
"libnotify4",
|
||||||
|
"libappindicator1",
|
||||||
|
"libxtst6",
|
||||||
|
"libnss3",
|
||||||
|
"libsecret-1-0"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"artifactName": "${productName}_${version}_${arch}.${ext}"
|
||||||
|
}
|
5
electron-webpack.json
Normal file
5
electron-webpack.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"renderer": {
|
||||||
|
"webpackConfig": "webpack.renderer.additions.js"
|
||||||
|
}
|
||||||
|
}
|
170
package.json
170
package.json
|
@ -1,80 +1,108 @@
|
||||||
{
|
{
|
||||||
"postinstall": "install-app-deps",
|
"name": "LBRY",
|
||||||
"build": {
|
"version": "0.18.2",
|
||||||
"asar": false,
|
"description": "A browser for the LBRY network, a digital marketplace controlled by its users.",
|
||||||
"directories": {
|
"author": {
|
||||||
"app": "src/main"
|
"name": "LBRY Inc.",
|
||||||
},
|
"email": "hello@lbry.io"
|
||||||
"appId": "io.lbry.LBRY",
|
|
||||||
"mac": {
|
|
||||||
"category": "public.app-category.utilities",
|
|
||||||
"target": "dmg"
|
|
||||||
},
|
|
||||||
"dmg": {
|
|
||||||
"iconSize": 128,
|
|
||||||
"contents": [
|
|
||||||
{
|
|
||||||
"x": 115,
|
|
||||||
"y": 164
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"x": 387,
|
|
||||||
"y": 164,
|
|
||||||
"type": "link",
|
|
||||||
"path": "/Applications"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"window": {
|
|
||||||
"x": 200,
|
|
||||||
"y": 200,
|
|
||||||
"width": 500,
|
|
||||||
"height": 300
|
|
||||||
},
|
|
||||||
"backgroundColor": "155B4A"
|
|
||||||
},
|
|
||||||
"protocols": [
|
|
||||||
{
|
|
||||||
"name": "lbry",
|
|
||||||
"role": "Viewer",
|
|
||||||
"schemes": [
|
|
||||||
"lbry"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"linux": {
|
|
||||||
"target": "deb",
|
|
||||||
"desktop": {
|
|
||||||
"MimeType": "x-scheme-handler/lbry",
|
|
||||||
"Exec": "/opt/LBRY/lbry %U"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"deb": {
|
|
||||||
"depends": [
|
|
||||||
"gconf2",
|
|
||||||
"gconf-service",
|
|
||||||
"libnotify4",
|
|
||||||
"libappindicator1",
|
|
||||||
"libxtst6",
|
|
||||||
"libnss3",
|
|
||||||
"libsecret-1-0"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"win": {
|
|
||||||
"target": "nsis"
|
|
||||||
},
|
|
||||||
"nsis": {
|
|
||||||
"perMachine": true
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
"homepage": "https://lbry.io/",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "./node_modules/.bin/electron src/main"
|
"extract-langs": "node src/renderer/extractLocals.js",
|
||||||
|
"dev": "electron-webpack dev",
|
||||||
|
"compile": "electron-webpack && yarn extract-langs",
|
||||||
|
"dist": "yarn compile && electron-builder",
|
||||||
|
"dist:dir": "yarn dist -- --dir -c.compression=store -c.mac.identity=null",
|
||||||
|
"postinstall": "electron-builder install-app-deps",
|
||||||
|
"precommit": "lint-staged",
|
||||||
|
"prettier": "prettier --trailing-comma es5 --write js/**/*.{js,jsx}"
|
||||||
|
},
|
||||||
|
"main": "src/main/main.js",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/lbryio/lbry-app"
|
||||||
|
},
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/lbryio/lbry-app/issues"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"lbry"
|
||||||
|
],
|
||||||
|
"dependencies": {
|
||||||
|
"amplitude-js": "^4.0.0",
|
||||||
|
"classnames": "^2.2.5",
|
||||||
|
"electron-dl": "^1.6.0",
|
||||||
|
"formik": "^0.10.4",
|
||||||
|
"from2": "^2.3.0",
|
||||||
|
"install": "^0.8.7",
|
||||||
|
"jayson": "^2.0.2",
|
||||||
|
"jshashes": "^1.0.7",
|
||||||
|
"keytar": "^4.0.3",
|
||||||
|
"localforage": "^1.5.0",
|
||||||
|
"npm": "^5.5.1",
|
||||||
|
"qrcode.react": "^0.7.2",
|
||||||
|
"rc-progress": "^2.0.6",
|
||||||
|
"react": "^15.4.0",
|
||||||
|
"react-dom": "^15.4.0",
|
||||||
|
"react-markdown": "^2.5.0",
|
||||||
|
"react-modal": "^1.5.2",
|
||||||
|
"react-paginate": "^4.4.3",
|
||||||
|
"react-redux": "^5.0.3",
|
||||||
|
"react-simplemde-editor": "^3.6.11",
|
||||||
|
"redux": "^3.6.0",
|
||||||
|
"redux-action-buffer": "^1.1.0",
|
||||||
|
"redux-logger": "^3.0.1",
|
||||||
|
"redux-persist": "^4.8.0",
|
||||||
|
"redux-persist-transform-compress": "^4.2.0",
|
||||||
|
"redux-persist-transform-filter": "0.0.10",
|
||||||
|
"redux-thunk": "^2.2.0",
|
||||||
|
"render-media": "^2.10.0",
|
||||||
|
"reselect": "^3.0.0",
|
||||||
|
"semver": "^5.3.0",
|
||||||
|
"shapeshift.io": "^1.3.1",
|
||||||
|
"source-map-support": "^0.5.0",
|
||||||
|
"tree-kill": "^1.1.0",
|
||||||
|
"y18n": "^3.2.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"babel-plugin-module-resolver": "^3.0.0",
|
||||||
|
"babel-plugin-react-require": "^3.0.0",
|
||||||
|
"babel-polyfill": "^6.20.0",
|
||||||
|
"babel-preset-env": "^1.6.1",
|
||||||
|
"babel-preset-react": "^6.24.1",
|
||||||
|
"babel-preset-stage-2": "^6.18.0",
|
||||||
|
"bluebird": "^3.5.1",
|
||||||
"devtron": "^1.4.0",
|
"devtron": "^1.4.0",
|
||||||
"electron": "^1.7.9",
|
"electron": "^1.7.9",
|
||||||
"electron-builder": "^11.7.0",
|
"electron-builder": "^19.48.2",
|
||||||
"electron-debug": "^1.4.0",
|
"electron-devtools-installer": "^2.2.1",
|
||||||
"electron-devtools-installer": "^2.2.1"
|
"electron-webpack": "^1.11.0",
|
||||||
|
"flow-babel-webpack-plugin": "^1.1.0",
|
||||||
|
"flow-bin": "^0.60.1",
|
||||||
|
"flow-typed": "^2.2.3",
|
||||||
|
"husky": "^0.13.4",
|
||||||
|
"i18n-extract": "^0.4.4",
|
||||||
|
"json-loader": "^0.5.4",
|
||||||
|
"lint-staged": "^3.6.0",
|
||||||
|
"node-loader": "^0.6.0",
|
||||||
|
"node-sass": "^4.7.2",
|
||||||
|
"prettier": "^1.4.2",
|
||||||
|
"sass-loader": "^6.0.6",
|
||||||
|
"webpack": "^3.10.0",
|
||||||
|
"webpack-build-notifier": "^0.1.18"
|
||||||
},
|
},
|
||||||
"license": "MIT"
|
"resolutions": {
|
||||||
|
"webpack/webpack-sources": "1.0.1"
|
||||||
|
},
|
||||||
|
"license": "MIT",
|
||||||
|
"lint-staged": {
|
||||||
|
"src/renderer/js/**/*.{jsx,js}": [
|
||||||
|
"prettier --trailing-comma es5 --write",
|
||||||
|
"git add"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"lbrySettings": {
|
||||||
|
"lbrynetDaemonVersion": "0.18.0",
|
||||||
|
"lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
0
src/common/.gitkeep
Normal file
0
src/common/.gitkeep
Normal file
217
src/main/main.js
217
src/main/main.js
|
@ -1,4 +1,3 @@
|
||||||
module.exports = { safeQuit };
|
|
||||||
// Module imports
|
// Module imports
|
||||||
const {app, BrowserWindow, ipcMain, Menu, Tray, globalShortcut} = require('electron');
|
const {app, BrowserWindow, ipcMain, Menu, Tray, globalShortcut} = require('electron');
|
||||||
const path = require('path');
|
const path = require('path');
|
||||||
|
@ -12,16 +11,15 @@ const keytar = require('keytar');
|
||||||
const kill = require('tree-kill');
|
const kill = require('tree-kill');
|
||||||
const child_process = require('child_process');
|
const child_process = require('child_process');
|
||||||
const assert = require('assert');
|
const assert = require('assert');
|
||||||
const {version: localVersion} = require(app.getAppPath() + '/package.json');
|
const localVersion = app.getVersion();
|
||||||
const setMenu = require('./menu/main-menu.js');
|
const setMenu = require('./menu/main-menu.js');
|
||||||
|
export const contextMenu = require('./menu/context-menu');
|
||||||
|
|
||||||
// Debug configs
|
// Debug configs
|
||||||
const isDebug = process.env.NODE_ENV === 'development';
|
const isDevelopment = process.env.NODE_ENV === 'development';
|
||||||
if (isDebug) {
|
if (isDevelopment) {
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
require('electron-debug')({showDevTools: true});
|
|
||||||
|
|
||||||
const { default: installExtension, REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS } = require('electron-devtools-installer');
|
const { default: installExtension, REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS } = require('electron-devtools-installer');
|
||||||
app.on('ready', () => {
|
app.on('ready', () => {
|
||||||
[REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS].forEach(extension => {
|
[REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS].forEach(extension => {
|
||||||
|
@ -31,7 +29,7 @@ if (isDebug) {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
catch (err) // electron-debug is in devDependencies, but some
|
catch (err)
|
||||||
{
|
{
|
||||||
console.error(err)
|
console.error(err)
|
||||||
}
|
}
|
||||||
|
@ -39,7 +37,10 @@ if (isDebug) {
|
||||||
|
|
||||||
// Misc constants
|
// Misc constants
|
||||||
const LATEST_RELEASE_API_URL = 'https://api.github.com/repos/lbryio/lbry-app/releases/latest';
|
const LATEST_RELEASE_API_URL = 'https://api.github.com/repos/lbryio/lbry-app/releases/latest';
|
||||||
const DAEMON_PATH = process.env.LBRY_DAEMON || path.join(__dirname, 'dist', 'lbrynet-daemon');
|
const DAEMON_PATH = process.env.LBRY_DAEMON || path.join(__static, 'daemon/lbrynet-daemon');
|
||||||
|
const rendererUrl = isDevelopment
|
||||||
|
? `http://localhost:${process.env.ELECTRON_WEBPACK_WDS_PORT}`
|
||||||
|
: `file://${__dirname}/index.html`;
|
||||||
|
|
||||||
let client = jayson.client.http({
|
let client = jayson.client.http({
|
||||||
host: 'localhost',
|
host: 'localhost',
|
||||||
|
@ -83,56 +84,13 @@ function processRequestedUri(uri) {
|
||||||
// lbry://channel/#claimid. We remove the slash here as well.
|
// lbry://channel/#claimid. We remove the slash here as well.
|
||||||
// On Linux and Mac, we just return the URI as given.
|
// On Linux and Mac, we just return the URI as given.
|
||||||
|
|
||||||
if (process.platform == 'win32') {
|
if (process.platform === 'win32') {
|
||||||
return uri.replace(/\/$/, '').replace('/#', '#');
|
return uri.replace(/\/$/, '').replace('/#', '#');
|
||||||
} else {
|
} else {
|
||||||
return uri;
|
return uri;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkForNewVersion(callback) {
|
|
||||||
function formatRc(ver) {
|
|
||||||
// Adds dash if needed to make RC suffix semver friendly
|
|
||||||
return ver.replace(/([^-])rc/, '$1-rc');
|
|
||||||
}
|
|
||||||
|
|
||||||
let result = '';
|
|
||||||
const opts = {
|
|
||||||
headers: {
|
|
||||||
'User-Agent': `LBRY/${localVersion}`,
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const req = https.get(Object.assign(opts, url.parse(LATEST_RELEASE_API_URL)), (res) => {
|
|
||||||
res.on('data', (data) => {
|
|
||||||
result += data;
|
|
||||||
});
|
|
||||||
res.on('end', () => {
|
|
||||||
const tagName = JSON.parse(result).tag_name;
|
|
||||||
const [_, remoteVersion] = tagName.match(/^v([\d.]+(?:-?rc\d+)?)$/);
|
|
||||||
if (!remoteVersion) {
|
|
||||||
if (win) {
|
|
||||||
win.webContents.send('version-info-received', null);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const upgradeAvailable = semver.gt(formatRc(remoteVersion), formatRc(localVersion));
|
|
||||||
if (win) {
|
|
||||||
win.webContents.send('version-info-received', {remoteVersion, localVersion, upgradeAvailable});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
});
|
|
||||||
|
|
||||||
req.on('error', (err) => {
|
|
||||||
console.log('Failed to get current version from GitHub. Error:', err);
|
|
||||||
if (win) {
|
|
||||||
win.webContents.send('version-info-received', null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
ipcMain.on('version-info-requested', checkForNewVersion);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Replacement for Electron's shell.openItem. The Electron version doesn't
|
* Replacement for Electron's shell.openItem. The Electron version doesn't
|
||||||
* reliably work from the main process, and we need to be able to run it
|
* reliably work from the main process, and we need to be able to run it
|
||||||
|
@ -145,11 +103,11 @@ function openItem(fullPath) {
|
||||||
};
|
};
|
||||||
|
|
||||||
let child;
|
let child;
|
||||||
if (process.platform == 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
child = child_process.spawn('open', [fullPath], subprocOptions);
|
child = child_process.spawn('open', [fullPath], subprocOptions);
|
||||||
} else if (process.platform == 'linux') {
|
} else if (process.platform === 'linux') {
|
||||||
child = child_process.spawn('xdg-open', [fullPath], subprocOptions);
|
child = child_process.spawn('xdg-open', [fullPath], subprocOptions);
|
||||||
} else if (process.platform == 'win32') {
|
} else if (process.platform === 'win32') {
|
||||||
child = child_process.spawn(fullPath, Object.assign({}, subprocOptions, {shell: true}));
|
child = child_process.spawn(fullPath, Object.assign({}, subprocOptions, {shell: true}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -158,7 +116,7 @@ function openItem(fullPath) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getPidsForProcessName(name) {
|
function getPidsForProcessName(name) {
|
||||||
if (process.platform == 'win32') {
|
if (process.platform === 'win32') {
|
||||||
const tasklistOut = child_process.execSync(`tasklist /fi "Imagename eq ${name}.exe" /nh`, {encoding: 'utf8'});
|
const tasklistOut = child_process.execSync(`tasklist /fi "Imagename eq ${name}.exe" /nh`, {encoding: 'utf8'});
|
||||||
if (tasklistOut.startsWith('INFO')) {
|
if (tasklistOut.startsWith('INFO')) {
|
||||||
return [];
|
return [];
|
||||||
|
@ -172,15 +130,18 @@ function getPidsForProcessName(name) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function createWindow () {
|
function createWindow () {
|
||||||
win = new BrowserWindow({backgroundColor: '#155B4A', minWidth: 800, minHeight: 600 }) //$color-primary
|
// Disable renderer process's webSecurity on development to enable CORS.
|
||||||
|
win = isDevelopment
|
||||||
|
? new BrowserWindow({backgroundColor: '#155B4A', minWidth: 800, minHeight: 600, webPreferences: {webSecurity: false}})
|
||||||
|
: new BrowserWindow({backgroundColor: '#155B4A', minWidth: 800, minHeight: 600});
|
||||||
|
|
||||||
win.webContents.session.setUserAgent(`LBRY/${localVersion}`);
|
win.webContents.session.setUserAgent(`LBRY/${localVersion}`);
|
||||||
|
|
||||||
win.maximize()
|
win.maximize()
|
||||||
if (isDebug) {
|
if (isDevelopment) {
|
||||||
win.webContents.openDevTools();
|
win.webContents.openDevTools();
|
||||||
}
|
}
|
||||||
win.loadURL(`file://${__dirname}/dist/index.html`)
|
win.loadURL(rendererUrl)
|
||||||
if (openUri) { // We stored and received a URI that an external app requested before we had a window object
|
if (openUri) { // We stored and received a URI that an external app requested before we had a window object
|
||||||
win.webContents.on('did-finish-load', () => {
|
win.webContents.on('did-finish-load', () => {
|
||||||
win.webContents.send('open-uri-requested', openUri);
|
win.webContents.send('open-uri-requested', openUri);
|
||||||
|
@ -230,7 +191,7 @@ function createWindow () {
|
||||||
|
|
||||||
// Menu bar
|
// Menu bar
|
||||||
win.setAutoHideMenuBar(true);
|
win.setAutoHideMenuBar(true);
|
||||||
win.setMenuBarVisibility(isDebug);
|
win.setMenuBarVisibility(isDevelopment);
|
||||||
setMenu();
|
setMenu();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -242,9 +203,9 @@ function createTray () {
|
||||||
if (process.platform === 'darwin') {
|
if (process.platform === 'darwin') {
|
||||||
// Using @2x for mac retina screens so the icon isn't blurry
|
// Using @2x for mac retina screens so the icon isn't blurry
|
||||||
// file name needs to include "Template" at the end for dark menu bar
|
// file name needs to include "Template" at the end for dark menu bar
|
||||||
iconPath = path.join(app.getAppPath(), "/dist/img/fav/macTemplate@2x.png");
|
iconPath = path.join(__static, "/img/fav/macTemplate@2x.png");
|
||||||
} else {
|
} else {
|
||||||
iconPath = path.join(app.getAppPath(), "/dist/img/fav/32x32.png");
|
iconPath = path.join(__static, "/img/fav/32x32.png");
|
||||||
}
|
}
|
||||||
|
|
||||||
tray = new Tray(iconPath);
|
tray = new Tray(iconPath);
|
||||||
|
@ -317,7 +278,7 @@ function handleDaemonSubprocessExited() {
|
||||||
// TODO: maybe it would be better to restart the daemon?
|
// TODO: maybe it would be better to restart the daemon?
|
||||||
if (win) {
|
if (win) {
|
||||||
console.log('Did not request daemon stop, so quitting in 5 seconds.');
|
console.log('Did not request daemon stop, so quitting in 5 seconds.');
|
||||||
win.loadURL(`file://${__dirname}/dist/warning.html`);
|
win.loadURL(`file://${__static}/warning.html`);
|
||||||
setTimeout(quitNow, 5000);
|
setTimeout(quitNow, 5000);
|
||||||
} else {
|
} else {
|
||||||
console.log('Did not request daemon stop, so quitting.');
|
console.log('Did not request daemon stop, so quitting.');
|
||||||
|
@ -326,7 +287,6 @@ function handleDaemonSubprocessExited() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function launchDaemon() {
|
function launchDaemon() {
|
||||||
assert(!daemonSubprocess, 'Tried to launch daemon twice');
|
assert(!daemonSubprocess, 'Tried to launch daemon twice');
|
||||||
|
|
||||||
|
@ -340,11 +300,10 @@ function launchDaemon() {
|
||||||
daemonSubprocess.on('exit', handleDaemonSubprocessExited);
|
daemonSubprocess.on('exit', handleDaemonSubprocessExited);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Quits by first killing the daemon, the calling quitting for real.
|
* Quits by first killing the daemon, the calling quitting for real.
|
||||||
*/
|
*/
|
||||||
function safeQuit() {
|
export function safeQuit() {
|
||||||
minimize = false;
|
minimize = false;
|
||||||
app.quit();
|
app.quit();
|
||||||
}
|
}
|
||||||
|
@ -374,22 +333,8 @@ const isSecondaryInstance = app.makeSingleInstance((argv) => {
|
||||||
|
|
||||||
if (isSecondaryInstance) { // We're not in the original process, so quit
|
if (isSecondaryInstance) { // We're not in the original process, so quit
|
||||||
quitNow();
|
quitNow();
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
app.on('ready', function() {
|
|
||||||
launchDaemonIfNotRunning();
|
|
||||||
if (process.platform === "linux") {
|
|
||||||
checkLinuxTraySupport( err => {
|
|
||||||
if (!err) createTray();
|
|
||||||
else minimize = false;
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
createTray();
|
|
||||||
}
|
|
||||||
createWindow();
|
|
||||||
});
|
|
||||||
|
|
||||||
function launchDaemonIfNotRunning() {
|
function launchDaemonIfNotRunning() {
|
||||||
// Check if the daemon is already running. If we get
|
// Check if the daemon is already running. If we get
|
||||||
// an error its because its not running
|
// an error its because its not running
|
||||||
|
@ -439,6 +384,20 @@ function forceKillAllDaemonsAndQuit() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
app.setAsDefaultProtocolClient('lbry');
|
||||||
|
|
||||||
|
app.on('ready', function() {
|
||||||
|
launchDaemonIfNotRunning();
|
||||||
|
if (process.platform === "linux") {
|
||||||
|
checkLinuxTraySupport( err => {
|
||||||
|
if (!err) createTray();
|
||||||
|
else minimize = false;
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
createTray();
|
||||||
|
}
|
||||||
|
createWindow();
|
||||||
|
});
|
||||||
|
|
||||||
// Quit when all windows are closed.
|
// Quit when all windows are closed.
|
||||||
app.on('window-all-closed', () => {
|
app.on('window-all-closed', () => {
|
||||||
|
@ -461,7 +420,6 @@ app.on('before-quit', (event) => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
app.on('activate', () => {
|
app.on('activate', () => {
|
||||||
// On macOS it's common to re-create a window in the app when the
|
// On macOS it's common to re-create a window in the app when the
|
||||||
// dock icon is clicked and there are no other windows open.
|
// dock icon is clicked and there are no other windows open.
|
||||||
|
@ -470,6 +428,14 @@ app.on('activate', () => {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (process.platform === 'darwin') {
|
||||||
|
app.on('open-url', (event, uri) => {
|
||||||
|
handleOpenUriRequested(uri);
|
||||||
|
});
|
||||||
|
} else if (process.argv.length >= 2) {
|
||||||
|
handleOpenUriRequested(process.argv[1]);
|
||||||
|
}
|
||||||
|
|
||||||
// When a quit is attempted, this is called. It attempts to shutdown the daemon,
|
// When a quit is attempted, this is called. It attempts to shutdown the daemon,
|
||||||
// then calls quitNow() to quit for real.
|
// then calls quitNow() to quit for real.
|
||||||
function shutdownDaemonAndQuit(evenIfNotStartedByApp = false) {
|
function shutdownDaemonAndQuit(evenIfNotStartedByApp = false) {
|
||||||
|
@ -500,26 +466,6 @@ function shutdownDaemonAndQuit(evenIfNotStartedByApp = false) {
|
||||||
// If not, we should wait until the daemon is closed before we start the install.
|
// If not, we should wait until the daemon is closed before we start the install.
|
||||||
}
|
}
|
||||||
|
|
||||||
function upgrade(event, installerPath) {
|
|
||||||
app.on('quit', () => {
|
|
||||||
console.log('Launching upgrade installer at', installerPath);
|
|
||||||
// This gets triggered called after *all* other quit-related events, so
|
|
||||||
// we'll only get here if we're fully prepared and quitting for real.
|
|
||||||
openItem(installerPath);
|
|
||||||
});
|
|
||||||
|
|
||||||
if (win) {
|
|
||||||
win.loadURL(`file://${__dirname}/dist/upgrade.html`);
|
|
||||||
}
|
|
||||||
|
|
||||||
shutdownDaemonAndQuit(true);
|
|
||||||
// wait for daemon to shut down before upgrading
|
|
||||||
// what to do if no shutdown in a long time?
|
|
||||||
console.log('Update downloaded to', installerPath);
|
|
||||||
console.log('The app will close, and you will be prompted to install the latest version of LBRY.');
|
|
||||||
console.log('After the install is complete, please reopen the app.');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Taken from webtorrent-desktop
|
// Taken from webtorrent-desktop
|
||||||
function checkLinuxTraySupport (cb) {
|
function checkLinuxTraySupport (cb) {
|
||||||
// Check that we're on Ubuntu (or another debian system) and that we have
|
// Check that we're on Ubuntu (or another debian system) and that we have
|
||||||
|
@ -536,17 +482,66 @@ function checkLinuxTraySupport (cb) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
ipcMain.on('upgrade', upgrade);
|
ipcMain.on('upgrade', (event, installerPath) => {
|
||||||
|
app.on('quit', () => {
|
||||||
app.setAsDefaultProtocolClient('lbry');
|
console.log('Launching upgrade installer at', installerPath);
|
||||||
|
// This gets triggered called after *all* other quit-related events, so
|
||||||
if (process.platform == 'darwin') {
|
// we'll only get here if we're fully prepared and quitting for real.
|
||||||
app.on('open-url', (event, uri) => {
|
openItem(installerPath);
|
||||||
handleOpenUriRequested(uri);
|
|
||||||
});
|
});
|
||||||
} else if (process.argv.length >= 2) {
|
|
||||||
handleOpenUriRequested(process.argv[1]);
|
if (win) {
|
||||||
}
|
win.loadURL(`file://${__static}/upgrade.html`);
|
||||||
|
}
|
||||||
|
|
||||||
|
shutdownDaemonAndQuit(true);
|
||||||
|
// wait for daemon to shut down before upgrading
|
||||||
|
// what to do if no shutdown in a long time?
|
||||||
|
console.log('Update downloaded to', installerPath);
|
||||||
|
console.log('The app will close, and you will be prompted to install the latest version of LBRY.');
|
||||||
|
console.log('After the install is complete, please reopen the app.');
|
||||||
|
});
|
||||||
|
|
||||||
|
ipcMain.on('version-info-requested', () => {
|
||||||
|
function formatRc(ver) {
|
||||||
|
// Adds dash if needed to make RC suffix semver friendly
|
||||||
|
return ver.replace(/([^-])rc/, '$1-rc');
|
||||||
|
}
|
||||||
|
|
||||||
|
let result = '';
|
||||||
|
const opts = {
|
||||||
|
headers: {
|
||||||
|
'User-Agent': `LBRY/${localVersion}`,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const req = https.get(Object.assign(opts, url.parse(LATEST_RELEASE_API_URL)), (res) => {
|
||||||
|
res.on('data', (data) => {
|
||||||
|
result += data;
|
||||||
|
});
|
||||||
|
res.on('end', () => {
|
||||||
|
const tagName = JSON.parse(result).tag_name;
|
||||||
|
const [_, remoteVersion] = tagName.match(/^v([\d.]+(?:-?rc\d+)?)$/);
|
||||||
|
if (!remoteVersion) {
|
||||||
|
if (win) {
|
||||||
|
win.webContents.send('version-info-received', null);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const upgradeAvailable = semver.gt(formatRc(remoteVersion), formatRc(localVersion));
|
||||||
|
if (win) {
|
||||||
|
win.webContents.send('version-info-received', {remoteVersion, localVersion, upgradeAvailable});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
req.on('error', (err) => {
|
||||||
|
console.log('Failed to get current version from GitHub. Error:', err);
|
||||||
|
if (win) {
|
||||||
|
win.webContents.send('version-info-received', null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
ipcMain.on('get-auth-token', (event) => {
|
ipcMain.on('get-auth-token', (event) => {
|
||||||
keytar.getPassword("LBRY", "auth_token").then(token => {
|
keytar.getPassword("LBRY", "auth_token").then(token => {
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
{
|
|
||||||
"name": "LBRY",
|
|
||||||
"version": "0.18.2",
|
|
||||||
"main": "main.js",
|
|
||||||
"description": "A browser for the LBRY network, a digital marketplace controlled by its users.",
|
|
||||||
"homepage": "https://github.com/lbryio/lbry-app",
|
|
||||||
"author": {
|
|
||||||
"name": "LBRY Inc.",
|
|
||||||
"email": "hello@lbry.io"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"electron-dl": "^1.6.0",
|
|
||||||
"install": "^0.8.7",
|
|
||||||
"jayson": "^2.0.2",
|
|
||||||
"keytar": "^4.0.3",
|
|
||||||
"npm": "^4.2.0",
|
|
||||||
"semver": "^5.3.0",
|
|
||||||
"tree-kill": "^1.1.0"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"electron-rebuild": "^1.5.11"
|
|
||||||
},
|
|
||||||
"lbrySettings": {
|
|
||||||
"lbrynetDaemonVersion": "0.18.0",
|
|
||||||
"lbrynetDaemonUrlTemplate": "https://github.com/lbryio/lbry/releases/download/vDAEMONVER/lbrynet-daemon-vDAEMONVER-OSNAME.zip"
|
|
||||||
},
|
|
||||||
"license": "MIT"
|
|
||||||
}
|
|
2016
src/main/yarn.lock
2016
src/main/yarn.lock
File diff suppressed because it is too large
Load diff
|
@ -1,9 +0,0 @@
|
||||||
{
|
|
||||||
"presets": [
|
|
||||||
"es2015",
|
|
||||||
"react"
|
|
||||||
],
|
|
||||||
"plugins" : [
|
|
||||||
"transform-flow-comments"
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,239 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
"extends": "airbnb",
|
|
||||||
"plugins": [
|
|
||||||
"react",
|
|
||||||
"jsx-a11y",
|
|
||||||
"import"
|
|
||||||
],
|
|
||||||
"env": {
|
|
||||||
"browser": true,
|
|
||||||
},
|
|
||||||
// Grabbed from https://gist.github.com/cletusw/e01a85e399ab563b1236
|
|
||||||
"rules": {
|
|
||||||
////////// Possible Errors //////////
|
|
||||||
|
|
||||||
"no-comma-dangle": 0, // disallow trailing commas in object literals
|
|
||||||
"no-cond-assign": 0, // disallow assignment in conditional expressions
|
|
||||||
"no-console": 0, // disallow use of console (off by default in the node environment)
|
|
||||||
"no-constant-condition": 0, // disallow use of constant expressions in conditions
|
|
||||||
"no-control-regex": 0, // disallow control characters in regular expressions
|
|
||||||
"no-debugger": 0, // disallow use of debugger
|
|
||||||
"no-dupe-keys": 0, // disallow duplicate keys when creating object literals
|
|
||||||
"no-empty": 0, // disallow empty statements
|
|
||||||
"no-empty-class": 0, // disallow the use of empty character classes in regular expressions
|
|
||||||
"no-ex-assign": 0, // disallow assigning to the exception in a catch block
|
|
||||||
"no-extra-boolean-cast": 0, // disallow double-negation boolean casts in a boolean context
|
|
||||||
"no-extra-parens": 0, // disallow unnecessary parentheses (off by default)
|
|
||||||
"no-extra-semi": 0, // disallow unnecessary semicolons
|
|
||||||
"no-func-assign": 0, // disallow overwriting functions written as function declarations
|
|
||||||
"no-inner-declarations": 0, // disallow function or variable declarations in nested blocks
|
|
||||||
"no-invalid-regexp": 0, // disallow invalid regular expression strings in the RegExp constructor
|
|
||||||
"no-irregular-whitespace": 0, // disallow irregular whitespace outside of strings and comments
|
|
||||||
"no-negated-in-lhs": 0, // disallow negation of the left operand of an in expression
|
|
||||||
"no-obj-calls": 0, // disallow the use of object properties of the global object (Math and JSON) as functions
|
|
||||||
"no-regex-spaces": 0, // disallow multiple spaces in a regular expression literal
|
|
||||||
"no-reserved-keys": 0, // disallow reserved words being used as object literal keys (off by default)
|
|
||||||
"no-sparse-arrays": 0, // disallow sparse arrays
|
|
||||||
"no-unreachable": 0, // disallow unreachable statements after a return, throw, continue, or break statement
|
|
||||||
"use-isnan": 0, // disallow comparisons with the value NaN
|
|
||||||
"valid-jsdoc": 0, // Ensure JSDoc comments are valid (off by default)
|
|
||||||
"valid-typeof": 0, // Ensure that the results of typeof are compared against a valid string
|
|
||||||
|
|
||||||
|
|
||||||
////////// Best Practices //////////
|
|
||||||
|
|
||||||
"block-scoped-var": 0, // treat var statements as if they were block scoped (off by default)
|
|
||||||
"complexity": 0, // specify the maximum cyclomatic complexity allowed in a program (off by default)
|
|
||||||
"consistent-return": 0, // require return statements to either always or never specify values
|
|
||||||
"curly": 0, // specify curly brace conventions for all control statements
|
|
||||||
"default-case": 0, // require default case in switch statements (off by default)
|
|
||||||
"dot-notation": 0, // encourages use of dot notation whenever possible
|
|
||||||
"eqeqeq": 0, // require the use of === and !==
|
|
||||||
"guard-for-in": 0, // make sure for-in loops have an if statement (off by default)
|
|
||||||
"no-alert": 0, // disallow the use of alert, confirm, and prompt
|
|
||||||
"no-caller": 0, // disallow use of arguments.caller or arguments.callee
|
|
||||||
"no-div-regex": 0, // disallow division operators explicitly at beginning of regular expression (off by default)
|
|
||||||
"no-else-return": 0, // disallow else after a return in an if (off by default)
|
|
||||||
"no-empty-label": 0, // disallow use of labels for anything other then loops and switches
|
|
||||||
"no-eq-null": 0, // disallow comparisons to null without a type-checking operator (off by default)
|
|
||||||
"no-eval": 0, // disallow use of eval()
|
|
||||||
"no-extend-native": 0, // disallow adding to native types
|
|
||||||
"no-extra-bind": 0, // disallow unnecessary function binding
|
|
||||||
"no-fallthrough": 0, // disallow fallthrough of case statements
|
|
||||||
"no-floating-decimal": 0, // disallow the use of leading or trailing decimal points in numeric literals (off by default)
|
|
||||||
"no-implied-eval": 0, // disallow use of eval()-like methods
|
|
||||||
"no-iterator": 0, // disallow usage of __iterator__ property
|
|
||||||
"no-labels": 0, // disallow use of labeled statements
|
|
||||||
"no-lone-blocks": 0, // disallow unnecessary nested blocks
|
|
||||||
"no-loop-func": 0, // disallow creation of functions within loops
|
|
||||||
"no-multi-spaces": 0, // disallow use of multiple spaces
|
|
||||||
"no-multi-str": 0, // disallow use of multiline strings
|
|
||||||
"no-native-reassign": 0, // disallow reassignments of native objects
|
|
||||||
"no-new": 0, // disallow use of new operator when not part of the assignment or comparison
|
|
||||||
"no-new-func": 0, // disallow use of new operator for Function object
|
|
||||||
"no-new-wrappers": 0, // disallows creating new instances of String, Number, and Boolean
|
|
||||||
"no-octal": 0, // disallow use of octal literals
|
|
||||||
"no-octal-escape": 0, // disallow use of octal escape sequences in string literals, such as var foo = "Copyright \251";
|
|
||||||
"no-process-env": 0, // disallow use of process.env (off by default)
|
|
||||||
"no-proto": 0, // disallow usage of __proto__ property
|
|
||||||
"no-redeclare": 0, // disallow declaring the same variable more then once
|
|
||||||
"no-return-assign": 0, // disallow use of assignment in return statement
|
|
||||||
"no-script-url": 0, // disallow use of javascript: urls.
|
|
||||||
"no-self-compare": 0, // disallow comparisons where both sides are exactly the same (off by default)
|
|
||||||
"no-sequences": 0, // disallow use of comma operator
|
|
||||||
"no-unused-expressions": 0, // disallow usage of expressions in statement position
|
|
||||||
"no-void": 0, // disallow use of void operator (off by default)
|
|
||||||
"no-warning-comments": 0, // disallow usage of configurable warning terms in comments, e.g. TODO or FIXME (off by default)
|
|
||||||
"no-with": 0, // disallow use of the with statement
|
|
||||||
"radix": 0, // require use of the second argument for parseInt() (off by default)
|
|
||||||
"vars-on-top": 0, // requires to declare all vars on top of their containing scope (off by default)
|
|
||||||
"wrap-iife": 0, // require immediate function invocation to be wrapped in parentheses (off by default)
|
|
||||||
"yoda": 0, // require or disallow Yoda conditions
|
|
||||||
|
|
||||||
|
|
||||||
////////// Strict Mode //////////
|
|
||||||
|
|
||||||
"global-strict": 0, // (deprecated) require or disallow the "use strict" pragma in the global scope (off by default in the node environment)
|
|
||||||
"no-extra-strict": 0, // (deprecated) disallow unnecessary use of "use strict"; when already in strict mode
|
|
||||||
"strict": 0, // controls location of Use Strict Directives
|
|
||||||
|
|
||||||
|
|
||||||
////////// Variables //////////
|
|
||||||
|
|
||||||
"no-catch-shadow": 0, // disallow the catch clause parameter name being the same as a variable in the outer scope (off by default in the node environment)
|
|
||||||
"no-delete-var": 0, // disallow deletion of variables
|
|
||||||
"no-label-var": 0, // disallow labels that share a name with a variable
|
|
||||||
"no-shadow": 0, // disallow declaration of variables already declared in the outer scope
|
|
||||||
"no-shadow-restricted-names": 0, // disallow shadowing of names such as arguments
|
|
||||||
"no-undef": 1, // disallow use of undeclared variables unless mentioned in a /*global */ block
|
|
||||||
"no-undef-init": 0, // disallow use of undefined when initializing variables
|
|
||||||
"no-undefined": 0, // disallow use of undefined variable (off by default)
|
|
||||||
"no-unused-vars": 0, // disallow declaration of variables that are not used in the code
|
|
||||||
"no-use-before-define": 0, // disallow use of variables before they are defined
|
|
||||||
|
|
||||||
|
|
||||||
////////// Node.js //////////
|
|
||||||
|
|
||||||
"handle-callback-err": 0, // enforces error handling in callbacks (off by default) (on by default in the node environment)
|
|
||||||
"no-mixed-requires": 0, // disallow mixing regular variable and require declarations (off by default) (on by default in the node environment)
|
|
||||||
"no-new-require": 0, // disallow use of new operator with the require function (off by default) (on by default in the node environment)
|
|
||||||
"no-path-concat": 0, // disallow string concatenation with __dirname and __filename (off by default) (on by default in the node environment)
|
|
||||||
"no-process-exit": 0, // disallow process.exit() (on by default in the node environment)
|
|
||||||
"no-restricted-modules": 0, // restrict usage of specified node modules (off by default)
|
|
||||||
"no-sync": 0, // disallow use of synchronous methods (off by default)
|
|
||||||
|
|
||||||
|
|
||||||
////////// Stylistic Issues //////////
|
|
||||||
|
|
||||||
"brace-style": 0, // enforce one true brace style (off by default)
|
|
||||||
"camelcase": 0, // require camel case names
|
|
||||||
"comma-spacing": 0, // enforce spacing before and after comma
|
|
||||||
"comma-style": 0, // enforce one true comma style (off by default)
|
|
||||||
"consistent-this": 0, // enforces consistent naming when capturing the current execution context (off by default)
|
|
||||||
"eol-last": 0, // enforce newline at the end of file, with no multiple empty lines
|
|
||||||
"func-names": 0, // require function expressions to have a name (off by default)
|
|
||||||
"func-style": 0, // enforces use of function declarations or expressions (off by default)
|
|
||||||
"key-spacing": 0, // enforces spacing between keys and values in object literal properties
|
|
||||||
"max-nested-callbacks": 0, // specify the maximum depth callbacks can be nested (off by default)
|
|
||||||
"new-cap": 0, // require a capital letter for constructors
|
|
||||||
"new-parens": 0, // disallow the omission of parentheses when invoking a constructor with no arguments
|
|
||||||
"no-array-constructor": 0, // disallow use of the Array constructor
|
|
||||||
"no-inline-comments": 0, // disallow comments inline after code (off by default)
|
|
||||||
"no-lonely-if": 0, // disallow if as the only statement in an else block (off by default)
|
|
||||||
"no-mixed-spaces-and-tabs": 0, // disallow mixed spaces and tabs for indentation
|
|
||||||
"no-multiple-empty-lines": 0, // disallow multiple empty lines (off by default)
|
|
||||||
"no-nested-ternary": 0, // disallow nested ternary expressions (off by default)
|
|
||||||
"no-new-object": 0, // disallow use of the Object constructor
|
|
||||||
"no-space-before-semi": 0, // disallow space before semicolon
|
|
||||||
"no-spaced-func": 0, // disallow space between function identifier and application
|
|
||||||
"no-ternary": 0, // disallow the use of ternary operators (off by default)
|
|
||||||
"no-trailing-spaces": 0, // disallow trailing whitespace at the end of lines
|
|
||||||
"no-underscore-dangle": 0, // disallow dangling underscores in identifiers
|
|
||||||
"no-wrap-func": 0, // disallow wrapping of non-IIFE statements in parens
|
|
||||||
"one-var": 0, // allow just one var statement per function (off by default)
|
|
||||||
"operator-assignment": 0, // require assignment operator shorthand where possible or prohibit it entirely (off by default)
|
|
||||||
"padded-blocks": 0, // enforce padding within blocks (off by default)
|
|
||||||
"quote-props": 0, // require quotes around object literal property names (off by default)
|
|
||||||
"quotes": 0, // specify whether double or single quotes should be used
|
|
||||||
"semi": 0, // require or disallow use of semicolons instead of ASI
|
|
||||||
"sort-vars": 0, // sort variables within the same declaration block (off by default)
|
|
||||||
"space-after-function-name": 0, // require a space after function names (off by default)
|
|
||||||
"space-after-keywords": 0, // require a space after certain keywords (off by default)
|
|
||||||
"space-before-blocks": 0, // require or disallow space before blocks (off by default)
|
|
||||||
"space-in-brackets": 0, // require or disallow spaces inside brackets (off by default)
|
|
||||||
"space-in-parens": 0, // require or disallow spaces inside parentheses (off by default)
|
|
||||||
"space-infix-ops": 0, // require spaces around operators
|
|
||||||
"space-return-throw-case": 0, // require a space after return, throw, and case
|
|
||||||
"space-unary-ops": 0, // Require or disallow spaces before/after unary operators (words on by default, nonwords off by default)
|
|
||||||
"spaced-line-comment": 0, // require or disallow a space immediately following the // in a line comment (off by default)
|
|
||||||
"wrap-regex": 0, // require regex literals to be wrapped in parentheses (off by default)
|
|
||||||
|
|
||||||
|
|
||||||
////////// ECMAScript 6 //////////
|
|
||||||
|
|
||||||
"no-var": 0, // require let or const instead of var (off by default)
|
|
||||||
"generator-star": 0, // enforce the position of the * in generator functions (off by default)
|
|
||||||
|
|
||||||
|
|
||||||
////////// Legacy //////////
|
|
||||||
|
|
||||||
"max-depth": 0, // specify the maximum depth that blocks can be nested (off by default)
|
|
||||||
"max-len": 0, // specify the maximum length of a line in your program (off by default)
|
|
||||||
"max-params": 0, // limits the number of parameters that can be used in the function declaration. (off by default)
|
|
||||||
"max-statements": 0, // specify the maximum number of statement allowed in a function (off by default)
|
|
||||||
"no-bitwise": 0, // disallow use of bitwise operators (off by default)
|
|
||||||
"no-plusplus": 0, // disallow use of unary operators, ++ and -- (off by default)
|
|
||||||
|
|
||||||
// There were other errors that were being thrown
|
|
||||||
"import/newline-after-import": 0,
|
|
||||||
"object-curly-spacing": 0,
|
|
||||||
"space-before-function-paren": 0,
|
|
||||||
"no-restricted-syntax": 0,
|
|
||||||
"no-unneeded-ternary": 0,
|
|
||||||
"react/prefer-es6-class": 0,
|
|
||||||
"arrow-parens": 0,
|
|
||||||
"jsx-quotes": 0,
|
|
||||||
"react/sort-comp": 0,
|
|
||||||
"react/no-unescaped-entities": 0,
|
|
||||||
"object-shorthand": 0,
|
|
||||||
"jsx-a11y/label-has-for": 0,
|
|
||||||
"no-mixed-operators": 0,
|
|
||||||
"react/jsx-no-bind": 0,
|
|
||||||
"no-duplicate-case": 0,
|
|
||||||
"react/jsx-filename-extension": 0,
|
|
||||||
"jsx-a11y/img-has-alt": 0,
|
|
||||||
"react/self-closing-comp": 0,
|
|
||||||
"prefer-const": 0,
|
|
||||||
"one-var-declaration-per-line": 0,
|
|
||||||
"react/jsx-indent": 0,
|
|
||||||
"react/jsx-curly-spacing": 0,
|
|
||||||
"react/prefer-stateless-function": 0,
|
|
||||||
"react/jsx-indent-props": 0,
|
|
||||||
"react/no-find-dom-node": 0,
|
|
||||||
"react/no-unused-prop-types": 0,
|
|
||||||
"react/jsx-no-undef": 0,
|
|
||||||
"react/no-string-refs": 0,
|
|
||||||
"react/jsx-first-prop-new-line": 0,
|
|
||||||
"comma-dangle": 0,
|
|
||||||
"react/no-multi-comp": 0,
|
|
||||||
"spaced-comment": 0,
|
|
||||||
"jsx-a11y/anchor-has-content": 0,
|
|
||||||
"semi-spacing": 0,
|
|
||||||
"no-param-reassign": 0,
|
|
||||||
"react/jsx-no-target-blank": 0,
|
|
||||||
"prefer-arrow-callback": 0,
|
|
||||||
"react/jsx-space-before-closing": 0,
|
|
||||||
"react/forbid-prop-types": 0,
|
|
||||||
"indent": 0,
|
|
||||||
"import/no-unresolved": 0,
|
|
||||||
"react/jsx-boolean-value": 0,
|
|
||||||
"prefer-template": 0,
|
|
||||||
"react/jsx-wrap-multilines": 0,
|
|
||||||
"keyword-spacing": 0,
|
|
||||||
"react/jsx-closing-bracket-location": 0,
|
|
||||||
"react/react-in-jsx-scope": 0,
|
|
||||||
"no-useless-escape": 0,
|
|
||||||
"no-continue": 0,
|
|
||||||
"react/prop-types": 0
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -1,20 +0,0 @@
|
||||||
[ignore]
|
|
||||||
.*/node_modules/**
|
|
||||||
|
|
||||||
[include]
|
|
||||||
|
|
||||||
[libs]
|
|
||||||
flow-typed
|
|
||||||
|
|
||||||
[lints]
|
|
||||||
|
|
||||||
[options]
|
|
||||||
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe
|
|
||||||
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue
|
|
||||||
module.name_mapper='^constants\(.*\)$' -> '<PROJECT_ROOT>/js/constants\1'
|
|
||||||
module.name_mapper='^util\(.*\)$' -> '<PROJECT_ROOT>/js/util\1'
|
|
||||||
module.name_mapper='^redux\(.*\)$' -> '<PROJECT_ROOT>/js/redux\1'
|
|
||||||
module.name_mapper='^types\(.*\)$' -> '<PROJECT_ROOT>/js/types\1'
|
|
||||||
module.name_mapper='^component\(.*\)$' -> '<PROJECT_ROOT>/js/component\1'
|
|
||||||
|
|
||||||
[strict]
|
|
|
@ -1,6 +0,0 @@
|
||||||
## Development Setup
|
|
||||||
|
|
||||||
- Install node and npm (linux users: [use this](https://github.com/nodesource/distributions). if that doesn't work, [this gist may be useful](https://gist.github.com/isaacs/579814))
|
|
||||||
- `npm install -g yarn` (or see https://yarnpkg.com/en/docs/install)
|
|
||||||
- Run `./watch.sh` (this will `yarn install` dependencies)
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import store from "store.js";
|
import store from "store.js";
|
||||||
import { remote } from "electron";
|
import { remote } from "electron";
|
||||||
|
|
||||||
const env = ENV;
|
const env = process.env.NODE_ENV || "production";
|
||||||
const config = {
|
const config = {
|
||||||
...require(`./config/${env}`),
|
...require(`./config/${env}`),
|
||||||
};
|
};
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue