Request hotlist from weechat and sync unread and lastSeen

This commit is contained in:
Tor Hveem 2013-10-16 01:09:31 +02:00
parent e324a5fa2d
commit 53d9f51d0c

View file

@ -253,6 +253,27 @@ weechat.factory('handlers', ['$rootScope', 'colors', 'models', 'plugins', functi
});
}
/*
* Handle answers to hotlist request
*/
var handleHotlistInfo = function(message) {
var hotlist = message['objects'][0]['content'];
hotlist.forEach(function(l) {
var buffer = models.getBuffer(l.buffer);
// 1 is message
buffer.unread += l.count[1];
// 2 is ?
buffer.unread += l.count[2];
// 3 is highlight
buffer.notification += l.count[3];
/* Since there is unread messages, we can guess
* what the last read line is and update it accordingly
*/
var unreadSum = _.reduce(l.count, function(memo, num){ return memo + num; }, 0);
buffer.lastSeen = buffer.lines.length - 1 - unreadSum;
});
}
var handleEvent = function(event) {
if (_.has(eventHandlers, event['id'])) {
@ -262,7 +283,6 @@ weechat.factory('handlers', ['$rootScope', 'colors', 'models', 'plugins', functi
}
var eventHandlers = {
lineinfo: handleLineInfo,
_buffer_closing: handleBufferClosing,
_buffer_line_added: handleBufferLineAdded,
_buffer_opened: handleBufferOpened,
@ -272,7 +292,8 @@ weechat.factory('handlers', ['$rootScope', 'colors', 'models', 'plugins', functi
return {
handleEvent: handleEvent,
handleLineInfo: handleLineInfo
handleLineInfo: handleLineInfo,
handleHotlistInfo: handleHotlistInfo
}
}]);
@ -315,6 +336,7 @@ weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers',
websocket.onopen = function (evt) {
$log.info("Connected to relay");
$rootScope.connected = true;
doSend(WeeChatProtocol.formatInit({
password: passwd,
compression: 'off'
@ -334,7 +356,6 @@ weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers',
models.setActiveBuffer(buffer.id);
}
}
$rootScope.connected = true;
}).then(function() {
$log.info("Parsing lineinfo");
doSendWithCallback(WeeChatProtocol.formatHdata({
@ -343,6 +364,14 @@ weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers',
})).then(function(hdata) {
handlers.handleLineInfo(hdata);
});
}).then(function() {
$log.info("Requesting hotlist");
doSendWithCallback(WeeChatProtocol.formatHdata({
path: "hotlist:gui_hotlist(*)",
keys: []
})).then(function(hdata) {
handlers.handleHotlistInfo(hdata)
});
}).then(function() {
doSend(WeeChatProtocol.formatSync({}));
$log.info("Synced");
@ -393,18 +422,18 @@ weechat.factory('connection', ['$q', '$rootScope', '$log', '$store', 'handlers',
}
}]);
weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', 'models', 'connection', function ($rootScope, $scope, $store, $timeout, models, connection, testService) {
weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout', '$log', 'models', 'connection', function ($rootScope, $scope, $store, $timeout, $log, models, connection, testService) {
// Request notification permission
Notification.requestPermission(function (status) {
console.log('Notification permission status:',status);
$log.info('Notification permission status:',status);
if (Notification.permission !== status) {
Notification.permission = status;
}
});
if(window.webkitNotifications != undefined) {
if (window.webkitNotifications.checkPermission() == 0) { // 0 is PERMISSION_ALLOWED
console.log('Notification permission status:', window.webkitNotifications.checkPermission() == 0);
$log.info('Notification permission status:', window.webkitNotifications.checkPermission() == 0);
window.webkitNotifications.requestPermission();
}
}
@ -490,7 +519,7 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
var content = messages;
var timeout = 15*1000;
console.log('Displaying notification:buffer:',buffer,',message:',message,',with timeout:',timeout);
$log.info('Displaying notification:buffer:',buffer,',message:',message,',with timeout:',timeout);
var notification = new Notification(title, {body:content, icon:'img/favicon.png'});
// Cancel notification automatically
notification.onshow = function() {
@ -540,7 +569,7 @@ weechat.controller('WeechatCtrl', ['$rootScope', '$scope', '$store', '$timeout',
}
}
//console.log('keypress', $event.charCode, $event.altKey);
//log('keypress', $event.charCode, $event.altKey);
// Handle alt-a
if($event.altKey && (code == 97 || code == 65)) {