tests implementing settingscontroller

This commit is contained in:
Jonas Heinrich 2020-10-27 13:43:30 +01:00
parent f9fbfe0d4e
commit 6fc4744b56
6 changed files with 56 additions and 78 deletions

View File

@ -25,4 +25,12 @@
<route>radio.page.index</route>
</navigation>
</navigations>
<activity>
<settings>
<setting>OCA\Radio\Activity\Setting</setting>
</settings>
<providers>
<provider>OCA\Radio\Activity\Provider</provider>
</providers>
</activity>
</info>

View File

@ -27,12 +27,17 @@ return [
'radio_api' => ['url' => '/api/0.1/radio']
],
'routes' => [
// Web page templates
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'page#index', 'url' => '/top', 'verb' => 'GET', 'postfix' => 'top'],
['name' => 'page#index', 'url' => '/recent', 'verb' => 'GET', 'postfix' => 'recent'],
['name' => 'page#index', 'url' => '/new', 'verb' => 'GET', 'postfix' => 'new'],
['name' => 'page#index', 'url' => '/favorites', 'verb' => 'GET', 'postfix' => 'favorites'],
['name' => 'page#index', 'url' => '/categories', 'verb' => 'GET', 'postfix' => 'categories'],
// Settings
['name' => 'settings#set_menu_state', 'url' => '/settings/menuState', 'verb' => 'POST'],
['name' => 'settings#get_menu_state', 'url' => '/settings/menuState', 'verb' => 'GET'],
// Api
['name' => 'radio_api#preflighted_cors', 'url' => '/api/0.1/{path}',
'verb' => 'OPTIONS', 'requirements' => ['path' => '.+']]
]

View File

@ -8,6 +8,7 @@ use OCP\AppFramework\App;
use OCP\AppFramework\Bootstrap\IBootContext;
use OCP\AppFramework\Bootstrap\IBootstrap;
use OCP\AppFramework\Bootstrap\IRegistrationContext;
use OCP\IRequest;
class Application extends App implements IBootstrap {
@ -18,6 +19,11 @@ class Application extends App implements IBootstrap {
}
public function register(IRegistrationContext $context): void {
$context->registerService('request', static function ($c) {
return $c->get(IRequest::class);
});
}
public function boot(IBootContext $context): void {

View File

@ -70,101 +70,33 @@ class SettingsController extends ApiController {
}
/**
* get player volume config value
* set menu state
*
* @param string $menuState
* @return JSONResponse
*
* @NoAdminRequired
*/
public function getVolume(): JSONResponse {
return $this->getSetting('volume', 'volume', 0.5);
}
/**
* set player volume config value
*
* @param string $sorting
* @return JSONResponse
*
* @NoAdminRequired
*/
public function setSorting($sorting = ""): JSONResponse {
$legalArguments = ['title', 'added', 'clickcount', 'lastmodified', 'index'];
if (!in_array($sorting, $legalArguments)) {
public function setMenuState($menuState = ""): JSONResponse {
$legalArguments = ['TOP', 'RECENT', 'NEW', 'FAVORITES', 'CATEGORIES'];
if (!in_array($menuState, $legalArguments)) {
return new JSONResponse(['status' => 'error'], Http::STATUS_BAD_REQUEST);
}
return $this->setSetting(
'sorting',
$sorting
'menuState',
$menuState
);
}
/**
* get view mode option config value
* get menu state
*
* @return JSONResponse
*
* @NoAdminRequired
*/
public function getViewMode(): JSONResponse {
return $this->getSetting('viewMode', 'viewMode', 'grid');
public function getMenuState(): JSONResponse {
return $this->getSetting('menuState', 'menuState', 'TOP');
}
/**
* set sorting option config value
*
* @param string $viewMode
* @return JSONResponse
*
* @NoAdminRequired
*/
public function setViewMode($viewMode = ""): JSONResponse {
$legalArguments = ['grid', 'list'];
if (!in_array($viewMode, $legalArguments)) {
return new JSONResponse(['status' => 'error'], Http::STATUS_BAD_REQUEST);
}
return $this->setSetting(
'viewMode',
$viewMode
);
}
/**
* get per-user bookmarks limit
*
* @return JSONResponse
*
* @NoAdminRequired
*/
public function getLimit(): JSONResponse {
$limit = (int)$this->config->getAppValue('bookmarks', 'performance.maxBookmarksperAccount', 0);
return new JSONResponse(['limit' => $limit], Http::STATUS_OK);
}
/**
* get user-defined archive path
*
* @return JSONResponse
*
* @NoAdminRequired
*/
public function getArchivePath(): JSONResponse {
return $this->getSetting(
'archive.filePath',
'archivePath',
$this->l->t('Bookmarks')
);
}
/**
* set user-defined archive path
*
* @param string $archivePath
* @return JSONResponse
*
* @NoAdminRequired
*/
public function setArchivePath(string $archivePath): JSONResponse {
return $this->setSetting('archive.filePath', $archivePath);
}
}

View File

@ -76,12 +76,14 @@ export default {
mounted() {
this.loadStations()
this.scroll()
this.$store.dispatch('getMenuState')
},
methods: {
async onRoute() {
this.offset = 0
this.tableData = []
const route = this.$route
this.$store.dispatch('setMenuState', route.name)
switch (route.name) {
case 'TOP':
this.loadStations()

View File

@ -1,5 +1,9 @@
import Vue from 'vue'
import Vuex from 'vuex'
import axios from '@nextcloud/axios'
import { generateUrl } from '@nextcloud/router'
Vue.use(Vuex)
export default new Vuex.Store({
@ -46,6 +50,21 @@ export default new Vuex.Store({
setTitle(state, title) {
state.player.title = title
},
setMenuState(state, menuState) {
axios.post(generateUrl('/apps/radio/settings/menuState'), {
menuState,
})
},
getMenuState(state, menuState) {
axios
.get(generateUrl('/apps/radio/settings/menuState'))
.then(async response => {
const {
data: { menuState: value },
} = response
console.log(value)
})
},
},
actions: {
isPlaying(context, playerState) {
@ -66,5 +85,11 @@ export default new Vuex.Store({
setTitle(context, title) {
context.commit('setTitle', title)
},
setMenuState(context, menuState) {
context.commit('setMenuState', menuState)
},
getMenuState(context) {
context.commit('getMenuState')
},
},
})