@saooti/octopus-sdk 41.0.14-SNAPSHOT → 41.0.15
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/eslint.config.mjs +5 -3
- package/index.ts +8 -1
- package/package.json +4 -2
- package/plateform.conf +1 -1
- package/src/App.vue +3 -7
- package/src/api/classicApi.ts +1 -1
- package/src/components/composable/player/usePlayerLive.ts +2 -2
- package/src/components/composable/player/usePlayerLogic.ts +2 -1
- package/src/components/composable/radio/usefetchRadioData.ts +29 -12
- package/src/components/composable/route/useSimplePageParam.ts +6 -1
- package/src/components/display/categories/CategoryChooser.vue +4 -0
- package/src/components/display/comments/CommentList.vue +1 -1
- package/src/components/display/emission/EmissionList.vue +2 -1
- package/src/components/display/emission/EmissionPresentationItem.vue +14 -6
- package/src/components/display/filter/AdvancedSearch.vue +2 -2
- package/src/components/display/filter/DateFilter.vue +15 -2
- package/src/components/display/live/RadioCurrently.vue +2 -5
- package/src/components/display/organisation/OrganisationChooserLight.vue +34 -36
- package/src/components/display/podcasts/PodcastPlayButton.vue +6 -1
- package/src/components/display/rubriques/RubriqueChooser.vue +24 -2
- package/src/components/display/rubriques/RubriqueList.vue +18 -0
- package/src/components/display/sharing/PlayerParameters.vue +0 -8
- package/src/components/display/sharing/SharePlayer.vue +0 -5
- package/src/components/display/sharing/SubscribeButtons.vue +4 -2
- package/src/components/form/ClassicCheckbox.vue +30 -5
- package/src/components/form/ClassicInputText.vue +32 -12
- package/src/components/form/ClassicMultiselect.vue +35 -7
- package/src/components/misc/ClassicAccordion.vue +4 -4
- package/src/components/misc/ClassicHelpButton.vue +44 -0
- package/src/components/misc/ClassicLazy.vue +25 -14
- package/src/components/misc/ClassicNav.vue +3 -0
- package/src/components/misc/ClassicSpinner.vue +1 -1
- package/src/components/misc/FooterSection.vue +17 -20
- package/src/components/misc/HomeDropdown.vue +3 -110
- package/src/components/misc/MobileMenu.vue +59 -64
- package/src/components/misc/TopBar.vue +2 -10
- package/src/components/misc/TopBarMainContent.vue +8 -12
- package/src/components/misc/UserButtonContent.vue +159 -0
- package/src/components/misc/modal/ClassicModal.vue +4 -0
- package/src/components/misc/player/PlayerCompact.vue +1 -0
- package/src/components/misc/player/PlayerComponent.vue +1 -0
- package/src/components/misc/player/elements/PlayerImage.vue +0 -1
- package/src/components/misc/player/elements/PlayerTitle.vue +3 -3
- package/src/components/misc/player/radio/RadioHistory.vue +3 -2
- package/src/components/misc/player/video/PlayerVideo.vue +2 -2
- package/src/components/pages/HomePage.vue +5 -4
- package/src/components/pages/PageLogout.vue +1 -6
- package/src/components/pages/PodcastPage.vue +0 -1
- package/src/components/pages/PodcastsPage.vue +1 -1
- package/src/components/pages/VideoPage.vue +5 -2
- package/src/helper/equals.ts +26 -0
- package/src/locale/de.ts +6 -5
- package/src/locale/en.ts +6 -5
- package/src/locale/es.ts +6 -5
- package/src/locale/fr.ts +6 -5
- package/src/locale/it.ts +6 -5
- package/src/locale/sl.ts +6 -5
- package/src/router/router.ts +10 -74
- package/src/router/utils.ts +112 -0
- package/src/stores/AuthStore.ts +7 -2
- package/src/stores/FilterStore.ts +126 -71
- package/src/stores/PlayerStore.ts +11 -1
- package/src/stores/class/conference/conference.ts +2 -0
- package/src/stores/class/general/organisation.ts +2 -2
- package/src/stores/class/general/player.ts +2 -2
- package/src/style/_variables.scss +6 -0
- package/src/style/general.scss +18 -1
- package/tsconfig.json +6 -2
- package/typings/index.d.ts +1 -0
- package/src/helper/radio/radioHelper.ts +0 -15
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Router } from "vue-router";
|
|
2
|
+
import { useFilterStore, FilterStore } from "../stores/FilterStore";
|
|
3
|
+
import { useSaveFetchStore } from "../stores/SaveFetchStore";
|
|
4
|
+
import { Rubriquage } from "../stores/class/rubrique/rubriquage";
|
|
5
|
+
import classicApi from "../api/classicApi";
|
|
6
|
+
import { useAuthStore, AuthStore } from "../stores/AuthStore";
|
|
7
|
+
import { deepEqual } from "../helper/equals";
|
|
8
|
+
|
|
9
|
+
async function changeOrgaFilter(orgaFilter: string, filterStore: FilterStore){
|
|
10
|
+
const saveStore = useSaveFetchStore();
|
|
11
|
+
const response = await saveStore.getOrgaData(orgaFilter);
|
|
12
|
+
const data = await classicApi.fetchData<Array<Rubriquage>>({
|
|
13
|
+
api: 0,
|
|
14
|
+
path: "rubriquage/find/" + orgaFilter,
|
|
15
|
+
parameters: {
|
|
16
|
+
sort: "HOMEPAGEORDER",
|
|
17
|
+
homePageOrder: true,
|
|
18
|
+
},
|
|
19
|
+
specialTreatement: true,
|
|
20
|
+
});
|
|
21
|
+
const isLive = await saveStore.getOrgaLiveEnabled(orgaFilter);
|
|
22
|
+
filterStore.filterUpdateOrga({
|
|
23
|
+
orgaId: orgaFilter,
|
|
24
|
+
imgUrl: response.imageUrl,
|
|
25
|
+
name: response.name,
|
|
26
|
+
rubriquageArray: data.filter((element: Rubriquage) => {
|
|
27
|
+
return element.rubriques.length;
|
|
28
|
+
}),
|
|
29
|
+
isLive: isLive,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let fetchMyOrgaActive = false;
|
|
34
|
+
/** Variable used to apply beforeEach redirect only once */
|
|
35
|
+
let resolved = false;
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Utility function seting up the router with a custom beforeEach
|
|
39
|
+
*/
|
|
40
|
+
export function setupRouter(router: Router, getMyOrgaActive: (authStore: AuthStore) => Promise<string>): void {
|
|
41
|
+
router.beforeResolve(async () =>{
|
|
42
|
+
fetchMyOrgaActive = false;
|
|
43
|
+
// Reinit variable to allow one redirect
|
|
44
|
+
resolved = false;
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
// Navigation guard that updates current organisation & may make redirects
|
|
48
|
+
router.beforeEach(async (to, from) => {
|
|
49
|
+
|
|
50
|
+
if ("/logout" === to.path && "/logout" !== from.path) {
|
|
51
|
+
setTimeout(() => {
|
|
52
|
+
window.location.reload(true);
|
|
53
|
+
}, 500);
|
|
54
|
+
}
|
|
55
|
+
const authStore = useAuthStore();
|
|
56
|
+
const filterStore = useFilterStore();
|
|
57
|
+
|
|
58
|
+
const isSamePath = to.matched[0]?.path === from.matched[0]?.path && to.path.includes(from.path);
|
|
59
|
+
let orgaToFocus = isSamePath ? (to.query.productor?.toString() ?? undefined) : undefined;
|
|
60
|
+
|
|
61
|
+
if(authStore.authProfile){
|
|
62
|
+
if(!isSamePath && !fetchMyOrgaActive){
|
|
63
|
+
await getMyOrgaActive(authStore);
|
|
64
|
+
fetchMyOrgaActive = true;
|
|
65
|
+
}
|
|
66
|
+
if(undefined!==orgaToFocus){
|
|
67
|
+
orgaToFocus = authStore.authOrgaId;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Update organisation
|
|
72
|
+
if (isSamePath && orgaToFocus !== from.query.productor) {
|
|
73
|
+
if (filterStore.filterOrgaId !== orgaToFocus && orgaToFocus !== undefined) {
|
|
74
|
+
await changeOrgaFilter(orgaToFocus, filterStore);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Only change target if not going to logout and not already resolved
|
|
79
|
+
if ("/logout" !== to.path && resolved !== true) {
|
|
80
|
+
resolved = true;
|
|
81
|
+
const newQuery = {
|
|
82
|
+
...to.query
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
// Set productor
|
|
86
|
+
if (to.query.productor) {
|
|
87
|
+
newQuery.productor = to.query.productor;
|
|
88
|
+
} else if (filterStore.filterOrgaId === undefined) {
|
|
89
|
+
delete newQuery.productor;
|
|
90
|
+
} else {
|
|
91
|
+
newQuery.productor = filterStore.filterOrgaId;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Enable 'viewall' mode if already active
|
|
95
|
+
if ((from.query.viewall === "true" || to.query.viewall === "true") && to.query.viewall !== "false") {
|
|
96
|
+
newQuery.viewall = "true";
|
|
97
|
+
} else {
|
|
98
|
+
delete newQuery.viewall;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// If the queries are different, update path
|
|
102
|
+
if (!deepEqual(newQuery, to.query)) {
|
|
103
|
+
return {
|
|
104
|
+
path: to.path,
|
|
105
|
+
query: { ...newQuery },
|
|
106
|
+
params: to.params,
|
|
107
|
+
name: to.name,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
}
|
package/src/stores/AuthStore.ts
CHANGED
|
@@ -5,12 +5,14 @@ import { defineStore } from "pinia";
|
|
|
5
5
|
import { KeycloakInfo } from "@/stores/class/user/person";
|
|
6
6
|
import { VideoConfig } from "@/stores/class/config/videoConfig";
|
|
7
7
|
import classicApi from "../api/classicApi";
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
interface AuthParam {
|
|
9
10
|
accessToken?: string;
|
|
10
11
|
refreshToken?: string;
|
|
11
12
|
expiration?: Date|string;
|
|
12
13
|
clientId?: string;
|
|
13
14
|
}
|
|
15
|
+
|
|
14
16
|
interface AuthState {
|
|
15
17
|
authReload: number;
|
|
16
18
|
authName: string;
|
|
@@ -43,7 +45,7 @@ export const useAuthStore = defineStore("AuthStore", {
|
|
|
43
45
|
comments: undefined,
|
|
44
46
|
attributes: {
|
|
45
47
|
RSS_CONTACT: undefined,
|
|
46
|
-
}
|
|
48
|
+
}
|
|
47
49
|
},
|
|
48
50
|
authVideoConfig: { active: false },
|
|
49
51
|
}),
|
|
@@ -231,3 +233,6 @@ export const useAuthStore = defineStore("AuthStore", {
|
|
|
231
233
|
},
|
|
232
234
|
},
|
|
233
235
|
});
|
|
236
|
+
|
|
237
|
+
/** Type for the AuthStore */
|
|
238
|
+
export type AuthStore = ReturnType<typeof useAuthStore>;
|
|
@@ -1,73 +1,128 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Rubriquage } from "@/stores/class/rubrique/rubriquage";
|
|
3
|
-
import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
|
|
4
|
-
import { Rubrique } from "@/stores/class/rubrique/rubrique";
|
|
5
|
-
import { defineStore } from "pinia";
|
|
1
|
+
import { computed, ref } from 'vue';
|
|
6
2
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
|
|
3
|
+
import { Category } from '@/stores/class/general/category';
|
|
4
|
+
import { Rubriquage } from '@/stores/class/rubrique/rubriquage';
|
|
5
|
+
import { RubriquageFilter } from '@/stores/class/rubrique/rubriquageFilter';
|
|
6
|
+
import { Rubrique } from '@/stores/class/rubrique/rubrique';
|
|
7
|
+
import { defineStore } from 'pinia';
|
|
8
|
+
import { useAuthStore } from './AuthStore';
|
|
9
|
+
import { useRoute } from 'vue-router';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Store managing data regarding the filters to apply to know which
|
|
13
|
+
* podcasts to show.
|
|
14
|
+
*/
|
|
15
|
+
export const useFilterStore = defineStore("FilterStore", () => {
|
|
16
|
+
const _filterOrgaId = ref<string|null>(null);
|
|
17
|
+
const filterImgUrl = ref<string>();
|
|
18
|
+
const filterName = ref<string>();
|
|
19
|
+
const filterRubriquage = ref<Array<Rubriquage>>([]);
|
|
20
|
+
const filterRubrique = ref<Array<RubriquageFilter>>([]);
|
|
21
|
+
const filterRubriqueDisplay = ref<Array<Rubrique>>([]);
|
|
22
|
+
const filterTypeMedia = ref<string>();
|
|
23
|
+
const filterSortOrder = ref<string>();
|
|
24
|
+
const filterSortField = ref<string>();
|
|
25
|
+
const filterLive = ref<boolean>(false);
|
|
26
|
+
const filterIab = ref<Category>();
|
|
27
|
+
|
|
28
|
+
const route = useRoute();
|
|
29
|
+
const authStore = useAuthStore();
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* ID of the current organisation.
|
|
33
|
+
*/
|
|
34
|
+
const filterOrgaId = computed((): string|undefined => {
|
|
35
|
+
if (route?.query.viewall === "true") {
|
|
36
|
+
return undefined;
|
|
37
|
+
} else if (route?.query.productor) {
|
|
38
|
+
return route.query.productor as string;
|
|
39
|
+
} else if(_filterOrgaId.value === null) {
|
|
40
|
+
return authStore.authOrgaId;
|
|
41
|
+
} else {
|
|
42
|
+
return _filterOrgaId.value ?? undefined;
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The ID of the current organisation, regardless of other options.
|
|
48
|
+
* Use this if you want to know the organisation of the user even in
|
|
49
|
+
* unfocused mode (ie viewall = true)
|
|
50
|
+
*/
|
|
51
|
+
const realOrgaId = computed(() => {
|
|
52
|
+
return _filterOrgaId.value ?? undefined;
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
function filterUpdateOrga(filter: {
|
|
56
|
+
orgaId?: string;
|
|
57
|
+
imgUrl?: string;
|
|
58
|
+
name?: string;
|
|
59
|
+
rubriquageArray?: Array<Rubriquage>;
|
|
60
|
+
isLive?: boolean;
|
|
61
|
+
}) {
|
|
62
|
+
if (filter.imgUrl || !filter.orgaId) {
|
|
63
|
+
filterImgUrl.value = filter.imgUrl;
|
|
64
|
+
}
|
|
65
|
+
if (filter.name || !filter.orgaId) {
|
|
66
|
+
filterName.value = filter.name;
|
|
67
|
+
}
|
|
68
|
+
if (filter.rubriquageArray) {
|
|
69
|
+
filterRubriquage.value = filter.rubriquageArray;
|
|
70
|
+
}
|
|
71
|
+
filterLive.value = filter.isLive ?? false;
|
|
72
|
+
filterIab.value = undefined;
|
|
73
|
+
_filterOrgaId.value = filter.orgaId ?? null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function filterUpdateIab(iab?: Category) {
|
|
77
|
+
filterIab.value = iab;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function filterUpdateRubrique(rubriqueFilter: Array<RubriquageFilter>) {
|
|
81
|
+
filterRubrique.value = rubriqueFilter;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function filterUpdateRubriqueDisplay(rubriques: Array<Rubrique>) {
|
|
85
|
+
filterRubriqueDisplay.value = rubriques.filter(rubrique=> rubrique);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function filterUpdateMedia(filter: {
|
|
89
|
+
type?: string;
|
|
90
|
+
order?: string;
|
|
91
|
+
field?: string;
|
|
92
|
+
}) {
|
|
93
|
+
if (filter.type) {
|
|
94
|
+
filterTypeMedia.value = filter.type;
|
|
95
|
+
}
|
|
96
|
+
if (filter.order) {
|
|
97
|
+
filterSortOrder.value = filter.order;
|
|
98
|
+
}
|
|
99
|
+
if (filter.field) {
|
|
100
|
+
filterSortField.value = filter.field;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return {
|
|
105
|
+
filterOrgaId,
|
|
106
|
+
realOrgaId,
|
|
107
|
+
|
|
108
|
+
filterUpdateOrga,
|
|
109
|
+
filterUpdateIab,
|
|
110
|
+
filterUpdateRubrique,
|
|
111
|
+
filterUpdateRubriqueDisplay,
|
|
112
|
+
filterUpdateMedia,
|
|
113
|
+
|
|
114
|
+
filterImgUrl,
|
|
115
|
+
filterName,
|
|
116
|
+
filterRubriquage,
|
|
117
|
+
filterRubrique,
|
|
118
|
+
filterRubriqueDisplay,
|
|
119
|
+
filterTypeMedia,
|
|
120
|
+
filterSortOrder,
|
|
121
|
+
filterSortField,
|
|
122
|
+
filterLive,
|
|
123
|
+
filterIab
|
|
124
|
+
};
|
|
73
125
|
});
|
|
126
|
+
|
|
127
|
+
/** Type for the FilterStore */
|
|
128
|
+
export type FilterStore = ReturnType<typeof useFilterStore>;
|
|
@@ -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 {
|
|
@@ -139,6 +141,11 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
139
141
|
},
|
|
140
142
|
},
|
|
141
143
|
actions: {
|
|
144
|
+
/**
|
|
145
|
+
* Start playing audio/video
|
|
146
|
+
* @param param The data
|
|
147
|
+
* @param isVideo If true, enable video mode
|
|
148
|
+
*/
|
|
142
149
|
async playerPlay(param?: any, isVideo = false) {
|
|
143
150
|
if (!param) {
|
|
144
151
|
this.playerCurrentChange = null;
|
|
@@ -146,6 +153,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
146
153
|
this.playerPodcast = undefined;
|
|
147
154
|
this.playerMedia = undefined;
|
|
148
155
|
this.playerLive = undefined;
|
|
156
|
+
this.playerHlsIdentifier = undefined;
|
|
149
157
|
this.playerRadio = undefined;
|
|
150
158
|
this.playerElapsed = 0;
|
|
151
159
|
this.playerVideo = false;
|
|
@@ -168,6 +176,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
168
176
|
this.playerPodcast = undefined;
|
|
169
177
|
this.playerMedia = undefined;
|
|
170
178
|
this.playerLive = undefined;
|
|
179
|
+
this.playerHlsIdentifier = undefined;
|
|
171
180
|
this.playerRadio = undefined;
|
|
172
181
|
this.playerVideo = isVideo;
|
|
173
182
|
this.playerElapsed = 0;
|
|
@@ -177,6 +186,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
177
186
|
(!param.podcastId || param.processingStatus !== "READY")
|
|
178
187
|
) {
|
|
179
188
|
this.playerLive = param;
|
|
189
|
+
this.playerHlsIdentifier = param.hlsIdentifier;
|
|
180
190
|
this.playerCurrentChange = null;
|
|
181
191
|
return;
|
|
182
192
|
}
|
|
@@ -210,7 +220,7 @@ export const usePlayerStore = defineStore("PlayerStore", {
|
|
|
210
220
|
playerUpdateSeekTime(seekTime: number) {
|
|
211
221
|
this.playerSeekTime = seekTime;
|
|
212
222
|
},
|
|
213
|
-
playerMetadata(metadata: MediaRadio, history: Array<MediaRadio>) {
|
|
223
|
+
playerMetadata(metadata: MediaRadio|undefined, history: Array<MediaRadio>) {
|
|
214
224
|
if (!this.playerRadio) {
|
|
215
225
|
return;
|
|
216
226
|
}
|
|
@@ -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 {
|
|
@@ -22,13 +22,13 @@ export function emptyOrganisationData(): Organisation {
|
|
|
22
22
|
return {
|
|
23
23
|
imageUrl: "",
|
|
24
24
|
id: "",
|
|
25
|
-
name: ""
|
|
25
|
+
name: ""
|
|
26
26
|
};
|
|
27
27
|
}
|
|
28
28
|
export function emptyOrgaData(defaultName: string): Organisation {
|
|
29
29
|
return {
|
|
30
30
|
imageUrl: "/img/emptypodcast.webp",
|
|
31
31
|
id: "",
|
|
32
|
-
name: defaultName
|
|
32
|
+
name: defaultName
|
|
33
33
|
};
|
|
34
34
|
}
|
|
@@ -4,7 +4,7 @@ import { Podcast } from "./podcast";
|
|
|
4
4
|
export interface Radio {
|
|
5
5
|
canalId: number;
|
|
6
6
|
url: string;
|
|
7
|
-
metadata
|
|
7
|
+
metadata?: MediaRadio;
|
|
8
8
|
history: Array<MediaRadio>;
|
|
9
9
|
nextAdvertising: NextAdvertising;
|
|
10
10
|
isInit: boolean;
|
|
@@ -30,7 +30,7 @@ export interface NextAdvertising {
|
|
|
30
30
|
|
|
31
31
|
export interface MetadataRadio {
|
|
32
32
|
channelId: number;
|
|
33
|
-
currently: MediaRadio;
|
|
33
|
+
currently: MediaRadio|null;
|
|
34
34
|
previously: Array<MediaRadio>;
|
|
35
35
|
nextAdvertising: NextAdvertising;
|
|
36
36
|
}
|
|
@@ -27,10 +27,16 @@
|
|
|
27
27
|
--octopus-background-transparent: oklch(from var(--octopus-background) l c h / 40%);
|
|
28
28
|
--octopus-tertiary-really-transparent: oklch(from var(--octopus-tertiary) l c h / 30%);
|
|
29
29
|
|
|
30
|
+
//Gradient
|
|
31
|
+
--octopus-gradient : linear-gradient(90deg,var(--octopus-primary) 0%, var(--octopus-tertiary) 100%);
|
|
32
|
+
|
|
30
33
|
// Size
|
|
31
34
|
--octopus-image-size: 12.5rem;
|
|
32
35
|
--octopus-podcast-size: 13.5rem;
|
|
33
36
|
--octopus-border-radius: 0.2rem;
|
|
34
37
|
--octopus-line-clamp:2;
|
|
35
38
|
--octopus-max-height-description: 7rem;
|
|
39
|
+
|
|
40
|
+
//Font-family
|
|
41
|
+
--octopus-font-family: Montserrat,sans-serif,"Helvetica Neue";
|
|
36
42
|
}
|
package/src/style/general.scss
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/** Document style */
|
|
2
2
|
|
|
3
|
+
|
|
3
4
|
html{
|
|
4
5
|
font-size: 20px;
|
|
5
6
|
height: 100%;
|
|
@@ -9,7 +10,7 @@ html{
|
|
|
9
10
|
body{
|
|
10
11
|
margin: 0;
|
|
11
12
|
color: var(--octopus-color-text);
|
|
12
|
-
font-family:
|
|
13
|
+
font-family: var(--octopus-font-family);
|
|
13
14
|
font-size: 0.8rem;
|
|
14
15
|
overflow-x: hidden;
|
|
15
16
|
background: var(--octopus-secondary-lighter);
|
|
@@ -42,6 +43,10 @@ main, #app{
|
|
|
42
43
|
align-items: center;
|
|
43
44
|
}
|
|
44
45
|
|
|
46
|
+
input {
|
|
47
|
+
font-family: var(--octopus-font-family);
|
|
48
|
+
}
|
|
49
|
+
|
|
45
50
|
/** Link style */
|
|
46
51
|
a{
|
|
47
52
|
word-break: break-word;
|
|
@@ -114,6 +119,11 @@ main, #app{
|
|
|
114
119
|
background: var(--octopus-complementary-color) !important;
|
|
115
120
|
}
|
|
116
121
|
|
|
122
|
+
.bg-gradient{
|
|
123
|
+
background: var(--octopus-primary);
|
|
124
|
+
background:var(--octopus-gradient);
|
|
125
|
+
}
|
|
126
|
+
|
|
117
127
|
.text-blue-octopus{
|
|
118
128
|
color: var(--octopus-tertiary) !important
|
|
119
129
|
}
|
|
@@ -170,6 +180,13 @@ main, #app{
|
|
|
170
180
|
}
|
|
171
181
|
}
|
|
172
182
|
|
|
183
|
+
.show-small-screen{
|
|
184
|
+
display: none !important;
|
|
185
|
+
@media (width <= 500px) {
|
|
186
|
+
display: flex !important;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
|
|
173
190
|
.show-phone{
|
|
174
191
|
display: none;
|
|
175
192
|
|
package/tsconfig.json
CHANGED
|
@@ -13,7 +13,11 @@
|
|
|
13
13
|
"sourceMap": true,
|
|
14
14
|
"baseUrl": ".",
|
|
15
15
|
"types": [
|
|
16
|
-
"webpack-env"
|
|
16
|
+
"webpack-env", "sockjs-client"
|
|
17
|
+
],
|
|
18
|
+
"typeRoots": [
|
|
19
|
+
"./typings",
|
|
20
|
+
"./node_modules/@types/"
|
|
17
21
|
],
|
|
18
22
|
"paths": {
|
|
19
23
|
"@/*": [
|
|
@@ -38,6 +42,6 @@
|
|
|
38
42
|
"node_modules"
|
|
39
43
|
],
|
|
40
44
|
"files": [
|
|
41
|
-
"src/shims-vue.d.ts"
|
|
45
|
+
"src/shims-vue.d.ts"
|
|
42
46
|
]
|
|
43
47
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
declare module 'sockjs-client/dist/sockjs';
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { MediaRadio } from "@/stores/class/general/player";
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
displayTitle(metadata: MediaRadio): string {
|
|
5
|
-
let title = "";
|
|
6
|
-
if (metadata.title) {
|
|
7
|
-
title += metadata.title;
|
|
8
|
-
}
|
|
9
|
-
if (metadata.artist) {
|
|
10
|
-
title += " - " + metadata.artist;
|
|
11
|
-
}
|
|
12
|
-
return title;
|
|
13
|
-
}
|
|
14
|
-
};
|
|
15
|
-
|