/* * @copyright Copyright (c) 2021 Jonas Heinrich <onny@project-insanity.org> * * @author Jonas Heinrich <onny@project-insanity.org> * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 program. If not, see <http://www.gnu.org/licenses/>. * */ import axios from '@nextcloud/axios' import { generateUrl } from '@nextcloud/router' export class EpisodeApi { url(url) { url = `/apps/podcast/api${url}` return generateUrl(url) } addEpisode(episode) { episode = { id: episode.id, imgURL: episode.imgURL, title: episode.title, pubdate: episode.pubdate, duration: episode.duration, playtime: 0, lastplayed: Date.now(), enclosure: episode.enclosure, description: episode.description.substring(0, 100), // Trim string description, because of MySQL max length field podcast_id: episode.podcast_id, } return axios.post(this.url('/episodes'), episode) .then( (response) => { return Promise.resolve(response.data) }, (err) => { return Promise.reject(err) } ) .catch((err) => { return Promise.reject(err) }) } removeEpisode(episode) { return axios.delete(this.url(`/episodes/${episode.id}`)) .then( (response) => { return Promise.resolve(response.data) }, (err) => { return Promise.reject(err) } ) .catch((err) => { return Promise.reject(err) }) } queryEpisodes(podcastId = null, page = 0, sortBy = 'lastplayed') { let params = {} if (podcastId) { params = { podcast_id: podcastId, count: 20, page, } } else { params = { count: 20, page, sortBy, } } return axios.get(this.url('/episodes'), { params, }) .then( (response) => { return Promise.resolve(response.data) }, (err) => { return Promise.reject(err) } ) .catch((err) => { return Promise.reject(err) }) } queryEpisode(episodeId) { return axios.get(this.url('/episodes'), { params: { episode_id: episodeId, }, }) .then( (response) => { return Promise.resolve(response.data) }, (err) => { return Promise.reject(err) } ) .catch((err) => { return Promise.reject(err) }) } updateEpisode({ episode, playtime } = {}) { episode = { id: episode.id, imgURL: episode.imgURL, title: episode.title, pubdate: episode.pubdate, duration: episode.duration, playtime, lastplayed: Date.now(), enclosure: episode.enclosure, description: episode.description.substring(0, 100), // Trim string description, because of MySQL max length field podcast_id: episode.podcast_id, } return axios.put(this.url(`/episodes/${episode.id}`), episode) .then( (response) => { return Promise.resolve(response.data) }, (err) => { return Promise.reject(err) } ) .catch((err) => { return Promise.reject(err) }) } }