@saooti/octopus-sdk 36.0.9 → 36.0.11

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.
Files changed (48) hide show
  1. package/package.json +1 -1
  2. package/public/img/tempRadio.jpg +0 -0
  3. package/src/assets/general.scss +9 -0
  4. package/src/assets/iframe.scss +11 -0
  5. package/src/assets/share.scss +38 -0
  6. package/src/assets/transition.scss +2 -3
  7. package/src/components/display/edit/EditBoxRadio.vue +11 -0
  8. package/src/components/display/list/SwiperList.vue +109 -0
  9. package/src/components/display/live/LiveItem.vue +26 -242
  10. package/src/components/display/live/LiveList.vue +111 -189
  11. package/src/components/display/live/RadioCurrently.vue +108 -0
  12. package/src/components/display/live/RadioImage.vue +84 -0
  13. package/src/components/display/live/RadioItem.vue +44 -0
  14. package/src/components/display/live/RadioList.vue +72 -0
  15. package/src/components/display/playlist/PlaylistList.vue +1 -0
  16. package/src/components/display/podcasts/PodcastImage.vue +15 -48
  17. package/src/components/display/podcasts/PodcastItem.vue +3 -0
  18. package/src/components/display/podcasts/PodcastSwiperList.vue +9 -80
  19. package/src/components/display/sharing/ShareButtons.vue +1 -0
  20. package/src/components/display/sharing/SharePlayer.vue +2 -10
  21. package/src/components/display/sharing/SharePlayerColors.vue +1 -1
  22. package/src/components/display/sharing/SharePlayerRadio.vue +102 -0
  23. package/src/components/misc/LeftMenu.vue +1 -1
  24. package/src/components/misc/ProgressBar.vue +4 -0
  25. package/src/components/misc/TopBar.vue +1 -1
  26. package/src/components/misc/modal/ShareModalPlayer.vue +2 -2
  27. package/src/components/misc/player/PlayerCompact.vue +1 -0
  28. package/src/components/mixins/player/playerDisplay.ts +27 -10
  29. package/src/components/mixins/radio/fetchRadioData.ts +47 -0
  30. package/src/components/pages/Lives.vue +22 -48
  31. package/src/components/pages/Playlist.vue +9 -2
  32. package/src/components/pages/Radio.vue +112 -0
  33. package/src/locale/de.ts +8 -3
  34. package/src/locale/en.ts +10 -5
  35. package/src/locale/es.ts +8 -3
  36. package/src/locale/fr.ts +10 -5
  37. package/src/locale/it.ts +8 -3
  38. package/src/locale/sl.ts +8 -3
  39. package/src/router/router.ts +10 -0
  40. package/src/stores/ParamSdkStore.ts +12 -12
  41. package/src/stores/PlayerStore.ts +8 -0
  42. package/src/stores/class/general/player.ts +9 -7
  43. package/src/stores/class/general/playlist.ts +2 -0
  44. package/src/stores/class/radio/canal.ts +9 -0
  45. package/src/stores/class/radio/live.ts +34 -0
  46. package/src/stores/class/radio/mix.ts +23 -0
  47. package/src/stores/class/radio/playlistMedia.ts +10 -0
  48. package/src/stores/class/radio/recurrence.ts +76 -0
@@ -1,33 +1,22 @@
1
1
  <template>
2
2
  <div class="page-box">
