From 0ec8082ac1be1ccf44e1cca7d43a6ac3dd0a9604 Mon Sep 17 00:00:00 2001 From: Simo Kinnunen Date: Wed, 23 Jul 2014 17:58:08 +0900 Subject: [PATCH] Tell the UI why the device became unusable. --- lib/roles/device/plugins/group.js | 9 +++++---- lib/roles/websocket.js | 4 ++++ lib/wire/wire.proto | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/roles/device/plugins/group.js b/lib/roles/device/plugins/group.js index 77b94b1e..bdfa8714 100644 --- a/lib/roles/device/plugins/group.js +++ b/lib/roles/device/plugins/group.js @@ -72,7 +72,7 @@ module.exports = syrup.serial() } } - plugin.leave = function() { + plugin.leave = function(reason) { return plugin.get() .then(function(group) { log.important('No longer owned by "%s"', group.email) @@ -86,6 +86,7 @@ module.exports = syrup.serial() , wireutil.envelope(new wire.LeaveGroupMessage( options.serial , group + , reason )) ]) @@ -136,7 +137,7 @@ module.exports = syrup.serial() var reply = wireutil.reply(options.serial) grouputil.match(ident, message.requirements) .then(function() { - return plugin.leave() + return plugin.leave('ungroup_request') }) .then(function() { push.send([ @@ -154,12 +155,12 @@ module.exports = syrup.serial() channels.on('timeout', function(channel) { if (currentGroup && channel === currentGroup.group) { - plugin.leave() + plugin.leave('automatic_timeout') } }) lifecycle.observe(function() { - return plugin.leave() + return plugin.leave('lifecycle_ended') .catch(grouputil.NoGroupError, function() { return true }) diff --git a/lib/roles/websocket.js b/lib/roles/websocket.js index a578001a..e084717f 100644 --- a/lib/roles/websocket.js +++ b/lib/roles/websocket.js @@ -130,6 +130,7 @@ module.exports = function(options) { , ready: false , lastHeartbeatAt: null , using: false + , likelyLeaveReason: 'device_absent' } }) }) @@ -139,6 +140,7 @@ module.exports = function(options) { , data: datautil.applyOwner({ serial: message.serial , owner: message.owner + , likelyLeaveReason: 'owner_change' } , user ) @@ -150,12 +152,14 @@ module.exports = function(options) { , data: datautil.applyOwner({ serial: message.serial , owner: null + , likelyLeaveReason: message.reason } , user ) }) }) .on(wire.DeviceStatusMessage, function(channel, message) { + message.likelyLeaveReason = 'status_change' socket.emit('device.change', { important: true , data: message diff --git a/lib/wire/wire.proto b/lib/wire/wire.proto index f6ad229c..c95b81a8 100644 --- a/lib/wire/wire.proto +++ b/lib/wire/wire.proto @@ -236,6 +236,7 @@ message JoinGroupMessage { message LeaveGroupMessage { required string serial = 1; required OwnerMessage owner = 2; + required string reason = 3; } // Input