@saooti/octopus-sdk 36.0.11 → 36.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.ts +1 -0
- package/package.json +1 -1
- package/src/components/display/comments/CommentInput.vue +1 -1
- package/src/components/display/list/SwiperList.vue +5 -1
- package/src/components/display/live/LiveItem.vue +1 -1
- package/src/components/display/live/LiveList.vue +5 -3
- package/src/components/display/live/RadioCurrently.vue +22 -14
- package/src/components/display/live/RadioImage.vue +2 -2
- package/src/components/display/live/RadioItem.vue +15 -5
- package/src/components/display/live/RadioList.vue +4 -2
- package/src/components/display/live/RadioPlanning.vue +164 -0
- package/src/components/display/playlist/PlaylistList.vue +1 -1
- package/src/components/display/podcasts/PodcastImage.vue +2 -9
- package/src/components/display/podcasts/PodcastItem.vue +1 -1
- package/src/components/display/podcasts/PodcastSwiperList.vue +1 -1
- package/src/components/display/sharing/ShareButtons.vue +0 -1
- package/src/components/display/sharing/SharePlayer.vue +1 -1
- package/src/components/display/sharing/SharePlayerRadio.vue +10 -10
- package/src/components/mixins/player/playerComment.ts +1 -1
- package/src/components/mixins/player/playerLive.ts +4 -4
- package/src/components/mixins/radio/fetchRadioData.ts +0 -2
- package/src/components/pages/Lives.vue +2 -2
- package/src/components/pages/Playlist.vue +1 -1
- package/src/components/pages/Radio.vue +17 -7
- package/src/locale/fr.ts +3 -0
- package/src/stores/class/general/playlist.ts +2 -2
- package/src/stores/class/general/podcast.ts +0 -1
package/index.ts
CHANGED
|
@@ -13,6 +13,7 @@ export const getHome = () => import("./src/components/pages/Home.vue");
|
|
|
13
13
|
export const getCategory = () => import("./src/components/pages/Category.vue");
|
|
14
14
|
export const getRubrique = () => import("./src/components/pages/Rubrique.vue");
|
|
15
15
|
export const getError403Page = () => import("./src/components/pages/Error403Page.vue");
|
|
16
|
+
export const getRadio = () => import("./src/components/pages/Radio.vue");
|
|
16
17
|
|
|
17
18
|
//Misc
|
|
18
19
|
export const getAccordion = () => import("./src/components/misc/Accordion.vue");
|
package/package.json
CHANGED
|
@@ -244,7 +244,7 @@ export default defineComponent({
|
|
|
244
244
|
if (
|
|
245
245
|
undefined !== this.podcast &&(
|
|
246
246
|
(this.playerPodcast?.podcastId ===this.podcast.podcastId) ||
|
|
247
|
-
(this.playerLive?.
|
|
247
|
+
(this.playerLive?.podcastId ===this.podcast.podcastId))
|
|
248
248
|
) {
|
|
249
249
|
timeline = Math.round(
|
|
250
250
|
this.playerElapsed * this.playerTotal
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
class="d-flex flex-column align-items-start mt-3"
|
|
5
5
|
>
|
|
6
6
|
<div class="d-flex justify-content-between amlign-items-center">
|
|
7
|
-
<h2 class="mb-0 big-h2 mb-3">
|
|
7
|
+
<h2 class="mb-0 big-h2 mb-3">
|
|
8
|
+
{{ $t('Live') }}
|
|
9
|
+
</h2>
|
|
8
10
|
<router-link
|
|
9
11
|
v-if="liveRight && !isPodcastmaker"
|
|
10
12
|
to="/main/priv/edit/live"
|
|
@@ -19,7 +21,7 @@
|
|
|
19
21
|
v-model:textInit="selectedStatus"
|
|
20
22
|
id-select="status-live-chooser-select"
|
|
21
23
|
:label="$t('Selection by status')"
|
|
22
|
-
:
|
|
24
|
+
:display-label="false"
|
|
23
25
|
:options="statusArraySelect"
|
|
24
26
|
class="mb-3"
|
|
25
27
|
/>
|
|
@@ -30,7 +32,7 @@
|
|
|
30
32
|
<template v-if="lives.length">
|
|
31
33
|
<SwiperList
|
|
32
34
|
v-if="!loading"
|
|
33
|
-
:
|
|
35
|
+
:list-object="lives"
|
|
34
36
|
>
|
|
35
37
|
<template #octopusSlide="{option, index}">
|
|
36
38
|
<LiveItem
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="d-flex align-items-center">
|
|
3
|
-
<div
|
|
3
|
+
<div
|
|
4
|
+
v-if="currentlyPlayingString.length || podcastRadio"
|
|
5
|
+
class="me-2 fw-bold"
|
|
6
|
+
>
|
|
7
|
+
{{ $t('Currently') +' : ' }}
|
|
8
|
+
</div>
|
|
4
9
|
<router-link
|
|
5
10
|
v-if="podcastRadio"
|
|
6
11
|
class="d-flex align-items-center"
|
|
@@ -8,18 +13,21 @@
|
|
|
8
13
|
name: 'podcast',
|
|
9
14
|
params: { podcastId: podcastRadio.podcastId },
|
|
10
15
|
query: { productor: filterOrgaId },
|
|
11
|
-
}"
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
</
|
|
22
|
-
|
|
16
|
+
}"
|
|
17
|
+
>
|
|
18
|
+
<img
|
|
19
|
+
v-lazy="proxyImageUrl(podcastRadio.imageUrl, '80')"
|
|
20
|
+
width="80"
|
|
21
|
+
height="80"
|
|
22
|
+
class="small-img-box"
|
|
23
|
+
:title="$t('Episode name image', {name:podcastRadio.title})"
|
|
24
|
+
:alt="$t('Episode name image', {name:podcastRadio.title})"
|
|
25
|
+
>
|
|
26
|
+
<div>{{ podcastRadio.title }}</div>
|
|
27
|
+
</router-link>
|
|
28
|
+
<div v-else-if="currentlyPlayingString.length">
|
|
29
|
+
{{ currentlyPlayingString }}
|
|
30
|
+
</div>
|
|
23
31
|
</div>
|
|
24
32
|
</template>
|
|
25
33
|
|
|
@@ -80,7 +88,7 @@ export default defineComponent({
|
|
|
80
88
|
this.fetchCurrentlyPlaying();
|
|
81
89
|
this.radioInterval = setInterval(() => {
|
|
82
90
|
this.fetchCurrentlyPlaying();
|
|
83
|
-
},
|
|
91
|
+
}, 5000);
|
|
84
92
|
},
|
|
85
93
|
methods: {
|
|
86
94
|
async fetchCurrentlyPlaying(): Promise<void>{
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
class="image-play-button"
|
|
13
13
|
@click="playRadio"
|
|
14
14
|
>
|
|
15
|
-
|
|
15
|
+
<div class="icon-container">
|
|
16
16
|
<div
|
|
17
17
|
v-if="!playingRadio"
|
|
18
18
|
:title="$t('Play')"
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
<div class="ms-2">
|
|
30
30
|
{{ playText }}
|
|
31
31
|
</div>
|
|
32
|
-
|
|
32
|
+
</div>
|
|
33
33
|
</button>
|
|
34
34
|
</div>
|
|
35
35
|
</template>
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
|
|
2
|
+
<div
|
|
3
|
+
v-if="radio"
|
|
4
|
+
class="d-flex border w-100 p-3"
|
|
5
|
+
>
|
|
6
|
+
<RadioImage :radio="radio" />
|
|
4
7
|
<router-link
|
|
5
8
|
:to="{
|
|
6
9
|
name: 'radio',
|
|
@@ -9,9 +12,16 @@
|
|
|
9
12
|
}"
|
|
10
13
|
class="text-dark emission-item-text"
|
|
11
14
|
>
|
|
12
|
-
<div class="emission-name mb-2">
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
<div class="emission-name mb-2">
|
|
16
|
+
{{ radio.name }}
|
|
17
|
+
</div>
|
|
18
|
+
<div
|
|
19
|
+
v-if="radio.description"
|
|
20
|
+
class="ten-line-clamp"
|
|
21
|
+
>
|
|
22
|
+
{{ radio.description }}
|
|
23
|
+
</div>
|
|
24
|
+
<RadioCurrently :radio="radio" />
|
|
15
25
|
</router-link>
|
|
16
26
|
</div>
|
|
17
27
|
</template>
|
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
v-if="(filterOrgaId || organisationId) && radio.length"
|
|
4
4
|
class="d-flex flex-column align-items-start mt-3"
|
|
5
5
|
>
|
|
6
|
-
<h2 class="mb-0 big-h2 mb-3">
|
|
6
|
+
<h2 class="mb-0 big-h2 mb-3">
|
|
7
|
+
{{ $t('Radio') }}
|
|
8
|
+
</h2>
|
|
7
9
|
<template v-if="radio.length">
|
|
8
10
|
<RadioItem
|
|
9
11
|
v-for="radioItem in radio"
|
|
@@ -25,7 +27,7 @@ import { Canal } from '@/stores/class/radio/canal';
|
|
|
25
27
|
import { defineComponent } from 'vue'
|
|
26
28
|
import { AxiosError } from 'axios';
|
|
27
29
|
export default defineComponent({
|
|
28
|
-
name: '
|
|
30
|
+
name: 'Ecbd98d979bd4312Ad5eFc7c1c4a191c',
|
|
29
31
|
components: {
|
|
30
32
|
RadioItem,
|
|
31
33
|
},
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="module-box">
|
|
3
|
+
<h2 class="big-h2 mb-3 height-40">{{ $t('Program') }}</h2>
|
|
4
|
+
<div class="border">
|
|
5
|
+
<div class="d-flex align-items-center w-100">
|
|
6
|
+
<button
|
|
7
|
+
v-for="day in arrayDays"
|
|
8
|
+
:key="day.date"
|
|
9
|
+
class="d-flex flex-column align-items-center flex-grow-1"
|
|
10
|
+
:class="day.date==daySelected?'bg-primary text-white':''"
|
|
11
|
+
@click="changeDate(day.date)"
|
|
12
|
+
>
|
|
13
|
+
<span class="text-capitalize">{{day.dayOfWeek}}</span>
|
|
14
|
+
<span>{{day.title}}</span>
|
|
15
|
+
</button>
|
|
16
|
+
</div>
|
|
17
|
+
<div class="d-flex flex-column p-3">
|
|
18
|
+
<ClassicLoading
|
|
19
|
+
:loading-text="loading?$t('Loading content ...'):undefined"
|
|
20
|
+
:error-text="error?$t(`Error`):undefined"
|
|
21
|
+
/>
|
|
22
|
+
<template v-if="!loading && !error">
|
|
23
|
+
<div v-if="!planning[daySelected].length" class="text-center">{{$t('No programming')}}</div>
|
|
24
|
+
<div
|
|
25
|
+
v-else
|
|
26
|
+
v-for="planningItem in planning[daySelected]"
|
|
27
|
+
:key="planningItem.occurrence.occurrenceId"
|
|
28
|
+
class="d-flex align-items-center mb-3"
|
|
29
|
+
>
|
|
30
|
+
<div class="program-item-date fw-bold flex-shrink-0">{{dateDisplay(planningItem.occurrence.startDate)}}</div>
|
|
31
|
+
<component
|
|
32
|
+
:is="planningItem.podcast.availability.visibility ? 'router-link' : 'div'"
|
|
33
|
+
class="d-flex align-items-center text-dark"
|
|
34
|
+
:to="{
|
|
35
|
+
name: 'podcast',
|
|
36
|
+
params: { podcastId: planningItem.podcast.podcastId },
|
|
37
|
+
query: { productor: filterOrgaId },
|
|
38
|
+
}"
|
|
39
|
+
>
|
|
40
|
+
<img
|
|
41
|
+
v-lazy="proxyImageUrl(planningItem.podcast.imageUrl, '150')"
|
|
42
|
+
width="150"
|
|
43
|
+
height="150"
|
|
44
|
+
class="m-2"
|
|
45
|
+
:title="$t('Episode name image', {name:planningItem.podcast.title})"
|
|
46
|
+
:alt="$t('Episode name image', {name:planningItem.podcast.title})"
|
|
47
|
+
>
|
|
48
|
+
<div class="d-flex flex-column">
|
|
49
|
+
<div class="flex-grow-1 text-truncate mb-2">{{planningItem.occurrence.podcastData.title}}</div>
|
|
50
|
+
<ParticipantDescription
|
|
51
|
+
:participants="planningItem.podcast.animators"
|
|
52
|
+
/>
|
|
53
|
+
</div>
|
|
54
|
+
</component>
|
|
55
|
+
|
|
56
|
+
</div>
|
|
57
|
+
</template>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</template>
|
|
62
|
+
|
|
63
|
+
<script lang="ts">
|
|
64
|
+
import { useFilterStore } from '@/stores/FilterStore';
|
|
65
|
+
import { mapState } from 'pinia';
|
|
66
|
+
import dayjs from 'dayjs';
|
|
67
|
+
import utc from 'dayjs/plugin/utc';
|
|
68
|
+
dayjs.extend(utc);
|
|
69
|
+
import octopusApi from '@saooti/octopus-api';
|
|
70
|
+
import imageProxy from '../../mixins/imageProxy';
|
|
71
|
+
import ParticipantDescription from '../podcasts/ParticipantDescription.vue';
|
|
72
|
+
import ClassicLoading from '../../form/ClassicLoading.vue';
|
|
73
|
+
import { defineComponent } from 'vue';
|
|
74
|
+
import { Canal } from '@/stores/class/radio/canal';
|
|
75
|
+
import { PlanningOccurrence } from '@/stores/class/radio/recurrence';
|
|
76
|
+
import { Podcast } from '@/stores/class/general/podcast';
|
|
77
|
+
export default defineComponent({
|
|
78
|
+
name: 'RadioPlanning',
|
|
79
|
+
|
|
80
|
+
components: {
|
|
81
|
+
ClassicLoading,
|
|
82
|
+
ParticipantDescription
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
props: {
|
|
86
|
+
radio: { default: undefined, type: Object as ()=>Canal},
|
|
87
|
+
},
|
|
88
|
+
|
|
89
|
+
mixins: [imageProxy],
|
|
90
|
+
|
|
91
|
+
data() {
|
|
92
|
+
return {
|
|
93
|
+
planning: {} as {[key: number]:Array<{podcast: Podcast, occurrence: PlanningOccurrence}>},
|
|
94
|
+
daySelected: dayjs().valueOf(),
|
|
95
|
+
arrayDays: [] as Array<{title: string, date: number, dayOfWeek: string }>,
|
|
96
|
+
loading: true as boolean,
|
|
97
|
+
error: false as boolean,
|
|
98
|
+
};
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
computed:{
|
|
102
|
+
...mapState(useFilterStore, ['filterOrgaId']),
|
|
103
|
+
startOfDay(): number{
|
|
104
|
+
return dayjs(this.daySelected).utcOffset(0).startOf('date').valueOf();
|
|
105
|
+
},
|
|
106
|
+
endOfDay(): number{
|
|
107
|
+
return dayjs(this.daySelected).utcOffset(0).endOf('date').valueOf();
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
mounted(){
|
|
112
|
+
this.createArrayDays();
|
|
113
|
+
this.fetchOccurrences();
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
methods: {
|
|
117
|
+
createArrayDays(){
|
|
118
|
+
for (let index = -7; index < 3; index++) {
|
|
119
|
+
const dayToAdd = dayjs().add(index, 'day');
|
|
120
|
+
if(0===index){
|
|
121
|
+
this.daySelected = dayToAdd.valueOf();
|
|
122
|
+
}
|
|
123
|
+
this.arrayDays.push({title: dayToAdd.format('D/MM'), dayOfWeek:dayToAdd.format('dddd'), date : dayToAdd.valueOf()});
|
|
124
|
+
}
|
|
125
|
+
},
|
|
126
|
+
async fetchOccurrences(): Promise<void>{
|
|
127
|
+
if(this.planning[this.daySelected]){return;}
|
|
128
|
+
this.loading = true;
|
|
129
|
+
this.error = false;
|
|
130
|
+
try {
|
|
131
|
+
const occurrences = await octopusApi.fetchDataWithParams<Array<PlanningOccurrence>>( 14, 'planning/occurrence/list',{
|
|
132
|
+
canalId: this.radio?.id,
|
|
133
|
+
from: this.startOfDay,
|
|
134
|
+
to: this.endOfDay
|
|
135
|
+
});
|
|
136
|
+
this.planning[this.daySelected] = [];
|
|
137
|
+
for (let oc of occurrences) {
|
|
138
|
+
if(oc.podcastId){
|
|
139
|
+
const data : Podcast = await octopusApi.fetchData<Podcast>(0, 'podcast/'+oc.podcastId);
|
|
140
|
+
this.planning[this.daySelected].push({podcast: data, occurrence:oc});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
} catch {
|
|
144
|
+
this.error = true;
|
|
145
|
+
}
|
|
146
|
+
this.loading = false;
|
|
147
|
+
},
|
|
148
|
+
changeDate(date: number){
|
|
149
|
+
this.daySelected = date;
|
|
150
|
+
this.fetchOccurrences();
|
|
151
|
+
},
|
|
152
|
+
dateDisplay(date: Date): string{
|
|
153
|
+
return dayjs(date).format('HH:mm:ss');
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
})
|
|
157
|
+
</script>
|
|
158
|
+
<style lang="scss">
|
|
159
|
+
.octopus-app{
|
|
160
|
+
.program-item-date{
|
|
161
|
+
width: 100px;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
</style>
|
|
@@ -266,14 +266,7 @@ export default defineComponent({
|
|
|
266
266
|
if (!this.recordingLive) {
|
|
267
267
|
this.playerPlay(this.podcast);
|
|
268
268
|
}else{
|
|
269
|
-
this.playerPlay({
|
|
270
|
-
title: this.podcast.title,
|
|
271
|
-
audioUrl: this.podcast.audioUrl,
|
|
272
|
-
duration: this.podcast.duration,
|
|
273
|
-
conferenceId: this.fetchConference?.conferenceId,
|
|
274
|
-
livePodcastId: this.podcast.podcastId,
|
|
275
|
-
organisation: this.podcast.organisation,
|
|
276
|
-
});
|
|
269
|
+
this.playerPlay({...this.podcast, ...{conferenceId:this.fetchConference?.conferenceId}});
|
|
277
270
|
}
|
|
278
271
|
if(this.clickPlayGoPage){
|
|
279
272
|
this.$router.push('/main/pub/podcast/'+this.podcast.podcastId);
|
|
@@ -322,7 +315,7 @@ export default defineComponent({
|
|
|
322
315
|
background-color: rgba(255, 255, 255, 0.5);
|
|
323
316
|
}
|
|
324
317
|
|
|
325
|
-
.play-button-error-icon {
|
|
318
|
+
.image-play-button .play-button-error-icon {
|
|
326
319
|
background: #0000009d !important;
|
|
327
320
|
cursor: default !important;
|
|
328
321
|
align-self: center;
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
:hide-play="!podcastItemDescription || (podcastItemDescription && (!hoverDesc || !description))"
|
|
13
13
|
:display-description="0!==description.length && podcastItemDescription"
|
|
14
14
|
:arrow-direction="arrowDirection"
|
|
15
|
-
:
|
|
15
|
+
:fetch-conference="fetchConference"
|
|
16
16
|
@hideDescription="hideDescription"
|
|
17
17
|
@showDescription="showDescription"
|
|
18
18
|
/>
|
|
@@ -41,7 +41,6 @@ import Popover from '../../misc/Popover.vue';
|
|
|
41
41
|
import ShareButtonsIntern from './ShareButtonsIntern.vue';
|
|
42
42
|
import { defineComponent } from 'vue';
|
|
43
43
|
import { Playlist } from '@/stores/class/general/playlist';
|
|
44
|
-
import { Canal } from '@/stores/class/radio/canal';
|
|
45
44
|
export default defineComponent({
|
|
46
45
|
components: {
|
|
47
46
|
ShareButtonsIntern,
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
<h2 class="big-h2 mb-3 height-40">
|
|
4
4
|
{{ $t('Embed') }}
|
|
5
5
|
</h2>
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
6
|
+
<div class="d-flex">
|
|
7
|
+
<iframe
|
|
8
|
+
id="miniplayerIframeRadio"
|
|
9
|
+
title="miniplayer"
|
|
10
|
+
:src="iFrameSrc"
|
|
11
|
+
width="100%"
|
|
12
|
+
height="140px"
|
|
13
|
+
class="max-iframe mx-3 flex-grow-1"
|
|
14
|
+
/>
|
|
15
|
+
<div class="d-flex flex-column flex-grow-1 align-items-center">
|
|
16
16
|
<SharePlayerColors
|
|
17
17
|
v-model:color="color"
|
|
18
18
|
v-model:theme="theme"
|
|
@@ -70,7 +70,7 @@ export const playerComment = defineComponent({
|
|
|
70
70
|
podcastId = this.playerPodcast.podcastId;
|
|
71
71
|
organisation = this.playerPodcast.organisation.id;
|
|
72
72
|
} else if (this.playerLive) {
|
|
73
|
-
podcastId = this.playerLive.
|
|
73
|
+
podcastId = this.playerLive.podcastId;
|
|
74
74
|
organisation = this.playerLive.organisation.id;
|
|
75
75
|
}
|
|
76
76
|
if (
|
|
@@ -61,17 +61,17 @@ export const playerLive = defineComponent({
|
|
|
61
61
|
}
|
|
62
62
|
},
|
|
63
63
|
async initLiveDownloadId(){
|
|
64
|
-
if(!this.playerLive){ return;}
|
|
65
|
-
let downloadId = null;
|
|
64
|
+
if(!this.playerLive || this.downloadId){ return;}
|
|
66
65
|
try {
|
|
67
|
-
downloadId = await octopusApi.putDataPublic<string | null>(0, 'podcast/prepare/live/'+this.playerLive.
|
|
68
|
-
await octopusApi.fetchDataPublicWithParams<string | null>(0,'podcast/download/live/' +
|
|
66
|
+
let downloadId = await octopusApi.putDataPublic<string | null>(0, 'podcast/prepare/live/'+this.playerLive.podcastId, undefined);
|
|
67
|
+
await octopusApi.fetchDataPublicWithParams<string | null>(0,'podcast/download/live/' +this.playerLive.podcastId +".m3u8",{
|
|
69
68
|
'downloadId': null!==downloadId ? downloadId : undefined,
|
|
70
69
|
'origin':'octopus',
|
|
71
70
|
'distributorId':this.authOrgaId
|
|
72
71
|
});
|
|
73
72
|
this.setDownloadId(downloadId);
|
|
74
73
|
} catch (error) {
|
|
74
|
+
this.downloadId = null;
|
|
75
75
|
console.log('ERROR downloadId');
|
|
76
76
|
}
|
|
77
77
|
this.hlsReady = true;
|
|
@@ -20,8 +20,6 @@ export const fetchRadioData = defineComponent({
|
|
|
20
20
|
for(let i = 0; i < arrayMetadata.length; i++){
|
|
21
21
|
if(dayjs().valueOf()-29000 > dayjs(arrayMetadata[i].startDate).valueOf()){
|
|
22
22
|
if(previousTitle !== arrayMetadata[i].title){
|
|
23
|
-
//todo
|
|
24
|
-
arrayMetadata[i].podcastId = 98619;
|
|
25
23
|
if(arrayMetadata[i].podcastId){
|
|
26
24
|
const data : Podcast = await octopusApi.fetchData<Podcast>(0, 'podcast/'+arrayMetadata[i].podcastId);
|
|
27
25
|
callbackMetadata(arrayMetadata[i], data);
|
|
@@ -105,7 +105,7 @@ export default defineComponent({
|
|
|
105
105
|
return this.playlistRadio ? this.$t('Mix of episodes'):this.$t('Playlist');
|
|
106
106
|
},
|
|
107
107
|
playlistRadio(): boolean{
|
|
108
|
-
return "AMBIANCE"===this.playlist?.
|
|
108
|
+
return "AMBIANCE"===this.playlist?.ambianceType || "AMBIANCE_PROGRAMMED"===this.playlist?.ambianceType
|
|
109
109
|
},
|
|
110
110
|
name(): string {
|
|
111
111
|
return this.playlist?.title ??'';
|
|
@@ -10,25 +10,33 @@
|
|
|
10
10
|
:style="backgroundDisplay"
|
|
11
11
|
/>
|
|
12
12
|
</div>
|
|
13
|
-
<div
|
|
13
|
+
<div
|
|
14
|
+
v-if="radio"
|
|
15
|
+
class="d-flex flex-column page-element"
|
|
16
|
+
>
|
|
14
17
|
<div class="module-box">
|
|
15
18
|
<div class="mb-5 descriptionText">
|
|
16
|
-
<RadioImage :radio="radio"/>
|
|
19
|
+
<RadioImage :radio="radio" />
|
|
17
20
|
<h2>{{ radio.name }}</h2>
|
|
18
|
-
<div v-if="radio.description">
|
|
21
|
+
<div v-if="radio.description">
|
|
22
|
+
{{ radio.description }}
|
|
23
|
+
</div>
|
|
19
24
|
</div>
|
|
20
|
-
<RadioCurrently :radio="radio"/>
|
|
25
|
+
<RadioCurrently :radio="radio" />
|
|
21
26
|
<EditBoxRadio
|
|
22
27
|
v-if="editRight"
|
|
23
28
|
:radio="radio"
|
|
24
29
|
/>
|
|
25
30
|
</div>
|
|
26
|
-
|
|
31
|
+
<RadioPlanning
|
|
32
|
+
:radio="radio"
|
|
33
|
+
/>
|
|
34
|
+
<SharePlayerRadio
|
|
27
35
|
v-if="authenticated"
|
|
28
36
|
:canal="radio"
|
|
29
37
|
:organisation-id="myOrganisationId"
|
|
30
38
|
/>
|
|
31
|
-
<ShareButtons/>
|
|
39
|
+
<ShareButtons />
|
|
32
40
|
</div>
|
|
33
41
|
</template>
|
|
34
42
|
<ClassicLoading
|
|
@@ -54,6 +62,7 @@ const ShareButtons = defineAsyncComponent(() => import('../display/sharing/Share
|
|
|
54
62
|
const EditBoxRadio = defineAsyncComponent(() => import('@/components/display/edit/EditBoxRadio.vue'));
|
|
55
63
|
const RadioCurrently = defineAsyncComponent(() => import('../display/live/RadioCurrently.vue'));
|
|
56
64
|
const RadioImage = defineAsyncComponent(() => import('../display/live/RadioImage.vue'));
|
|
65
|
+
const RadioPlanning = defineAsyncComponent(() => import('../display/live/RadioPlanning.vue'));
|
|
57
66
|
export default defineComponent({
|
|
58
67
|
components: {
|
|
59
68
|
SharePlayerRadio,
|
|
@@ -61,7 +70,8 @@ export default defineComponent({
|
|
|
61
70
|
EditBoxRadio,
|
|
62
71
|
ClassicLoading,
|
|
63
72
|
RadioCurrently,
|
|
64
|
-
RadioImage
|
|
73
|
+
RadioImage,
|
|
74
|
+
RadioPlanning
|
|
65
75
|
},
|
|
66
76
|
mixins: [displayMethods, handle403, orgaComputed, imageProxy],
|
|
67
77
|
props: {
|
package/src/locale/fr.ts
CHANGED
|
@@ -4,7 +4,7 @@ import { FetchParam } from './fetchParam';
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
export interface Playlist {
|
|
7
|
-
|
|
7
|
+
ambianceType?: string; //#11919 "NONE", "AMBIANCE", "PROGRAMMED"
|
|
8
8
|
imageUrl?: string;
|
|
9
9
|
description: string;
|
|
10
10
|
organisation?: Organisation;
|
|
@@ -19,7 +19,7 @@ export interface Playlist {
|
|
|
19
19
|
|
|
20
20
|
export function emptyPlaylistData(): Playlist{
|
|
21
21
|
return {
|
|
22
|
-
|
|
22
|
+
ambianceType:"NONE",
|
|
23
23
|
description: '',
|
|
24
24
|
playlistId: 0,
|
|
25
25
|
podcasts: undefined,
|