Skip to content

Commit

Permalink
Better KISS support
Browse files Browse the repository at this point in the history
  • Loading branch information
nick-denry committed Apr 26, 2019
1 parent 0d25765 commit 6a4c381
Show file tree
Hide file tree
Showing 8 changed files with 207 additions and 70 deletions.
Binary file added images/[email protected]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified images/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/[email protected]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/[email protected]
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
23 changes: 15 additions & 8 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,12 @@
<title>Chimeverse</title>
<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">
<style> .ng-cloak { display: none !important; } </style>
</head>
<body ng-app="app">
<div class="main-window" ng-controller="AppController">
<!-- 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-container">
<h3 class="uk-card-title uk-text-center">Welcome to Chimeverse</h3>
Expand All @@ -21,7 +22,7 @@ <h3 class="uk-card-title uk-text-center">Welcome to Chimeverse</h3>
<div class="uk-margin">
<div class="uk-inline uk-width-1-1">
<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 class="uk-margin">
Expand All @@ -48,13 +49,19 @@ <h3 class="uk-card-title uk-text-center">Welcome to Chimeverse</h3>
</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>

<!-- /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/[email protected] 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>

<script src="node_modules/uikit/dist/js/uikit.min.js"></script>
Expand Down
17 changes: 15 additions & 2 deletions main.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ function initApp() {
createWindow();
tray.on('click', function() {
hideEnvelope();
if (mainWindow === null) {
createWindow();
}
mainWindow.show();
});
}
Expand Down Expand Up @@ -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 () {
Expand All @@ -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')
}
Expand All @@ -74,4 +86,5 @@ function hideEnvelope() {
tray.setImage('./images/icon.png')
}

exports.showEnvelope = showEnvelope;
exports.showEnvelope = showEnvelope;
exports.hideEnvelope = hideEnvelope;
237 changes: 177 additions & 60 deletions renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -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');


var remote = require('electron').remote;

var angApp = angular.module('app', []);

angApp.controller('AppController', function ($scope) {
$scope.loginExist = false;
$scope.login = settings.get('login');

$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
});
});
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('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
})
}
});

angApp.controller('LoginController', function ($scope) {
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()

})

0 comments on commit 6a4c381

Please sign in to comment.