diff --git a/lib/Controller/EpisodeController.php b/lib/Controller/EpisodeController.php index 64181bfb6ac1167e05fc8e27236790815a9ac9e0..4de9679fc2ddb718dbcd54b10cbac8eedf077b42 100644 --- a/lib/Controller/EpisodeController.php +++ b/lib/Controller/EpisodeController.php @@ -67,10 +67,10 @@ class EpisodeController extends Controller { */ public function create(int $id, string $imgurl, string $author, string $title, string $pubdate, string $duration, string $playtime, - string $lastplayed, string $enclosure): DataResponse { + string $lastplayed, string $enclosure, string $description): DataResponse { return new DataResponse($this->service->create($id, $imgurl, $author, $title, $pubdate, $duration, $playtime, $lastplayed, $enclosure, - $this->userId)); + $description, $this->userId)); } /** @@ -78,11 +78,12 @@ class EpisodeController extends Controller { */ public function update(int $id, string $imgurl, string $author, string $title, string $pubdate, string $duration, string $playtime, - string $lastplayed, string $enclosure): DataResponse { + string $lastplayed, string $enclosure, string $description): DataResponse { return $this->handleNotFound(function () use ($id, $imgurl, $author, $title, $pubdate, $duration, $playtime, $lastplayed, $enclosure) { return $this->service->update($id, $imgurl, $author, $title, $pubdate, - $duration, $playtime, $lastplayed, $enclosure, $this->userId); + $duration, $playtime, $lastplayed, $enclosure, $description, + $this->userId); }); } diff --git a/lib/Db/Episode.php b/lib/Db/Episode.php index 470478f7fb9743e3b94bbef5b49902b3b6acb176..9d063e7c291759b8e141efd514436d738ae22dc0 100644 --- a/lib/Db/Episode.php +++ b/lib/Db/Episode.php @@ -36,6 +36,7 @@ class Episode extends Entity implements JsonSerializable { protected $playtime; protected $lastplayed; protected $enclosure; + protected $description; protected $userId; public function jsonSerialize(): array { @@ -49,6 +50,7 @@ class Episode extends Entity implements JsonSerializable { 'playtime' => $this->playtime, 'lastplayed' => $this->lastplayed, 'enclosure' => $this->enclosure, + 'description' => $this->description, ]; } } diff --git a/lib/Migration/Version000100Date20210201162900.php b/lib/Migration/Version000100Date20210201162900.php index 5cd3ada805872a008f6838a55e3fbeee87ef2cf7..bec04cceac7774b25f9be4a1e142fbd70736b3b2 100644 --- a/lib/Migration/Version000100Date20210201162900.php +++ b/lib/Migration/Version000100Date20210201162900.php @@ -54,6 +54,8 @@ class Version000100Date20210201162900 extends SimpleMigrationStep { $schema = $schemaClosure(); $table = $schema->getTable('shows'); $table->addColumn('lastpub', 'string'); + $table = $schema->getTable('episodes'); + $table->addColumn('description', 'string'); return $schema; } } diff --git a/lib/Service/EpisodeService.php b/lib/Service/EpisodeService.php index f5bb1509000aff570b11d9f32dd245797e4a7133..0ab449d631423381ce1280de27fe6cdce1265cc4 100644 --- a/lib/Service/EpisodeService.php +++ b/lib/Service/EpisodeService.php @@ -67,7 +67,7 @@ class EpisodeService { } public function create($id, $imgurl, $author, $title, $pubdate, $duration, - $playtime, $lastplayed, $enclosure, $userId) { + $playtime, $lastplayed, $enclosure, $description, $userId) { $episode = new Episode(); $episode->setId($id); $episode->setImgurl($imgurl); @@ -78,12 +78,13 @@ class EpisodeService { $episode->setPlaytime($playtime); $episode->setLastplayed($lastplayed); $episode->setEnclosure($enclosure); + $episode->setDescription($description); $episode->setUserId($userId); return $this->mapper->insert($episode); } public function update($id, $imgurl, $author, $title, $pubdate, $duration, - $playtime, $lastplayed, $enclosure, $userId) { + $playtime, $lastplayed, $enclosure, $description, $userId) { try { $episode = $this->mapper->find($id, $userId); $episode->setImgurl($imgurl); @@ -94,6 +95,7 @@ class EpisodeService { $episode->setPlaytime($playtime); $episode->setLastplayed($lastplayed); $episode->setEnclosure($enclosure); + $episode->setDescription($description); return $this->mapper->update($episode); } catch (Exception $e) { $this->handleException($e); diff --git a/src/components/Table.vue b/src/components/Table.vue index 2912315a5cbf114b75c74c4a7f86bab04de91b19..cd9ac18d1adfab052e5ccd9fb94dfc7fd8712e24 100644 --- a/src/components/Table.vue +++ b/src/components/Table.vue @@ -42,7 +42,7 @@ v-for="(episode, idx) in episodes" :key="idx"> <td class="iconColumn"> - <div v-lazy:background-image="episode.imgURL" + <div v-lazy:background-image="episode.imgURL || episode.imgurl" class="episodeImage" @click="doPlay(episode)"> <div :class="episodePlaying(episode.id) ? 'pause' : 'play'" /> @@ -96,8 +96,8 @@ <td class="dateColumn" @click="changeRoute(`/browse/show/${episode.podcast_id}/${episode.id}`)"> - <span :title="readableDate(episode.inserted)"> - {{ readableTimeAgo(episode.inserted) }} + <span :title="readableDate(episode.pubdate)"> + {{ readableTimeAgo(episode.pubdate) }} </span> </td> </tr> @@ -165,6 +165,10 @@ export default { episodeDescription = episodeDescription .replace(/\n/g, '') .replace('<br />', '') + .replace('<ul>', ' ') + .replace('<li>', '') + .replace('</ul>', ' ') + .replace('</li>', '') return episodeDescription }, readableDate(datetime) { diff --git a/src/router.js b/src/router.js index 7e39f106f1d5286b1abb740d0706c63aed932225..9c6a9d6780d2fbad74a1b09101cd3503abac4698 100644 --- a/src/router.js +++ b/src/router.js @@ -29,7 +29,7 @@ import BrowseAll from './views/BrowseAll' import Show from './views/Show' import Episode from './views/Episode' import Browse from './views/Browse' -import NotImplemented from './views/NotImplemented' +import Listening from './views/Listening' Vue.use(Router) @@ -43,7 +43,7 @@ const router = new Router({ }, { path: '/listening', - component: NotImplemented, + component: Listening, name: 'LISTENING', }, { diff --git a/src/services/EpisodeApi.js b/src/services/EpisodeApi.js index 6303885e6e8d3bd7e50496a40c6f09d2718f9da3..d4aee08cbaeceedfa8b423cad13921989bc9e48f 100644 --- a/src/services/EpisodeApi.js +++ b/src/services/EpisodeApi.js @@ -35,9 +35,15 @@ export class EpisodeApi { addEpisode(episode) { episode = { id: episode.id, - imgurl: episode.smallImageURL, + imgurl: episode.imgURL, title: episode.title, - author: episode.author, + author: '1084', + pubdate: episode.pubdate, + duration: '1234', + playtime: '', + lastplayed: '', + enclosure: episode.enclosure, + description: episode.description, } axios.defaults.headers.requesttoken = requesttoken return axios.post(this.url('/episodes'), episode) diff --git a/src/store/episode.js b/src/store/episode.js index 2b0899c097f8c2412f66bc2f659f099e9096733d..bd47efbffa7237b19e876f8a0c33315a6404abe3 100644 --- a/src/store/episode.js +++ b/src/store/episode.js @@ -29,7 +29,7 @@ export default { episodes: [], }, getters: { - episodesQueue: state => { + getEpisodes: state => { return state.episodes }, episodeById: state => (id) => { diff --git a/src/store/player.js b/src/store/player.js index 5699b538a7cb3240bbb517e275f254cf6b93ee04..45de344df40cd494241f1bb6a56f8d6b0c52170a 100644 --- a/src/store/player.js +++ b/src/store/player.js @@ -152,6 +152,7 @@ export default { context.commit('setEpisodeId', episode.id) context.commit('setPausing', false) context.commit('setPlaying', true) + context.dispatch('addEpisode', episode) player.doPlay(episode.enclosure) } }, diff --git a/src/views/NotImplemented.vue b/src/views/Listening.vue similarity index 56% rename from src/views/NotImplemented.vue rename to src/views/Listening.vue index 4f292adcce77a69d671b33eca101bf5cd1272b27..087985f509eb868a39e38048043c2112a4845bda 100644 --- a/src/views/NotImplemented.vue +++ b/src/views/Listening.vue @@ -19,23 +19,59 @@ - along with this program. If not, see <http://www.gnu.org/licenses/>. - --> - <template> - <EmptyContent icon="icon-error"> - Error loading site - <template #desc> - Feature not yet implemented - </template> - </EmptyContent> + <div> + <div class="podcastSectionHeader listening"> + <h1>Currently listening</h1> + </div> + <Table + :episodes="episodes" + @doPlay="doPlay" /> + </div> </template> <script> -import EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent' +import Table from '../components/Table' +import { mapGetters, mapActions } from 'vuex' export default { - name: 'NotImplemented', + name: 'Listening', components: { - EmptyContent, + Table, + }, + computed: { + ...mapGetters([ + 'getEpisodes', + 'episodePlaying', + ]), + episodes() { + const list = [ + ...this.getEpisodes, + ] + return list + }, + }, + methods: { + ...mapActions([ + 'pauseEpisode', + 'playEpisode', + ]), + doPlay(episode) { + if (this.episodePlaying(episode.id)) { + this.pauseEpisode() + } else { + this.playEpisode(episode) + } + }, }, } </script> + +<style lang="scss"> + +.listening { + padding-top: 30px; + padding-left: 30px; +} + +</style>