From 7a0b6bc7df511d12f6998aa29e2ac0e06352d3e0 Mon Sep 17 00:00:00 2001 From: Jonas Heinrich Date: Wed, 10 Mar 2021 18:02:31 +0100 Subject: [PATCH] beginning to implement export favorites --- CHANGELOG.md | 2 + appinfo/routes.php | 1 + lib/Controller/ExportController.php | 59 +++++++++++++++++++++++++++++ src/main.js | 2 +- src/views/Favorites.vue | 28 ++++++++++++-- 5 files changed, 87 insertions(+), 5 deletions(-) create mode 100644 lib/Controller/ExportController.php diff --git a/CHANGELOG.md b/CHANGELOG.md index b44c35f..8aed7cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,8 @@ ### Added - Nextcloud 21 & PHP 8 support [#251](https://git.project-insanity.org/onny/nextcloud-app-radio/-/issues/251) @onny +- Support add stations manually + [#157](https://git.project-insanity.org/onny/nextcloud-app-radio/-/issues/157) @onny ### Fixed - Cleanup SCSS diff --git a/appinfo/routes.php b/appinfo/routes.php index bb02165..1290f1c 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -25,6 +25,7 @@ return [ 'resources' => [ 'favorite' => ['url' => '/api/favorites'], 'recent' => ['url' => '/api/recent'], + 'export' => ['url' => '/export'], ], 'routes' => [ diff --git a/lib/Controller/ExportController.php b/lib/Controller/ExportController.php new file mode 100644 index 0000000..4fdfd1e --- /dev/null +++ b/lib/Controller/ExportController.php @@ -0,0 +1,59 @@ + + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE + * License as published by the Free Software Foundation; either + * version 3 of the License, or any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU AFFERO GENERAL PUBLIC LICENSE for more details. + * + * You should have received a copy of the GNU Affero General Public + * License along with this library. If not, see . + * + */ + +namespace OCA\Radio\Controller; + +use OCA\Radio\AppInfo\Application; +use OCA\Radio\Service\FavoriteService; +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\DataResponse; +use OCP\IRequest; + +class ExportController extends Controller { + /** @var FavoriteService */ + private $service; + + /** @var string */ + private $userId; + + use Errors; + + public function __construct(IRequest $request, + FavoriteService $service, + $userId) { + parent::__construct(Application::APP_ID, $request); + $this->service = $service; + $this->userId = $userId; + } + + /** + * @NoAdminRequired + */ + public function index() { + header('Content-Type: application/csv'); + header('Content-Disposition: attachment; filename="filename.csv"'); + //return new DataResponse($this->service->findAll($this->userId)); + return "hello"; + } + +} diff --git a/src/main.js b/src/main.js index 6db0542..912c4dc 100644 --- a/src/main.js +++ b/src/main.js @@ -38,7 +38,7 @@ Vue.prototype.t = translate Vue.prototype.n = translatePlural Vue.prototype.OC = window.OC Vue.prototype.OCA = window.OCA -Vue.prototype.$version = '1.0.2' +Vue.prototype.$version = '1.0.3' Vue.use(VueClipboard) Vue.use(VueBlurHash) diff --git a/src/views/Favorites.vue b/src/views/Favorites.vue index d7c08d2..3db0d2c 100644 --- a/src/views/Favorites.vue +++ b/src/views/Favorites.vue @@ -40,7 +40,7 @@ + @click="exportList"> Export favorites @@ -118,9 +118,11 @@ import Navigation from './../components/Navigation' import Table from './../components/Table' import Sidebar from './../components/Sidebar' import { mapGetters, mapActions } from 'vuex' - +import axios from '@nextcloud/axios' +import { generateUrl } from '@nextcloud/router' import { RadioBrowserApi } from './../services/RadioBrowserApi' const apiClient = new RadioBrowserApi() +const requesttoken = axios.defaults.headers.requesttoken export default { name: 'Favorites', @@ -143,7 +145,7 @@ export default { showSidebar: false, sidebarStation: {}, tableData: [], - modal: true, + modal: false, station: { faviconUrl: '', }, @@ -243,13 +245,20 @@ export default { this.modal = false }, + uuidv4() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { + const r = Math.random() * 16 | 0; const v = c === 'x' ? r : (r & 0x3 | 0x8) + return v.toString(16) + }) + }, + addCustomStation(e) { e.preventDefault() const station = { name: this.station.name, urlresolved: this.station.streamUrl, favicon: this.station.faviconUrl, - stationuuid: '932eb148-e6f6-11e9-a96c-52543be04c81', + stationuuid: this.uuidv4(), bitrate: '', country: '', language: '', @@ -261,6 +270,17 @@ export default { this.modal = false }, + exportList() { + console.log('export list') + axios.defaults.headers.requesttoken = requesttoken + axios.get(generateUrl('/apps/radio/export')) + .then( + (response) => { + return Promise.resolve(response.data) + }, + ) + }, + }, }