diff --git a/lib/db/api.js b/lib/db/api.js index 40c1f252..10d2518b 100644 --- a/lib/db/api.js +++ b/lib/db/api.js @@ -34,10 +34,10 @@ dbapi.loadUser = function(email) { return db.run(r.table('users').get(email)) } -dbapi.loadGroupMembers = function(email) { +dbapi.loadGroup = function(email) { return db.run(r.table('devices').getAll(email, { - index: 'ownerEmail' - })('serial')) + index: 'ownerEmail' + })) } dbapi.saveDeviceLog = function(serial, entry) { diff --git a/lib/roles/app.js b/lib/roles/app.js index f88b9fec..d168d0fb 100644 --- a/lib/roles/app.js +++ b/lib/roles/app.js @@ -114,15 +114,17 @@ module.exports = function(options) { }) app.get('/api/v1/group', function(req, res) { - dbapi.loadGroupMembers(req.user.email) + dbapi.loadGroup(req.user.email) .then(function(cursor) { return Promise.promisify(cursor.toArray, cursor)() .then(function(list) { + list.forEach(function(device) { + datautil.applyData(device) + datautil.applyOwner(device, req.user) + }) res.json({ success: true - , group: { - members: list - } + , devices: list }) }) }) diff --git a/res/app/components/stf/device/device-service.js b/res/app/components/stf/device/device-service.js index 94b03087..b47857bd 100644 --- a/res/app/components/stf/device/device-service.js +++ b/res/app/components/stf/device/device-service.js @@ -55,7 +55,7 @@ module.exports = function DeviceServiceFactory($rootScope, $http, socket) { if (device) { modify(device, data) } - else if (options.auto) { + else if (options.insertPresent) { insert(data) } }) @@ -70,7 +70,12 @@ module.exports = function DeviceServiceFactory($rootScope, $http, socket) { scopedSocket.on('device.change', function (data) { var device = get(data) if (device) { - modify(device, data) + if (options.removeAbsent) { + remove(device) + } + else { + modify(device, data) + } } }) @@ -84,7 +89,7 @@ module.exports = function DeviceServiceFactory($rootScope, $http, socket) { deviceService.trackAll = function ($scope) { var tracker = new Tracker($scope, { - auto: true + insertPresent: true }) oboe('/api/v1/devices') @@ -95,11 +100,22 @@ module.exports = function DeviceServiceFactory($rootScope, $http, socket) { return tracker } - deviceService.get = function (serial, $scope) { + deviceService.trackGroup = function ($scope) { var tracker = new Tracker($scope, { - auto: false + removeAbsent: true }) + oboe('/api/v1/group') + .node('devices[*]', function (device) { + tracker.add(device) + }) + + return tracker + } + + deviceService.get = function (serial, $scope) { + var tracker = new Tracker($scope) + return $http.get('/api/v1/devices/' + serial) .then(function (response) { tracker.add(response.data.device) diff --git a/res/app/components/stf/user/group/group-service.js b/res/app/components/stf/user/group/group-service.js index 99ed270e..116d741a 100644 --- a/res/app/components/stf/user/group/group-service.js +++ b/res/app/components/stf/user/group/group-service.js @@ -1,52 +1,9 @@ var _ = require('lodash') -module.exports = function GroupServiceFactory($rootScope, $http, socket, UserService, TransactionService) { +module.exports = function GroupServiceFactory(socket, UserService, TransactionService) { var groupService = { } - groupService.group = (function () { - var groupPromise = $http.get('/api/v1/group') - .then(function (response) { - return response.data.group - }) - return function () { - return groupPromise - } - })() - - UserService.user().then(function (user) { - function ownerFilter(listener) { - return function (data) { - if (data.owner.email === user.email) { - listener() - } - } - } - - socket.on('group.join', ownerFilter(function (data) { - groupService.group().then(function (group) { - group.members.push(data.serial) - console.log('group.join', data) - $rootScope.$digest() - }) - })) - - socket.on('group.leave', ownerFilter(function (data) { - groupService.group().then(function (group) { - _.pull(group.members, data.serial) - console.log('group.leave', data) - $rootScope.$digest() - }) - })) - - socket.on('device.absent', /* unfiltered */ function (data) { - groupService.group().then(function (group) { - _.pull(group.members, data.serial) - $rootScope.$digest() - }) - }) - }) - groupService.invite = function (device) { return UserService.user().then(function (user) { var tx = TransactionService.create([device])