3
- <div class="d-flex flex-column align-items-center mb-3">
4
- <h1>{{ $t('In live') }}</h1>
5
- <template v-if="!isPodcastmaker">
6
- <router-link
7
- v-if="liveRight && filterOrgaId"
8
- to="/main/priv/edit/live"
9
- >
10
- <button class="btn btn-primary">
11
- {{ $t('Launch a new live') }}
12
- </button>
13
- </router-link>
14
- <template v-else>
15
- <div class="align-self-start fw-bold mb-2">
16
- {{ $t('Please chose a productor') }}
17
- </div>
18
- <OrganisationChooser
19
- :defaultanswer="$t('Please chose a productor')"
20
- @selected="onOrganisationSelected"
21
- />
22
- </template>
23
- </template>
24
- </div>
25
- <LiveList
26
- v-if="filterOrgaId || organisationId"
27
- :conference-watched="conferenceWatched"
28
- :organisation-id="organisationId"
29
- @initConferenceIds="initConferenceIds"
30
- />
3
+ <template v-if="!filterOrgaId && !organisationId && !isPodcastmaker">
4
+ <div class="align-self-start fw-bold mb-2">
5
+ {{ $t('Please chose a productor') }}
6
+ </div>
7
+ <OrganisationChooser
8
+ :defaultanswer="$t('Please chose a productor')"
9
+ @selected="onOrganisationSelected"
10
+ />
11
+ </template>
12
+ <template v-if="filterOrgaId || organisationId">
13
+ <!-- <LiveList
14
+ :organisation-id="organisationId"
15
+ /> -->
16
+ <RadioList
17
+ :organisation-id="organisationId"
18
+ />
19
+ </template>
31
20
  </div>
32
21
  </template>
33
22
 
@@ -35,35 +24,26 @@
35
24
  import { state } from '../../stores/ParamSdkStore';
36
25
  import { Organisation } from '@/stores/class/general/organisation';
37
26
  import { defineComponent, defineAsyncComponent } from 'vue';
38
- import { Conference } from '@/stores/class/conference/conference';
39
- import { useAuthStore } from '@/stores/AuthStore';
40
27
  import { useFilterStore } from '@/stores/FilterStore';
41
28
  import { mapState } from 'pinia';
42
29
  const LiveList = defineAsyncComponent(() => import('../display/live/LiveList.vue'));
30
+ const RadioList = defineAsyncComponent(() => import('../display/live/RadioList.vue'));
43
31
  const OrganisationChooser = defineAsyncComponent(() => import('../display/organisation/OrganisationChooser.vue'));
