@saooti/octopus-sdk 41.0.5 → 41.0.6
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/package.json +1 -1
- package/plateform.conf +1 -1
- package/src/components/composable/player/usePlayerLive.ts +2 -2
- package/src/components/display/podcasts/PodcastPlayButton.vue +4 -1
- package/src/components/misc/HomeDropdown.vue +6 -76
- package/src/components/misc/MobileMenu.vue +57 -59
- package/src/components/misc/TopBarMainContent.vue +0 -2
- package/src/components/misc/UserButtonContent.vue +113 -0
- package/src/components/misc/player/video/PlayerVideo.vue +2 -2
- package/src/components/pages/PodcastPage.vue +0 -1
- package/src/components/pages/VideoPage.vue +5 -2
- package/src/stores/PlayerStore.ts +5 -0
- package/src/stores/class/conference/conference.ts +2 -0
package/package.json
CHANGED
package/plateform.conf
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
preprod.saooti.org
|
|
@@ -51,8 +51,8 @@ export const usePlayerLive = (hlsReady: Ref<boolean>)=>{
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
function playLive() {
|
|
54
|
-
if (!playerStore.
|
|
55
|
-
playerStore.playerUpdatePlayerHlsUrl(`${apiStore.hlsUrl}live
|
|
54
|
+
if (!playerStore.playerHlsIdentifier) return;
|
|
55
|
+
playerStore.playerUpdatePlayerHlsUrl(`${apiStore.hlsUrl}live/${playerStore.playerHlsIdentifier}/index.m3u8`);
|
|
56
56
|
playHls();
|
|
57
57
|
}
|
|
58
58
|
|
|
@@ -211,7 +211,10 @@ function play(isVideo: boolean): void {
|
|
|
211
211
|
playerStore.playerPlay(
|
|
212
212
|
{
|
|
213
213
|
...props.podcast,
|
|
214
|
-
...{
|
|
214
|
+
...{
|
|
215
|
+
conferenceId: props.fetchConference?.conferenceId,
|
|
216
|
+
hlsIdentifier: props.fetchConference?.hlsIdentifier,
|
|
217
|
+
},
|
|
215
218
|
},
|
|
216
219
|
isVideo,
|
|
217
220
|
);
|
|
@@ -32,113 +32,43 @@
|
|
|
32
32
|
:left-pos="true"
|
|
33
33
|
:is-top-layer="true"
|
|
34
34
|
>
|
|
35
|
-
<
|
|
36
|
-
<ul class="p-0 m-0">
|
|
37
|
-
<template v-if="!isAuthenticated">
|
|
38
|
-
<li class="li-style-none">
|
|
39
|
-
<a class="octopus-dropdown-item realLink" :href="pathLogin">
|
|
40
|
-
{{ t("Login") }}
|
|
41
|
-
</a>
|
|
42
|
-
</li>
|
|
43
|
-
<li class="li-style-none">
|
|
44
|
-
<router-link
|
|
45
|
-
v-if="!state.generalParameters.podcastmaker"
|
|
46
|
-
class="octopus-dropdown-item"
|
|
47
|
-
to="/main/pub/create"
|
|
48
|
-
>
|
|
49
|
-
{{ t("Create an account") }}
|
|
50
|
-
</router-link>
|
|
51
|
-
</li>
|
|
52
|
-
</template>
|
|
53
|
-
<template v-else>
|
|
54
|
-
<li v-for="routerBack in routerBackoffice" :key="routerBack.path" class="li-style-none">
|
|
55
|
-
<router-link
|
|
56
|
-
v-if="!state.generalParameters.podcastmaker && routerBack.condition"
|
|
57
|
-
:class="routerBack.class"
|
|
58
|
-
:to="routerBack.path"
|
|
59
|
-
>
|
|
60
|
-
{{ routerBack.title }}
|
|
61
|
-
</router-link>
|
|
62
|
-
</li>
|
|
63
|
-
<template v-if="helpLinks.length">
|
|
64
|
-
<hr />
|
|
65
|
-
<li v-for="helpLink in helpLinks" :key="helpLink.title" class="li-style-none">
|
|
66
|
-
<a
|
|
67
|
-
:href="helpLink.href"
|
|
68
|
-
class="octopus-dropdown-item realLink"
|
|
69
|
-
rel="noreferrer noopener"
|
|
70
|
-
target="_blank"
|
|
71
|
-
:title="t('New window', {text: helpLink.title})"
|
|
72
|
-
>
|
|
73
|
-
{{ helpLink.title }}
|
|
74
|
-
<OpenInNewIcon class="ms-1" :size="15"/>
|
|
75
|
-
</a>
|
|
76
|
-
</li>
|
|
77
|
-
</template>
|
|
78
|
-
<hr />
|
|
79
|
-
<li class="li-style-none">
|
|
80
|
-
<a class="octopus-dropdown-item c-hand" href="/logout">
|
|
81
|
-
{{ t("Logout") }}
|
|
82
|
-
</a>
|
|
83
|
-
</li>
|
|
84
|
-
</template>
|
|
85
|
-
<li class="li-style-none">
|
|
86
|
-
<router-link
|
|
87
|
-
v-if="!authStore.isGarRole"
|
|
88
|
-
class="octopus-dropdown-item"
|
|
89
|
-
to="/main/pub/contact"
|
|
90
|
-
>
|
|
91
|
-
{{ t("Contact") }}
|
|
92
|
-
</router-link>
|
|
93
|
-
</li>
|
|
94
|
-
</ul>
|
|
95
|
-
</nav>
|
|
35
|
+
<UserButtonContent :isEducation="isEducation" :navLabel="t('User menu')" :specificRoutes="routerBackoffice"/>
|
|
96
36
|
</ClassicPopover>
|
|
97
37
|
</div>
|
|
98
38
|
</template>
|
|
99
39
|
|
|
100
40
|
<script setup lang="ts">
|
|
101
|
-
import
|
|
41
|
+
import UserButtonContent from "./UserButtonContent.vue";
|
|
102
42
|
import AppsIcon from "vue-material-design-icons/Apps.vue";
|
|
103
43
|
import AccountIcon from "vue-material-design-icons/Account.vue";
|
|
104
44
|
import DownloadIcon from "vue-material-design-icons/Download.vue";
|
|
105
|
-
import { state } from "../../stores/ParamSdkStore";
|
|
106
45
|
import ClassicPopover from "../misc/ClassicPopover.vue";
|
|
107
46
|
import { useAuthStore } from "../../stores/AuthStore";
|
|
108
47
|
import { computed } from "vue";
|
|
109
|
-
import { useApiStore } from "../../stores/ApiStore";
|
|
110
48
|
import { useI18n } from "vue-i18n";
|
|
111
49
|
import { useRoute, useRouter } from "vue-router";
|
|
112
50
|
|
|
113
51
|
//Props
|
|
114
|
-
|
|
52
|
+
defineProps({
|
|
115
53
|
isEducation: { default: false, type: Boolean },
|
|
116
54
|
mobileMenuDisplay: { default: false, type: Boolean },
|
|
117
|
-
scrolled: { default: false, type: Boolean },
|
|
118
55
|
})
|
|
119
56
|
|
|
120
57
|
//Composables
|
|
121
58
|
const { t } = useI18n();
|
|
122
59
|
const authStore = useAuthStore();
|
|
123
|
-
const apiStore = useApiStore();
|
|
124
60
|
const route = useRoute();
|
|
125
61
|
const router = useRouter();
|
|
126
62
|
|
|
127
63
|
//Computed
|
|
128
64
|
const isAuthenticated = computed(() => undefined !== authStore.authProfile?.userId);
|
|
129
65
|
const isAuthenticatedWithOrga = computed(() => undefined !== authStore.authOrgaId);
|
|
130
|
-
const pathLogin = computed(() => "/sso/login?redirect_url="+encodeURI(apiStore.frontendUrl + route.fullPath));
|
|
131
66
|
const organisationsAvailable = computed(() => authStore.authProfile?.organisations ?? []);
|
|
132
|
-
|
|
133
|
-
|
|
67
|
+
|
|
68
|
+
const routerBackoffice = computed(() => {
|
|
69
|
+
if(!isAuthenticated.value){
|
|
134
70
|
return [];
|
|
135
71
|
}
|
|
136
|
-
return [
|
|
137
|
-
{ title:t("Help"), href: "https://help.octopus.saooti.com/Aide/"},
|
|
138
|
-
{ title: t("TutoMag"), href: "https://help.octopus.saooti.com/" },
|
|
139
|
-
];
|
|
140
|
-
});
|
|
141
|
-
const routerBackoffice = computed(() => {
|
|
142
72
|
return [
|
|
143
73
|
{
|
|
144
74
|
title: t("My space"),
|
|
@@ -18,39 +18,11 @@
|
|
|
18
18
|
:left-pos="true"
|
|
19
19
|
:is-top-layer="true"
|
|
20
20
|
>
|
|
21
|
-
<
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
? 'octopus-dropdown-item show-phone-flex'
|
|
27
|
-
: 'octopus-dropdown-item'
|
|
28
|
-
"
|
|
29
|
-
:to="{
|
|
30
|
-
name: link.routeName,
|
|
31
|
-
query: getQueriesRouter(link.routeName),
|
|
32
|
-
}"
|
|
33
|
-
>
|
|
34
|
-
{{ link.title }}
|
|
35
|
-
</router-link>
|
|
36
|
-
</template>
|
|
37
|
-
<a
|
|
38
|
-
v-if="!isAuthenticatedWithOrga"
|
|
39
|
-
class="octopus-dropdown-item realLink"
|
|
40
|
-
:href="pathLogin"
|
|
41
|
-
>
|
|
42
|
-
{{ t("Login") }}
|
|
43
|
-
</a>
|
|
44
|
-
<a v-else class="octopus-dropdown-item c-hand" href="/logout">
|
|
45
|
-
{{ t("Logout") }}
|
|
46
|
-
</a>
|
|
47
|
-
<router-link
|
|
48
|
-
v-if="!authStore.isGarRole"
|
|
49
|
-
class="octopus-dropdown-item"
|
|
50
|
-
to="/main/pub/contact"
|
|
51
|
-
>
|
|
52
|
-
{{ t("Contact") }}
|
|
53
|
-
</router-link>
|
|
21
|
+
<UserButtonContent
|
|
22
|
+
:isEducation="isEducation"
|
|
23
|
+
:navLabel="t('User menu')"
|
|
24
|
+
:specificRoutes="routerLinkArray"
|
|
25
|
+
:displayUserContent="displayUserContent"/>
|
|
54
26
|
</ClassicPopover>
|
|
55
27
|
</div>
|
|
56
28
|
</template>
|
|
@@ -62,20 +34,20 @@ import { state } from "../../stores/ParamSdkStore";
|
|
|
62
34
|
import { defineAsyncComponent, ref, computed } from "vue";
|
|
63
35
|
import { useFilterStore } from "../../stores/FilterStore";
|
|
64
36
|
import { useAuthStore } from "../../stores/AuthStore";
|
|
65
|
-
import { useApiStore } from "../../stores/ApiStore";
|
|
66
37
|
import { useI18n } from "vue-i18n";
|
|
67
|
-
import {
|
|
38
|
+
import { useResizePhone } from "../composable/useResizePhone";
|
|
68
39
|
const ClassicPopover = defineAsyncComponent(
|
|
69
40
|
() => import("../misc/ClassicPopover.vue"),
|
|
70
41
|
);
|
|
71
|
-
|
|
42
|
+
const UserButtonContent = defineAsyncComponent(
|
|
43
|
+
() => import("./UserButtonContent.vue"),
|
|
44
|
+
);
|
|
72
45
|
|
|
73
46
|
//Props
|
|
74
47
|
const props = defineProps({
|
|
75
48
|
isEducation: { default: false, type: Boolean },
|
|
76
49
|
show: { default: false, type: Boolean },
|
|
77
50
|
notPodcastAndEmission: { default: false, type: Boolean },
|
|
78
|
-
scrolled: { default: false, type: Boolean },
|
|
79
51
|
})
|
|
80
52
|
|
|
81
53
|
//Data
|
|
@@ -85,60 +57,90 @@ const firstLoaded = ref(false);
|
|
|
85
57
|
const { t } = useI18n();
|
|
86
58
|
const { rubriqueQueryParam } = useRubriquesFilterComputed();
|
|
87
59
|
const authStore = useAuthStore();
|
|
88
|
-
const apiStore = useApiStore();
|
|
89
60
|
const filterStore = useFilterStore();
|
|
90
|
-
const
|
|
61
|
+
const { windowWidth } = useResizePhone();
|
|
91
62
|
|
|
92
63
|
|
|
93
64
|
//Computed
|
|
65
|
+
const displayUserContent = computed(() => 500>=windowWidth.value);
|
|
94
66
|
const isAuthenticatedWithOrga = computed(() => undefined !== authStore.authOrgaId);
|
|
95
|
-
const pathLogin = computed(() => "/sso/login?redirect_url="+encodeURI(apiStore.frontendUrl + route.fullPath));
|
|
96
67
|
const routerLinkArray = computed(() =>{
|
|
97
68
|
return [
|
|
98
69
|
{
|
|
99
70
|
title: t("My space"),
|
|
100
|
-
|
|
71
|
+
path:{
|
|
72
|
+
name: "backoffice",
|
|
73
|
+
query: getQueriesRouter(true),
|
|
74
|
+
},
|
|
75
|
+
class: "octopus-dropdown-item",
|
|
101
76
|
condition: isAuthenticatedWithOrga.value,
|
|
102
77
|
},
|
|
103
|
-
{
|
|
78
|
+
{
|
|
79
|
+
title: t("Home"),
|
|
80
|
+
path:{
|
|
81
|
+
name: "home",
|
|
82
|
+
query: getQueriesRouter(false),
|
|
83
|
+
},
|
|
84
|
+
class:"octopus-dropdown-item show-phone-flex",
|
|
85
|
+
condition: true
|
|
86
|
+
},
|
|
104
87
|
{
|
|
105
88
|
title: t("Radio & Live"),
|
|
106
|
-
|
|
89
|
+
path:{
|
|
90
|
+
name: "lives",
|
|
91
|
+
query: getQueriesRouter(true),
|
|
92
|
+
},
|
|
93
|
+
class: "octopus-dropdown-item",
|
|
107
94
|
condition:
|
|
108
95
|
state.generalParameters.isLiveTab &&
|
|
109
96
|
((filterStore.filterOrgaId && filterStore.filterLive) || !filterStore.filterOrgaId),
|
|
110
97
|
},
|
|
111
98
|
{
|
|
112
99
|
title: t("Podcasts"),
|
|
113
|
-
|
|
100
|
+
path:{
|
|
101
|
+
name: "podcasts",
|
|
102
|
+
query: getQueriesRouter(false),
|
|
103
|
+
},
|
|
104
|
+
class: "octopus-dropdown-item",
|
|
114
105
|
condition: !props.notPodcastAndEmission,
|
|
115
106
|
},
|
|
116
107
|
{
|
|
117
108
|
title: t("Emissions"),
|
|
118
|
-
|
|
109
|
+
path:{
|
|
110
|
+
name: "emissions",
|
|
111
|
+
query: getQueriesRouter(false),
|
|
112
|
+
},
|
|
113
|
+
class: "octopus-dropdown-item",
|
|
119
114
|
condition: !props.notPodcastAndEmission,
|
|
120
115
|
},
|
|
121
116
|
{
|
|
122
117
|
title: t("Productors"),
|
|
123
|
-
|
|
118
|
+
path:{
|
|
119
|
+
name: "productors",
|
|
120
|
+
query: getQueriesRouter(true),
|
|
121
|
+
},
|
|
122
|
+
class: "octopus-dropdown-item",
|
|
124
123
|
condition:
|
|
125
124
|
!state.generalParameters.podcastmaker && (!filterStore.filterOrgaId || props.isEducation),
|
|
126
125
|
},
|
|
127
126
|
{
|
|
128
127
|
title: t("Playlists"),
|
|
129
|
-
|
|
128
|
+
path:{
|
|
129
|
+
name: "playlists",
|
|
130
|
+
query: getQueriesRouter(true),
|
|
131
|
+
},
|
|
132
|
+
class: "octopus-dropdown-item",
|
|
130
133
|
condition: true,
|
|
131
134
|
},
|
|
132
135
|
{
|
|
133
136
|
title: t("Speakers"),
|
|
134
|
-
|
|
137
|
+
path:{
|
|
138
|
+
name: "participants",
|
|
139
|
+
query: getQueriesRouter(true),
|
|
140
|
+
},
|
|
141
|
+
class: "octopus-dropdown-item",
|
|
135
142
|
condition: true,
|
|
136
143
|
},
|
|
137
|
-
{
|
|
138
|
-
title: t("Create an account"),
|
|
139
|
-
routeName: "createAccount",
|
|
140
|
-
condition: !isAuthenticatedWithOrga.value,
|
|
141
|
-
},
|
|
142
144
|
];
|
|
143
145
|
});
|
|
144
146
|
|
|
@@ -153,12 +155,8 @@ function handleMenuClick() {
|
|
|
153
155
|
document.getElementById("mobile-menu-dropdown")?.click();
|
|
154
156
|
}, 200);
|
|
155
157
|
}
|
|
156
|
-
function getQueriesRouter(
|
|
157
|
-
if (
|
|
158
|
-
"podcasts" !== routeName &&
|
|
159
|
-
"emissions" !== routeName &&
|
|
160
|
-
"home" !== routeName
|
|
161
|
-
) {
|
|
158
|
+
function getQueriesRouter(onlyProductor:boolean) {
|
|
159
|
+
if (onlyProductor) {
|
|
162
160
|
return { productor: filterStore.filterOrgaId };
|
|
163
161
|
}
|
|
164
162
|
return {
|
|
@@ -136,12 +136,10 @@
|
|
|
136
136
|
:is-education="generalStore.platformEducation"
|
|
137
137
|
:show="mobileMenuDisplay"
|
|
138
138
|
:not-podcast-and-emission="inContentDisplayPage && !scrolled"
|
|
139
|
-
:scrolled="scrolled"
|
|
140
139
|
/>
|
|
141
140
|
<HomeDropdown
|
|
142
141
|
:is-education="generalStore.platformEducation"
|
|
143
142
|
:mobile-menu-display="mobileMenuDisplay"
|
|
144
|
-
:scrolled="scrolled"
|
|
145
143
|
/>
|
|
146
144
|
<router-link
|
|
147
145
|
v-show="!isPhone && !inContentDisplayPage"
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<nav :aria-label="navLabel">
|
|
3
|
+
<ul class="p-0 m-0">
|
|
4
|
+
<template v-if="specificRoutes.length">
|
|
5
|
+
<li v-for="routerBack in specificRoutes" :key="routerBack.path" class="li-style-none">
|
|
6
|
+
<router-link
|
|
7
|
+
v-if="!state.generalParameters.podcastmaker && routerBack.condition"
|
|
8
|
+
:class="routerBack.class"
|
|
9
|
+
:to="routerBack.path"
|
|
10
|
+
>
|
|
11
|
+
{{ routerBack.title }}
|
|
12
|
+
</router-link>
|
|
13
|
+
</li>
|
|
14
|
+
<hr v-if="displayUserContent"/>
|
|
15
|
+
</template>
|
|
16
|
+
<template v-if="displayUserContent">
|
|
17
|
+
<template v-if="!isAuthenticated">
|
|
18
|
+
<li class="li-style-none">
|
|
19
|
+
<a class="octopus-dropdown-item realLink" :href="pathLogin">
|
|
20
|
+
{{ t("Login") }}
|
|
21
|
+
</a>
|
|
22
|
+
</li>
|
|
23
|
+
<li class="li-style-none">
|
|
24
|
+
<router-link
|
|
25
|
+
v-if="!state.generalParameters.podcastmaker"
|
|
26
|
+
class="octopus-dropdown-item"
|
|
27
|
+
to="/main/pub/create"
|
|
28
|
+
>
|
|
29
|
+
{{ t("Create an account") }}
|
|
30
|
+
</router-link>
|
|
31
|
+
</li>
|
|
32
|
+
</template>
|
|
33
|
+
<template v-else>
|
|
34
|
+
<template v-if="helpLinks.length">
|
|
35
|
+
<li v-for="helpLink in helpLinks" :key="helpLink.title" class="li-style-none">
|
|
36
|
+
<a
|
|
37
|
+
:href="helpLink.href"
|
|
38
|
+
class="octopus-dropdown-item realLink"
|
|
39
|
+
rel="noreferrer noopener"
|
|
40
|
+
target="_blank"
|
|
41
|
+
:title="t('New window', {text: helpLink.title})"
|
|
42
|
+
>
|
|
43
|
+
{{ helpLink.title }}
|
|
44
|
+
<OpenInNewIcon class="ms-1" :size="15"/>
|
|
45
|
+
</a>
|
|
46
|
+
</li>
|
|
47
|
+
</template>
|
|
48
|
+
<hr />
|
|
49
|
+
<li class="li-style-none">
|
|
50
|
+
<a class="octopus-dropdown-item c-hand" href="/logout">
|
|
51
|
+
{{ t("Logout") }}
|
|
52
|
+
</a>
|
|
53
|
+
</li>
|
|
54
|
+
</template>
|
|
55
|
+
<li class="li-style-none">
|
|
56
|
+
<router-link
|
|
57
|
+
v-if="!authStore.isGarRole"
|
|
58
|
+
class="octopus-dropdown-item"
|
|
59
|
+
to="/main/pub/contact"
|
|
60
|
+
>
|
|
61
|
+
{{ t("Contact") }}
|
|
62
|
+
</router-link>
|
|
63
|
+
</li>
|
|
64
|
+
</template>
|
|
65
|
+
</ul>
|
|
66
|
+
</nav>
|
|
67
|
+
</template>
|
|
68
|
+
|
|
69
|
+
<script setup lang="ts">
|
|
70
|
+
import OpenInNewIcon from "vue-material-design-icons/OpenInNew.vue";
|
|
71
|
+
import { state } from "../../stores/ParamSdkStore";
|
|
72
|
+
import { useAuthStore } from "../../stores/AuthStore";
|
|
73
|
+
import { computed } from "vue";
|
|
74
|
+
import { useApiStore } from "../../stores/ApiStore";
|
|
75
|
+
import { useI18n } from "vue-i18n";
|
|
76
|
+
import { RouteLocationAsPathGeneric, RouteLocationAsRelativeGeneric, useRoute } from "vue-router";
|
|
77
|
+
|
|
78
|
+
//Interface
|
|
79
|
+
interface RouteInfo{
|
|
80
|
+
title: string;
|
|
81
|
+
class: string;
|
|
82
|
+
path: string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric;
|
|
83
|
+
condition: boolean
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
//Props
|
|
87
|
+
const props = defineProps({
|
|
88
|
+
isEducation: { default: false, type: Boolean },
|
|
89
|
+
navLabel: { default: "", type: String },
|
|
90
|
+
specificRoutes: { default: false, type: Array as ()=> Array<RouteInfo> },
|
|
91
|
+
displayUserContent: { default: true, type: Boolean },
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
//Composables
|
|
95
|
+
const { t } = useI18n();
|
|
96
|
+
const authStore = useAuthStore();
|
|
97
|
+
const apiStore = useApiStore();
|
|
98
|
+
const route = useRoute();
|
|
99
|
+
|
|
100
|
+
//Computed
|
|
101
|
+
const isAuthenticated = computed(() => undefined !== authStore.authProfile?.userId);
|
|
102
|
+
const pathLogin = computed(() => "/sso/login?redirect_url="+encodeURI(apiStore.frontendUrl + route.fullPath));
|
|
103
|
+
const helpLinks = computed(() => {
|
|
104
|
+
if (authStore.isGarRole || props.isEducation) {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
return [
|
|
108
|
+
{ title:t("Help"), href: "https://help.octopus.saooti.com/Aide/"},
|
|
109
|
+
{ title: t("TutoMag"), href: "https://help.octopus.saooti.com/" },
|
|
110
|
+
];
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
</script>
|
|
@@ -39,10 +39,10 @@ const playerStore = usePlayerStore();
|
|
|
39
39
|
//Computed
|
|
40
40
|
const isSecured = computed(() => "SECURED" === playerStore.playerLive?.organisation?.privacy);
|
|
41
41
|
const hlsVideoUrl = computed(() => {
|
|
42
|
-
if (!playerStore.
|
|
42
|
+
if (!playerStore.playerHlsIdentifier) {
|
|
43
43
|
return "";
|
|
44
44
|
}
|
|
45
|
-
return `${apiStore.hlsUrl}live/
|
|
45
|
+
return `${apiStore.hlsUrl}live/video_${playerStore.playerHlsIdentifier}/index.m3u8`;
|
|
46
46
|
});
|
|
47
47
|
|
|
48
48
|
onMounted(()=>{
|
|
@@ -193,7 +193,7 @@ const hlsVideoUrl = computed(() => {
|
|
|
193
193
|
if (!recordingLive.value || !podcastConference.value) {
|
|
194
194
|
return "";
|
|
195
195
|
}
|
|
196
|
-
return `${apiStore.hlsUrl}live/
|
|
196
|
+
return `${apiStore.hlsUrl}live/video_${podcastConference.value.hlsIdentifier}/index.m3u8`;
|
|
197
197
|
});
|
|
198
198
|
const isSecured = computed(() => {
|
|
199
199
|
return "SECURED" === podcast.value?.organisation?.privacy;
|
|
@@ -255,7 +255,10 @@ async function getPodcastDetails(): Promise<void> {
|
|
|
255
255
|
playerStore.playerPlay(
|
|
256
256
|
{
|
|
257
257
|
...podcast.value,
|
|
258
|
-
...{
|
|
258
|
+
...{
|
|
259
|
+
conferenceId: podcast.value.conferenceId,
|
|
260
|
+
hlsIdentifier: podcastConference.value?.hlsIdentifier,
|
|
261
|
+
},
|
|
259
262
|
},
|
|
260
263
|
true,
|
|
261
264
|
);
|
|
@@ -32,6 +32,7 @@ interface PlayerState {
|
|
|
32
32
|
playerChaptering?: Chaptering;
|
|
33
33
|
playerDelayStitching: number;
|
|
34
34
|
playerHlsUrl?: string;
|
|
35
|
+
playerHlsIdentifier?:string;
|
|
35
36
|
}
|
|
36
37
|
export const usePlayerStore = defineStore("PlayerStore", {
|
|
37
38
|
state: (): PlayerState => ({
|
|
@@ -49,6 +50,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
49
50
|
playerVideo: false,
|
|
50
51
|
playerChaptering: undefined,
|
|
51
52
|
playerDelayStitching: 0,
|
|
53
|
+
playerHlsIdentifier: undefined,
|
|
52
54
|
}),
|
|
53
55
|
getters: {
|
|
54
56
|
playerChapteringPercent(): ChapteringPercent | undefined {
|
|
@@ -146,6 +148,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
146
148
|
this.playerPodcast = undefined;
|
|
147
149
|
this.playerMedia = undefined;
|
|
148
150
|
this.playerLive = undefined;
|
|
151
|
+
this.playerHlsIdentifier = undefined;
|
|
149
152
|
this.playerRadio = undefined;
|
|
150
153
|
this.playerElapsed = 0;
|
|
151
154
|
this.playerVideo = false;
|
|
@@ -168,6 +171,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
168
171
|
this.playerPodcast = undefined;
|
|
169
172
|
this.playerMedia = undefined;
|
|
170
173
|
this.playerLive = undefined;
|
|
174
|
+
this.playerHlsIdentifier = undefined;
|
|
171
175
|
this.playerRadio = undefined;
|
|
172
176
|
this.playerVideo = isVideo;
|
|
173
177
|
this.playerElapsed = 0;
|
|
@@ -177,6 +181,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
177
181
|
(!param.podcastId || param.processingStatus !== "READY")
|
|
178
182
|
) {
|
|
179
183
|
this.playerLive = param;
|
|
184
|
+
this.playerHlsIdentifier = param.hlsIdentifier;
|
|
180
185
|
this.playerCurrentChange = null;
|
|
181
186
|
return;
|
|
182
187
|
}
|
|
@@ -8,6 +8,7 @@ export interface Conference {
|
|
|
8
8
|
deletionAttempts?: number;
|
|
9
9
|
directCode?: string;
|
|
10
10
|
externalRtmpUrl?: ExternalRtmpUrl;
|
|
11
|
+
hlsIdentifier: string;
|
|
11
12
|
hostname?: string;
|
|
12
13
|
jingleDuration?: number;
|
|
13
14
|
jingleFilePath?: string;
|
|
@@ -57,6 +58,7 @@ export function getEmptyConference(): Conference {
|
|
|
57
58
|
export interface ConferencePublicInfo {
|
|
58
59
|
status: string;
|
|
59
60
|
videoProfile: string;
|
|
61
|
+
hlsIdentifier: string;
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
export interface ExternalRtmpUrl {
|