diff --git a/lib/roles/app.js b/lib/roles/app.js index d23e3162..ae8352ac 100644 --- a/lib/roles/app.js +++ b/lib/roles/app.js @@ -19,6 +19,7 @@ var datautil = require('../util/datautil') var auth = require('./app/middleware/auth') var deviceIconMiddleware = require('./app/middleware/device-icons') var browserIconMiddleware = require('./app/middleware/browser-icons') +var appstoreIconMiddleware = require('./app/middleware/appstore-icons') module.exports = function(options) { var log = logger.createLogger('app') @@ -66,6 +67,7 @@ module.exports = function(options) { app.use('/static/app/data', serveStatic(pathutil.resource('data'))) app.use('/static/app/status', serveStatic(pathutil.resource('common/status'))) app.use('/static/app/browsers', browserIconMiddleware()) + app.use('/static/app/appstores', appstoreIconMiddleware()) app.use('/static/app/devices', deviceIconMiddleware()) app.use('/static/app', serveStatic(pathutil.resource('app'))) diff --git a/lib/roles/app/middleware/appstore-icons.js b/lib/roles/app/middleware/appstore-icons.js new file mode 100644 index 00000000..e23783a7 --- /dev/null +++ b/lib/roles/app/middleware/appstore-icons.js @@ -0,0 +1,12 @@ +var serveStatic = require('serve-static') + +var pathutil = require('../../../util/pathutil') + +module.exports = function() { + return serveStatic( + pathutil.root('node_modules/stf-appstore-db/dist') + , { + maxAge: '30d' + } + ) +} diff --git a/res/app/control-panes/automation/store-account/store-account-controller.js b/res/app/control-panes/automation/store-account/store-account-controller.js index 9989cef7..3c87b042 100644 --- a/res/app/control-panes/automation/store-account/store-account-controller.js +++ b/res/app/control-panes/automation/store-account/store-account-controller.js @@ -1,5 +1,17 @@ module.exports = function StoreAccountCtrl($scope, ngTableParams) { - var storeAccountType = 'com.google' + // TODO: This should come from the DB + $scope.currentAppStore = 'google-play-store' + $scope.deviceAppStores = { + "google-play-store": { + "type": 'google-play-store', + "name": 'Google Play Store', + "package": 'com.google' + } + } + + console.log('$scope.deviceAppStores[$scope.currentAppStore].package', + $scope.deviceAppStores[$scope.currentAppStore].package) + $scope.addAccount = function () { var user = $scope.storeLogin.username.$modelValue @@ -13,6 +25,7 @@ module.exports = function StoreAccountCtrl($scope, ngTableParams) { } $scope.removeAccount = function (account) { + var storeAccountType = $scope.deviceAppStores[$scope.currentAppStore].package $scope.control.removeAccount(storeAccountType, account) .then(function (result) { getAccounts() @@ -23,6 +36,7 @@ module.exports = function StoreAccountCtrl($scope, ngTableParams) { } function getAccounts() { + var storeAccountType = $scope.deviceAppStores[$scope.currentAppStore].package $scope.control.getAccounts(storeAccountType).then(function (result) { $scope.accountsList = result.body $scope.accountsTable.reload() diff --git a/res/app/control-panes/automation/store-account/store-account.css b/res/app/control-panes/automation/store-account/store-account.css index 7475041b..72ab6b59 100644 --- a/res/app/control-panes/automation/store-account/store-account.css +++ b/res/app/control-panes/automation/store-account/store-account.css @@ -1,3 +1,8 @@ .stf-store-account { } + +.stf-store-account .appstore-icon { + width: 16px; + height: 16px; +} diff --git a/res/app/control-panes/automation/store-account/store-account.jade b/res/app/control-panes/automation/store-account/store-account.jade index 5b4628be..e03fc763 100644 --- a/res/app/control-panes/automation/store-account/store-account.jade +++ b/res/app/control-panes/automation/store-account/store-account.jade @@ -2,46 +2,59 @@ .heading i.fa.fa-cloud span(translate) Store Account + + + button.btn.btn-sm.btn-primary-outline.pull-right(ng-click='control.openStore()', tooltip='{{"App Store" | translate}}', tooltip-placement="bottom") i.fa.fa-shopping-cart .widget-content.padded - div - form(name='storeLogin', novalidate, enable-autofill, action='about:blank') - .form-group - .input-group - span.input-group-addon - i.fa.fa-user.fa-fw - input.form-control(ng-model='username', name='username', required, type='text', placeholder='{{"Username"|translate}}', - autocorrect='off', autocapitalize='off', spellcheck='false', autocomplete='store-login username') - .alert.alert-warning(ng-show='storeLogin.username.$dirty && storeLogin.username.$invalid') - span(ng-show='storeLogin.username.$error.required', translate) Please enter your Store username - .form-group - .input-group - span.input-group-addon - i.fa.fa-lock.fa-fw - input.form-control(ng-model='password', name='password', required, type='password', placeholder='{{"Password"|translate}}', - autocorrect='off', autocapitalize='off', spellcheck='false', autocomplete='store-login password') - .alert.alert-warning(ng-show='storeLogin.password.$dirty && storeLogin.password.$invalid') - span(translate) Please enter your Store password - button.btn.btn-sm.btn-primary-outline(ng-click='addAccount()', ng-disabled='storeLogin.$invalid') - i.fa.fa-sign-in - span(translate) Sign In - table(ng-table='accountsTable', ng-show='accountsList').table.table-striped - thead - tr - th - span(translate) Account - th - span(translate) Actions - tbody - tr(ng-repeat='account in $data') - td - i.fa.fa-user.fa-fw - span(ng-bind='account') - td - button.btn.btn-xs.btn-danger-outline(ng-click='removeAccount(account)') - i.fa.fa-sign-out - //i.fa.fa-trash-o - span(translate) Sign Out + div + + + + form(name='storeLogin', novalidate, enable-autofill, action='about:blank') + .form-group + .input-group + span.input-group-addon + i.fa.fa-user.fa-fw + input.form-control(ng-model='username', name='username', required, type='text', placeholder='{{"Username"|translate}}', + autocorrect='off', autocapitalize='off', spellcheck='false', autocomplete='store-login username') + .alert.alert-warning(ng-show='storeLogin.username.$dirty && storeLogin.username.$invalid') + span(ng-show='storeLogin.username.$error.required', translate) Please enter your Store username + .form-group + .input-group + span.input-group-addon + i.fa.fa-lock.fa-fw + input.form-control(ng-model='password', name='password', required, type='password', placeholder='{{"Password"|translate}}', + autocorrect='off', autocapitalize='off', spellcheck='false', autocomplete='store-login password') + .alert.alert-warning(ng-show='storeLogin.password.$dirty && storeLogin.password.$invalid') + span(translate) Please enter your Store password + + .btn-group + label.btn.btn-sm.btn-default-outline(ng-repeat='a in deviceAppStores track by a.id', + ng-model='currentAppStore', btn-radio='a', tooltip='{{a.name}}') + img(ng-src='/static/app/appstores/icon/24x24/{{a.type}}.png', ng-show='a.type').appstore-icon.pointer + + button.btn.btn-sm.btn-primary-outline(ng-click='addAccount()', ng-disabled='storeLogin.$invalid').pull-right + i.fa.fa-sign-in + span(translate) Sign In + + table(ng-table='accountsTable', ng-show='accountsList').table.table-striped + thead + tr + th + span(translate) Account + th + span(translate) Actions + tbody + tr(ng-repeat='account in $data') + td + i.fa.fa-user.fa-fw + span(ng-bind='account') + td + button.btn.btn-xs.btn-danger-outline(ng-click='removeAccount(account)') + i.fa.fa-sign-out + //i.fa.fa-trash-o + span(translate) Sign Out