From 238d5d6f4e7fc0a25ced8184f8c809eb716eb169 Mon Sep 17 00:00:00 2001 From: Simo Kinnunen Date: Mon, 17 Mar 2014 20:01:07 +0900 Subject: [PATCH] Keep device data up to date on device page. --- .../components/stf/device/device-service.js | 20 +++++++++++++++---- .../device-control-controller.js | 2 +- res/app/device-control/device-control.jade | 2 +- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/res/app/components/stf/device/device-service.js b/res/app/components/stf/device/device-service.js index 3b4d923e..811edc12 100644 --- a/res/app/components/stf/device/device-service.js +++ b/res/app/components/stf/device/device-service.js @@ -10,18 +10,25 @@ module.exports = function DeviceServiceFactory($rootScope, $http, socket) { , devicesBySerial = Object.create(null) , scopedSocket = socket.scoped($scope) + function notify() { + // Not great. Consider something else + if (!$scope.$$phase) { + $scope.$digest() + } + } + function get(data) { return devices[devicesBySerial[data.serial]] } function insert(data) { devicesBySerial[data.serial] = devices.push(data) - 1 - $scope.$digest() + notify() } function modify(oldData, newData) { _.assign(oldData, newData) - $scope.$digest() + notify() } function remove(data) { @@ -29,7 +36,7 @@ module.exports = function DeviceServiceFactory($rootScope, $http, socket) { if (index >= 0) { devices.splice(index, 1) delete devicesBySerial[data.serial] - $scope.$digest() + notify() } } @@ -78,9 +85,14 @@ module.exports = function DeviceServiceFactory($rootScope, $http, socket) { return tracker } - deviceService.get = function (serial) { + deviceService.get = function (serial, $scope) { + var tracker = new Tracker($scope, { + auto: false + }) + return $http.get('/api/v1/devices/' + serial) .then(function (response) { + tracker.add(response.data.device) return response.data.device }) } diff --git a/res/app/device-control/device-control-controller.js b/res/app/device-control/device-control-controller.js index 0aeb10d2..cb1096e7 100644 --- a/res/app/device-control/device-control-controller.js +++ b/res/app/device-control/device-control-controller.js @@ -1,7 +1,7 @@ module.exports = function DeviceControlCtrl($scope, $routeParams, $location, DeviceService, GroupService, ControlService) { $scope.control = null $scope.device = { - promise: DeviceService.get($routeParams.serial) + promise: DeviceService.get($routeParams.serial, $scope) .then(function(device) { return GroupService.invite(device) }) diff --git a/res/app/device-control/device-control.jade b/res/app/device-control/device-control.jade index 271d658b..8894a40d 100644 --- a/res/app/device-control/device-control.jade +++ b/res/app/device-control/device-control.jade @@ -1,4 +1,4 @@ -h1 {{ device.value.serial }} +h1 {{ device.value.serial }} {{ device.value.present ? 'present' : 'absent' }} button(ng-click='showScreen = !showScreen') Show/Hide button(ng-click='control.identify()') Identify