44
32
  export default defineComponent({
45
33
  components: {
46
34
  LiveList,
35
+ RadioList,
47
36
  OrganisationChooser,
48
37
  },
49
38
  props: {
50
- conferenceWatched: { default: () => [], type: Array as ()=>Array<{conferenceId:number,interval:ReturnType<typeof setTimeout>|undefined, status:string}>},
51
39
  organisationId: { default: undefined, type: String },
52
40
  productor:{default:undefined, type: String}
53
41
  },
54
- emits: ['update:organisationId', 'initConferenceIds'],
55
- data() {
56
- return {
57
- live: true as boolean,
58
- };
59
- },
60
-
42
+ emits: ['update:organisationId'],
43
+
61
44
  computed: {
62
45
  ...mapState(useFilterStore, ['filterOrgaId']),
63
- ...mapState(useAuthStore, ['authOrganisation']),
64
- liveRight(): boolean {
65
- return (state.generalParameters.isRoleLive as boolean)&& this.live;
66
- },
46
+
67
47
  isPodcastmaker(): boolean {
68
48
  return (state.generalParameters.podcastmaker as boolean);
69
49
  },
@@ -74,14 +54,8 @@ export default defineComponent({
74
54
  } else if (this.filterOrgaId) {
75
55
  this.$emit('update:organisationId',this.filterOrgaId);
76
56
  }
77
- if (!this.authOrganisation.attributes?.['live.active']) {
78
- this.live = false;
79
- }
80
57
  },
81
58
  methods: {
82
- initConferenceIds(listIds: Array<Conference>): void {
83
- this.$emit('initConferenceIds', listIds);
84
- },
85
59
  onOrganisationSelected(organisation: Organisation|undefined): void {
86
60
  this.$emit('update:organisationId', organisation?.id);
87
61
  },
@@ -5,7 +5,7 @@
5
5
  >
6
6
  <div class="page-element-title-container">
7
7
  <div class="page-element-title">
8
- <h1>{{ $t('Playlist') }}</h1>
8
+ <h1>{{ pageTitle }}</h1>
9
9
  </div>
10
10
  <div
11
11
  class="page-element-bg"
@@ -101,6 +101,12 @@ export default defineComponent({
101
101
  isSharePlayer: (state.podcastPage.SharePlayer as boolean),
102
102
  };
103
103
  },
104
+ pageTitle(): string{
105
+ return this.playlistRadio ? this.$t('Mix of episodes'):this.$t('Playlist');
106
+ },
107
+ playlistRadio(): boolean{
108
+ return "AMBIANCE"===this.playlist?.ambiance || "PROGRAMMED"===this.playlist?.ambiance
109
+ },
104
110
  name(): string {
105
111
  return this.playlist?.title ??'';
106
112
  },
@@ -141,7 +147,8 @@ export default defineComponent({
141
147
  this.loaded = false;
142
148
  this.error = false;
143
149
  this.playlist = await octopusApi.fetchData<Playlist>(0, 'playlist/'+this.playlistId);
144
- if("PUBLIC"!==this.playlist.organisation?.privacy && this.filterOrgaId!==this.playlist.organisation?.id){
150
+ if((!this.editRight && this.playlistRadio) ||
151
+ ("PUBLIC"!==this.playlist.organisation?.privacy && this.filterOrgaId!==this.playlist.organisation?.id)){
145
152
  this.initError();
146
153
  return;
147
154
  }
@@ -0,0 +1,112 @@
1
+ <template>
2
+ <div class="page-box">
3
+ <template v-if="loaded && !error">
4
+ <div class="page-element-title-container">
5
+ <div class="page-element-title">
6
+ <h1>{{ $t('Radio') }}</h1>
7
+ </div>
8
+ <div
9
+ class="page-element-bg"
10
+ :style="backgroundDisplay"
11
+ />
12
+ </div>
13
+ <div v-if="radio" class="d-flex flex-column page-element">
14
+ <div class="module-box">
15
+ <div class="mb-5 descriptionText">
16
+ <RadioImage :radio="radio"/>
17
+ <h2>{{ radio.name }}</h2>
18
+ <div v-if="radio.description">{{radio.description}}</div>
19
+ </div>
20
+ <RadioCurrently :radio="radio"/>
21
+ <EditBoxRadio
22
+ v-if="editRight"
23
+ :radio="radio"
24
+ />
25
+ </div>
26
+ <SharePlayerRadio
27
+ v-if="authenticated"
28
+ :canal="radio"
29
+ :organisation-id="myOrganisationId"
30
+ />
31
+ <ShareButtons/>
32
+ </div>
33
+ </template>
34
+ <ClassicLoading
35
+ :loading-text="!loaded?$t('Loading content ...'):undefined"
36
+ :error-text="error?$t(`Emission doesn't exist`):undefined"
37
+ />
38
+ </div>
39
+ </template>
40
+
41
+ <script lang="ts">
42
+ import octopusApi from '@saooti/octopus-api';
43
+ import { state } from '../../stores/ParamSdkStore';
44
+ import displayMethods from '../mixins/displayMethods';
45
+ import imageProxy from '../mixins/imageProxy';
46
+ import { orgaComputed } from '../mixins/orgaComputed';
47
+ import { handle403 } from '../mixins/handle403';
48
+ import ClassicLoading from '../form/ClassicLoading.vue';
49
+ import { defineComponent, defineAsyncComponent } from 'vue';
50
+ import { AxiosError } from 'axios';
51
+ import { Canal } from '@/stores/class/radio/canal';
52
+ const SharePlayerRadio = defineAsyncComponent(() => import('../display/sharing/SharePlayerRadio.vue'));
53
+ const ShareButtons = defineAsyncComponent(() => import('../display/sharing/ShareButtons.vue'));
54
+ const EditBoxRadio = defineAsyncComponent(() => import('@/components/display/edit/EditBoxRadio.vue'));
55
+ const RadioCurrently = defineAsyncComponent(() => import('../display/live/RadioCurrently.vue'));
56
+ const RadioImage = defineAsyncComponent(() => import('../display/live/RadioImage.vue'));
57
+ export default defineComponent({
58
+ components: {
59
+ SharePlayerRadio,
60
+ ShareButtons,
61
+ EditBoxRadio,
62
+ ClassicLoading,
63
+ RadioCurrently,
64
+ RadioImage
65
+ },
66
+ mixins: [displayMethods, handle403, orgaComputed, imageProxy],
67
+ props: {
68
+ canalId: { default: undefined, type: Number},
69
+ },
70
+ emits: ['radioTitle'],
71
+
72
+ data() {
73
+ return {
74
+ loaded: false as boolean,
75
+ radio: undefined as Canal | undefined,
76
+ error: false as boolean,
77
+ };
78
+ },
79
+
80
+ computed: {
81
+ editRight(): boolean {
82
+ return (true===this.authenticated && this.myOrganisationId === this.radio?.organisationId) ||
83
+ true===state.generalParameters.isAdmin
84
+ },
85
+ backgroundDisplay():string{
86
+ return !this.radio? "": `background-image: url('${this.radio.imageUrl}');`;
87
+ },
88
+ },
89
+ watch: {
90
+ canalId: {
91
+ immediate: true,
92
+ handler() {
93
+ this.getRadioDetails();
94
+ },
95
+ },
96
+ },
97
+ methods: {
98
+ async getRadioDetails(): Promise<void> {
99
+ this.loaded = false;
100
+ this.error = false;
101
+ try {
102
+ this.radio = await octopusApi.fetchData<Canal>(14,'canal/'+this.canalId);
103
+ this.$emit('radioTitle', this.radio.name);
104
+ } catch(error) {
105
+ this.handle403((error as AxiosError));
106
+ this.error = true;
107
+ }
108
+ this.loaded = true;
109
+ },
110
+ },
111
+ })
112
+ </script>
package/src/locale/de.ts CHANGED
@@ -218,11 +218,8 @@ export default{
218
218
  'Open studio': "Studio frei",
219
219
  'Episode record in live': "Live-Aufnahme",
220
220
  'In a moment': "Gleich verfügbar",
221
- 'Live to be': "In Kürze verfügbar",
222
- 'Live terminated': "Live-Übertragung beendet",
223
221
  'Next live date': "Die nächste Live-Übertragung ist am {date}.",
224
222
  'Not recording': "Nicht aufgezeichnet",
225
- 'This live is not started yet': "Live-Übertragung hat noch nicht begonnen",
226
223
  'A live can start any moment': "Live-Übertragung beginnt gleich",
227
224
  'Recorded in live': "Live-Aufnahme",
228
225
  'Podcast linked to waiting live': "Podcast ist mit geplanter Live-Übertragung verbunden",
@@ -317,4 +314,12 @@ export default{
317
314
  "QR Code":"QR-Code",
318
315
  "Rss feed": "RSS-Feed",
319
316
  "Multiselect max options":"Maximal {max} gleichzeitige Optionen. Bitte entfernen Sie zuerst eine Option, um eine neue auswählen zu können",
317
+ "Mix of episodes":"Mischung aus Episoden",
318
+ "Radio & Live":"Radio & Live",
319
+ "Selection by status":"Auswahl nach Status",
320
+ "All lives":"Alle Leben",
321
+ 'In debriefing': 'In der Nachbesprechung',
322
+ 'In the process of being published': 'Im Prozess der Veröffentlichung',
323
+ "Radio":"Radio",
324
+ "Currently":"Momentan",
320
325
  }
package/src/locale/en.ts CHANGED
@@ -198,8 +198,8 @@ export default{
198
198
  'Launch a new live': 'Create a new live',
199
199
  'Loading lives...': 'Loading lives...',
200
200
  'No live currently': "No lives currently available",
201
- 'live upcoming': 'live will start any minute',
202
- "live in few time":"live in the near future",
201
+ 'live upcoming': 'Live will start any minute',
202
+ "live in few time":"Live in the near future",
203
203
  Debriefing: 'Debriefing',
204
204
  Publishing: 'Publishing',
205
205
  'select productor': 'Select Producer',
@@ -218,11 +218,8 @@ export default{
218
218
  'Open studio': 'Open studio',
219
219
  'Episode record in live': 'Episode recorded in live',
220
220
  'In a moment': 'In a moment',
221
- 'Live to be': 'Coming soon',
222
- 'Live terminated': 'Live terminated',
223
221
  'Next live date': 'The next live will be at {date}',
224
222
  'Not recording': 'Not recorded',
225
- 'This live is not started yet': "This live has not started yet",
226
223
  'A live can start any moment': 'A live can start any moment',
227
224
  'Recorded in live': 'Recorded in live',
228
225
  'Podcast linked to waiting live': 'Podcast linked to an awaiting live',
@@ -324,4 +321,12 @@ export default{
324
321
  "QR Code":"QR Code",
325
322
  "Rss feed": "Rss feed",
326
323
  "Multiselect max options":"Maximum of {max} concurrent options. Please first remove an option to be able to select a new one",
324
+ "Mix of episodes":"Mix of episodes",
325
+ "Radio & Live":"Radio & Live",
326
+ "Selection by status":"Selection by status",
327
+ "All lives":"All lives",
328
+ 'In debriefing': 'In debriefing',
329
+ 'In the process of being published': 'In the process of being published',
330
+ "Radio":"Radio",
331
+ "Currently":"Currently",
327
332
  };
package/src/locale/es.ts CHANGED
@@ -218,11 +218,8 @@ export default{
218
218
  'Open studio': 'Estudio abierto',
219
219
  'Episode record in live': 'Episodio grabado en directo',
220
220
  'In a moment': 'En breves instantes',
221
- 'Live to be': 'Próximamente',
222
- 'Live terminated': 'La retransmisión en directo ha terminado',
223
221
  'Next live date': 'El próximo directo será el {date}',
224
222
  'Not recording': 'Grabación no disponible',
225
- 'This live is not started yet': "La retransmisión en directo no ha comenzado todavía",
226
223
  'A live can start any moment': 'Una retransmisión en directo podría comenzar en breves instantes',
227
224
  'Recorded in live': 'Grabación en directo',
228
225
  'Podcast linked to waiting live': 'Pódcast pendiente de una próxima retransmisión en directo',
@@ -317,4 +314,12 @@ export default{
317
314
  "QR Code":"Código QR",
318
315
  "Rss feed": "RSS Feed",
319
316
  "Multiselect max options":"Máximo de {max} opciones simultáneas. Primero elimine una opción para poder seleccionar una nueva",
317
+ "Mix of episodes":"Mezcla de episodios",
318
+ "Radio & Live":"Radio & En vivo",
319
+ "Selection by status":"Selección por estado",
320
+ "All lives":"Todas los en vivo",
321
+ 'In debriefing': 'En debriefing',
322
+ 'In the process of being published': 'En proceso de publicación',
323
+ "Radio":"Radio",
324
+ "Currently":"Actualmente",
320
325
  }
package/src/locale/fr.ts CHANGED
@@ -198,8 +198,8 @@ export default{
198
198
  'Launch a new live': 'Programmer un nouveau live',
199
199
  'Loading lives...': 'Chargement des lives...',
200
200
  'No live currently': "Il n'y a aucun live actuellement",
201
- 'live upcoming': 'live imminent',
202
- "live in few time":"live à venir",
201
+ 'live upcoming': 'Live imminent',
202
+ "live in few time":"Live à venir",
203
203
  Debriefing: 'Debriefing',
204
204
  Publishing: 'Publication',
205
205
  'select productor': 'Choisir un producteur',
@@ -218,11 +218,8 @@ export default{
218
218
  'Open studio': 'Studio ouvert',
219
219
  'Episode record in live': 'Réalisé en live',
220
220
  'In a moment': 'Dans quelques instants',
221
- 'Live to be': 'À venir',
222
- 'Live terminated': 'Terminés',
223
221
  'Next live date': 'Le prochain live sera le {date}',
224
222
  'Not recording': 'Non enregistré',
225
- 'This live is not started yet': "Ce live n'a pas encore démarré",
226
223
  'A live can start any moment': 'Un live peut démarrer de manière imminente',
227
224
  'Recorded in live': 'Enregistré en live',
228
225
  'Podcast linked to waiting live': 'Épisode associé à un live en attente',
@@ -324,4 +321,12 @@ export default{
324
321
  "QR Code":"QR Code",
325
322
  "Rss feed": "Flux RSS",
326
323
  "Multiselect max options":"Maximum de {max} options simultanées. Veuillez dans un premier temps retirer une option pour pouvoir en sélectionner une nouvelle",
324
+ "Mix of episodes":"Mix d'épisodes",
325
+ "Radio & Live":"Radio & Live",
326
+ "Selection by status":"Sélection par status",
327
+ "All lives":"Tous les lives",
328
+ 'In debriefing': 'En debriefing',
329
+ 'In the process of being published': 'En cours de publication',
330
+ "Radio":"Radio",
331
+ "Currently":"Actuellement",
327
332
  };
package/src/locale/it.ts CHANGED
@@ -214,11 +214,8 @@ export default{
214
214
  'Open studio': 'Open studio',
215
215
  'Episode record in live': 'Episodio registrato live',
216
216
  'In a moment': 'Tra poco',
217
- 'Live to be': 'Presto disponibile',
218
- 'Live terminated': 'Live terminato',
219
217
  'Next live date': 'Il prossimo live è previsto il {date}',
220
218
  'Not recording': 'Non registrato',
221
- 'This live is not started yet': "Questo live non è ancora iniziato",
222
219
  'A live can start any moment': 'Una sessione live può iniziare presto',
223
220
  'Recorded in live': 'Registrato live',
224
221
  'Podcast linked to waiting live': 'Podcast collegato a un live in attesa',
@@ -314,4 +311,12 @@ export default{
314
311
  "QR Code":"QR Code",
315
312
  "Rss feed": "RSS Feed",
316
313
  "Multiselect max options":"Massimo di {max} opzioni simultanee. Per prima cosa rimuovi un'opzione per poterne selezionare una nuova",
314
+ "Mix of episodes":"Mix di episodi",
315
+ "Radio & Live":"Radio & Diretta",
316
+ "Selection by status":"Selezione per stato",
317
+ "All lives":"Tutte los dirretos",
318
+ 'In debriefing': 'In debriefing',
319
+ 'In the process of being published': 'In corso di pubblicazione',
320
+ "Radio":"Radio",
321
+ "Currently":"Attualmente",
317
322
  };
package/src/locale/sl.ts CHANGED
@@ -218,11 +218,8 @@ export default{
218
218
  'Open studio': 'Studio odprt',
219
219
  'Episode record in live': 'Posnetek prenosa v živo',
220
220
  'In a moment': 'Na voljo takoj',
221
- 'Live to be': 'Kmalu',
222
- 'Live terminated': 'Prenos v živo prekinjen',
223
221
  'Next live date': 'Naslednji prenos v živo bo {date}',
224
222
  'Not recording': 'Ni posneto',
225
- 'This live is not started yet': "Prenos v živo se še ni začel",
226
223
  'A live can start any moment': 'Prenos v živo se bo začel čez nekaj trenutkov',
227
224
  'Recorded in live': 'Posnetek prenosa v živo',
228
225
  'Podcast linked to waiting live': 'Podkast prihodnjega prenosa v živo',
@@ -317,4 +314,12 @@ export default{
317
314
  "QR Code":"koda QR",
318
315
  "Rss feed": "Rss vir",
319
316
  "Multiselect max options":"Največ {max} sočasnih možnosti. Najprej odstranite možnost, da boste lahko izbrali novo",
317
+ "Mix of episodes":"Mešanica epizod",
318
+ "Radio & Live":"Radio & v živo",
319
+ "Selection by status":"Izbira po statusu",
320
+ "All lives":"Vsa življenja",
321
+ 'In debriefing': 'Pri poročanju',
322
+ 'In the process of being published': 'V postopku objave',
323
+ "Radio":"Radio",
324
+ "Currently":"Trenutno",
320
325
  }
@@ -19,6 +19,7 @@ const PlaylistPage = () => import('@/components/pages/Playlist.vue');
19
19
  const PlaylistsPage = () => import('@/components/pages/Playlists.vue');
20
20
  const error403Page = () => import('@/components/pages/Error403Page.vue');
21
21
  const PageNotFound = () => import('@/components/pages/PageNotFound.vue');
22
+ const RadioPage = () => import('@/components/pages/Radio.vue');
22
23
 
23
24
  const routes: Array<RouteRecordRaw> = [
24
25
  /*--------------------------------------------------------------------------
@@ -142,6 +143,15 @@ const routes: Array<RouteRecordRaw> = [
142
143
  productor: route.params.productor,
143
144
  }),
144
145
  },
146
+ {
147
+ path: '/main/pub/radio/:canalId/:productor?',
148
+ name: 'radio',
149
+ component: RadioPage,
150
+ props: (route: RouteLocationNormalized) => ({
151
+ canalId: parseInt(route.params.canalId.toString(), 10),
152
+ productor: route.params.productor,
153
+ }),
154
+ },
145
155
  {
146
156
  path: '/main/pub/home',
147
157
  name: 'productor',
@@ -6,17 +6,17 @@ const state:ParamStore = {
6
6
  organisationId:'ecbd98d9-79bd-4312-ad5e-fc7c1c4a191c',
7
7
  authenticated: true,
8
8
  isAdmin: true,
9
- isRoleLive: false,
9
+ isRoleLive: true,
10
10
  isCommments: false,
11
11
  isOrganisation: false,
12
12
  isPlaylist: false,
13
13
  isProduction: false,
14
14
  isContribution: true,
15
- ApiUri: 'https://api.staging.saooti.org/',
15
+ ApiUri: 'https://api.dev2.saooti.org/',
16
16
  podcastmaker: false,
17
17
  buttonPlus: true,
18
18
  allCategories: [],
19
- isLiveTab: false,
19
+ isLiveTab: true,
20
20
  isCaptchaTest: true,
21
21
  podcastItem:16.5,
22
22
  isInlineAnimation:true,
@@ -26,8 +26,8 @@ const state:ParamStore = {
26
26
  SharePlayer: true,
27
27
  ShareButtons: true,
28
28
  ShareDistribution: true,
29
- MiniplayerUri: 'https://playerbeta.staging.saooti.org/',
30
- hlsUri: 'https://hls.staging.saooti.org/',
29
+ MiniplayerUri: 'https://playerbeta.dev2.saooti.org/',
30
+ hlsUri: 'https://hls.dev2.saooti.org/',
31
31
  mainRubrique: 0,
32
32
  resourceUrl: undefined,
33
33
  podcastItemShowEmission: false,
@@ -79,13 +79,13 @@ const state:ParamStore = {
79
79
  userName: '',
80
80
  },
81
81
  octopusApi: {
82
- url: 'https://api.staging.saooti.org/',
83
- commentsUrl: 'https://comments.staging.saooti.org/',
84
- imageUrl:'https://imageproxy.staging.saooti.org/',
85
- studioUrl: 'https://studio.staging.saooti.org/',
86
- playerUrl: 'https://playerbeta.staging.saooti.org/',
87
- speechToTextUrl:'https://speech2text.staging.saooti.org/',
88
- recoUrl: 'https://reco.staging.saooti.org/',
82
+ url: 'https://api.dev2.saooti.org/',
83
+ commentsUrl: 'https://comments.dev2.saooti.org/',
84
+ imageUrl:'https://imageproxy.dev2.saooti.org/',
85
+ studioUrl: 'https://studio.dev2.saooti.org/',
86
+ playerUrl: 'https://playerbeta.dev2.saooti.org/',
87
+ speechToTextUrl:'https://speech2text.dev2.saooti.org/',
88
+ recoUrl: 'https://reco.dev2.saooti.org/',
89
89
  organisationId: undefined,
90
90
  rubriqueIdFilter: undefined,
91
91
  },
@@ -62,6 +62,9 @@ export const usePlayerStore = defineStore('PlayerStore', {
62
62
  return 'PAUSED' === this.playerStatus;
63
63
  },
64
64
  podcastImage(): string{
65
+ if(this.playerRadio){
66
+ return this.playerRadio.podcast?.imageUrl??"";
67
+ }
65
68
  return this.playerPodcast?.imageUrl ?? "";
66
69
  },
67
70
  emissionName(): string {
@@ -129,6 +132,11 @@ export const usePlayerStore = defineStore('PlayerStore', {
129
132
  if(!this.playerRadio){return;}
130
133
  this.playerRadio.metadata = metadata;
131
134
  },
135
+ playerRadioPodcast(podcast: Podcast|undefined){
136
+ if(!this.playerRadio){return;}
137
+ this.playerRadio.podcast = podcast;
138
+ },
139
+
132
140
 
133
141
  playerUpdateElapsed(elapsed: number, total:number){
134
142
  this.playerElapsed = elapsed;
@@ -5,18 +5,20 @@ export interface Radio{
5
5
  canalId: number;
6
6
  url: string;
7
7
  metadata: MediaRadio;
8
- isInit: boolean,
8
+ isInit: boolean;
9
+ podcast?: Podcast;
9
10
  }
10
11
  export interface MediaRadio{
11
12
  artist:string;
12
- duration:number;
13
- kind:string;
14
- mediaId:number;
15
- mediaType:string|null;
16
- playlistId:number;
13
+ /* kind:string; */
14
+ mediaId?:number;
15
+ /* mediaType:string|null; */
16
+ podcastId:number;
17
17
  startDate:string;
18
18
  title:string;
19
- uri:string;
19
+ /* uri:string; */
20
+ mediaDuration: number,
21
+ playDuration: number,
20
22
  }
21
23
 
22
24
  export interface MetadataRadio{
@@ -4,6 +4,7 @@ import { FetchParam } from './fetchParam';
4
4
 
5
5
 
6
6
  export interface Playlist {
7
+ ambiance?: string; //#11919 "NONE", "AMBIANCE", "PROGRAMMED"
7
8
  imageUrl?: string;
8
9
  description: string;
9
10
  organisation?: Organisation;
@@ -18,6 +19,7 @@ export interface Playlist {
18
19
 
19
20
  export function emptyPlaylistData(): Playlist{
20
21
  return {
22
+ ambiance:"NONE",
21
23
  description: '',
22
24
  playlistId: 0,
23
25
  podcasts: undefined,
@@ -0,0 +1,9 @@
1
+ export interface Canal {
2
+ id: number;
3
+ organisationId: string;
4
+ name: string;
5
+ defaultPlaylist:string;
6
+ url:string;
7
+ imageUrl: string;
8
+ description:string;
9
+ }
@@ -0,0 +1,34 @@
1
+ export interface CrudPlanningLive {
2
+ isLive: boolean;
3
+ dateValid: boolean;
4
+ canalId: number;
5
+ liveId: number;
6
+ }
7
+
8
+ export interface TimeRangeAvailable {
9
+ start: Date;
10
+ end: Date;
11
+ }
12
+
13
+ export interface PlanningLive {
14
+ canalId: number;
15
+ liveId: number;
16
+ startDate: Date;
17
+ endDate: Date;
18
+ podcastId: number;
19
+ podcastData : {
20
+ title: string;
21
+ artist: string;
22
+ duration: number;
23
+ conferenceId: number;
24
+ };
25
+ }
26
+
27
+ export function emptyCrudPlanningLive(): CrudPlanningLive {
28
+ return {
29
+ isLive: false,
30
+ dateValid: false,
31
+ canalId: 0,
32
+ liveId:0
33
+ };
34
+ }
@@ -0,0 +1,23 @@
1
+ export interface Mix {
2
+ mixId?: number;
3
+ color: string;
4
+ description: string;
5
+ name: string;
6
+ organisationId:string;
7
+ samplings: Array<MediaSampling>
8
+ }
9
+
10
+ export interface MediaSampling {
11
+ mediaSamplingId?: number;
12
+ number: number;
13
+ armb?:string;
14
+ playlistId?:number;
15
+ criterions: Array<Criterion>;
16
+ }
17
+
18
+ export interface Criterion {
19
+ criterionId?: number;
20
+ criterionValue?: string;
21
+ criterionType?:string;
22
+ mediaField?:string;
23
+ }
@@ -0,0 +1,10 @@
1
+ import { Media } from "../general/media";
2
+
3
+ export interface PlaylistMedia {
4
+ playlistId: number;
5
+ color: string;
6
+ description: string;
7
+ name: string;
8
+ organisationId:string;
9
+ medias: Array<Media>
10
+ }