diff --git a/Artwork/logo-1024x1024.png b/Artwork/logo-1024x1024.png
new file mode 100644
index 0000000..0c12d0a
Binary files /dev/null and b/Artwork/logo-1024x1024.png differ
diff --git a/Artwork/logo.svg b/Artwork/logo.svg
new file mode 100644
index 0000000..238e5bd
--- /dev/null
+++ b/Artwork/logo.svg
@@ -0,0 +1,88 @@
+
+
+
+
diff --git a/assets/icon.icns b/assets/icon.icns
new file mode 100644
index 0000000..e4c778b
Binary files /dev/null and b/assets/icon.icns differ
diff --git a/package-lock.json b/package-lock.json
index 8e05064..381b828 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,6 +1,6 @@
{
- "name": "vowlink-electron",
- "version": "0.1.0",
+ "name": "VowLink",
+ "version": "1.0.0-0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
@@ -1526,6 +1526,11 @@
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz",
"integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw=="
},
+ "@types/semver": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.1.tgz",
+ "integrity": "sha512-ffCdcrEE5h8DqVxinQjo+2d1q+FV5z7iNtPofw3JsrltSoSVlOGaW0rY8XxtO9XukdTn8TaCGWmk2VFGhI70mg=="
+ },
"@types/stack-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-1.0.1.tgz",
@@ -2939,7 +2944,6 @@
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-8.3.0.tgz",
"integrity": "sha512-CSOdsYqf4RXIHh1HANPbrZHlZ9JQJXSuDDloblZPcWQVN62inyYoTQuSmY3KrgefME2Sv3Kn2MxHvbGQHRf8Iw==",
- "dev": true,
"requires": {
"debug": "^4.1.1",
"sax": "^1.2.4"
@@ -3747,12 +3751,6 @@
"restore-cursor": "^3.1.0"
}
},
- "cli-spinners": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz",
- "integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==",
- "dev": true
- },
"cli-width": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
@@ -3790,12 +3788,6 @@
}
}
},
- "clone": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
- "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
- "dev": true
- },
"clone-deep": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-0.2.4.tgz",
@@ -3882,12 +3874,6 @@
"simple-swizzle": "^0.2.2"
}
},
- "colors": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz",
- "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==",
- "dev": true
- },
"combined-stream": {
"version": "1.0.8",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
@@ -4768,15 +4754,6 @@
"ip-regex": "^2.1.0"
}
},
- "defaults": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
- "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
- "dev": true,
- "requires": {
- "clone": "^1.0.2"
- }
- },
"defer-to-connect": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.0.2.tgz",
@@ -5312,28 +5289,38 @@
}
}
},
- "electron-rebuild": {
- "version": "1.8.6",
- "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.8.6.tgz",
- "integrity": "sha512-4BAPcNG0XP6stByqvFXggrjmf/C47P2L6HFFrWdR2ako1VLiTDIeZAOmU4WEBuWdaXYNqstleszVmcNHdRDojA==",
- "dev": true,
- "requires": {
- "colors": "^1.3.3",
- "debug": "^4.1.1",
- "detect-libc": "^1.0.3",
- "fs-extra": "^7.0.1",
- "node-abi": "^2.9.0",
- "node-gyp": "^5.0.1",
- "ora": "^3.4.0",
- "spawn-rx": "^3.0.0",
- "yargs": "^13.2.4"
- }
- },
"electron-to-chromium": {
"version": "1.3.230",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.230.tgz",
"integrity": "sha512-r0RljY5DZi9RX4v8mjHxJkDWnQe+nsrkGlHtrDF2uvZcvAkw+iglvlQi1794gZhwRtJoDOomMJlDHL2LfXSCZA=="
},
+ "electron-updater": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-4.1.2.tgz",
+ "integrity": "sha512-4Sk8IW0LfOilDz+WAB/gEDmX7+FUFRbKHGN1zGjehPilnd6H9cmjgBHK6Xzq/FLq/uOHGJ6GX/9tsF+jr7CvnA==",
+ "requires": {
+ "@types/semver": "^6.0.1",
+ "builder-util-runtime": "8.3.0",
+ "fs-extra": "^8.1.0",
+ "js-yaml": "^3.13.1",
+ "lazy-val": "^1.0.4",
+ "lodash.isequal": "^4.5.0",
+ "pako": "^1.0.10",
+ "semver": "^6.2.0"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "requires": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ }
+ }
+ },
"elliptic": {
"version": "6.5.0",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz",
@@ -9086,8 +9073,7 @@
"lazy-val": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.4.tgz",
- "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q==",
- "dev": true
+ "integrity": "sha512-u93kb2fPbIrfzBuLjZE+w+fJbUUMhNDXxNmMfaqNgpfQf1CO5ZSe2LfsnBqVAk7i/2NF48OSoRj+Xe2VT+lE8Q=="
},
"lcid": {
"version": "2.0.0",
@@ -9217,11 +9203,10 @@
"resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
"integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0="
},
- "lodash.assign": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz",
- "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=",
- "dev": true
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
},
"lodash.memoize": {
"version": "4.1.2",
@@ -9260,15 +9245,6 @@
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M="
},
- "log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.1"
- }
- },
"loglevel": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.3.tgz",
@@ -9910,64 +9886,11 @@
"lower-case": "^1.1.1"
}
},
- "node-abi": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.11.0.tgz",
- "integrity": "sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g==",
- "dev": true,
- "requires": {
- "semver": "^5.4.1"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
"node-forge": {
"version": "0.7.5",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz",
"integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ=="
},
- "node-gyp": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.0.3.tgz",
- "integrity": "sha512-z/JdtkFGUm0QaQUusvloyYuGDub3nUbOo5de1Fz57cM++osBTvQatBUSTlF1k/w8vFHPxxXW6zxGvkxXSpaBkQ==",
- "dev": true,
- "requires": {
- "env-paths": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^4.4.8",
- "which": "1"
- },
- "dependencies": {
- "nopt": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
- "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
- "dev": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "semver": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
- "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
- "dev": true
- }
- }
- },
"node-gyp-build": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.0.tgz",
@@ -10468,56 +10391,6 @@
"wordwrap": "~1.0.0"
}
},
- "ora": {
- "version": "3.4.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
- "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
- "dev": true,
- "requires": {
- "chalk": "^2.4.2",
- "cli-cursor": "^2.1.0",
- "cli-spinners": "^2.0.0",
- "log-symbols": "^2.2.0",
- "strip-ansi": "^5.2.0",
- "wcwidth": "^1.0.1"
- },
- "dependencies": {
- "cli-cursor": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
- "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
- "dev": true,
- "requires": {
- "restore-cursor": "^2.0.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
- "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
- "dev": true
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "dev": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "restore-cursor": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
- "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
- "dev": true,
- "requires": {
- "onetime": "^2.0.0",
- "signal-exit": "^3.0.2"
- }
- }
- }
- },
"original": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz",
@@ -13703,34 +13576,6 @@
"integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=",
"dev": true
},
- "spawn-rx": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-3.0.0.tgz",
- "integrity": "sha512-dw4Ryg/KMNfkKa5ezAR5aZe9wNwPdKlnHEXtHOjVnyEDSPQyOpIPPRtcIiu7127SmtHhaCjw21yC43HliW0iIg==",
- "dev": true,
- "requires": {
- "debug": "^2.5.1",
- "lodash.assign": "^4.2.0",
- "rxjs": "^6.3.1"
- },
- "dependencies": {
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- }
- }
- },
"spdx-correct": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
@@ -15067,15 +14912,6 @@
"minimalistic-assert": "^1.0.0"
}
},
- "wcwidth": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
- "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
- "dev": true,
- "requires": {
- "defaults": "^1.0.3"
- }
- },
"webidl-conversions": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
diff --git a/package.json b/package.json
index d5d9ab2..7fe3673 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,27 @@
{
- "name": "vowlink-electron",
+ "name": "VowLink",
"description": "VowLink - Secure Distributed IRC",
"author": "Fedor Indutny ",
- "version": "0.1.0",
+ "version": "1.0.0-0",
"private": true,
"main": "src/electron/main.js",
+ "repository": "git@github.com:vowlink/vowlink-electron",
+ "build": {
+ "appId": "com.indutny.vowlink-electron",
+ "productName": "VowLink",
+ "mac": {
+ "category": "public.app-category.social-networking"
+ },
+ "publish": [
+ "github"
+ ],
+ "files": [
+ "src/electron",
+ "node_modules/**/*",
+ "build",
+ "assets/icon.icns"
+ ]
+ },
"homepage": "./",
"dependencies": {
"@vowlink/protocol": "^1.0.1-31",
@@ -12,6 +29,7 @@
"@vowlink/swarm": "^1.0.1-3",
"electron-is-dev": "^1.1.0",
"electron-log": "^3.0.7",
+ "electron-updater": "^4.1.2",
"esm": "^3.2.25",
"promise-waitlist": "^1.1.0",
"react": "^16.9.0",
@@ -31,7 +49,7 @@
"electron:dev": "concurrently \"BROWSER=none npm start\" \"wait-on http://localhost:3000/ && electron .\"",
"electron:build": "npm run build && electron-builder",
"electron:publish": "npm run electron:build -- -p always",
- "postinstall": "electron-rebuild -o sqlite3"
+ "postinstall": "electron-builder install-app-deps"
},
"eslintConfig": {
"extends": "react-app"
@@ -52,7 +70,6 @@
"concurrently": "^4.1.2",
"electron": "^6.0.2",
"electron-builder": "^21.2.0",
- "electron-rebuild": "^1.8.6",
"wait-on": "^3.3.0"
}
}
diff --git a/public/electron.js b/public/electron.js
new file mode 100644
index 0000000..3a99178
--- /dev/null
+++ b/public/electron.js
@@ -0,0 +1,2 @@
+// NOTE: we are in ./build
+require('../src/electron/main.js');
diff --git a/public/favicon.ico b/public/favicon.ico
deleted file mode 100644
index a11777c..0000000
Binary files a/public/favicon.ico and /dev/null differ
diff --git a/public/favicon.png b/public/favicon.png
new file mode 100644
index 0000000..690b4eb
Binary files /dev/null and b/public/favicon.png differ
diff --git a/public/index.html b/public/index.html
index fdd684c..3c44e90 100644
--- a/public/index.html
+++ b/public/index.html
@@ -2,7 +2,7 @@
-
+
diff --git a/src/electron/main.js b/src/electron/main.js
index c0ce74b..34261c0 100644
--- a/src/electron/main.js
+++ b/src/electron/main.js
@@ -4,6 +4,14 @@ const path = require('path');
const { app, session, BrowserWindow, ipcMain: ipc } = require('electron');
const log = require('electron-log');
const isDev = require('electron-is-dev');
+const { autoUpdater } = require("electron-updater");
+
+// Request update every 4 hours for those who run it over prolonged periods
+// of time.
+const UPDATE_FREQUENCY = 4 * 3600 * 1000;
+
+autoUpdater.logger = log;
+autoUpdater.logger.transports.file.level = 'info';
const Network = require('./network').default;
@@ -57,7 +65,19 @@ function createWindow() {
});
}
-app.on('ready', createWindow);
+app.on('ready', () => {
+ createWindow();
+
+ setInterval(() => {
+ autoUpdater.checkForUpdatesAndNotify().catch(() => {
+ // Ignore
+ });
+ }, UPDATE_FREQUENCY);
+
+ autoUpdater.checkForUpdatesAndNotify().catch(() => {
+ // Ignore
+ });
+});
app.on('activate', createWindow);
// Quit when all windows are closed.