Compare commits

...
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

63 Commits

Author SHA1 Message Date
wowario 1b81b8d698 Update 'README.md'
4 years ago
qvqc 0dcb6e617e Merge pull request 'welcome home <3' (#30) from qvqc/wow-lite-wallet:master into master
4 years ago
qvqc 684983ff90
welcome home <3
4 years ago
wowario 6af096be7b
update git url
4 years ago
wowario a369ad9190
add bg to seed textarea
4 years ago
wowario e27e90a7d8
credit artwork
4 years ago
wowario e0952c9e15
add credits bg and toad tilt
4 years ago
wowario 868a72d88b
add bg
4 years ago
wowario b8b541d2a7
update graphics
4 years ago
wowario 8221a022a3
rename to wowlite
4 years ago
清武 博二 d04a72cd60
Merge pull request #27 from wowario/patch
4 years ago
清武 博二 b54c36f498
Merge pull request #26 from wowario/bubbles
4 years ago
清武 博二 59805d2421
Merge pull request #24 from wowario/quotes
4 years ago
清武 博二 9aa1b95f01
Merge pull request #23 from wowario/master
4 years ago
wowario c3a6f8cb61
set inactivity_lock_timeout for 1 year
4 years ago
wowario 55324022a6
get XMR price
4 years ago
wowario c4162bc55d
fix bubbles
4 years ago
wowario ba3413fa2c
new messages
4 years ago
wowario af99864ed4
get BTC price
4 years ago
wowario 861521d832
bump up electron-builder
4 years ago
wowario 9e2699ca87
bump up to v0.1.4
4 years ago
清武 博二 f8d4ca62ad
Merge pull request #22 from qvqc/master
4 years ago
qvqc 348108628b update patch for release-v0.8 tag
4 years ago
xmrdsc 703cead0c5
Merge pull request #21 from qvqc/master
4 years ago
qvqc 7057570046 set default node to current
4 years ago
qvqc 8e1b0b2dea add non-interactive transfers to litepatch
4 years ago
qvqc 259e34d83d update window title
4 years ago
qvqc 005f18beb0 update package.json name, version, and contact
4 years ago
qvqc 4a4d66ca75 remove link to old releases
4 years ago
qvqc 52d6a0649e update screenshot in readme
4 years ago
qvqc 5f32ca6eca updated logo
4 years ago
qvqc 18b0ce2504 remove funding and comments from landing page
4 years ago
qvqc 9bcb0f9c37 update available nodes
4 years ago
qvqc 38c4829340 added seed generation and proper spacing
4 years ago
xmrdsc 35afa994c5
Merge pull request #20 from wowario/master
5 years ago
wowario 8452727ed5
update patch
5 years ago
dsc b1d623e2ca
piece of sh&&0@
5 years ago
xmrdsc da7b1c6451
Merge pull request #19 from wownero/bleepbleep
5 years ago
dsc f47a1b1f1b
Add Aluisyo node, fix navbar href
5 years ago
Hiroji Kiyotake ed43794a9a
Merge pull request #18 from wownero/feature_0_3_1
5 years ago
dsc 5b721f0edc
Release 0.3.1
5 years ago
xmrdsc 575f5b0d78
Merge pull request #15 from wownero/fix-wallets-json
5 years ago
dsc 2a6d8752e4
Fix wallet breaking error on startup
5 years ago
xmrdsc 1609ceb22d
Merge pull request #14 from jwinterm/master
5 years ago
jw 09147aa929
Allow for sending to subaddress
5 years ago
xmrdsc fdd3f6db28
Merge pull request #12 from wowario/fix
5 years ago
wowario 29fe539b8e
update webpack-dev-server
5 years ago
dsc 5af5fbcd73
Bump version
5 years ago
xmrdsc 2e0ef8f8f2
Merge pull request #11 from bomb-on/master
5 years ago
bomb-on 09f09f3291 More button > better!
5 years ago
bomb-on b5b6344968 So much wallets
5 years ago
bomb-on be39e55fcf Clean input pls?
5 years ago
bomb-on 1319c6e5fe Focus input plus much more equality<3
5 years ago
bomb-on 242d721653 Added moar messages
5 years ago
bomb-on 617a52cccd Added regex for integrated addresses
5 years ago
xmrdsc f89fc4241a
Merge pull request #10 from 0x000090/win-homedir-fix
6 years ago
0x000090 d10c3b7787 supa dupa equality
6 years ago
0x000090 d0028a2fab create wow dir in USERPROFILE on win
6 years ago
xmrdsc 720bbc5172
Update README.md
6 years ago
xmrdsc 9e75c2b106
Update README.md
6 years ago
Sander Ferdinand 55fce579c4
No comment on this one
6 years ago
Sander Ferdinand 95660f732c
Updating CLI diff
6 years ago
xmrdsc 93f537a7bc
Merge pull request #8 from skftn/0.1.1
6 years ago

@ -24,93 +24,95 @@ else if (process.env.BUILD_TARGET === 'web') web()
else build()
function clean () {
del.sync(['build/*', '!build/icons', '!build/icons/icon.*'])
console.log(`\n${doneLog}\n`)
process.exit()
del.sync(['build/*', '!build/icons', '!build/icons/icon.*'])
console.log(`\n${doneLog}\n`)
process.exit()
}
function build () {
greeting()
greeting()
del.sync(['dist/electron/*', '!.gitkeep'])
del.sync(['dist/electron/*', '!.gitkeep'])
const tasks = ['main', 'renderer']
const m = new Multispinner(tasks, {
preText: 'building',
postText: 'process'
})
const tasks = ['main', 'renderer']
const m = new Multispinner(tasks, {
preText: 'building',
postText: 'process'
})
let results = ''
let results = ''
m.on('success', () => {
process.stdout.write('\x1B[2J\x1B[0f')
console.log(`\n\n${results}`)
console.log(`${okayLog}take it away ${chalk.yellow('`electron-builder`')}\n`)
process.exit()
})
pack(mainConfig).then(result => {
results += result + '\n\n'
m.success('main')
}).catch(err => {
m.error('main')
console.log(`\n ${errorLog}failed to build main process`)
console.error(`\n${err}\n`)
process.exit(1)
})
pack(rendererConfig).then(result => {
results += result + '\n\n'
m.success('renderer')
}).catch(err => {
m.error('renderer')
console.log(`\n ${errorLog}failed to build renderer process`)
console.error(`\n${err}\n`)
process.exit(1)
})
m.on('success', () => {
process.stdout.write('\x1B[2J\x1B[0f')
console.log(`\n\n${results}`)
console.log(`${okayLog}take it away ${chalk.yellow('`electron-builder`')}\n`)
process.exit()
})
pack(mainConfig).then(result => {
results += result + '\n\n'
m.success('main')
}).catch(err => {
m.error('main')
console.log(`\n ${errorLog}failed to build main process`)
console.error(`\n${err}\n`)
process.exit(1)
})
pack(rendererConfig).then(result => {
results += result + '\n\n'
m.success('renderer')
}).catch(err => {
m.error('renderer')
console.log(`\n ${errorLog}failed to build renderer process`)
console.error(`\n${err}\n`)
process.exit(1)
})
}
function pack (config) {
return new Promise((resolve, reject) => {
webpack(config, (err, stats) => {
if (err) reject(err.stack || err)
else if (stats.hasErrors()) {
let err = ''
stats.toString({
chunks: false,
colors: true
return new Promise((resolve, reject) => {
config.mode = 'production'
webpack(config, (err, stats) => {
if (err) reject(err.stack || err)
else if (stats.hasErrors()) {
let err = ''
stats.toString({
chunks: false,
colors: true
})
.split(/\r?\n/)
.forEach(line => {
err += ` ${line}\n`
})
reject(err)
} else {
resolve(stats.toString({
chunks: false,
colors: true
}))
}
})
.split(/\r?\n/)
.forEach(line => {
err += ` ${line}\n`
})
reject(err)
} else {
resolve(stats.toString({
chunks: false,
colors: true
}))
}
})
})
}
function web () {
del.sync(['dist/web/*', '!.gitkeep'])
webpack(webConfig, (err, stats) => {
if (err || stats.hasErrors()) console.log(err)
console.log(stats.toString({
chunks: false,
colors: true
}))
del.sync(['dist/web/*', '!.gitkeep'])
webConfig.mode = 'production'
webpack(webConfig, (err, stats) => {
if (err || stats.hasErrors()) console.log(err)
console.log(stats.toString({
chunks: false,
colors: true
}))
process.exit()
})
process.exit()
})
}
function greeting () {
console.log('WOW such build\n');
}
}

@ -1,23 +1,23 @@
const hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true')
hotClient.subscribe(event => {
/**
* Reload browser when HTMLWebpackPlugin emits a new index.html
*
* Currently disabled until jantimon/html-webpack-plugin#680 is resolved.
* https://github.com/SimulatedGREG/electron-vue/issues/437
* https://github.com/jantimon/html-webpack-plugin/issues/680
*/
// if (event.action === 'reload') {
// window.location.reload()
// }
/**
* Reload browser when HTMLWebpackPlugin emits a new index.html
*
* Currently disabled until jantimon/html-webpack-plugin#680 is resolved.
* https://github.com/SimulatedGREG/electron-vue/issues/437
* https://github.com/jantimon/html-webpack-plugin/issues/680
*/
// if (event.action === 'reload') {
// window.location.reload()
// }
/**
* Notify `mainWindow` when `main` process is compiling,
* giving notice for an expected reload of the `electron` process
*/
if (event.action === 'compiling') {
document.body.innerHTML += `
/**
* Notify `mainWindow` when `main` process is compiling,
* giving notice for an expected reload of the `electron` process
*/
if (event.action === 'compiling') {
document.body.innerHTML += `
<style>
#dev-client {
background: #4fc08d;
@ -36,5 +36,5 @@ hotClient.subscribe(event => {
Compiling Main Process...
</div>
`
}
}
})

@ -17,132 +17,144 @@ let manualRestart = false
let hotMiddleware
function logStats (proc, data) {
let log = ''
let log = ''
log += chalk.yellow.bold(`${proc} Process ${new Array((19 - proc.length) + 1).join('-')}`)
log += '\n\n'
log += chalk.yellow.bold(`${proc} Process ${new Array((19 - proc.length) + 1).join('-')}`)
log += '\n\n'
if (typeof data === 'object') {
data.toString({
colors: true,
chunks: false
}).split(/\r?\n/).forEach(line => {
log += ' ' + line + '\n'
})
} else {
log += ` ${data}\n`
}
if (typeof data === 'object') {
data.toString({
colors: true,
chunks: false
}).split(/\r?\n/).forEach(line => {
log += ' ' + line + '\n'
})
} else {
log += ` ${data}\n`
}
log += '\n' + chalk.yellow.bold(`${new Array(28 + 1).join('-')}`) + '\n'
log += '\n' + chalk.yellow.bold(`${new Array(28 + 1).join('-')}`) + '\n'
console.log(log)
console.log(log)
}
function startRenderer () {
return new Promise((resolve, reject) => {
rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
const compiler = webpack(rendererConfig)
hotMiddleware = webpackHotMiddleware(compiler, {
log: false,
heartbeat: 2500
})
compiler.plugin('compilation', compilation => {
compilation.plugin('html-webpack-plugin-after-emit', (data, cb) => {
hotMiddleware.publish({ action: 'reload' })
cb()
})
return new Promise((resolve, reject) => {
rendererConfig.entry.renderer = [path.join(__dirname, 'dev-client')].concat(rendererConfig.entry.renderer)
rendererConfig.mode = 'development'
const compiler = webpack(rendererConfig)
hotMiddleware = webpackHotMiddleware(compiler, {
log: false,
heartbeat: 2500
})
compiler.hooks.compilation.tap('compilation', compilation => {
compilation.hooks.htmlWebpackPluginAfterEmit.tapAsync('html-webpack-plugin-after-emit', (data, cb) => {
hotMiddleware.publish({ action: 'reload' })
cb()
})
})
compiler.hooks.done.tap('done', stats => {
logStats('Renderer', stats)
})
const server = new WebpackDevServer(
compiler,
{
contentBase: path.join(__dirname, '../'),
quiet: true,
before (app, ctx) {
app.use(hotMiddleware)
ctx.middleware.waitUntilValid(() => {
resolve()
})
}
}
)
server.listen(9080)
})
compiler.plugin('done', stats => {
logStats('Renderer', stats)
})
const server = new WebpackDevServer(
compiler,
{
contentBase: path.join(__dirname, '../'),
quiet: true,
before (app, ctx) {
app.use(hotMiddleware)
ctx.middleware.waitUntilValid(() => {
resolve()
})
}
}
)
server.listen(9080)
})
}
function startMain () {
return new Promise((resolve, reject) => {
mainConfig.entry.main = [path.join(__dirname, '../src/main/index.dev.js')].concat(mainConfig.entry.main)
const compiler = webpack(mainConfig)
compiler.plugin('watch-run', (compilation, done) => {
logStats('Main', chalk.white.bold('compiling...'))
hotMiddleware.publish({ action: 'compiling' })
done()
})
compiler.watch({}, (err, stats) => {
if (err) {
console.log(err)
return
}
return new Promise((resolve, reject) => {
mainConfig.entry.main = [path.join(__dirname, '../src/main/index.dev.js')].concat(mainConfig.entry.main)
mainConfig.mode = 'development'
const compiler = webpack(mainConfig)
compiler.hooks.watchRun.tapAsync('watch-run', (compilation, done) => {
logStats('Main', chalk.white.bold('compiling...'))
hotMiddleware.publish({ action: 'compiling' })
done()
})
compiler.watch({}, (err, stats) => {
if (err) {
console.log(err)
return
}
logStats('Main', stats)
if (electronProcess && electronProcess.kill) {
manualRestart = true
process.kill(electronProcess.pid)
electronProcess = null
startElectron()
setTimeout(() => {
manualRestart = false
}, 5000)
}
logStats('Main', stats)
if (electronProcess && electronProcess.kill) {
manualRestart = true
process.kill(electronProcess.pid)
electronProcess = null
startElectron()
setTimeout(() => {
manualRestart = false
}, 5000)
}
resolve()
resolve()
})
})
})
}
function startElectron () {
electronProcess = spawn(electron, ['--inspect=5858', '.'])
electronProcess.stdout.on('data', data => {
electronLog(data, 'blue')
})
electronProcess.stderr.on('data', data => {
electronLog(data, 'red')
})
electronProcess.on('close', () => {
if (!manualRestart) process.exit()
})
var args = [
'--inspect=5858',
path.join(__dirname, '../dist/electron/main.js')
]
// detect yarn or npm and process commandline args accordingly
if (process.env.npm_execpath.endsWith('yarn.js')) {
args = args.concat(process.argv.slice(3))
} else if (process.env.npm_execpath.endsWith('npm-cli.js')) {
args = args.concat(process.argv.slice(2))
}
electronProcess = spawn(electron, args)
electronProcess.stdout.on('data', data => {
electronLog(data, 'blue')
})
electronProcess.stderr.on('data', data => {
electronLog(data, 'red')
})
electronProcess.on('close', () => {
if (!manualRestart) process.exit()
})
}
function electronLog (data, color) {
let log = ''
data = data.toString().split(/\r?\n/)
data.forEach(line => {
log += ` ${line}\n`
})
if (/[0-9A-z]+/.test(log)) {
console.log(
chalk[color].bold('┏ Electron -------------------') +
'\n\n' +
log +
chalk[color].bold('┗ ----------------------------') +
'\n'
)
}
let log = ''
data = data.toString().split(/\r?\n/)
data.forEach(line => {
log += ` ${line}\n`
})
if (/[0-9A-z]+/.test(log)) {
console.log(
chalk[color].bold('┏ Electron -------------------') +
'\n\n' +
log +
chalk[color].bold('┗ ----------------------------') +
'\n'
)
}
}
function greeting () {
@ -150,15 +162,15 @@ function greeting () {
}
function init () {
greeting()
Promise.all([startRenderer(), startMain()])
.then(() => {
startElectron()
})
.catch(err => {
console.error(err)
})
greeting()
Promise.all([startRenderer(), startMain()])
.then(() => {
startElectron()
})
.catch(err => {
console.error(err)
})
}
init()

@ -6,67 +6,73 @@ const path = require('path')
const { dependencies } = require('../package.json')
const webpack = require('webpack')
const BabiliWebpackPlugin = require('babili-webpack-plugin')
const BabiliWebpackPlugin = require('babel-minify-webpack-plugin')
let mainConfig = {
entry: {
main: path.join(__dirname, '../src/main/index.js')
},
externals: [
...Object.keys(dependencies || {})
],
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.node$/,
use: 'node-loader'
}
]
},
node: {
__dirname: process.env.NODE_ENV !== 'production',
__filename: process.env.NODE_ENV !== 'production'
},
output: {
filename: '[name].js',
libraryTarget: 'commonjs2',
path: path.join(__dirname, '../dist/electron')
},
plugins: [
new webpack.NoEmitOnErrorsPlugin()
],
resolve: {
extensions: ['.js', '.json', '.node']
},
target: 'electron-main'
entry: {
main: path.join(__dirname, '../src/main/index.js')
},
externals: [
...Object.keys(dependencies || {})
],
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.node$/,
use: 'node-loader'
}
]
},
node: {
__dirname: process.env.NODE_ENV !== 'production',
__filename: process.env.NODE_ENV !== 'production'
},
output: {
filename: '[name].js',
libraryTarget: 'commonjs2',
path: path.join(__dirname, '../dist/electron')
},
plugins: [
new webpack.NoEmitOnErrorsPlugin()
],
resolve: {
extensions: ['.js', '.json', '.node']
},
target: 'electron-main'
}
/**
* Adjust mainConfig for development settings
*/
if (process.env.NODE_ENV !== 'production') {
mainConfig.plugins.push(
new webpack.DefinePlugin({
'__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`
})
)
mainConfig.plugins.push(
new webpack.DefinePlugin({
'__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`
})
)
}
/**
* Adjust mainConfig for production settings
*/
if (process.env.NODE_ENV === 'production') {
mainConfig.plugins.push(
new BabiliWebpackPlugin(),
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"'
})
)
mainConfig.plugins.push(
new webpack.DefinePlugin({
'__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`,
'process.env.NODE_ENV': '"production"'
}),
)
// mainConfig.plugins.push(
// new BabiliWebpackPlugin(),
// new webpack.DefinePlugin({
// 'process.env.NODE_ENV': '"production"'
// })
// )
}
module.exports = mainConfig

@ -6,10 +6,11 @@ const path = require('path')
const { dependencies } = require('../package.json')
const webpack = require('webpack')
const BabiliWebpackPlugin = require('babili-webpack-plugin')
const BabiliWebpackPlugin = require('babel-minify-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')
/**
* List of node_modules to include in webpack bundle
@ -21,147 +22,150 @@ const HtmlWebpackPlugin = require('html-webpack-plugin')
let whiteListedModules = ['vue']
let rendererConfig = {
devtool: '#cheap-module-eval-source-map',
entry: {
renderer: path.join(__dirname, '../src/renderer/main.js')
},
externals: [
...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d))
],
module: {
rules: [
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader'
})
},
{
test: /\.html$/,
use: 'vue-html-loader'
},
{
test: /\.js$/,
use: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.node$/,
use: 'node-loader'
},
{
test: /\.vue$/,
use: {
loader: 'vue-loader',
options: {
extractCSS: process.env.NODE_ENV === 'production',
loaders: {
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
scss: 'vue-style-loader!css-loader!sass-loader'
devtool: '#cheap-module-eval-source-map',
entry: {
renderer: path.join(__dirname, '../src/renderer/main.js')
},
externals: [
...Object.keys(dependencies || {}).filter(d => !whiteListedModules.includes(d))
],
module: {
rules: [
{
test: /\.less$/,
use: ['vue-style-loader', 'css-loader', 'less-loader']
},
{
test: /\.css$/,
use: ['vue-style-loader', 'css-loader']
},
{
test: /\.html$/,
use: 'vue-html-loader'
},
{
test: /\.js$/,
use: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.node$/,
use: 'node-loader'
},
{
test: /\.vue$/,
use: {
loader: 'vue-loader',
options: {
extractCSS: process.env.NODE_ENV === 'production',
loaders: {
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
scss: 'vue-style-loader!css-loader!sass-loader',
less: 'vue-style-loader!css-loader!less-loader'
}
}
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
use: {
loader: 'url-loader',
query: {
limit: 10000,
name: 'imgs/[name]--[folder].[ext]'
}
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'media/[name]--[folder].[ext]'
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
use: {
loader: 'url-loader',
query: {
limit: 10000,
name: 'fonts/[name]--[folder].[ext]'
}
}
}
}
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
use: {
loader: 'url-loader',
query: {
limit: 10000,
name: 'imgs/[name]--[folder].[ext]'
}
}
},
{
test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: 'media/[name]--[folder].[ext]'
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
use: {
loader: 'url-loader',
query: {
limit: 10000,
name: 'fonts/[name]--[folder].[ext]'
}
}
}
]
},
node: {
__dirname: process.env.NODE_ENV !== 'production',
__filename: process.env.NODE_ENV !== 'production'
},
plugins: [
new ExtractTextPlugin('styles.css'),
new HtmlWebpackPlugin({
filename: 'index.html',
template: path.resolve(__dirname, '../src/index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true
},
nodeModules: process.env.NODE_ENV !== 'production'
? path.resolve(__dirname, '../node_modules')
: false
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin()
],
output: {
filename: '[name].js',
libraryTarget: 'commonjs2',
path: path.join(__dirname, '../dist/electron')
},
resolve: {
alias: {
'@': path.join(__dirname, '../src/renderer'),
'vue$': 'vue/dist/vue.esm.js'
]
},
node: {
__dirname: process.env.NODE_ENV !== 'production',
__filename: process.env.NODE_ENV !== 'production'
},
plugins: [
new VueLoaderPlugin(),
new MiniCssExtractPlugin({filename: 'styles.css'}),
new HtmlWebpackPlugin({
filename: 'index.html',
template: path.resolve(__dirname, '../src/index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true
},
nodeModules: process.env.NODE_ENV !== 'production'
? path.resolve(__dirname, '../node_modules')
: false
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin()
],
output: {
filename: '[name].js',
libraryTarget: 'commonjs2',
path: path.join(__dirname, '../dist/electron')
},
extensions: ['.js', '.vue', '.json', '.css', '.node']
},
target: 'electron-renderer'
resolve: {
alias: {
'@': path.join(__dirname, '../src/renderer'),
'vue$': 'vue/dist/vue.esm.js'
},
extensions: ['.js', '.vue', '.json', '.css', '.node']
},
target: 'electron-renderer'
}
/**
* Adjust rendererConfig for development settings
*/
if (process.env.NODE_ENV !== 'production') {
rendererConfig.plugins.push(
new webpack.DefinePlugin({
'__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`
})
)
rendererConfig.plugins.push(
new webpack.DefinePlugin({
'__static': `"${path.join(__dirname, '../static').replace(/\\/g, '\\\\')}"`
})
)
}
/**
* Adjust rendererConfig for production settings
*/
if (process.env.NODE_ENV === 'production') {
rendererConfig.devtool = ''
rendererConfig.devtool = ''
rendererConfig.plugins.push(
new BabiliWebpackPlugin(),
new CopyWebpackPlugin([
{
from: path.join(__dirname, '../static'),
to: path.join(__dirname, '../dist/electron/static'),
ignore: ['.*']
}
]),
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"'
}),
new webpack.LoaderOptionsPlugin({
minimize: true
})
)
rendererConfig.plugins.push(
new BabiliWebpackPlugin(),
new CopyWebpackPlugin([
{
from: path.join(__dirname, '../static'),
to: path.join(__dirname, '../dist/electron/static'),
ignore: ['.*']
}
]),
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"'
}),
new webpack.LoaderOptionsPlugin({
minimize: true
})
)
}
module.exports = rendererConfig

