diff --git a/images/envelope@2x.png b/images/envelope@2x.png
new file mode 100644
index 0000000..98024bc
Binary files /dev/null and b/images/envelope@2x.png differ
diff --git a/images/icon.png b/images/icon.png
index a0c9c8b..58f53fa 100644
Binary files a/images/icon.png and b/images/icon.png differ
diff --git a/images/icon@2x.png b/images/icon@2x.png
new file mode 100644
index 0000000..9cd02c5
Binary files /dev/null and b/images/icon@2x.png differ
diff --git a/images/logo.png b/images/logo.png
new file mode 100644
index 0000000..df79547
Binary files /dev/null and b/images/logo.png differ
diff --git a/images/logo@2x.png b/images/logo@2x.png
new file mode 100644
index 0000000..b55bb74
Binary files /dev/null and b/images/logo@2x.png differ
diff --git a/index.html b/index.html
index 8279bce..e0c9087 100644
--- a/index.html
+++ b/index.html
@@ -5,11 +5,12 @@
-
+
Welcome to Chimeverse
@@ -21,7 +22,7 @@
@@ -48,13 +49,19 @@
-
-
-
-
Chimeverse
-
-
+
+
+
+
+
+
Chimeverse
+
+
+
diff --git a/main.js b/main.js
index 222fb61..abd4c56 100644
--- a/main.js
+++ b/main.js
@@ -13,6 +13,9 @@ function initApp() {
createWindow();
tray.on('click', function() {
hideEnvelope();
+ if (mainWindow === null) {
+ createWindow();
+ }
mainWindow.show();
});
}
@@ -54,7 +57,10 @@ app.on('ready', initApp)
app.on('window-all-closed', function () {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
- if (process.platform !== 'darwin') app.quit()
+ // if (process.platform !== 'darwin')
+ // ^^^^ NOPE ;)
+ // Quit ANYWAY
+ app.quit()
})
app.on('activate', function () {
@@ -66,6 +72,12 @@ app.on('activate', function () {
// In this file you can include the rest of your app's specific main process
// code. You can also put them in separate files and require them here.
+// Allow to play audio automatically
+app.commandLine.appendSwitch('autoplay-policy', 'no-user-gesture-required');
+
+/**
+ * Export functions
+ */
function showEnvelope() {
tray.setImage('./images/envelope.png')
}
@@ -74,4 +86,5 @@ function hideEnvelope() {
tray.setImage('./images/icon.png')
}
-exports.showEnvelope = showEnvelope;
\ No newline at end of file
+exports.showEnvelope = showEnvelope;
+exports.hideEnvelope = hideEnvelope;
\ No newline at end of file
diff --git a/renderer.js b/renderer.js
index fd6afc9..e017f83 100644
--- a/renderer.js
+++ b/renderer.js
@@ -2,68 +2,185 @@
// be executed in the renderer process for that window.
// All of the Node.js APIs are available in this process.
-const keytar = require('keytar');
-const angular = require('angular');
-const settings = require('electron-settings');
+const angular = require('angular')
+
+var angApp = angular.module('app', [])
-var remote = require('electron').remote;
+angApp.factory('SettingsServise', () => {
-var angApp = angular.module('app', []);
+ const keytar = require('keytar')
+ const settings = require('electron-settings')
-angApp.controller('AppController', function ($scope) {
- $scope.loginExist = false;
- $scope.login = settings.get('login');
+ let settingsService = {}
- $scope.playAudio = function() {
- var audio = new Audio('sounds/graceful.ogg');
- audio.play();
- };
-
- if ($scope.login) {
- var showEnvelope = remote.require('./main').showEnvelope;
- $scope.loginExist = true;
- $scope.boshService = settings.get('bosh');
- var xmppService = $scope.login.split('@').pop();
- var password = keytar.getPassword(xmppService, $scope.login);
- password.then((result) => {
- $scope.password = result;
- converse.plugins.add('chimeVerse', {
- initialize: function() {
- var _converse = this._converse;
- Promise.all([
- _converse.api.waitUntil('rosterContactsFetched'),
- _converse.api.waitUntil('chatBoxesFetched')
- ]).then(function() {
- _converse.on('message', function (data) {
- //_converse.api.archive.query({'with': 'admin2@localhost'});
- $scope.playAudio();
- showEnvelope();
- });
- });
- }
- });
-
- var lang = navigator.language;
- converse.initialize({
- bosh_service_url: $scope.boshService,
- view_mode: 'fullscreen',
- jid: $scope.login,
- password: $scope.password,
- auto_login: true,
- whitelisted_plugins: ['chimeVerse'],
- i18n: lang
- });
- });
+ settingsService.getCredentials = () => {
+ let credentials = {}
+ credentials.login = settings.get('login')
+ let promise = new Promise((resolve, reject) => {
+ if (credentials.login) {
+ credentials.bosh = settings.get('bosh')
+ credentials.xmppService = credentials.login.split('@').pop()
+ let password = keytar.getPassword(credentials.xmppService, credentials.login)
+ password.then((result) => {
+ credentials.password = result
+ resolve(credentials)
+ })
+ }
+ else {
+ reject(Error('No login stored'))
+ }
+ })
+ return promise
}
-});
-angApp.controller('LoginController', function ($scope) {
+ settingsService.addCredentials = (bosh, login, password) => {
+ console.log('sdsad')
+ let xmppService = login.split('@').pop()
+ settings.set('bosh', bosh)
+ settings.set('login', login)
+ keytar.setPassword(xmppService, login, password)
+ }
+
+ settingsService.removeCredentials = (login) => {
+ let xmppService = login.split('@').pop()
+ passwordDelete = keytar.deletePassword(xmppService, login)
+ let promise = new Promise((resolve, reject) => {
+ passwordDelete.then((result) => {
+ settings.delete('login')
+ settings.delete('bosh')
+ resolve()
+ }, (error) => {
+ reject(error)
+ })
+ })
+ return promise
+ }
+
+ return settingsService
+})
+
+
+angApp.factory('SystemService', () => {
+
+ const remote = require('electron').remote
+
+ let systemService = {}
+
+ systemService.playAudio = () => {
+ var audio = new Audio('sounds/graceful.ogg')
+ audio.play()
+ }
+
+ systemService.showEnvelope = () => {
+ remote.require('./main').showEnvelope()
+ }
+
+ systemService.hideEnvelope = () => {
+ remote.require('./main').hideEnvelope()
+ }
+
+ systemService.reloadWindow = () => {
+ remote.getCurrentWindow().reload()
+ }
+
+ return systemService
+
+})
+
+
+angApp.factory('ChimeVerseService', (SettingsServise, SystemService) => {
+
+ let chimeverseService = {}
+
+ chimeverseService.settings = SettingsServise
+ chimeverseService.system = SystemService
+
+ console.log(chimeverseService.system)
+
+ chimeverseService._notifyMessage = (data) => {
+ if (data.message.attributes.sender === 'me') {
+ chimeverseService.system.hideEnvelope()
+ return ;
+ }
+ if (data.message.attributes.chat_state === 'active') {
+ chimeverseService.system.playAudio()
+ chimeverseService.system.showEnvelope()
+ }
+ }
+
+ chimeverseService.addChimeVersePluign = () => {
+ converse.plugins.add('chimeVerse', {
+ initialize: (event) => {
+ var _converse = event.properties._converse
+ Promise.all([
+ _converse.api.waitUntil('rosterContactsFetched'),
+ _converse.api.waitUntil('chatBoxesFetched')
+ ]).then(() => {
+ _converse.api.listen.on('logout', () => {
+ let credentials = SettingsServise.getCredentials()
+ credentials.then((result) => {
+ let remove = chimeverseService.settings.removeCredentials(result.login)
+ remove.then(() => {
+ chimeverseService.system.reloadWindow()
+ })
+ })
+ })
+ _converse.api.listen.on('messageAdded', (data) => {
+ chimeverseService._notifyMessage(data)
+ })
+ _converse.api.listen.on('chatBoxFocused', () => {
+ chimeverseService.system.hideEnvelope()
+ })
+ })
+ }
+ })
+ }
+
+ chimeverseService.initConverse = (bosh, login, password) => {
+ chimeverseService.addChimeVersePluign()
+ let lang = navigator.language
+ converse.initialize({
+ bosh_service_url: bosh,
+ view_mode: 'fullscreen',
+ jid: login + '/chimeverse',
+ password: password,
+ auto_login: true,
+ whitelisted_plugins: ['chimeVerse'],
+ i18n: lang,
+ priority: 50,
+ debug: true,
+ auto_reconnect: true
+ })
+ }
+
+ return chimeverseService
+
+})
+
+
+angApp.controller('AppController', function ($scope, ChimeVerseService) {
+
+ $scope.showLoginForm = false
+
$scope.addAccountAction = function() {
- var xmppService = $scope.login.split('@').pop();
- settings.set('bosh', $scope.boshService);
- settings.set('login', $scope.login);
- keytar.setPassword(xmppService, $scope.login, $scope.password);
-
+ ChimeVerseService.settings.addCredentials($scope.bosh, $scope.login, $scope.password)
+ $scope.showLoginForm = false
+ ChimeVerseService.initConverse($scope.bosh, $scope.login, $scope.password)
}
-});
+
+ $scope.getCredentialsAndLogin = () => {
+ let credentials = ChimeVerseService.settings.getCredentials()
+ credentials.then((result) => {
+ console.log(credentials.bosh)
+ ChimeVerseService.initConverse(result.bosh, result.login, result.password)
+ }, (error) => {
+ console.log(error)
+ $scope.showLoginForm = true
+ $scope.$apply()
+ })
+ }
+
+ $scope.getCredentialsAndLogin()
+
+})