Better KISS support
This commit is contained in:
parent
0d25765510
commit
6a4c38134d
Binary file not shown.
After Width: | Height: | Size: 5.2 KiB |
BIN
images/icon.png
BIN
images/icon.png
Binary file not shown.
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.1 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 7.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 13 KiB |
23
index.html
23
index.html
|
@ -5,11 +5,12 @@
|
||||||
<title>Chimeverse</title>
|
<title>Chimeverse</title>
|
||||||
<link rel="stylesheet" type="text/css" media="screen" href="node_modules/converse.js/css/converse.css">
|
<link rel="stylesheet" type="text/css" media="screen" href="node_modules/converse.js/css/converse.css">
|
||||||
<link rel="stylesheet" href="node_modules/uikit/dist/css/uikit.min.css">
|
<link rel="stylesheet" href="node_modules/uikit/dist/css/uikit.min.css">
|
||||||
|
<style> .ng-cloak { display: none !important; } </style>
|
||||||
</head>
|
</head>
|
||||||
<body ng-app="app">
|
<body ng-app="app">
|
||||||
<div class="main-window" ng-controller="AppController">
|
<div class="main-window" ng-controller="AppController">
|
||||||
<!-- Account form -->
|
<!-- Account form -->
|
||||||
<div ng-hide="loginExist" class="uk-section uk-section-muted uk-flex uk-flex-middle uk-animation-fade" uk-height-viewport ng-controller="LoginController">
|
<div ng-show="showLoginForm" class="uk-section uk-section-muted uk-flex uk-flex-middle uk-animation-fade ng-cloak" uk-height-viewport>
|
||||||
<div class="uk-width-1-1">
|
<div class="uk-width-1-1">
|
||||||
<div class="uk-container">
|
<div class="uk-container">
|
||||||
<h3 class="uk-card-title uk-text-center">Welcome to Chimeverse</h3>
|
<h3 class="uk-card-title uk-text-center">Welcome to Chimeverse</h3>
|
||||||
|
@ -21,7 +22,7 @@
|
||||||
<div class="uk-margin">
|
<div class="uk-margin">
|
||||||
<div class="uk-inline uk-width-1-1">
|
<div class="uk-inline uk-width-1-1">
|
||||||
<span class="uk-form-icon" uk-icon="icon: link"></span>
|
<span class="uk-form-icon" uk-icon="icon: link"></span>
|
||||||
<input ng-model="boshService" class="uk-input uk-form-large" type="text" placeholder="Bosh service url" required>
|
<input ng-model="bosh" class="uk-input uk-form-large" type="text" placeholder="Bosh service url" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="uk-margin">
|
<div class="uk-margin">
|
||||||
|
@ -48,13 +49,19 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- /Account form -->
|
|
||||||
<!-- Background and settings -->
|
|
||||||
<div ng-show="loginExist" class="uk-position-center">
|
|
||||||
<h3 class="uk-text-center">Chimeverse</h3>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
<!-- /Account form -->
|
||||||
|
<!-- Background and settings -->
|
||||||
|
<div ng-show="!showLoginForm" class="uk-position-center ng-cloak">
|
||||||
|
<div class="uk-text-center">
|
||||||
|
<img src="images/logo.png" srcset="images/logo@2x.png 2x" alt="" />
|
||||||
|
<h3 class="uk-heading-small uk-text-muted uk-margin-remove">Chimeverse</h3>
|
||||||
|
<!--
|
||||||
|
TODO: Add next
|
||||||
|
<span ng-hide="showSpinner" class="uk-margin-small-right" uk-spinner="ratio: 2"></span>
|
||||||
|
-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="node_modules/uikit/dist/js/uikit.min.js"></script>
|
<script src="node_modules/uikit/dist/js/uikit.min.js"></script>
|
||||||
|
|
17
main.js
17
main.js
|
@ -13,6 +13,9 @@ function initApp() {
|
||||||
createWindow();
|
createWindow();
|
||||||
tray.on('click', function() {
|
tray.on('click', function() {
|
||||||
hideEnvelope();
|
hideEnvelope();
|
||||||
|
if (mainWindow === null) {
|
||||||
|
createWindow();
|
||||||
|
}
|
||||||
mainWindow.show();
|
mainWindow.show();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -54,7 +57,10 @@ app.on('ready', initApp)
|
||||||
app.on('window-all-closed', function () {
|
app.on('window-all-closed', function () {
|
||||||
// On macOS it is common for applications and their menu bar
|
// On macOS it is common for applications and their menu bar
|
||||||
// to stay active until the user quits explicitly with Cmd + Q
|
// 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 () {
|
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
|
// 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.
|
// 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() {
|
function showEnvelope() {
|
||||||
tray.setImage('./images/envelope.png')
|
tray.setImage('./images/envelope.png')
|
||||||
}
|
}
|
||||||
|
@ -74,4 +86,5 @@ function hideEnvelope() {
|
||||||
tray.setImage('./images/icon.png')
|
tray.setImage('./images/icon.png')
|
||||||
}
|
}
|
||||||
|
|
||||||
exports.showEnvelope = showEnvelope;
|
exports.showEnvelope = showEnvelope;
|
||||||
|
exports.hideEnvelope = hideEnvelope;
|
229
renderer.js
229
renderer.js
|
@ -2,68 +2,185 @@
|
||||||
// be executed in the renderer process for that window.
|
// be executed in the renderer process for that window.
|
||||||
// All of the Node.js APIs are available in this process.
|
// All of the Node.js APIs are available in this process.
|
||||||
|
|
||||||
const keytar = require('keytar');
|
const angular = require('angular')
|
||||||
const angular = require('angular');
|
|
||||||
const settings = require('electron-settings');
|
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) {
|
let settingsService = {}
|
||||||
$scope.loginExist = false;
|
|
||||||
$scope.login = settings.get('login');
|
|
||||||
|
|
||||||
$scope.playAudio = function() {
|
settingsService.getCredentials = () => {
|
||||||
var audio = new Audio('sounds/graceful.ogg');
|
let credentials = {}
|
||||||
audio.play();
|
credentials.login = settings.get('login')
|
||||||
};
|
let promise = new Promise((resolve, reject) => {
|
||||||
|
if (credentials.login) {
|
||||||
if ($scope.login) {
|
credentials.bosh = settings.get('bosh')
|
||||||
var showEnvelope = remote.require('./main').showEnvelope;
|
credentials.xmppService = credentials.login.split('@').pop()
|
||||||
$scope.loginExist = true;
|
let password = keytar.getPassword(credentials.xmppService, credentials.login)
|
||||||
$scope.boshService = settings.get('bosh');
|
password.then((result) => {
|
||||||
var xmppService = $scope.login.split('@').pop();
|
credentials.password = result
|
||||||
var password = keytar.getPassword(xmppService, $scope.login);
|
resolve(credentials)
|
||||||
password.then((result) => {
|
})
|
||||||
$scope.password = result;
|
}
|
||||||
converse.plugins.add('chimeVerse', {
|
else {
|
||||||
initialize: function() {
|
reject(Error('No login stored'))
|
||||||
var _converse = this._converse;
|
}
|
||||||
Promise.all([
|
})
|
||||||
_converse.api.waitUntil('rosterContactsFetched'),
|
return promise
|
||||||
_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
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
||||||
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() {
|
$scope.addAccountAction = function() {
|
||||||
var xmppService = $scope.login.split('@').pop();
|
ChimeVerseService.settings.addCredentials($scope.bosh, $scope.login, $scope.password)
|
||||||
settings.set('bosh', $scope.boshService);
|
$scope.showLoginForm = false
|
||||||
settings.set('login', $scope.login);
|
ChimeVerseService.initConverse($scope.bosh, $scope.login, $scope.password)
|
||||||
keytar.setPassword(xmppService, $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()
|
||||||
|
|
||||||
|
})
|
||||||
|
|
Loading…
Reference in New Issue