converse-desktop/renderer.js

187 lines
5.6 KiB
JavaScript

// This file is required by the index.html file and will
// be executed in the renderer process for that window.
// All of the Node.js APIs are available in this process.
const angular = require('angular')
var angApp = angular.module('app', [])
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) => {
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(__dirname + '/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() {
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()
})