Skip to content

Commit

Permalink
1. 替换python版本,改用libel
Browse files Browse the repository at this point in the history
2. 修正npm run test 执行报错的问题
3. 日志存储换行修正,使用os.EOL
4. 修改pac文件下载地址
5. 添加binary部署方式
  • Loading branch information
erguotou520 committed Jun 2, 2018
1 parent 3fff84b commit df59ac5
Show file tree
Hide file tree
Showing 19 changed files with 100 additions and 154 deletions.
5 changes: 2 additions & 3 deletions .babelrc
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
"test": {
"presets": [
["env", {
"targets": { "node": 7 }
"targets": { "node": "current" }
}],
"stage-0"
],
"plugins": ["istanbul"]
]
},
"main": {
"presets": [
Expand Down
10 changes: 8 additions & 2 deletions .electron-vue/release.js
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,15 @@ function release (dir) {
},
files,
extraFiles: extraFiles,
publish: {
publish: [{
provider: 'bintray',
package: 'electron-ssr',
repo: 'generic',
owner: 'erguotou520',
user: 'erguotou520'
}, {
provider: 'github'
}
}]
}
const options = Object.assign({}, baseConfig)
const x64Promise = builder.build(Object.assign({}, baseOptions, {
Expand Down
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,11 @@
[![](https://img.shields.io/badge/Telegram-electron--ssr-blue.svg)](https://t.me/joinchat/E7ViZhJAZpKtnIJy9WepDA) -->

## 环境要求
## 配置文件

- 只需要系统已安装 [python](https://www.python.org/downloads/) 可正常执行`shadowsocksr`的python版即可
- Windows `C:\Users\{your username}\AppData\Local\Programs\electron-ssr\gui-config.json`
- Mac `~/Library/Application Support/electron-ssr/gui-config.json`
- Linux `~/.config/gui-config.json`

## 已知Bug

Expand Down Expand Up @@ -79,8 +81,8 @@ npm run lint

## ShadowsocksR 参考文档

- [Python client setup (Mult language)](https://github.com/breakwa11/shadowsocks-rss/wiki/Python-client-setup-(Mult-language))
- [Python client setup (Mult language)备份](https://github.com/shadowsocksr-backup/shadowsocks-rss/wiki/Python-client-setup-(Mult-language))
- [ssr-libev](https://github.com/breakwa11/shadowsocksr-libev)
- [ssr-libev 备份](https://github.com/shadowsocksr-backup/shadowsocksr-libev)
- [SSR QRcode scheme](https://github.com/breakwa11/shadowsocks-rss/wiki/SSR-QRcode-scheme)
- [SSR QRcode scheme备份](https://github.com/shadowsocksr-backup/shadowsocks-rss/wiki/SSR-QRcode-scheme)

Expand Down
7 changes: 1 addition & 6 deletions docs/FAQ.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<details>
<summary>为什么我打开了应用但是没有代理成功?</summary>
<p>首先,确定服务器配置中有可用的服务器并选中了其中的一项。其次,确认“启用系统代理”菜单已选中。再次,尝试勾选“系统代理设置”-“全局设置”,然后查看浏览器是否已被代理。最后,点击“帮助”-“查看日志”查看<code>shadowsocksr-python</code>是否正常运行,日志中有没有报错,如有报错请先排错(比如端口占用)。</p>
<p>首先,确定服务器配置中有可用的服务器并选中了其中的一项。其次,确认“启用系统代理”菜单已选中。再次,尝试勾选“系统代理设置”-“全局设置”,然后查看浏览器是否已被代理。最后,点击“帮助”-“查看日志”查看<code>ssr-libev</code>是否正常运行,日志中有没有报错,如有报错请先排错(比如端口占用)。</p>
</details>

<details>
Expand All @@ -25,11 +25,6 @@
<p>我们暂时只支持<code>Gnome</code>桌面的Linux系统,其它桌面环境的如果你有解决方案请发issue。Windows和Mac应该正常。</p>
</details>

<details>
<summary>错误日志option -O not recognized</summary>
<p>该错误的原因是因为<code>shadowsocksr-python</code>版本过低而不支持<code>-O</code>参数导致,请升级<code>shadowsocksr-python</code>版本。其它相类似的错误采用同样的处理方案。</p>
</details>

<details>
<summary>错误日志Exception: libsodium not found</summary>
<p>该错误是因为当前系统缺少libsodium库导致,Mac下使用<code>brew install libsodium</code>安装,Ubuntu可参考<a href="https://gist.github.com/jonathanpmartins/2510f38abee1e65c6d92">https://gist.github.com/jonathanpmartins/2510f38abee1e65c6d92</a>安装,Windows前往<a href="https://download.libsodium.org/libsodium/releases/">https://download.libsodium.org/libsodium/releases/</a>下载<code>libsodium-{version}-msvc.zip</code>文件并解压,复制解压目录中的<code>libsodium.dll</code>至<code>C:\windows\system32</code>目录(注意dll文件是64的还是32的),其它系统请自行搜索。</p>
Expand Down
9 changes: 6 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@
"pack": "npm run pack:main && npm run pack:renderer",
"pack:main": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.main.config.js",
"pack:renderer": "cross-env NODE_ENV=production webpack --progress --colors --config .electron-vue/webpack.renderer.config.js",
"test": "npm run unit",
"test": "npm run mocha",
"unit": "karma start test/unit/karma.conf.js",
"mocha": "./node_modules/.bin/mocha --compilers js:babel-core/regi ster test/unit/specs/qrcode.spec.js"
"mocha": "cross-env NODE_ENV=test ./node_modules/.bin/mocha --reporter=nyan --require babel-register test/unit/specs/qrcode.spec.js"
},
"dependencies": {
"auto-launch": "^5.0.5",
Expand All @@ -49,7 +49,7 @@
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.0",
"babel-preset-stage-0": "^6.24.1",
"babel-register": "^6.24.1",
"babel-register": "^6.26.0",
"babili-webpack-plugin": "^0.1.2",
"cfonts": "^1.1.3",
"chai": "^4.1.2",
Expand Down Expand Up @@ -89,5 +89,8 @@
"webpack-dev-server": "^2.7.1",
"webpack-hot-middleware": "^2.18.2",
"webpack-merge": "^4.1.0"
},
"babel": {
"presets": ["env"]
}
}
13 changes: 2 additions & 11 deletions src/main/bootstrap.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import path from 'path'
import { app, dialog } from 'electron'
import { app } from 'electron'
import { ensureDir, pathExists, ensureFile, outputJson } from 'fs-extra'
import logger, { clearLog } from './logger'
import sudo from 'sudo-prompt'
import defaultConfig from '../shared/config'
import { isWin, isMac, isLinux, isOldMacVersion, isPythonInstalled } from '../shared/env'
import { isWin, isMac, isLinux, isOldMacVersion } from '../shared/env'
import { init as initIcon } from '../shared/icon'

// app ready事件
Expand All @@ -16,13 +16,6 @@ export const readyPromise = new Promise(resolve => {
}
})

// 检查python是否安装
if (!isPythonInstalled) {
dialog.showErrorBox('错误', 'python未安装,请先安装python否则软件将无法使用')
// python未安装时自动下载并安装
// require('./python').init()
}

/**
* Set `__static` path to static files in production
* https://simulatedgreg.gitbooks.io/electron-vue/content/en/using-static-assets.html
Expand Down Expand Up @@ -110,8 +103,6 @@ async function init () {

if (process.env.NODE_ENV === 'development') {
console.log('Config file\'s path: %s\nLog file\'s path: %s', appConfigPath, logPath)
} else {
logger.info('file ensured')
}
return readyPromise
}
Expand Down
24 changes: 5 additions & 19 deletions src/main/client.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import path from 'path'
import { execFile } from 'child_process'
// import treeKill from 'tree-kill'
import { dialog } from 'electron'
Expand All @@ -7,8 +6,6 @@ import { isHostPortValid } from './port'
import logger, { clientLog } from './logger'
import { isConfigEqual } from '../shared/utils'
import { showNotification } from './notification'
// import { pythonPromise } from './python'

let child

/**
Expand All @@ -26,17 +23,6 @@ export function runCommand (command, params) {
child = execFile(command, params)
child.stdout.on('data', clientLog.log)
child.stderr.on('data', clientLog.error)
// pythonPromise.then(() => {
// const commandStr = `${command} ${params.join(' ')}`
// if (process.env.NODE_ENV === 'development') {
// console.log('run command: %s', commandStr)
// } else {
// logger.debug('run command: %s', commandStr)
// }
// child = execFile(command, params)
// child.stdout.on('data', logger.log)
// child.stderr.on('data', logger.error)
// })
}
}

Expand All @@ -54,7 +40,7 @@ export function run (appConfig) {
}).then(() => {
const config = appConfig.configs[appConfig.index]
// 参数
const params = [path.join(appConfig.ssrPath, 'local.py')]
const params = []
params.push('-s')
params.push(config.server)
params.push('-p')
Expand Down Expand Up @@ -85,7 +71,7 @@ export function run (appConfig) {
params.push('-t')
params.push(config.timeout)
}
runCommand('python', params)
runCommand(appConfig.ssrPath, params)
}).catch(() => {
dialog.showMessageBox({
type: 'warning',
Expand All @@ -101,9 +87,9 @@ export function run (appConfig) {
export async function stop (force = false) {
if (child && child.pid) {
if (process.env.NODE_ENV === 'development') {
console.log('Kill python client')
console.log('Kill client')
} else {
logger.log('Kill python client')
logger.log('Kill client')
}
return new Promise((resolve, reject) => {
child.once('close', () => {
Expand Down Expand Up @@ -137,7 +123,7 @@ export async function stop (force = false) {
}

/**
* 根据配置运行python命令
* 根据配置运行SSR命令
* @param {Object} appConfig 应用配置
*/
export function runWithConfig (appConfig) {
Expand Down
3 changes: 2 additions & 1 deletion src/main/ipc.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { app, ipcMain, dialog } from 'electron'
import os from 'os'
import { readJsonSync } from 'fs-extra'
import downloadGitRepo from 'download-git-repo'
import * as events from '../shared/events'
Expand Down Expand Up @@ -51,7 +52,7 @@ ipcMain.on(events.EVENT_APP_ERROR_RENDERER, e => {
logger.debug('start download ssr')
}
// 自动下载ssr项目
downloadGitRepo('shadowsocksr-backup/shadowsocksr#dev', defaultSSRDownloadDir, err => {
downloadGitRepo(`erguotou520/ssr-libev-ci#${os.platform()}`, defaultSSRDownloadDir, err => {
if (process.env.NODE_ENV === 'development') {
console.log('ssr download', err ? 'error' : 'success')
} else {
Expand Down
3 changes: 2 additions & 1 deletion src/main/logger.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import fs from 'fs'
import { EOL } from 'os'
import tracer from 'tracer'
import bootstrapPromise, { logPath } from './bootstrap'

Expand All @@ -15,7 +16,7 @@ function transport (data) {
}).then(() => {
fs.createWriteStream(logPath, {
flags: 'a+'
}).write(data.output.endsWith('\n') ? data.output : data.output + '\n', 'utf8')
}).write(data.output.endsWith(EOL) ? data.output : data.output + EOL, 'utf8')
}).catch(() => {})
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/main/pac.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export async function downloadPac (force = false) {
const pacExisted = await pathExists(pacPath)
if (force || !pacExisted) {
logger.debug('start download pac')
const pac = await request('https://softs.fun/Other/pac.txt')
const pac = await request('https://raw.githubusercontent.com/erguotou520/pac.txt/pac/pac.txt')
pacContent = pac
return await writeFile(pacPath, pac)
}
Expand Down
11 changes: 8 additions & 3 deletions src/main/proxy.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@ import { winToolPath, macToolPath } from './bootstrap'
import { currentConfig, appConfig$ } from './data'
import { isWin, isMac, isLinux, isOldMacVersion } from '../shared/env'

// linux的gsettings命令是否可用
let isGsettingsAvaliable = false
try {
isGsettingsAvaliable = /gsettings$/.test(execSync('which gsettings').toString().trim())
} catch (e) {}
let isProxyChanged = false

/**
Expand All @@ -31,7 +36,7 @@ export function setProxyToNone (force = true) {
command = `${winToolPath} pac ""`
} else if (isMac && pathExistsSync(macToolPath) && !isOldMacVersion) {
command = `"${macToolPath}" -m off`
} else if (isLinux) {
} else if (isLinux && isGsettingsAvaliable) {
command = `gsettings set org.gnome.system.proxy mode 'none'`
}
runCommand(command)
Expand All @@ -47,7 +52,7 @@ export function setProxyToGlobal (host, port) {
command = `${winToolPath} global ${host}:${port}`
} else if (isMac && pathExistsSync(macToolPath) && !isOldMacVersion) {
command = `"${macToolPath}" -m global -p ${port}`
} else if (isLinux) {
} else if (isLinux && isGsettingsAvaliable) {
command = `gsettings set org.gnome.system.proxy mode 'manual' && gsettings set org.gnome.system.proxy.socks host '${host}' && gsettings set org.gnome.system.proxy.socks port ${port}`
}
runCommand(command)
Expand All @@ -62,7 +67,7 @@ export function setProxyToPac (pacUrl) {
command = `${winToolPath} pac ${pacUrl}`
} else if (isMac && pathExistsSync(macToolPath) && !isOldMacVersion) {
command = `"${macToolPath}" -m auto -u ${pacUrl}`
} else if (isLinux) {
} else if (isLinux && isGsettingsAvaliable) {
command = `gsettings set org.gnome.system.proxy mode 'auto' && gsettings set org.gnome.system.proxy autoconfig-url ${pacUrl}`
}
runCommand(command)
Expand Down
75 changes: 0 additions & 75 deletions src/main/python.js

This file was deleted.

2 changes: 1 addition & 1 deletion src/renderer/views/Feature.vue
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
</i-row>
<div class="flex flex-ai-center mt-64">
<i-checkbox v-model="autoDownload" @on-change="updateAutoDownload">自动下载SSR</i-checkbox>
<i-tooltip placement="top" content="勾选上后将自动下载ssr-python" style="margin-top:2px">
<i-tooltip placement="top" content="勾选上后将自动下载ss-local" style="margin-top:2px">
<i-icon color="#495060" type="help-circled"></i-icon>
</i-tooltip>
</div>
Expand Down
3 changes: 2 additions & 1 deletion src/renderer/views/Setup.vue
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import { ipcRenderer } from 'electron'
import { join } from 'path'
import { mapState, mapMutations } from 'vuex'
import { openDialog } from '../ipc'
import { isWin } from '../../shared/env'
import { isSSRPathAvaliable } from '../../shared/utils'
import { STORE_KEY_AUTO_DOWNLOAD } from '../constants'
import { EVENT_SSR_DOWNLOAD_RENDERER, EVENT_SSR_DOWNLOAD_MAIN } from '../../shared/events'
Expand Down Expand Up @@ -95,7 +96,7 @@ export default {
} else {
self.$nextTick(() => {
// 需要在下载目录后追加shadowsocks子目录
self.setup(join(self.meta.defaultSSRDownloadDir, 'shadowsocks'))
self.setup(join(self.meta.defaultSSRDownloadDir, `ss-local${isWin ? '.exe' : ''}`))
})
}
}
Expand Down
Loading

0 comments on commit df59ac5

Please sign in to comment.