From 36d0af71b5e17a00cc1bd22df2b840e92eff5e9b Mon Sep 17 00:00:00 2001 From: Simo Kinnunen Date: Wed, 5 Feb 2014 11:08:37 +0900 Subject: [PATCH] Attempting to make it easier to work with a single device. Still not bound to the new controlService. --- lib/roles/app.js | 10 +- .../scripts/controllers/DeviceControlCtrl.js | 17 ++++ res/app/scripts/controllers/index.js | 1 + res/app/scripts/routes.js | 12 ++- res/app/scripts/services/controlService.js | 59 ++++++++++++ res/app/scripts/services/deviceService.js | 12 ++- res/app/scripts/services/groupService.js | 91 +++++++------------ res/app/scripts/services/index.js | 1 + res/app/scripts/services/userService.js | 11 ++- res/app/views/partials/devices/control.jade | 1 + .../{deviceList.jade => devices/index.jade} | 1 + 11 files changed, 141 insertions(+), 75 deletions(-) create mode 100644 res/app/scripts/controllers/DeviceControlCtrl.js create mode 100644 res/app/scripts/services/controlService.js create mode 100644 res/app/views/partials/devices/control.jade rename res/app/views/partials/{deviceList.jade => devices/index.jade} (82%) diff --git a/lib/roles/app.js b/lib/roles/app.js index 0d261e57..5fb1767a 100644 --- a/lib/roles/app.js +++ b/lib/roles/app.js @@ -1,6 +1,7 @@ var url = require('url') var http = require('http') var events = require('events') +var path = require('path') var express = require('express') var validator = require('express-validator') @@ -73,13 +74,14 @@ module.exports = function(options) { groupRouter.emit(channel.toString(), channel, data) }) - app.get('/partials/:name', function(req, res) { + app.get('/partials/*', function(req, res) { var whitelist = { - 'deviceList': true + 'devices/index': true + , 'devices/control': true } - if (whitelist[req.params.name]) { - res.render('partials/' + req.params.name) + if (whitelist.hasOwnProperty(req.params[0])) { + res.render(path.join('partials', req.params[0])) } else { res.send(404) diff --git a/res/app/scripts/controllers/DeviceControlCtrl.js b/res/app/scripts/controllers/DeviceControlCtrl.js new file mode 100644 index 00000000..ae2f6f9b --- /dev/null +++ b/res/app/scripts/controllers/DeviceControlCtrl.js @@ -0,0 +1,17 @@ +define(['./module'], function(mod) { + function DeviceControlCtrl($scope, $routeParams, deviceService) { + $scope.device = null + + deviceService.get($routeParams.serial) + .then(function(device) { + $scope.device = device + }) + } + + mod.controller('DeviceControlCtrl' + , [ '$scope' + , '$routeParams' + , 'deviceService' + , DeviceControlCtrl + ]) +}) diff --git a/res/app/scripts/controllers/index.js b/res/app/scripts/controllers/index.js index 962c0964..0b7420f5 100644 --- a/res/app/scripts/controllers/index.js +++ b/res/app/scripts/controllers/index.js @@ -1,5 +1,6 @@ define([ './DeviceListCtrl' + , './DeviceControlCtrl' ] , function() { } diff --git a/res/app/scripts/routes.js b/res/app/scripts/routes.js index 37f480ea..6b084fdb 100644 --- a/res/app/scripts/routes.js +++ b/res/app/scripts/routes.js @@ -3,14 +3,18 @@ define(['./app'], function(app) { '$routeProvider' , '$locationProvider' , function($routeProvider, $locationProvider) { - $locationProvider.html5Mode(true) + $locationProvider.hashPrefix('!') $routeProvider - .when('/', { - templateUrl: 'partials/deviceList' + .when('/devices', { + templateUrl: 'partials/devices/index' , controller: 'DeviceListCtrl' }) + .when('/devices/:serial', { + templateUrl: 'partials/devices/control' + , controller: 'DeviceControlCtrl' + }) .otherwise({ - redirectTo: '/' + redirectTo: '/devices' }) } ]) diff --git a/res/app/scripts/services/controlService.js b/res/app/scripts/services/controlService.js new file mode 100644 index 00000000..7a1c8f30 --- /dev/null +++ b/res/app/scripts/services/controlService.js @@ -0,0 +1,59 @@ +define(['./module', 'lodash'], function(mod, _) { + function ControlServiceFactory($rootScope, socket) { + var controlService = { + members: [] + } + + function touchSender(type) { + return function(x, y) { + socket.emit(type, { + x: x + , y: y + }) + } + } + + function keySender(type) { + return function(key) { + socket.emit(type, { + key: key + }) + } + } + + controlService.touchDown = touchSender('input.touchDown') + controlService.touchMove = touchSender('input.touchMove') + controlService.touchUp = touchSender('input.touchUp') + controlService.tap = touchSender('input.tap') + + controlService.keyDown = keySender('input.keyDown') + controlService.keyUp = keySender('input.keyUp') + controlService.keyPress = keySender('input.keyPress') + + controlService.home = function() { + socket.emit('input.home') + } + + controlService.menu = function() { + socket.emit('input.menu') + } + + controlService.back = function() { + socket.emit('input.back') + } + + controlService.type = function(text) { + socket.emit('input.type', { + text: text + }) + } + + return controlService + } + + mod.factory('controlService' + , [ '$rootScope' + , 'socketService' + , ControlServiceFactory + ]) +}) diff --git a/res/app/scripts/services/deviceService.js b/res/app/scripts/services/deviceService.js index da42f15e..de6f596d 100644 --- a/res/app/scripts/services/deviceService.js +++ b/res/app/scripts/services/deviceService.js @@ -1,5 +1,5 @@ define(['./module', 'oboe'], function(mod, oboe) { - function DevicesServiceFactory($rootScope, socket) { + function DeviceServiceFactory($rootScope, $http, socket) { var deviceService = { devices: [] , devicesBySerial: {} @@ -67,12 +67,20 @@ define(['./module', 'oboe'], function(mod, oboe) { insert(device) }) + deviceService.get = function(serial) { + return $http.get('/api/v1/devices/' + serial) + .then(function(response) { + return response.data.device + }) + } + return deviceService } mod.factory('deviceService' , [ '$rootScope' + , '$http' , 'socketService' - , DevicesServiceFactory + , DeviceServiceFactory ]) }) diff --git a/res/app/scripts/services/groupService.js b/res/app/scripts/services/groupService.js index 8173379c..3724db37 100644 --- a/res/app/scripts/services/groupService.js +++ b/res/app/scripts/services/groupService.js @@ -1,75 +1,45 @@ define(['./module', 'lodash'], function(mod, _) { - function GroupServiceFactory($rootScope, socket) { + function GroupServiceFactory($rootScope, socket, userService) { var groupService = { members: [] } - socket.on('group.join', function(data) { - groupService.members.push(data.serial) - console.log('group.join', data) - $rootScope.$digest() - }) - - socket.on('group.leave', function(data) { - _.pull(groupService.members, data.serial) - console.log('group.leave', data) - $rootScope.$digest() - }) - - socket.on('device.absent', function(data) { - _.pull(groupService.members, data.serial) - $rootScope.$digest() - }) - - function touchSender(type) { - return function(x, y) { - socket.emit(type, { - x: x - , y: y - }) + userService.user().then(function(user) { + function ownerFilter(listener) { + return function(data) { + if (data.owner.email === user.email) { + listener() + } + } } - } - function keySender(type) { - return function(key) { - socket.emit(type, { - key: key - }) - } - } + socket.on('group.join', ownerFilter(function(data) { + groupService.members.push(data.serial) + console.log('group.join', data) + $rootScope.$digest() + })) + + socket.on('group.leave', ownerFilter(function(data) { + _.pull(groupService.members, data.serial) + console.log('group.leave', data) + $rootScope.$digest() + })) + + socket.on('device.absent', /* unfiltered */ function(data) { + _.pull(groupService.members, data.serial) + $rootScope.$digest() + }) + }) groupService.invite = function(requirements) { - socket.emit('group.invite', requirements) + userService.user().then(function(user) { + socket.emit('group.invite', requirements) + }) } groupService.kick = function(requirements) { - socket.emit('group.kick', requirements) - } - - groupService.touchDown = touchSender('input.touchDown') - groupService.touchMove = touchSender('input.touchMove') - groupService.touchUp = touchSender('input.touchUp') - groupService.tap = touchSender('input.tap') - - groupService.keyDown = keySender('input.keyDown') - groupService.keyUp = keySender('input.keyUp') - groupService.keyPress = keySender('input.keyPress') - - groupService.home = function() { - socket.emit('input.home') - } - - groupService.menu = function() { - socket.emit('input.menu') - } - - groupService.back = function() { - socket.emit('input.back') - } - - groupService.type = function(text) { - socket.emit('input.type', { - text: text + userService.user().then(function(user) { + socket.emit('group.kick', requirements) }) } @@ -79,6 +49,7 @@ define(['./module', 'lodash'], function(mod, _) { mod.factory('groupService' , [ '$rootScope' , 'socketService' + , 'userService' , GroupServiceFactory ]) }) diff --git a/res/app/scripts/services/index.js b/res/app/scripts/services/index.js index 4b4d3633..5205d115 100644 --- a/res/app/scripts/services/index.js +++ b/res/app/scripts/services/index.js @@ -3,6 +3,7 @@ define([ , './deviceService' , './groupService' , './userService' + , './controlService' ] , function() { } diff --git a/res/app/scripts/services/userService.js b/res/app/scripts/services/userService.js index f4cd0cbc..dcc63fd2 100644 --- a/res/app/scripts/services/userService.js +++ b/res/app/scripts/services/userService.js @@ -1,13 +1,14 @@ define(['./module'], function(mod) { function UserServiceFactory($http) { var userService = { - info: {} } - $http.get('/api/v1/user') - .success(function(data) { - userService.info = data.user - }) + userService.user = (function() { + var userPromise = $http.get('/api/v1/user') + return function() { + return userPromise + } + })() return userService } diff --git a/res/app/views/partials/devices/control.jade b/res/app/views/partials/devices/control.jade new file mode 100644 index 00000000..43bc294e --- /dev/null +++ b/res/app/views/partials/devices/control.jade @@ -0,0 +1 @@ +h1 {{ device.serial }} diff --git a/res/app/views/partials/deviceList.jade b/res/app/views/partials/devices/index.jade similarity index 82% rename from res/app/views/partials/deviceList.jade rename to res/app/views/partials/devices/index.jade index 57e015cc..faea80aa 100644 --- a/res/app/views/partials/deviceList.jade +++ b/res/app/views/partials/devices/index.jade @@ -3,5 +3,6 @@ h1 Devices ul li(ng-repeat='device in devices track by device.serial') span {{ device.serial }} {{ device.present ? 'present' : 'absent' }} {{ device.owner.email }} + a(href='#!/devices/{{ device.serial }}') Linky button(ng-click="invite(device)") invite button(ng-click="kick(device)") kick