diff --git a/res/app/components/stf/language/language-service.js b/res/app/components/stf/language/language-service.js index edad797f..510b5d72 100644 --- a/res/app/components/stf/language/language-service.js +++ b/res/app/components/stf/language/language-service.js @@ -21,7 +21,6 @@ module.exports = function LanguageServiceFactory( return isSupported(lang) ? lang : defaultValue } - LanguageService.settingKey = 'selectedLanguage' LanguageService.supportedLanguages = supportedLanguages LanguageService.defaultLanguage = 'en' LanguageService.detectedLanguage = @@ -30,8 +29,8 @@ module.exports = function LanguageServiceFactory( SettingsService.sync( LanguageService , { - target: LanguageService.settingKey - , source: LanguageService.settingKey + target: 'selectedLanguage' + , source: 'selectedLanguage' , defaultValue: LanguageService.detectedLanguage } , updateLanguage diff --git a/res/app/components/stf/settings/settings-service.js b/res/app/components/stf/settings/settings-service.js index 33ae748a..0fd155bd 100644 --- a/res/app/components/stf/settings/settings-service.js +++ b/res/app/components/stf/settings/settings-service.js @@ -42,6 +42,10 @@ module.exports = function SettingsServiceFactory( applyDelta(delta) } + SettingsService.get = function (key) { + return settings[key] + } + SettingsService.set = function(key, value) { var delta = Object.create(null) delta[key] = value diff --git a/res/app/control-panes/control-panes-controller.js b/res/app/control-panes/control-panes-controller.js index fb052a9d..44ffe2de 100644 --- a/res/app/control-panes/control-panes-controller.js +++ b/res/app/control-panes/control-panes-controller.js @@ -1,7 +1,7 @@ module.exports = function ControlPanesController($scope, $http, gettext, $routeParams, $timeout, $location, DeviceService, GroupService, ControlService, - StorageService, FatalMessageService) { + StorageService, FatalMessageService, SettingsService) { var sharedTabs = [ { @@ -81,21 +81,28 @@ module.exports = // http://blog.brunoscopelliti.com/show-route-only-after-all-promises-are-resolved // http://odetocode.com/blogs/scott/archive/2014/05/20/using-resolve-in-angularjs-routes.aspx - DeviceService.get($routeParams.serial, $scope) - .then(function (device) { - return GroupService.invite(device) - }) - .then(function (device) { - $scope.device = device - $scope.control = ControlService.create(device, device.channel) - - return device - }) - .catch(function () { - $timeout(function () { - $location.path('/') + function getDevice(serial) { + DeviceService.get(serial, $scope) + .then(function (device) { + return GroupService.invite(device) }) - }) + .then(function (device) { + $scope.device = device + $scope.control = ControlService.create(device, device.channel) + + SettingsService.set('lastUsedDevice', serial) + + return device + }) + .catch(function () { + $timeout(function () { + $location.path('/') + }) + }) + } + + getDevice($routeParams.serial) + $scope.$watch('device.state', function (newValue, oldValue) { if (newValue !== oldValue) { diff --git a/res/app/control-panes/control-panes-no-device-controller.js b/res/app/control-panes/control-panes-no-device-controller.js new file mode 100644 index 00000000..398202af --- /dev/null +++ b/res/app/control-panes/control-panes-no-device-controller.js @@ -0,0 +1,10 @@ +module.exports = + function ControlPanesNoDeviceController($location, SettingsService) { + var lastUsedDevice = SettingsService.get('lastUsedDevice') + + if (lastUsedDevice) { + $location.path('/control/' + lastUsedDevice) + } else { + $location.path('/') + } + } diff --git a/res/app/control-panes/index.js b/res/app/control-panes/index.js index f10b5617..1d826c0f 100644 --- a/res/app/control-panes/index.js +++ b/res/app/control-panes/index.js @@ -1,4 +1,3 @@ - module.exports = angular.module('control-panes', [ require('stf/common-ui/nice-tabs').name, require('stf/device').name, @@ -17,16 +16,25 @@ module.exports = angular.module('control-panes', [ require('./info').name ]) .config(['$routeProvider', function ($routeProvider) { - $routeProvider.when('/control/:serial', { - template: require('./control-panes.jade'), - controller: 'ControlPanesCtrl' - // TODO: Move device inviting to resolve - //resolve: { - // device - // control - //} - }) + + $routeProvider + .when('/control', { + template: '
', + controller: 'ControlPanesNoDeviceController' + }) + .when('/control/:serial', { + template: require('./control-panes.jade'), + controller: 'ControlPanesCtrl' + // TODO: Move device inviting to resolve + //resolve: { + // device + // control + //} + }) }]) .factory('ControlPanesService', require('./control-panes-service')) .controller('ControlPanesCtrl', require('./control-panes-controller')) - .controller('ControlPanesHotKeysCtrl', require('./control-panes-hotkeys-controller')) + .controller('ControlPanesNoDeviceController', + require('./control-panes-no-device-controller')) + .controller('ControlPanesHotKeysCtrl', + require('./control-panes-hotkeys-controller')) diff --git a/res/app/menu/menu-controller.js b/res/app/menu/menu-controller.js index 41b4b2d7..7e891be2 100644 --- a/res/app/menu/menu-controller.js +++ b/res/app/menu/menu-controller.js @@ -1,8 +1,13 @@ module.exports = function MenuCtrl($scope, $rootScope, SettingsService, $location, ExternalUrlModalService) { + SettingsService.bind($scope, { + target: 'lastUsedDevice' + }) + SettingsService.bind($rootScope, { - target: 'platform', defaultValue: 'native' + target: 'platform', + defaultValue: 'native' }) $scope.$on('$routeChangeSuccess', function () { diff --git a/res/app/menu/menu.jade b/res/app/menu/menu.jade index d3d0a477..090c7f4c 100644 --- a/res/app/menu/menu.jade +++ b/res/app/menu/menu.jade @@ -3,7 +3,7 @@ a.stf-logo(href="/") STF 2 ul.nav.stf-nav(nav-menu='current').unselectable li(ng-cloak) - a(ng-href='/#!/control', ng-click='$event.preventDefault()').cursor + a(ng-href='/#!/control', ng-show='lastUsedDevice') span.fa.fa-mobile | {{ !$root.basicMode ? "Control" : '' | translate }} a(ng-href='/#!/devices', accesskey='1')