@ -5,124 +5,128 @@ process.env.BABEL_ENV = 'web'
const path = require('path')
const webpack = require('webpack')
const BabiliWebpackPlugin = require('babili-webpack-plugin')
const BabiliWebpackPlugin = require('babel-minify-webpack-plugin')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const { VueLoaderPlugin } = require('vue-loader')
let webConfig = {
devtool: '#cheap-module-eval-source-map',
entry: {
web: path.join(__dirname, '../src/renderer/main.js')
},
module: {
rules: [
{
test: /\.css$/,
use: ExtractTextPlugin.extract({
fallback: 'style-loader',
use: 'css-loader'
})
},
{
test: /\.html$/,
use: 'vue-html-loader'
},
{
test: /\.js$/,
use: 'babel-loader',
include: [ path.resolve(__dirname, '../src/renderer') ],
exclude: /node_modules/
},
{
test: /\.vue$/,
use: {
loader: 'vue-loader',
options: {
extractCSS: true,
loaders: {
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
scss: 'vue-style-loader!css-loader!sass-loader'
devtool: '#cheap-module-eval-source-map',
entry: {
web: path.join(__dirname, '../src/renderer/main.js')
},
module: {
rules: [
{
test: /\.less$/,
use: ['vue-style-loader', 'css-loader', 'less-loader']
},
{
test: /\.css$/,
use: ['vue-style-loader', 'css-loader']
},
{
test: /\.html$/,
use: 'vue-html-loader'
},
{
test: /\.js$/,
use: 'babel-loader',
include: [ path.resolve(__dirname, '../src/renderer') ],
exclude: /node_modules/
},
{
test: /\.vue$/,
use: {
loader: 'vue-loader',
options: {
extractCSS: true,
loaders: {
sass: 'vue-style-loader!css-loader!sass-loader?indentedSyntax=1',
scss: 'vue-style-loader!css-loader!sass-loader',
less: 'vue-style-loader!css-loader!less-loader'
}
}
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
use: {
loader: 'url-loader',
query: {
limit: 10000,
name: 'imgs/[name].[ext]'
}
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
use: {
loader: 'url-loader',
query: {
limit: 10000,
name: 'fonts/[name].[ext]'
}
}
}
}
}
},
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
use: {
loader: 'url-loader',
query: {
limit: 10000,
name: 'imgs/[name].[ext]'
}
}
},
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
use: {
loader: 'url-loader',
query: {
limit: 10000,
name: 'fonts/[name].[ext]'
}
}
}
]
},
plugins: [
new ExtractTextPlugin('styles.css'),
new HtmlWebpackPlugin({
filename: 'index.html',
template: path.resolve(__dirname, '../src/index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true
},
nodeModules: false
}),
new webpack.DefinePlugin({
'process.env.IS_WEB': 'true'
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin()
],
output: {
filename: '[name].js',
path: path.join(__dirname, '../dist/web')
},
resolve: {
alias: {
'@': path.join(__dirname, '../src/renderer'),
'vue$': 'vue/dist/vue.esm.js'
]
},
plugins: [
new VueLoaderPlugin(),
new MiniCssExtractPlugin({filename: 'styles.css'}),
new HtmlWebpackPlugin({
filename: 'index.html',
template: path.resolve(__dirname, '../src/index.ejs'),
minify: {
collapseWhitespace: true,
removeAttributeQuotes: true,
removeComments: true
},
nodeModules: false
}),
new webpack.DefinePlugin({
'process.env.IS_WEB': 'true'
}),
new webpack.HotModuleReplacementPlugin(),
new webpack.NoEmitOnErrorsPlugin()
],
output: {
filename: '[name].js',
path: path.join(__dirname, '../dist/web')
},
extensions: ['.js', '.vue', '.json', '.css']
},
target: 'web'
resolve: {
alias: {
'@': path.join(__dirname, '../src/renderer'),
'vue$': 'vue/dist/vue.esm.js'
},
extensions: ['.js', '.vue', '.json', '.css']
},
target: 'web'
}
/**
* Adjust webConfig for production settings
*/
if (process.env.NODE_ENV === 'production') {
webConfig.devtool = ''
webConfig.devtool = ''
webConfig.plugins.push(
new BabiliWebpackPlugin(),
new CopyWebpackPlugin([
{
from: path.join(__dirname, '../static'),
to: path.join(__dirname, '../dist/web/static'),
ignore: ['.*']
}
]),
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"'
}),
new webpack.LoaderOptionsPlugin({
minimize: true
})
)
webConfig.plugins.push(
new BabiliWebpackPlugin(),
new CopyWebpackPlugin([
{
from: path.join(__dirname, '../static'),
to: path.join(__dirname, '../dist/web/static'),
ignore: ['.*']
}
]),
new webpack.DefinePlugin({
'process.env.NODE_ENV': '"production"'
}),
new webpack.LoaderOptionsPlugin({
minimize: true
})
)
}
module.exports = webConfig

4
.gitignore vendored

@ -9,4 +9,6 @@ npm-debug.log.*
thumbs.db
!.gitkeep
.idea
wowlight
wowlite
package-lock.json
*.log

@ -20,7 +20,7 @@ If `npm run dev` works, you can install a custom version of `wownero-wallet-cli`
#### wownero-wallet-cli :star2:
```
git clone https://github.com/wownero/wownero.git
git clone https://git.wownero.com/wownero/wownero.git
cd wownero
git checkout <latest version here>
git apply light_patch.diff
@ -30,7 +30,7 @@ make -j4
Use `light_patch.diff` that's included in this repository. Move resulting binary into the resources folder:
```
cp build/release/bin/wownero-wallet-cli wowlight/resources/linux/bin/wowlight
cp build/release/bin/wownero-wallet-cli wowlite/resources/linux/bin/wowlite
```
Build the light wallet:

@ -1,18 +1,3 @@
# wowlight
Deprecated - No longer maintained.
![](https://light.wownero.com/wowlight.png)
Wownero wallet full of questionable development practices.
- Electron/Vue.js
- Remote node only
- 100% WOW
Download: [https://light.wownero.com](https://light.wownero.com)
See `Install.md` for compilation instructions.
### License
© 2018 WTFPL Do What the Fuck You Want to Public License
Use latest [CLI wallet](https://git.wownero.com/wownero/wownero/releases), [web wallet](https://wowstash.app), or [feather-wow wallet](https://featherwallet.org/wownero/)

@ -1,138 +1,52 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index c3dc88b0..e04892f8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -466,15 +466,18 @@ endif()
include_directories(${LIBUNWIND_INCLUDE})
link_directories(${LIBUNWIND_LIBRARY_DIRS})
+if(USE_DEVICE_LEDGER)
+ set(USE_DEVICE_LEDGER 0)
+
# Final setup for libpcsc
-if (PCSC_FOUND)
- message(STATUS "Using PCSC include dir at ${PCSC_INCLUDE_DIR}")
- add_definitions(-DHAVE_PCSC)
- include_directories(${PCSC_INCLUDE_DIR})
- link_directories(${LIBPCSC_LIBRARY_DIRS})
-else (PCSC_FOUND)
- message(STATUS "Could not find PCSC")
-endif()
+#if (PCSC_FOUND)
+# message(STATUS "Using PCSC include dir at ${PCSC_INCLUDE_DIR}")
+# add_definitions(-DHAVE_PCSC)
+# include_directories(${PCSC_INCLUDE_DIR})
+# link_directories(${LIBPCSC_LIBRARY_DIRS})
+#else (PCSC_FOUND)
+# message(STATUS "Could not find PCSC")
+#endif()
if(MSVC)
add_definitions("/bigobj /MP /W3 /GS- /D_CRT_SECURE_NO_WARNINGS /wd4996 /wd4345 /D_WIN32_WINNT=0x0600 /DWIN32_LEAN_AND_MEAN /DGTEST_HAS_TR1_TUPLE=0 /FIinline_c.h /D__SSE4_1__")
@@ -904,31 +907,31 @@ endif()
add_subdirectory(contrib)
add_subdirectory(src)
-if(BUILD_TESTS)
- add_subdirectory(tests)
-endif()
-
-if(BUILD_DOCUMENTATION)
- set(DOC_GRAPHS "YES" CACHE STRING "Create dependency graphs (needs graphviz)")
- set(DOC_FULLGRAPHS "NO" CACHE STRING "Create call/callee graphs (large)")
-
- find_program(DOT_PATH dot)
-
- if (DOT_PATH STREQUAL "DOT_PATH-NOTFOUND")
- message("Doxygen: graphviz not found - graphs disabled")
- set(DOC_GRAPHS "NO")
- endif()
+#if(BUILD_TESTS)
+# add_subdirectory(tests)
+#endif()
- find_package(Doxygen)
- if(DOXYGEN_FOUND)
- configure_file("cmake/Doxyfile.in" "Doxyfile" @ONLY)
- configure_file("cmake/Doxygen.extra.css.in" "Doxygen.extra.css" @ONLY)
- add_custom_target(doc
- ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
- WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
- COMMENT "Generating API documentation with Doxygen.." VERBATIM)
- endif()
-endif()
+#if(BUILD_DOCUMENTATION)
+# set(DOC_GRAPHS "YES" CACHE STRING "Create dependency graphs (needs graphviz)")
+# set(DOC_FULLGRAPHS "NO" CACHE STRING "Create call/callee graphs (large)")
+#
+# find_program(DOT_PATH dot)
+#
+# if (DOT_PATH STREQUAL "DOT_PATH-NOTFOUND")
+# message("Doxygen: graphviz not found - graphs disabled")
+# set(DOC_GRAPHS "NO")
+# endif()
+#
+# find_package(Doxygen)
+# if(DOXYGEN_FOUND)
+# configure_file("cmake/Doxyfile.in" "Doxyfile" @ONLY)
+# configure_file("cmake/Doxygen.extra.css.in" "Doxygen.extra.css" @ONLY)
+# add_custom_target(doc
+# ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile
+# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+# COMMENT "Generating API documentation with Doxygen.." VERBATIM)
+# endif()
+#endif()
# when ON - will install libwallet_merged into "lib"
option(BUILD_GUI_DEPS "Build GUI dependencies." OFF)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3b71c38c..bbdeba8d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -30,6 +30,7 @@
if (WIN32 OR STATIC)
add_definitions(-DSTATICLIB)
+ add_definitions(-DUSE_DEVICE_LEDGER=0)
# miniupnp changed their static define
add_definitions(-DMINIUPNP_STATICLIB)
endif ()
diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp
index d2acf518..f935c6ea 100755
index 69d4652bb..efd04ca68 100644
--- a/src/simplewallet/simplewallet.cpp
+++ b/src/simplewallet/simplewallet.cpp
@@ -3488,12 +3488,7 @@ bool simple_wallet::ask_wallet_create_if_needed()
@@ -3876,23 +3876,10 @@ bool simple_wallet::ask_wallet_create_if_needed()
*/
void simple_wallet::print_seed(std::string seed)
void simple_wallet::print_seed(const epee::wipeable_string &seed)
{
- success_msg_writer(true) << "\n" << tr("NOTE: the following 25 words can be used to recover access to your wallet. "
- success_msg_writer(true) << "\n" << boost::format(tr("NOTE: the following %s can be used to recover access to your wallet. "
- "Write them down and store them somewhere safe and secure. Please do not store them in "
- "your email or on file storage services outside of your immediate control.\n");
- boost::replace_nth(seed, " ", 15, "\n");
- boost::replace_nth(seed, " ", 7, "\n");
- "your email or on file storage services outside of your immediate control.\n")) % (m_wallet->multisig() ? tr("string") : tr("25 words"));
- // don't log
+ success_msg_writer(true) << "**********************************************************************\n";
std::cout << seed << std::endl;
}
//----------------------------------------------------------------------------------------------------
@@ -4169,37 +4164,8 @@ bool simple_wallet::try_connect_to_daemon(bool silent, uint32_t* version)
int space_index = 0;
size_t len = seed.size();
for (const char *ptr = seed.data(); len--; ++ptr)
{
- if (*ptr == ' ')
- {
- if (space_index == 15 || space_index == 7)
- putchar('\n');
- else
- putchar(*ptr);
- ++space_index;
- }
- else
putchar(*ptr);
}
putchar('\n');
@@ -4640,40 +4627,9 @@ bool simple_wallet::try_connect_to_daemon(bool silent, uint32_t* version)
*/
std::string simple_wallet::get_mnemonic_language()
{
std::vector<std::string> language_list;
- std::vector<std::string> language_list_self, language_list_english;
- const std::vector<std::string> &language_list = m_use_english_language_names ? language_list_english : language_list_self;
- std::string language_choice;
- int language_number = -1;
crypto::ElectrumWords::get_language_list(language_list, m_use_english_language_names);
- crypto::ElectrumWords::get_language_list(language_list_self, false);
- crypto::ElectrumWords::get_language_list(language_list_english, true);
- std::cout << tr("List of available languages for your wallet's seed:") << std::endl;
- std::cout << tr("If your display freezes, exit blind with ^C, then run again with --use-english-language-names") << std::endl;
- int ii;
- std::vector<std::string>::iterator it;
- std::vector<std::string>::const_iterator it;
- for (it = language_list.begin(), ii = 0; it != language_list.end(); it++, ii++)
- {
- std::cout << ii << " : " << *it << std::endl;
- }
- while (language_number < 0)
- {
- language_choice = input_line(tr("Enter the number corresponding to the language of your choice: "));
- language_choice = input_line(tr("Enter the number corresponding to the language of your choice"));
- if (std::cin.eof())
- return std::string();
- try
@ -149,81 +63,86 @@ index d2acf518..f935c6ea 100755
- fail_msg_writer() << tr("invalid language choice entered. Please try again.\n");
- }
- }
- return language_list[language_number];
- return language_list_self[language_number];
+ std::vector<std::string> language_list;
+ crypto::ElectrumWords::get_language_list(language_list, m_use_english_language_names);
+ return language_list[1];
}
//----------------------------------------------------------------------------------------------------
boost::optional<tools::password_container> simple_wallet::get_and_verify_password() const
@@ -4299,11 +4265,9 @@ boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::pr
@@ -4778,11 +4734,9 @@ boost::optional<epee::wipeable_string> simple_wallet::new_wallet(const boost::pr
"your wallet again (your wallet keys are NOT at risk in any case).\n")
;
- if (!two_random)
- {
- print_seed(electrum_words);
- }
- success_msg_writer() << "**********************************************************************";
+ success_msg_writer() << "******************************************************************SEED";
+ success_msg_writer() << electrum_words;
+ print_seed(electrum_words);
+ success_msg_writer() << "******************************************************************SEED";
return std::move(password);
return password;
}
@@ -6666,17 +6620,6 @@ bool simple_wallet::transfer_main(int transfer_type, const std::vector<std::stri
{
prompt << tr("WARNING: this is a non default ring size, which may harm your privacy. Default is recommended.");
}
- prompt << ENDL << tr("Is this okay?");
-
- std::string accepted = input_line(prompt.str(), true);
- if (std::cin.eof())
- return false;
- if (!command_line::is_yes(accepted))
- {
- fail_msg_writer() << tr("transaction cancelled.");
-
- return false;
- }
}
// actually commit the transactions
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index 1bb9f52b..c9fdecc5 100755
index 4779c3335..e218df7e1 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -2952,6 +2952,13 @@ bool wallet2::load_keys(const std::string& keys_file_name, const epee::wipeable_
return false;
}
+ m_ask_password = false;
@@ -1134,7 +1134,7 @@ wallet2::wallet2(network_type nettype, uint64_t kdf_rounds, bool unattended, std
m_trusted_daemon(false),
m_nettype(nettype),
m_multisig_rounds_passed(0),
- m_always_confirm_transfers(true),
+ m_always_confirm_transfers(false),
m_print_ring_members(false),
m_store_tx_info(true),
m_default_mixin(0),
@@ -1145,13 +1145,13 @@ wallet2::wallet2(network_type nettype, uint64_t kdf_rounds, bool unattended, std
m_refresh_from_block_height(0),
m_explicit_refresh_from_block_height(true),
m_confirm_non_default_ring_size(true),
- m_ask_password(AskPasswordOnAction),
+ m_ask_password(AskPasswordNever),
m_min_output_count(0),
m_min_output_value(0),
m_merge_destinations(false),
- m_confirm_backlog(true),
+ m_confirm_backlog(false),
m_confirm_backlog_threshold(0),
- m_confirm_export_overwrite(true),
+ m_confirm_export_overwrite(false),
m_auto_low_priority(true),
m_segregate_pre_fork_outputs(false),
m_key_reuse_mitigation2(false),
@@ -4000,6 +4000,12 @@ void wallet2::change_password(const std::string &filename, const epee::wipeable_
*/
bool wallet2::load_keys(const std::string& keys_file_name, const epee::wipeable_string& password)
{
+ m_ask_password = AskPasswordNever;
+ m_always_confirm_transfers = false;
+ m_confirm_subaddress = false;
+ m_confirm_backlog = false;
+ m_confirm_export_overwrite = false;
+ m_confirm_non_default_ring_size = true;
+
r = epee::serialization::load_t_from_binary(m_account, account_data);
if (r && m_key_on_device) {
LOG_PRINT_L0("Account on device. Initing device...");
diff --git a/src/wallet/wallet_args.cpp b/src/wallet/wallet_args.cpp
index fcd9cc0f..5c0cebdb 100644
--- a/src/wallet/wallet_args.cpp
+++ b/src/wallet/wallet_args.cpp
@@ -122,7 +122,7 @@ namespace wallet_args
command_line::add_arg(desc_params, arg_max_concurrency);
command_line::add_arg(desc_params, arg_config_file);
- i18n_set_language("translations", "monero", lang);
+ i18n_set_language("translations", "monero", "en");
po::options_description desc_all;
desc_all.add(desc_general).add(desc_params);
@@ -134,7 +134,7 @@ namespace wallet_args
if (command_line::get_arg(vm, command_line::arg_help))
{
- Print(print) << "Wownero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")" << ENDL;
+ Print(print) << "Wownero Light'" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")" << ENDL;
Print(print) << wallet_args::tr("This is the command line wownero wallet. It needs to connect to a wownero\n"
"daemon to work correctly.") << ENDL;
Print(print) << wallet_args::tr("Usage:") << ENDL << " " << usage;
@@ -143,7 +143,7 @@ namespace wallet_args
}
else if (command_line::get_arg(vm, command_line::arg_version))
{
- Print(print) << "Wownero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")";
+ Print(print) << "Wownero Light'" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")";
return false;
}
@@ -190,7 +190,7 @@ namespace wallet_args
if (!command_line::is_arg_defaulted(vm, arg_max_concurrency))
tools::set_max_concurrency(command_line::get_arg(vm, arg_max_concurrency));
- Print(print) << "Wownero '" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")";
+ Print(print) << "Wownero Light'" << MONERO_RELEASE_NAME << "' (v" << MONERO_VERSION_FULL << ")";
if (!command_line::is_arg_defaulted(vm, arg_log_level))
MINFO("Setting log level = " << command_line::get_arg(vm, arg_log_level));
+ m_inactivity_lock_timeout = 525600;
std::string keys_file_buf;
bool r = load_from_file(keys_file_name, keys_file_buf);
THROW_WALLET_EXCEPTION_IF(!r, error::file_read_error, keys_file_name);

@ -1,8 +1,9 @@
{
"name": "wowlight",
"version": "0.1.1",
"name": "wowlite",
"version": "0.1.4",
"__version": "bumping this should also bump LandingPage.vue (version checker)",
"author": "dsc <xmrdsc@protonmail.com>",
"description": "Wownero Light Wallet",
"description": "Wownero Lite Wallet",
"license": "WTFPL",
"main": "./dist/electron/main.js",
"scripts": {
@ -17,8 +18,8 @@
"postinstall": ""
},
"build": {
"productName": "wowlight",
"appId": "org.wownero.wowlight",
"productName": "wowlite",
"appId": "org.wownero.wowlite",
"directories": {
"output": "build"
},
@ -75,53 +76,54 @@
}
},
"dependencies": {
"vue": "^2.3.3",
"axios": "^0.16.2",
"app-root-dir": "1.0.2",
"axios": "^0.18.0",
"jquery": "^3.3.1",
"text-encoding": "0.7.0",
"vue": "^2.5.16",
"vue-electron": "^1.0.6",
"vue-router": "^2.5.3",
"vue-router": "^3.0.1",
"vuex": "^3.0.1",
"opn": "^5.4.0",
"electron-context-menu": "0.10.0",
"jquery": "^3.3.1",
"app-root-dir": "1.0.2"
"vuex-electron": "^1.0.0",
"bootstrap": "^4.1.1",
"popper.js": "^1.12.9"
},
"devDependencies": {
"babel-core": "^6.25.0",
"babel-loader": "^7.1.1",
"ajv": "^6.5.0",
"babel-core": "^6.26.3",
"babel-loader": "^7.1.4",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-preset-env": "^1.6.0",
"babel-preset-env": "^1.7.0",
"babel-preset-stage-0": "^6.24.1",
"babel-register": "^6.24.1",
"babili-webpack-plugin": "^0.1.2",
"cfonts": "^1.1.3",
"chalk": "^2.1.0",
"copy-webpack-plugin": "^4.0.1",
"cross-env": "^5.0.5",
"css-loader": "^0.28.4",
"babel-register": "^6.26.0",
"babel-minify-webpack-plugin": "0.3.1",
"cfonts": "^2.1.2",
"chalk": "^2.4.1",
"copy-webpack-plugin": "^4.5.1",
"cross-env": "^5.1.6",
"css-loader": "^0.28.11",
"del": "^3.0.0",
"devtron": "^1.4.0",
"electron": "^1.7.5",
"electron-builder": "^19.19.1",
"electron-debug": "^1.4.0",
"electron-devtools-installer": "^2.2.0",
"electron-store": "^2.0.0",
"electron-util": "^0.9.0",
"extract-text-webpack-plugin": "^3.0.0",
"file-loader": "^0.11.2",
"html-webpack-plugin": "^2.30.1",
"jquery": "^3.3.1",
"electron": "^2.0.4",
"electron-debug": "3.0.0",
"electron-util": "0.11.0",
"electron-devtools-installer": "^2.2.4",
"electron-builder": "^21.2.0",
"mini-css-extract-plugin": "0.4.0",
"file-loader": "^1.1.11",
"html-webpack-plugin": "^3.2.0",
"multispinner": "^0.2.1",
"node-loader": "^0.6.0",
"style-loader": "^0.18.2",
"text-encoding": "^0.6.4",
"url-loader": "^0.5.9",
"style-loader": "^0.21.0",
"url-loader": "^1.0.1",
"vue-html-loader": "^1.2.4",
"vue-loader": "^13.0.5",
"vue-style-loader": "^3.0.1",
"vue-template-compiler": "^2.4.2",
"vuex": "^3.0.1",
"webpack": "^3.5.2",
"webpack-dev-server": "^2.7.1",
"webpack-hot-middleware": "^2.18.2"
"vue-loader": "^15.2.4",
"vue-style-loader": "^4.1.0",
"vue-template-compiler": "^2.5.16",
"webpack-cli": "^3.0.8",
"webpack": "^4.15.1",
"webpack-dev-server": "^3.1.4",
"webpack-hot-middleware": "^2.22.2",
"webpack-merge": "^4.1.3"
}
}

@ -2,11 +2,9 @@
<html>
<head>
<meta charset="utf-8">
<title>wowlight</title>
<title>wowlite</title>
<script>
const {ipcRenderer} = require('electron');
// window.$ = window.jQuery = require('./assets/scripts/jquery.min.js');
window.jQuery = window.$ = require('jquery');
</script>
<% if (htmlWebpackPlugin.options.nodeModules) { %>
@ -17,8 +15,13 @@
<% } %>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" crossorigin="anonymous">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.5/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<!--<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.5/umd/popper.min.js"></script>-->
<!--<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>-->
<script src="./node_modules/popper.js/dist/umd/popper.js" crossorigin="anonymous"></script>
<script src="./node_modules/bootstrap/dist/js/bootstrap.js" crossorigin="anonymous"></script>
<link rel="stylesheet"
href="./node_modules/bootstrap/dist/css/bootstrap.css"
crossorigin="anonymous">
</head>
<body>

@ -14,9 +14,9 @@ const execPath = IS_PROD ?
const cli_binaries = {
'linux': 'wowlight',
'mac': 'wowlight',
'win': 'wowlight.exe'
'linux': 'wowlite',
'mac': 'wowlite',
'win': 'wowlite.exe'
}
export const cliPath = `${joinPath(execPath, cli_binaries[getPlatform()])}`;

@ -3,7 +3,7 @@ const fs = require('fs');
export class Config {
constructor(wowdir) {
this._path_cfg = `${wowdir}/wowlight.json`;
this._path_cfg = `${wowdir}/wowlite.json`;
this.create();
this.data = this.load();
}
@ -24,14 +24,16 @@ export class Config {
}
let data = JSON.stringify({
"node": "node.wowne.ro:34568",
"node": "wow.candy.surf:34568",
"nodes": [
{"address": "node.wowne.ro:34568", "location": "New Jersey, United States", "region": "US"},
{"address": "node.pwned.systems:34568", "location": "Amsterdam, The Netherlands", "region": "EU"},
{"address": "node.wownero.com:34568", "location": "Montreal, Canada", "region": "US"},
{"address": "wow.candy.surf:34568", "location": "All you can eat.", "region": "WOW"},
{"address": "so.wow.candy.surf:34568", "location": "San Francisco, United States", "region": "US"},
{"address": "much.wow.candy.surf:34568", "location": "London, England", "region": "UK"},
{"address": "such.wow.candy.surf:34568", "location": "Montreal, Canada", "region": "CA"},
{"address": "very.wow.candy.surf:34568", "location": "Bangalore, India", "region": "IN"},
{"address": "localhost:34568", 'location': "", "region": "*"}
],
"wallet_path": ""
"wallets": []
});
fs.writeFileSync(this._path_cfg, JSON.stringify(data));
@ -59,17 +61,4 @@ export class Config {
return true;
}
saveLastWalletPath(path){
if (typeof this.data === 'string' || this.data instanceof String){
this.data = JSON.parse(this.data);
}
if(path === ''){
return;
}
this.data.wallet_path = path;
this.save();
}
}

@ -7,21 +7,18 @@
/* eslint-disable */
// Set environment for development
process.env.NODE_ENV = 'development'
// Install `electron-debug` with `devtron`
require('electron-debug')({ showDevTools: true })
// Install `vue-devtools`
require('electron').app.on('ready', () => {
let installExtension = require('electron-devtools-installer')
installExtension.default(installExtension.VUEJS_DEVTOOLS)
.then(() => {})
.catch(err => {
console.log('Unable to install `vue-devtools`: \n', err)
})
let installExtension = require('electron-devtools-installer')
installExtension.default(installExtension.VUEJS_DEVTOOLS)
.then(() => {})
.catch(err => {
console.log('Unable to install `vue-devtools`: \n', err)
})
})
// Require `main` process to boot app
require('./index')
require('./index')

@ -21,7 +21,12 @@ const store = new Store();
const fs = require('fs');
const utils = require('electron-util');
let homedir = (process.platform === 'win32') ? process.env.HOMEPATH : process.env.HOME;
let homedir = process.env.HOME;
if (process.platform === 'win32'){
homedir = process.env.HOMEPATH; // back-compat
if (!fs.existsSync(path.join(homedir, 'Wownero')))
homedir = process.env.USERPROFILE;
}
let wowdir = path.join(homedir, 'Wownero');
if (!fs.existsSync(wowdir)){
@ -170,7 +175,7 @@ ipcMain.on('rpc_commit_wallet', (event, data) => {
event.sender.send('rpc_wallet_committed');
});
ipcMain.on('rate_usd_wow', (event, data) => {
ipcMain.on('rate_btc_wow', (event, data) => {
console.log(data);
});
@ -211,7 +216,6 @@ ipcMain.on('rpc_kill_wallet', (event) => {
ipcMain.on('rpc_open_wallet', (event, data) => {
wallet.onWalletOpened = function(data){
cfg.saveLastWalletPath(data.wallet_path);
event.sender.send('rpc_wallet_opened', data);
}

@ -11,7 +11,7 @@ export class WowRpc {
constructor(wowdir, cli_path) {
this._wowdir = wowdir;
this._cli_process = null;
this._cli_log_path = path.join(os.tmpdir(), 'wowlight-wallet.log');
this._cli_log_path = path.join(os.tmpdir(), 'wowlite-wallet.log');
if(!cli_path) {
this._cli_path = cliPath;
} else {
@ -89,6 +89,7 @@ export class WowRpc {
if(this._state === 5){
this._sendCmd('show_transfers');
this._sendCmd('balance');
this._sendCmd('save');
setTimeout(this._checkMemPool.bind(this), this._checkMemPoolTimeout);
}
}
@ -138,6 +139,12 @@ export class WowRpc {
}
}
// detect background mining prompt
let re_background_mining = /Do you want to do it now?/g;
if(data.match(re_background_mining)){
this._sendCmd("No\n");
}
if(this._state === 5 && data.match(/Error: invalid password/)){
this._sendCmd(this._cli_wallet_password);
}
@ -275,22 +282,22 @@ export class WowRpc {
// }
if(data.match(/Background refresh thread started/)){
let re_addy = /Generated new wallet: (W[o|W][a-zA-Z0-9]{95})/
let re_addy = /Generated new wallet: (W[o|W][a-zA-Z0-9]{95})/;
let re_addy_match = this._buffer.match(re_addy);
if(re_addy_match){
this._create_wallet['address'] = re_addy_match[1];
}
let re_view_key = /View key: ([0-9a-fA-F]+)\n/
let re_view_key = /View key: ([0-9a-fA-F]+)\n/;
let re_view_key_match = this._buffer.match(re_view_key);
if(re_view_key_match){
this._create_wallet['view_key'] = re_view_key_match[1];
}
let re_seed = /\*\*\*\*\*\*SEED\n(.*)\n\*\*/
let re_seed_match = this._buffer.match(re_seed);
let re_seed_lol = /(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+ )(\w+)/g;
let re_seed_match = this._buffer.match(re_seed_lol);
if(re_seed_match){
let seed = re_seed_match[1].trim();
let seed = re_seed_match[0].trim();
if(seed.split(' ').length !== 25){
this.onCreateWalletFinished("could not get seed; invalid num words");
}
@ -362,6 +369,11 @@ export class WowRpc {
this._wallet_path = wallet_path;
this._cli_wallet_password = wallet_password;
if(typeof this._cli_daemon_address == 'undefined'){
// this is some truly stupid hacky shit
this._cli_daemon_address = 'wow.candy.surf:34568';
}
let cli_args = ['--daemon-address', this._cli_daemon_address];
cli_args = cli_args.concat(this._cli_args_default);
cli_args.push('--wallet-file');

@ -47,7 +47,7 @@
<script>
export default {
name: 'wowlight',
name: 'wowlite',
computed: {
height_from() {
return this.$store.getters.height_from;

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 89 KiB

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

@ -83,6 +83,10 @@ export const messages = [
'Sending all funds to wownero.win',
'Shaving away klubus and grumbo',
'Contacting Stealy for more plumbus',
'Rebuilding WinoBot!'
]
'Rebuilding WinoBot!',
'He who runs, doesn\'t walk!',
'Downloading Shaggy_Complete_Collection.zip [148 GB left]',
'Arrays start at 1!',
'Junkie Jeff thanks you for mining Wownero',
'Wownero - Iterative Discourse - a blackhat culture'
];

@ -88,7 +88,7 @@ html {
}
body {
background: url("~@/assets/background.png") 0 0;
background: url("~@/assets/background2.png") 0 0;
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;
}
@ -361,7 +361,7 @@ textarea.seed {
font-size: 18px;
color: #70bf19;
font-weight: bold;
background: rgba(0, 0, 0, 0.03);
background-color: rgba(255, 255, 255, 0.85);
}
p {
@ -638,6 +638,7 @@ form#sendForm .amount label small {
}
main.dashboard{
background-image: url("~@/assets/background3.png");
margin-top: 42px;
}
@ -829,6 +830,7 @@ main.create-wallet-seed {
}
main.credits ul, main.landing ul, main.create-wallet-seed ul {
background-color: rgba(255, 255, 255, 0.85);
margin-left: 20px;
}
@ -896,7 +898,7 @@ main.credits ul, main.landing ul, main.create-wallet-seed ul {
width: 100%;
position: fixed;
bottom: 0;
height: 200px;
height: 170px;
z-index: 666;
}
@ -931,9 +933,8 @@ main.credits ul, main.landing ul, main.create-wallet-seed ul {
}
.wario_seq .wario_walking_animated .wario_walking {
background-image: url("~@/assets/wariorunningcropped.gif");
background-image: url("~@/assets/dog.gif");
background-position-x: 0;
-webkit-transform: scaleX(-1);
background-size: contain;
background-repeat: no-repeat;
height: 138px;
@ -950,25 +951,25 @@ main.credits ul, main.landing ul, main.create-wallet-seed ul {
position: absolute;
}
.wario_seq .perlsux {
background-image: url("~@/assets/perl_forbidden.png");
.wario_seq .hypnotoad {
background-image: url("~@/assets/hypnotoad.gif");
background-position-x: 0;
background-size: contain;
background-repeat: no-repeat;
position: absolute;
width: 100px;
height: 100px;
right: 40px;
bottom: 40px;
width: 200px;
height: 145px;
right: 100px;
bottom: 5px;
z-index: 666;
}
main.credits .perlsux {
main.credits .hypnotoad {
cursor: pointer;
}
main.credits .perlsux:hover {
transform: rotate(10deg);
main.credits .hypnotoad:hover {
transform: rotate(-10deg);
}
.wario_seq .grassfill .version {
@ -1012,9 +1013,8 @@ main.landing .wario_seq .grassfill .author {
}
.wario_seq .wario_standing_animated .wario_standing {
background-image: url("~@/assets/wariostanding.gif");
background-image: url("~@/assets/dog2.gif");
background-position-x: 0;
-webkit-transform: scaleX(-1);
background-size: contain;
background-repeat: no-repeat;
height: 138px;
@ -1027,9 +1027,9 @@ main.landing .wario_seq .grassfill .author {
background-size: contain;
background-repeat: no-repeat;
width: 164px;
height: 50px;
height: 35px;
position: absolute;
left: 80px;
left: 130px;
top: 4px;
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 18 KiB

@ -65,6 +65,7 @@
<li>kloinka</li>
<li>ilovetron</li>
<li>\x</li>
<li>mj <small>(Resident artist)</small></li>
</ul>
</div>
</div>
@ -102,7 +103,7 @@
}
},
mounted() {
jQuery('main.credits .perlsux').click((event) => {
jQuery('main.credits .hypnotoad').click((event) => {
this.back();
});
},

@ -51,7 +51,7 @@
}
},
mounted() {
jQuery('main.credits .perlsux').click((event) => {
jQuery('main.credits .hypnotoad').click((event) => {
this.back();
});
jQuery('#password').focus();

@ -4,33 +4,25 @@
<div class="col-sm-7">
<img id="logo" src="~@/assets/wownero-light-intro.png" alt="electron-vue">
<p>Welcome to wownero light!</p>
<ul style="margin-bottom: 22px">
<li>Electron/Vue.js <small>(OSX/Windows/Linux)</small></li>
<li>Works most of the time</li>
</ul>
<button id="create_wallet_btn" v-on:click="createWallet" type="button" class="btn btn-success btn-sm">
<i class="fa fa-plus" id="create_wallet_icon" aria-hidden="true"></i>
Create wallet
</button>
<div class="dropdown" style="display: inline-block;">
<button class="btn btn-success btn-sm dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fa fa-folder-open" aria-hidden="true"></i>
Open wallet
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a v-on:click="openWallet" class="dropdown-item" href="#">Browse</a>
<a v-on:click="openLastWallet" v-if="cfg_wallet_path !== ''" class="dropdown-item" href="#">{{cfg_wallet_path_name}}</a>
</div>
</div>
<button id="create_wallet_btn" v-on:click="openWallet" type="button" class="btn btn-success btn-sm">
<i class="fa fa-plus" id="create_wallet_icon" aria-hidden="true"></i>
Open wallet
</button>
<button id="" v-on:click="settings" type="button" class="btn btn-success btn-sm">
<!-- fa fa-refresh fa-spin -->
<i class="fa fa-cog" aria-hidden="true"></i>
Settings
</button>
<button type="button" class="btn btn-success btn-sm">
Does nothing
</button>
</div>
<div class="col-sm-5">
@ -47,13 +39,6 @@
</div>
</div>
</div>
<div class="card my-4 wfs-explorer" style="margin-top: 0 !important;">
<h5 class="card-header">Funding required</h5>
<div class="card-body">
<wfs-explorer></wfs-explorer>
</div>
</div>
</div>
</div>
@ -118,34 +103,37 @@
}
});
},
openLastWallet(){
if(!this.cfg_wallet_path || this.cfg_wallet_path === ''){
alert('Invalid wallet path?!');
return;
}
this.$store.commit('addWalletPath', this.cfg_wallet_path);
openLastWallet(event){
const selectedWallet = this.cfg_wallets.find(i => i.name === event.currentTarget.text);
this.$store.commit('addWalletPath', selectedWallet.path);
this.$store.commit('showPassword', {
'message': 'Enter wallet password'
});
setTimeout(() => {
jQuery('#password').focus();
}, 50);
}
},
mounted() {
let select_node = jQuery('#selectnode');
const axios = require('axios');
axios.get('https://funding.wownero.com/api/1/convert/wow-usd?amount=1000').then(response => {
this.$store.commit('addRate', response.data.usd);
axios.get('https://tradeogre.com/api/v1/ticker/btc-wow').then(response => {
this.$store.commit('addRate', response.data.ask);
});
axios.get('https://tradeogre.com/api/v1/ticker/btc-xmr').then(response => {
this.$store.commit('addRateXMR', response.data.ask);
});
let appVersion = require('electron').remote.app.getVersion();
axios.get(`https://funding.wownero.com/api/1/wowlight?version=${appVersion}`).then(response => {
axios.get(`https://funding.wownero.com/api/1/wowlite?version=0.1.4`).then(response => {
if(response.data.data === false) {
const {dialog} = require('electron').remote
const dialogOptions = {
type: 'error',
title: 'Outdated client',
buttons: ['OK'],
message: `You are running an old instance of wowlight and need to upgrade!\n\nVisit https://light.wownero.com for a shiny new version.`
message: `You are running an old instance of wowlite and need to upgrade!\n\nVisit https://light.wownero.com for a shiny new version.`
}
dialog.showMessageBox(dialogOptions, i => {});
}
@ -188,12 +176,11 @@
selected_node(){
return this.$store.getters.cfg.node;
},
cfg_wallet_path(){
return this.$store.getters.cfg.wallet_path;
cfg_wallets(){
return this.$store.getters.cfg.wallets;
},
cfg_wallet_path_name(){
let path = require("path");
return path.basename(this.cfg_wallet_path);
cfg_wallet_names(){
return this.$store.getters.cfg.wallets.map(i => i.name);
}
}
}

@ -69,7 +69,7 @@
pathConfig() {
const path = require('path');
return path.join(this.$store.state.wallet_dir, 'wowlight.json');
return path.join(this.$store.state.wallet_dir, 'wowlite.json');
}
}
}

@ -10,14 +10,14 @@
<div class="coin" style="height: 24px;width: 24px;top:54px;right:32px;"></div>
</div>
<div class="perlsux"></div>
<div class="hypnotoad"></div>
<div class="grass_container">
<div class="grass"></div>
<div class="grassfill">
<span class="version">
{{version}} - <span style="font-size:12px;">{{version_embedded}}</span>
0.1.4 - <span style="font-size:12px;">{{version_embedded}}</span>
</span>
<a class="credits" href="#" v-on:click="openCredits">
Credits
@ -46,7 +46,7 @@
function wario_animate(){
wario.animate({
left: `${window_width}px`
}, 8000, 'linear', () => {
}, 8500, 'linear', () => {
wario.css('left', '-400px');
wario_animate();
});

@ -10,7 +10,7 @@
<div class="coin" style="height: 24px;width: 24px;top:54px;right:32px;"></div>
</div>
<div class="perlsux"></div>
<div class="hypnotoad"></div>
<div class="grass_container">
<div class="grass"></div>
@ -34,7 +34,7 @@
}
},
mounted() {
jQuery('main.credits .perlsux').click((event) => {
jQuery('main.credits .hypnotoad').click((event) => {
this.back();
});
},

@ -26,22 +26,21 @@
wallet() {
return this.$store.getters.wallet;
},
usd(){
return (this.$store.getters.usd_rate / 1000) * this.$store.getters.wallet.balance;
btc(){
return (this.$store.getters.btc_rate) * this.$store.getters.wallet.balance;
},
bubble_img() {
let rate = this.$store.getters.usd_rate;
let usd = (rate / 1000) * this.$store.getters.wallet.balance;
let bal = this.$store.getters.wallet.balance;
if(usd < 1){
if(bal < 1){
return this.path_bubble(0);
} else if(usd < 100){
} else if(bal < 100){
return this.path_bubble(1);
} else if(usd < 500){
} else if(bal < 1000){
return this.path_bubble(2);
} else if(usd < 1000){
} else if(bal < 2000){
return this.path_bubble(3);
} else if(usd < 1000){
} else if(bal > 2000){
return this.path_bubble(4);
}
}

@ -6,23 +6,23 @@
</div>
<div v-if="usd < 1">
<div v-if="btc < 1">
<div class="bubble" :style="`background-image: url(${this.path_bubble(0)})`"></div>
</div>
<div v-else-if="usd < 100">
<div v-else-if="btc < 100">
<div class="bubble" :style="`background-image: url(${this.path_bubble(1)})`"></div>
</div>
<div v-else-if="usd < 500">
<div v-else-if="btc < 500">
<div class="bubble" :style="`background-image: url(${this.path_bubble(2)})`"></div>
</div>
<div v-else-if="usd < 1500">
<div v-else-if="btc < 1500">
<div class="bubble" :style="`background-image: url(${this.path_bubble(3)})`"></div>
</div>
<div v-else-if="usd >= 1500">
<div v-else-if="btc >= 1500">
<div class="bubble" :style="`background-image: url(${this.path_bubble(4)})`"></div>
</div>
</div>
@ -43,22 +43,21 @@
wallet() {
return this.$store.getters.wallet;
},
usd(){
return (this.$store.getters.usd_rate / 1000) * this.$store.getters.wallet.balance;
btc(){
return this.$store.getters.btc_rate * this.$store.getters.wallet.balance;
},
bubble_img() {
let rate = this.$store.getters.usd_rate;
let usd = (rate / 1000) * this.$store.getters.wallet.balance;
let bal = this.$store.getters.wallet.balance;
if(usd < 1){
if(bal < 1){
return this.path_bubble(0);
} else if(usd < 100){
} else if(bal < 100){
return this.path_bubble(1);
} else if(usd < 500){
} else if(bal < 1000){
return this.path_bubble(2);
} else if(usd < 1000){
} else if(bal < 2000){
return this.path_bubble(3);
} else if(usd < 1000){
} else if(bal > 2000){
return this.path_bubble(4);
}
}

@ -1,7 +1,7 @@
<template>
<nav class="navbar navbar-dark bg-dark fixed-top navbar-expand-md">
<div class="container nopadding nomargin">
<a class="navbar-brand" href="/">
<a class="navbar-brand" href="#">
<img id="logo" src="~@/assets/wownero.png">
</a>
@ -10,12 +10,16 @@
Balance: <span>{{wallet.balance}}</span>
</span>
|
<span class="balance_usd">
<span class="balance_btc">
Unlocked: <span>{{wallet.unlocked}}</span>
</span>
|
<span class="balance_usd">
USD: <span>{{Number((usd_rate/1000)*wallet.balance).toFixed(2)}}</span>
<span class="balance_btc">
BTC: <span>{{Number(btc_rate*wallet.balance).toFixed(9)}}</span>
</span>
|
<span class="balance_xmr">
XMR: <span>{{Number(btc_rate*wallet.balance/xmr_rate).toFixed(9)}}</span>
</span>
</div>
@ -45,8 +49,11 @@
wallet() {
return this.$store.getters.wallet;
},
usd_rate() {
return this.$store.getters.usd_rate;
btc_rate() {
return this.$store.getters.btc_rate;
},
xmr_rate() {
return this.$store.getters.xmr_rate;
}
},
methods: {

@ -12,13 +12,13 @@
<!-- text input -->
<div class="form-group">
<label>Destination address</label>
<textarea placeholder="WO..." rows=1 v-on:input="validate" class="form-control address"></textarea>
<textarea placeholder="WO/SO..." rows=1 v-on:input="validate" class="form-control address"></textarea>
</div>
<div class="row">
<div class="col-md-3">
<div class="form-group amount">
<label>Amount <small class="amount_usd"></small></label>
<label>Amount <small class="amount_btc"></small></label>
<input type="text" v-on:input="validate" v-on:keypress="isAmount()" name="amount" class="form-control amount" placeholder="Amount">
</div>
</div>
@ -74,8 +74,8 @@
wallet() {
return this.$store.getters.wallet;
},
usd_rate() {
return this.$store.getters.usd_rate;
btc_rate() {
return this.$store.getters.btc_rate;
}
},
methods: {
@ -123,10 +123,10 @@
validate(){
this.error = '';
let form = jQuery('#sendForm');
let regexp_address = /(W[o|W][a-zA-Z0-9]{95})/g;
let regexp_address = /([S|W][o|W][a-zA-Z0-9]{95})|(So[a-zA-Z0-9]{106})/g;
let address = form.find('textarea.address').val().trim();
let amount = form.find('input.amount').val().trim();
let usd = jQuery('form#sendForm .amount label small');
let btc = jQuery('form#sendForm .amount label small');
let invalid = function(msg){
jQuery('button.send_btn').addClass('disabled');
@ -134,23 +134,23 @@
if(amount.startsWith('.') || amount.endsWith('.')) {
this.error = 'Invalid WOW amount'
usd.html('');
btc.html('');
return invalid();
}
if((amount.split('.').length - 1) > 1){
this.error = 'Invalid WOW amount';
usd.html('');
btc.html('');
return invalid();
}
if((amount == 0)){
if((amount === 0)){
//this.error = 'Invalid WOW amount';
usd.html('');
btc.html('');
return invalid();
}
usd.html(`(${Number((this.usd_rate/1000)*amount).toFixed(2)} USD)`);
btc.html(`(${Number(this.btc_rate*amount).toFixed(9)} BTC)`);
let addy_match = address.match(regexp_address);
if(!addy_match){
@ -179,6 +179,12 @@
this.$electron.ipcRenderer.on('rpc_monies_sent_error', (event, data) => {
this.error = data.message;
});
this.$electron.ipcRenderer.on('rpc_monies_sent', () => {
const form = jQuery('#sendForm');
form.find('textarea.address').val('');
form.find('input.amount').val('');
});
}
}
</script>

@ -34,7 +34,7 @@
{{tx.in === 'in' ? '+' : '-'}}{{tx.amount}}
<small style="color: black">
$ {{Number((usd_rate/1000)*tx.amount).toFixed(2)}}
$ {{Number(btc_rate*tx.amount).toFixed(9)}}
</small>
</span>
</span>
@ -55,8 +55,8 @@
export default {
name: "TxHistoryList",
computed: {
usd_rate() {
return this.$store.getters.usd_rate;
btc_rate() {
return this.$store.getters.btc_rate;
},
wallet() {
return this.$store.getters.wallet;

@ -67,12 +67,20 @@
this.create_wallet(wallet_name, wallet_pass);
}
},
wallet_exists (name) {
return !!this.wallets.find(i => i.name === name);
},
create_wallet (name, password) {
this.clearMatrixMsg();
this.showMatrixMsg('GENERATING NEW WALLET')
if (this.wallet_exists(name)) {
console.log('Wallet exists!')
// @TODO check if wallet with same name exists no matter the path
} else {
this.clearMatrixMsg();
this.showMatrixMsg('GENERATING NEW WALLET');
this.$store.commit('appState', "create_wallet");
ipcRenderer.send('rpc_create_wallet', {name: name, password: password})
this.$store.commit('appState', "create_wallet");
ipcRenderer.send('rpc_create_wallet', {name: name, password: password})
}
},
showMatrixMsg(msg){
let obj = jQuery('.teh_matrix span.centered');
@ -179,6 +187,9 @@
},
walletCreating(){
return this.$store.state.wallet_creating;
},
wallets() {
return this.$store.getters.cfg.wallets;
}
}
}

@ -10,7 +10,7 @@ const EventBus = new Vue();
export default EventBus;
import { shell } from 'electron'
window.jQuery = window.$ = require('jquery');
/* eslint-disable no-new */
let app = new Vue({

@ -11,7 +11,7 @@ export default new Vuex.Store({
cfg: {
"node": "",
"nodes": [],
"wallet_path": ""
"wallets": []
},
created_wallet: {}, // only used when creating wallets
appState: "", // not really used
@ -23,14 +23,14 @@ export default new Vuex.Store({
password_box: {
'message': ''
},
usd_rate: 0, // per 1000 WOW
btc_rate: 0, // per 1000 WOW
wallet: {
'path': '',
'txs': [],
'balance': 0,
'unlocked': 0,
'address': '',
'usd': 0,
'btc': 0,
'state': -1
}, // wallet opened
wallet_path: '',
@ -69,12 +69,19 @@ export default new Vuex.Store({
if(data.hasOwnProperty('wallet_path')){
cfg.wallet_path = data.wallet_path;
}
if(data.hasOwnProperty('wallets')){
cfg.wallets = data.wallets;
}
},
appState(state, data){
state.appState = data;
},
addRate(state, data){
state.usd_rate = data;
state.btc_rate = data;
},
addRateXMR(state, data){
state.xmr_rate = data;
},
showError(state, data){
state.error = data;
@ -132,7 +139,8 @@ export default new Vuex.Store({
wallet: state => state.wallet,
wallet_path: state => state.wallet_path,
wallet_password: state => state.wallet_password,
usd_rate: state => state.usd_rate,
btc_rate: state => state.btc_rate,
xmr_rate: state => state.xmr_rate,
message_box: state => state.message_box,
password_box: state => state.password_box,
height_from: state => state.height_from,