diff --git a/app/controllers/default-controller.js b/app/controllers/default-controller.js new file mode 100644 index 0000000..b24b1fa --- /dev/null +++ b/app/controllers/default-controller.js @@ -0,0 +1,7 @@ +let angApp = require(__dirname+'/../init') + +angApp.controller('DefaultController', function($scope, ChimeVerseService) { + + console.log('always-test') + +}); \ No newline at end of file diff --git a/app/controllers/login-controller.js b/app/controllers/login-controller.js new file mode 100644 index 0000000..1a5a98b --- /dev/null +++ b/app/controllers/login-controller.js @@ -0,0 +1,11 @@ +let angApp = require(__dirname+'/../init') + +angApp.controller('LoginController', function($scope, ChimeVerseService, SettingsServise) { + $scope.addAccountAndLoginAction = () => { + SettingsServise.addCredentials($scope.bosh, + $scope.login, + $scope.password + ) + ChimeVerseService.initConverse($scope.bosh, $scope.login, $scope.password) + } +}); \ No newline at end of file diff --git a/app/controllers/settings-controller.js b/app/controllers/settings-controller.js new file mode 100644 index 0000000..4121336 --- /dev/null +++ b/app/controllers/settings-controller.js @@ -0,0 +1,6 @@ + +let angApp = require(__dirname+'/../init') + +angApp.controller('SettingsController', function ($scope, ChimeVerseService) { + +}) \ No newline at end of file diff --git a/app/init.js b/app/init.js new file mode 100644 index 0000000..95a6c9c --- /dev/null +++ b/app/init.js @@ -0,0 +1,4 @@ +const angular = require('angular') +let angApp = angular.module('app', []) + +module.exports = angApp \ No newline at end of file diff --git a/app/services/app-state-service.js b/app/services/app-state-service.js new file mode 100644 index 0000000..5bb8f51 --- /dev/null +++ b/app/services/app-state-service.js @@ -0,0 +1,19 @@ +let angApp = require(__dirname + '/../init') + +angApp.factory('AppStateService', [ '$rootScope', ($rootScope) => { + + let stateService = {} + + stateService.APP_STATE_LOGIN = 'login' + stateService.APP_STATE_DEFAULT = 'default' + stateService.APP_STATE_SETTINGS = 'settings' + + stateService.set = (state) => { + stateService.state = state + $rootScope.$broadcast('app:state:changed', stateService.state); + } + + stateService.set(stateService.APP_STATE_DEFAULT) + + return stateService +}]) \ No newline at end of file diff --git a/app/services/chimeverse-service.js b/app/services/chimeverse-service.js new file mode 100644 index 0000000..0d6cad3 --- /dev/null +++ b/app/services/chimeverse-service.js @@ -0,0 +1,60 @@ +let angApp = require(__dirname + '/../init') + +angApp.factory('ChimeVerseService', ($window, SettingsServise, SystemService, AppStateService) => { + + let chimeverseService = {} + + chimeverseService._notifyMessage = () => { + SystemService.playAudio() + SystemService.showEnvelope() + } + + chimeverseService._hideNotifyMessage = () => { + SystemService.hideEnvelope() + } + + chimeverseService.logout = () => { + let credentials = SettingsServise.getCredentials() + credentials.then((result) => { + let remove = SettingsServise.removeCredentials(result.login) + console.log('Remove credential on logout') + remove.then(() => { + console.log('Switch to the login state') + AppStateService.set(AppStateService.APP_STATE_LOGIN) + }) + }) + } + + chimeverseService.initConverse = (bosh, login, password) => { + AppStateService.set(AppStateService.APP_STATE_DEFAULT) // Always set to default state before init + let lang = navigator.language + converse.initialize({ + allow_bookmarks: false, + bosh_service_url: bosh, + view_mode: 'embedded', + jid: login + '/chimeverse', + password: password, + auto_login: true, + whitelisted_plugins: ['chimeVerse'], + i18n: lang, + priority: 50, + // debug: true, + auto_reconnect: true + }) + } + + $window.document.addEventListener('conversejs-logout', function (e) { + chimeverseService.logout() + }); + + $window.document.addEventListener('conversejs-unread', function (e) { + chimeverseService._notifyMessage() + }); + + $window.document.addEventListener('conversejs-no-unread', function (e) { + chimeverseService._hideNotifyMessage() + }); + + return chimeverseService + +}) \ No newline at end of file diff --git a/app/services/settings-service.js b/app/services/settings-service.js new file mode 100644 index 0000000..dbd0deb --- /dev/null +++ b/app/services/settings-service.js @@ -0,0 +1,54 @@ +let angApp = require(__dirname+'/../init') + +angApp.factory('SettingsServise', () => { + + const keytar = require('keytar') + const settings = require('electron-settings') + + let settingsService = {} + + 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 + } + + settingsService.addCredentials = (bosh, login, password) => { + 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 +}) + diff --git a/app/services/system-service.js b/app/services/system-service.js new file mode 100644 index 0000000..92e1e85 --- /dev/null +++ b/app/services/system-service.js @@ -0,0 +1,28 @@ +let angApp = require(__dirname + '/../init') + +angApp.factory('SystemService', () => { + + const remote = require('electron').remote + + let systemService = {} + + systemService.playAudio = () => { + var audio = new Audio(__dirname + '/sounds/graceful.ogg') + audio.play() + } + + systemService.showEnvelope = () => { + remote.require('./main').trayService.showEnvelope() + } + + systemService.hideEnvelope = () => { + remote.require('./main').trayService.hideEnvelope() + } + + systemService.reloadWindow = () => { + remote.getCurrentWindow().reload() + } + + return systemService + +}) \ No newline at end of file diff --git a/app/views/default/page.html b/app/views/default/page.html new file mode 100644 index 0000000..f4e27ee --- /dev/null +++ b/app/views/default/page.html @@ -0,0 +1,10 @@ +