@saooti/octopus-sdk 39.3.15 → 39.3.16

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 (36) hide show
  1. package/index.ts +1 -0
  2. package/package.json +1 -1
  3. package/src/App.vue +1 -1
  4. package/src/components/display/categories/CategoryList.vue +1 -2
  5. package/src/components/display/comments/CommentInput.vue +4 -0
  6. package/src/components/display/comments/CommentList.vue +1 -0
  7. package/src/components/display/comments/item/CommentMoreActions.vue +1 -1
  8. package/src/components/display/comments/modal/EditCommentModal.vue +2 -14
  9. package/src/components/display/filter/AdvancedSearch.vue +3 -2
  10. package/src/components/display/podcasts/PodcastModuleBox.vue +5 -0
  11. package/src/components/display/podcasts/PodcastPlannedSpinner.vue +93 -0
  12. package/src/components/display/rubriques/RubriqueList.vue +0 -2
  13. package/src/components/display/sharing/SharePlayer.vue +3 -2
  14. package/src/components/display/sharing/SubscribeButtons.vue +0 -1
  15. package/src/components/form/ClassicEmojiPicker.vue +29 -17
  16. package/src/components/misc/ClassicPopover.vue +46 -8
  17. package/src/components/misc/HomeDropdown.vue +1 -0
  18. package/src/components/misc/MobileMenu.vue +1 -0
  19. package/src/components/misc/ProgressBar.vue +2 -0
  20. package/src/components/misc/TopBar.vue +0 -5
  21. package/src/components/misc/TopBarMainContent.vue +11 -9
  22. package/src/components/misc/player/elements/PlayerSpeedButton.vue +1 -1
  23. package/src/components/mixins/podcast/podcastView.ts +3 -0
  24. package/src/components/pages/EmissionPage.vue +1 -9
  25. package/src/components/pages/EmissionsPage.vue +0 -8
  26. package/src/components/pages/MapPage.vue +1 -2
  27. package/src/components/pages/PlaylistPage.vue +0 -2
  28. package/src/components/pages/PodcastPage.vue +47 -27
  29. package/src/components/pages/PodcastsPage.vue +0 -2
  30. package/src/locale/de.ts +1 -0
  31. package/src/locale/en.ts +1 -0
  32. package/src/locale/es.ts +1 -0
  33. package/src/locale/fr.ts +1 -0
  34. package/src/locale/it.ts +1 -0
  35. package/src/locale/sl.ts +1 -0
  36. package/proxy.ts +0 -133
package/index.ts CHANGED
@@ -16,6 +16,7 @@ export const getError403Page = () => import("./src/components/pages/Error403Page
16
16
  export const getRadio = () => import("./src/components/pages/RadioPage.vue");
17
17
  export const getVideo = () => import("./src/components/pages/VideoPage.vue");
18
18
  export const getMapPage= () => import("./src/components/pages/MapPage.vue");
19
+ export const getPageNotFound= () => import("./src/components/pages/PageNotFound.vue");
19
20
 
20
21
  //Misc
21
22
  export const getAccordion = () => import("./src/components/misc/ClassicAccordion.vue");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saooti/octopus-sdk",
3
- "version": "39.3.15",
3
+ "version": "39.3.16",
4
4
  "private": false,
5
5
  "description": "Javascript SDK for using octopus",
6
6
  "author": "Saooti",
package/src/App.vue CHANGED
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div class="d-flex flex-column h-100 octopus-app">
3
3
  <template v-if="pageFullyLoad">
4
- <TopBar :is-education="false" />
4
+ <TopBar/>
5
5
  <main>
6
6
  <CategoryFilter v-if="firstDisplayCategoryFilter" />
7
7
  <div v-else class="category-filter-no-filter" />
@@ -25,14 +25,13 @@
25
25
  <ClassicPopover
26
26
  target="categories-dropdown"
27
27
  :only-click="true"
28
- :is-fixed="true"
29
28
  :left-pos="true"
30
- class="popover-z-index"
31
29
  >
32
30
  <button
33
31
  v-for="category in hidenCategories"
34
32
  :key="category.id"
35
33
  class="me-3 octopus-dropdown-item"
34
+ @keydown.enter="checkIfFilter(category)"
36
35
  @mousedown="checkIfFilter(category)"
37
36
  >
38
37
  {{ category.name }}
@@ -10,6 +10,7 @@
10
10
  />
11
11
  <div v-if="isTextareaActive" class="d-flex justify-content-between mt-1">
12
12
  <ClassicEmojiPicker
13
+ :id="uniqueId"
13
14
  popover-relative-class="page-element"
14
15
  @emoji-selected="addEmojiSelected"
15
16
  />
@@ -123,6 +124,9 @@ export default defineComponent({
123
124
  ? this.$t("Answer a comment")
124
125
  : this.$t("Write a comment");
125
126
  },
127
+ uniqueId(){
128
+ return "-comment"+(this.inAnswerComment?.commentId??"-parent");
129
+ }
126
130
  },
127
131
  watch: {
128
132
  focus(): void {
@@ -21,6 +21,7 @@
21
21
  class="me-3 octopus-dropdown-item"
22
22
  :disabled="sortOption.value === sortType"
23
23
  @mousedown="changeSort(sortOption.value)"
24
+ @keydown.enter="changeSort(sortOption.value)"
24
25
  >
25
26
  {{ sortOption.title }}
26
27
  </button>
@@ -35,7 +35,6 @@
35
35
  </button>
36
36
  <ClassicPopover
37
37
  :target="'comment-dropdown' + comment.commentId"
38
- popover-class="popover-z-index"
39
38
  :only-click="true"
40
39
  :left-pos="true"
41
40
  >
@@ -44,6 +43,7 @@
44
43
  v-if="action.condition"
45
44
  class="octopus-dropdown-item c-hand"
46
45
  @mousedown="action.actionClick"
46
+ @keydown.enter="action.actionClick"
47
47
  >
48
48
  {{ action.title }}
49
49
  </button>
@@ -10,13 +10,6 @@
10
10
  :error-text="errorUpdate ? $t(`An error occurred`) : undefined"
11
11
  />
12
12
  <template v-if="!inProcessing && !errorUpdate">
13
- <ClassicInputText
14
- v-model:text-init="name"
15
- v-model:error-variable="errorName"
16
- input-id="username-input"
17
- :label="$t('Your name')"
18
- :max-length="MAX_NAME"
19
- />
20
13
  <ClassicInputText
21
14
  v-model:text-init="commentText"
22
15
  v-model:error-variable="errorCommentText"
@@ -26,7 +19,7 @@
26
19
  :error-text="$t('Please provide a comment')"
27
20
  :is-textarea="true"
28
21
  :is-emoji-picker="true"
29
- emoji-relative-class="octopus-modal"
22
+ popover-relative-class="octopus-modal"
30
23
  :focus="true"
31
24
  />
32
25
  <ClassicSelect
@@ -49,7 +42,7 @@
49
42
  </button>
50
43
  <button
51
44
  class="btn btn-primary m-1"
52
- :disabled="errorName || errorCommentText"
45
+ :disabled="errorCommentText"
53
46
  @click="onEditComment"
54
47
  >
55
48
  {{ $t("Yes") }}
@@ -97,10 +90,7 @@ export default defineComponent({
97
90
  data() {
98
91
  return {
99
92
  MAX_DESCRIPTION: Constants.MAX_COMMENT as number,
100
- MAX_NAME: Constants.MAX_COMMENT_NAME as number,
101
- name: undefined as string | undefined,
102
93
  commentText: undefined as string | undefined,
103
- errorName: true as boolean,
104
94
  errorCommentText: true as boolean,
105
95
  commentState: "PENDING" as string,
106
96
  errorUpdate: false as boolean,
@@ -115,7 +105,6 @@ export default defineComponent({
115
105
  if (!this.comment) {
116
106
  return;
117
107
  }
118
- this.name = this.comment.poster.userName;
119
108
  this.commentText = this.comment.content;
120
109
  this.commentState = this.comment.state;
121
110
  },
@@ -131,7 +120,6 @@ export default defineComponent({
131
120
  dataToSend: {
132
121
  commentId: this.comment.commentId,
133
122
  content: this.commentText,
134
- name: this.name,
135
123
  state: this.commentState,
136
124
  },
137
125
  isNotAuth: !this.editRight,
@@ -17,7 +17,7 @@
17
17
  {{ $t("Filter") }}
18
18
  </div>
19
19
  <MonetizableFilter
20
- v-if="!isPodcastmaker && !isEducation"
20
+ v-if="!isPodcastmaker && !platformEducation"
21
21
  :is-emission="isEmission"
22
22
  :monetisable="monetisable"
23
23
  @update:monetisable="updateMonetisable"
@@ -82,6 +82,7 @@ import { rubriquesFilterParam } from "../../mixins/routeParam/rubriquesFilterPar
82
82
  import { RubriquageFilter } from "@/stores/class/rubrique/rubriquageFilter";
83
83
  import { defineComponent, defineAsyncComponent } from "vue";
84
84
  import { mapState } from "pinia";
85
+ import { useGeneralStore } from "../../../stores/GeneralStore";
85
86
  const MonetizableFilter = defineAsyncComponent(
86
87
  () => import("./MonetizableFilter.vue"),
87
88
  );
@@ -110,7 +111,6 @@ export default defineComponent({
110
111
  props: {
111
112
  organisationId: { default: undefined, type: String },
112
113
  isEmission: { default: false, type: Boolean },
113
- isEducation: { default: false, type: Boolean },
114
114
  includeHidden: { default: false, type: Boolean },
115
115
  sort: { default: "DATE", type: String },
116
116
  onlyVideo: { default: false, type: Boolean },
@@ -145,6 +145,7 @@ export default defineComponent({
145
145
  },
146
146
 
147
147
  computed: {
148
+ ...mapState(useGeneralStore, ["platformEducation"]),
148
149
  ...mapState(useFilterStore, ["filterIab", "filterRubrique"]),
149
150
  ...mapState(useAuthStore, [
150
151
  "isRoleProduction",
@@ -32,6 +32,7 @@
32
32
  <h2 class="mb-3">
33
33
  {{ podcast.title }}
34
34
  </h2>
35
+ <PodcastPlannedSpinner v-if="isPlannedInProcessor"/>
35
36
  <Countdown v-if="isCounter" :time-remaining="timeRemaining" />
36
37
  <!-- eslint-disable vue/no-v-html -->
37
38
  <div
@@ -175,6 +176,9 @@ const LikeSection = defineAsyncComponent(
175
176
  const DownloadPodcastButton = defineAsyncComponent(
176
177
  () => import("./DownloadPodcastButton.vue"),
177
178
  );
179
+ const PodcastPlannedSpinner = defineAsyncComponent(
180
+ () => import("./PodcastPlannedSpinner.vue"),
181
+ );
178
182
  const Countdown = defineAsyncComponent(() => import("../live/CountDown.vue"));
179
183
  const TagList = defineAsyncComponent(() => import("./TagList.vue"));
180
184
  import resizePhone from "../../mixins/resizePhone";
@@ -195,6 +199,7 @@ export default defineComponent({
195
199
  PodcastRawTranscript,
196
200
  DownloadPodcastButton,
197
201
  NewspaperVariantOutlineIcon,
202
+ PodcastPlannedSpinner
198
203
  },
199
204
 
200
205
  mixins: [displayMethods, orgaComputed, resizePhone, podcastView],
@@ -0,0 +1,93 @@
1
+ <template>
2
+ <div class="processing-planned-spinner d-flex align-items-center my-2 bg-secondary p-3">
3
+ <div class="cube">
4
+ <div class="side"></div>
5
+ <div class="side"></div>
6
+ <div class="side"></div>
7
+ <div class="side"></div>
8
+ <div class="side"></div>
9
+ <div class="side"></div>
10
+ </div>
11
+ <div class="fw-bold">{{$t('The episode is being processed')}}</div>
12
+ </div>
13
+ </template>
14
+
15
+ <script lang="ts">
16
+ import { defineComponent } from "vue";
17
+ export default defineComponent({
18
+ name: "PodcastPlannedSpinner",
19
+ });
20
+ </script>
21
+ <style lang="scss">
22
+ @use "@scss/variables" as octopusVariables;
23
+ .octopus-app .processing-planned-spinner{
24
+ .cube {
25
+ margin-right:1rem;
26
+ font-size: 24px;
27
+ height: 1em;
28
+ width: 1em;
29
+ position: relative;
30
+ transform: rotatex(30deg) rotatey(45deg);
31
+ transform-style: preserve-3d;
32
+ animation: cube-spin 2.5s infinite ease-in-out alternate;
33
+ }
34
+ .side {
35
+ position: absolute;
36
+ top: 0;
37
+ bottom: 0;
38
+ left: 0;
39
+ right: 0;
40
+ transform-style: preserve-3d;
41
+ }
42
+ .side::before {
43
+ content: "";
44
+ position: absolute;
45
+ top: 0;
46
+ bottom: 0;
47
+ left: 0;
48
+ right: 0;
49
+ background-color: octopusVariables.$octopus-primary-color;
50
+ transform: translatez(0.5em);
51
+ animation: cube-explode 1.5s infinite ease-in-out;
52
+ opacity: 0.5;
53
+ }
54
+ .side:nth-child(1) {
55
+ transform: rotatey(90deg);
56
+ }
57
+ .side:nth-child(2) {
58
+ transform: rotatey(180deg);
59
+ }
60
+ .side:nth-child(3) {
61
+ transform: rotatey(270deg);
62
+ }
63
+ .side:nth-child(4) {
64
+ transform: rotatey(360deg);
65
+ }
66
+ .side:nth-child(5) {
67
+ transform: rotatex(90deg);
68
+ }
69
+ .side:nth-child(6) {
70
+ transform: rotatex(270deg);
71
+ }
72
+ @keyframes cube-spin {
73
+ 0% {
74
+ transform: rotatex(30deg) rotatey(45deg);
75
+ }
76
+ 100% {
77
+ transform: rotatex(30deg) rotatey(405deg);
78
+ }
79
+ }
80
+ @keyframes cube-explode {
81
+ 0% {
82
+ transform: translatez(0.5em);
83
+ }
84
+ 50% {
85
+ transform: translatez(0.75em);
86
+ }
87
+ 100% {
88
+ transform: translatez(0.5em);
89
+ }
90
+ }
91
+
92
+ }
93
+ </style>
@@ -36,9 +36,7 @@
36
36
  <ClassicPopover
37
37
  ref="popoverRubrique"
38
38
  target="rubriques-dropdown"
39
- class="popover-z-index"
40
39
  :only-click="true"
41
- :is-fixed="true"
42
40
  :left-pos="true"
43
41
  >
44
42
  <RubriqueChooser
@@ -5,7 +5,7 @@
5
5
  {{ $t("Embed") }}
6
6
  </h3>
7
7
  <div
8
- v-if="noAd && !isEducation"
8
+ v-if="noAd && !platformEducation"
9
9
  class="sticker"
10
10
  :title="$t('You cannot insert advertising')"
11
11
  >
@@ -95,6 +95,7 @@ import { useApiStore } from "../../../stores/ApiStore";
95
95
  import { useSaveFetchStore } from "../../../stores/SaveFetchStore";
96
96
  import { mapState, mapActions } from "pinia";
97
97
  import { defineComponent, defineAsyncComponent } from "vue";
98
+ import { useGeneralStore } from "../../../stores/GeneralStore";
98
99
  const ShareModalPlayer = defineAsyncComponent(
99
100
  () => import("../../misc/modal/ShareModalPlayer.vue"),
100
101
  );
@@ -123,7 +124,6 @@ export default defineComponent({
123
124
  emission: { default: undefined, type: Object as () => Emission },
124
125
  playlist: { default: undefined, type: Object as () => Playlist },
125
126
  organisationId: { default: undefined, type: String },
126
- isEducation: { default: false, type: Boolean },
127
127
  exclusive: { default: false, type: Boolean },
128
128
  notExclusive: { default: true, type: Boolean },
129
129
  },
@@ -151,6 +151,7 @@ export default defineComponent({
151
151
  },
152
152
 
153
153
  computed: {
154
+ ...mapState(useGeneralStore, ["platformEducation"]),
154
155
  ...mapState(useAuthStore, ["authOrgaId"]),
155
156
  ...mapState(useApiStore, ["miniplayerUrl"]),
156
157
  authenticated(): boolean {
@@ -42,7 +42,6 @@
42
42
  target="subscribe-buttons-dropdown"
43
43
  popover-class="popover-z-index"
44
44
  :only-click="true"
45
- :is-fixed="true"
46
45
  :left-pos="true"
47
46
  >
48
47
  <a
@@ -1,7 +1,7 @@
1
1
  <template>
2
- <div class="classic-emoji-picker">
2
+ <div v-if="!isPhone" class="classic-emoji-picker">
3
3
  <button
4
- id="emoji-picker-dropdown"
4
+ :id="'emoji-picker-dropdown'+id"
5
5
  ref="emojiButton"
6
6
  class="btn btn-transparent d-flex align-items-center justify-content-center"
7
7
  :title="$t('Pick your emoji')"
@@ -9,12 +9,13 @@
9
9
  <EmoticonExcitedOutlineIcon :size="34" />
10
10
  </button>
11
11
  <ClassicPopover
12
- target="emoji-picker-dropdown"
12
+ :target="'emoji-picker-dropdown'+id"
13
13
  :only-click="true"
14
14
  :is-fixed="true"
15
- :top-pos="isReallyTopPosition"
15
+ :is-top-layer="isTopPosition"
16
+ :top-pos="isTopPosition"
16
17
  :relative-class="popoverRelativeClass"
17
- popover-class="popover-z-index"
18
+ :popover-class="isTopPosition?'popover-z-index':''"
18
19
  >
19
20
  <Picker
20
21
  :data="emojiIndex"
@@ -27,6 +28,7 @@
27
28
  </template>
28
29
 
29
30
  <script lang="ts">
31
+ import resizePhone from "../mixins/resizePhone";
30
32
  import EmoticonExcitedOutlineIcon from "vue-material-design-icons/EmoticonExcitedOutline.vue";
31
33
  import ClassicPopover from "../misc/ClassicPopover.vue";
32
34
  import data from "emoji-mart-vue-fast/data/all.json";
@@ -41,31 +43,41 @@ export default defineComponent({
41
43
  ClassicPopover,
42
44
  EmoticonExcitedOutlineIcon,
43
45
  },
46
+ mixins:[resizePhone],
44
47
  props: {
45
48
  popoverRelativeClass: { default: undefined, type: String },
46
49
  isTopPosition: { default: false, type: Boolean },
50
+ id: { default: "", type: String },
47
51
  },
48
52
  emits: ["emojiSelected"],
49
53
 
50
54
  data() {
51
55
  return {
52
56
  emojiIndex: emojiIndex,
53
- hasPlaceAboveButton: true as boolean,
57
+ /* hasPlaceAboveButton: false as boolean, */
58
+ isPhone: false as boolean,
54
59
  };
55
60
  },
56
- computed: {
61
+ /* computed: {
57
62
  isReallyTopPosition(): boolean {
58
63
  return this.isTopPosition && this.hasPlaceAboveButton;
59
64
  },
60
- },
61
- mounted() {
62
- if (this.$refs.emojiButton) {
63
- this.hasPlaceAboveButton =
64
- (this.$refs.emojiButton as HTMLButtonElement).getBoundingClientRect()
65
- .top +
66
- window.scrollY >
67
- 450;
68
- }
69
- },
65
+ }, */
66
+ /* watch:{
67
+ isPhone: {
68
+ immediate: true,
69
+ async handler() {
70
+ debugger;
71
+ if (!this.isPhone && this.isTopPosition && this.$refs.emojiButton) {
72
+ this.hasPlaceAboveButton =
73
+ (this.$refs.emojiButton as HTMLButtonElement).getBoundingClientRect()
74
+ .top +
75
+ window.scrollY >
76
+ 450;
77
+ }
78
+ },
79
+ },
80
+ }, */
70
81
  });
71
82
  </script>
83
+
@@ -1,12 +1,16 @@
1
1
  <template>
2
2
  <div
3
- v-show="show && !disable"
3
+ v-show="displayPopover"
4
4
  :id="'popover' + target"
5
5
  ref="popover"
6
+ popover
6
7
  tabindex="0"
7
- role="dialog"
8
8
  class="octopus-popover"
9
- :class="[onlyClick ? 'octopus-dropdown' : '', popoverClass]"
9
+ :class="[
10
+ displayPopover ? 'd-block': '',
11
+ onlyClick ? 'octopus-dropdown' : '',
12
+ isFixed && isTopLayerPopover ? 'position-fixed':'position-absolute',
13
+ popoverClass]"
10
14
  :style="positionInlineStyle"
11
15
  @focusout="clearDataBlur"
12
16
  @mouseenter="overPopover = true"
@@ -40,6 +44,7 @@ export default defineComponent({
40
44
  leftPos: { type: Boolean, default: false },
41
45
  topPos: { type: Boolean, default: false },
42
46
  popoverClass: { type: String, default: undefined },
47
+ isTopLayer: { type: Boolean, default: false },
43
48
  },
44
49
  emits: ["updateVisibility"],
45
50
  data() {
@@ -51,7 +56,8 @@ export default defineComponent({
51
56
  targetElement: null as HTMLElement | null,
52
57
  overPopover: false as boolean,
53
58
  isTabAction: false as boolean,
54
- maxHeight: '80vh' as string
59
+ maxHeight: '80vh' as string,
60
+ clearTimeout: undefined as ReturnType<typeof setTimeout> | undefined,
55
61
  };
56
62
  },
57
63
  computed: {
@@ -61,8 +67,24 @@ export default defineComponent({
61
67
  positionInlineStyle(): string {
62
68
  return `left: ${this.posX}px; top: ${this.posY}px;max-height:${this.maxHeight}`;
63
69
  },
70
+ displayPopover(): boolean{
71
+ return this.show && !this.disable;
72
+ },
73
+ isTopLayerPopover(){
74
+ return (this.isTopLayer || "octopus-modal"===this.relativeClass) && HTMLElement.prototype.hasOwnProperty("popover");
75
+ },
64
76
  },
65
77
  watch: {
78
+ displayPopover(){
79
+ if(!this.isTopLayerPopover){
80
+ return;
81
+ }
82
+ if(this.displayPopover){
83
+ (this.$refs.popover as HTMLElement).showPopover();
84
+ }else{
85
+ (this.$refs.popover as HTMLElement).hidePopover();
86
+ }
87
+ },
66
88
  show() {
67
89
  this.$emit("updateVisibility", this.show);
68
90
  if (this.show) {
@@ -132,6 +154,7 @@ export default defineComponent({
132
154
  }
133
155
  },
134
156
  setPopoverData(e: MouseEvent | PointerEvent) {
157
+ clearInterval(this.clearTimeout as unknown as number);
135
158
  if (this.disable || !e || !e.target) {
136
159
  return;
137
160
  }
@@ -141,6 +164,11 @@ export default defineComponent({
141
164
  this.clearData();
142
165
  return;
143
166
  }
167
+ if (this.show && this.isTopLayerPopover) {
168
+ (this.$refs.popover as HTMLElement).showPopover();
169
+ this.isClick = true;
170
+ return;
171
+ }
144
172
  this.isClick = true;
145
173
  }
146
174
  this.show = true;
@@ -149,7 +177,7 @@ export default defineComponent({
149
177
  let parentTop = 0;
150
178
  let parentScrollTop = 0;
151
179
  let parentBottom = 0;
152
- if (this.relativeClass) {
180
+ if (!this.isTopLayerPopover && this.relativeClass) {
153
181
  const modalBody = document.getElementsByClassName(
154
182
  this.relativeClass,
155
183
  )[0];
@@ -181,13 +209,21 @@ export default defineComponent({
181
209
  const yGap = this.topPos
182
210
  ? -5 - (this.$refs.popover as HTMLElement).clientHeight
183
211
  : 5;
212
+
184
213
  this.posY =
185
214
  yPosParent +
186
215
  parentScrollTop -
187
216
  parentTop +
188
217
  (this.isFixed ? 0 : window.scrollY) +
189
218
  yGap;
190
- this.maxHeight = this.relativeClass ? (parentBottom- this.posY -parentTop) + "px":'80vh';
219
+ if(this.isTopLayerPopover){
220
+ this.posY = Math.max(0, this.posY);
221
+ this.maxHeight = (window.innerHeight - this.posY) + "px";
222
+ }else if(this.relativeClass){
223
+ this.maxHeight = (parentBottom- this.posY -parentTop) + "px";
224
+ }else{
225
+ this.maxHeight = '80vh';
226
+ }
191
227
  },
192
228
  clearDataBlur(e: FocusEvent) {
193
229
  if (this.isTabAction) {
@@ -233,10 +269,11 @@ export default defineComponent({
233
269
  this.clearData();
234
270
  },
235
271
  clearDataTimeout() {
236
- setTimeout(() => {
272
+ this.clearTimeout = setTimeout(() => {
237
273
  if (!this.overPopover) {
238
274
  this.clearData();
239
275
  }
276
+ this.clearTimeout=undefined;
240
277
  }, 500);
241
278
  },
242
279
  clearData() {
@@ -256,8 +293,9 @@ export default defineComponent({
256
293
  background: white;
257
294
  border: 1px solid #ccc;
258
295
  border-radius: octopusVariables.$octopus-borderradius;
259
- position: absolute;
260
296
  overflow: auto;
297
+ margin: 0 !important;
298
+ z-index: 10;
261
299
  &.popover-z-index {
262
300
  z-index: 9999;
263
301
  }
@@ -30,6 +30,7 @@
30
30
  :only-click="true"
31
31
  :is-fixed="true"
32
32
  :left-pos="true"
33
+ :is-top-layer="true"
33
34
  >
34
35
  <nav :aria-label="$t('User menu')">
35
36
  <ul class="p-0 m-0">
@@ -16,6 +16,7 @@
16
16
  :only-click="true"
17
17
  :is-fixed="true"
18
18
  :left-pos="true"
19
+ :is-top-layer="true"
19
20
  >
20
21
  <template v-for="link in routerLinkArray" :key="link.routeName">
21
22
  <router-link
@@ -67,6 +67,7 @@
67
67
  right: 100 - chapter.endPercent + '%',
68
68
  }"
69
69
  />
70
+ <!-- If top layer widely available no need to teleport -->
70
71
  <Teleport to="#octopus-player-component">
71
72
  <ClassicPopover
72
73
  :target="'chapter-' + chapter.startPercent"
@@ -75,6 +76,7 @@
75
76
  :only-mouse="true"
76
77
  popover-class="octopus-small-popover popover-z-index"
77
78
  :content="chapter.title"
79
+ :is-top-layer="true"
78
80
  />
79
81
  </Teleport>
80
82
  </template>
@@ -5,7 +5,6 @@
5
5
  >
6
6
  <TopBarMainContent
7
7
  class="top-bar-z-index"
8
- :is-education="isEducation"
9
8
  :is-phone="isPhone"
10
9
  :scrolled="scrolled"
11
10
  :title-display="titleToDisplay"
@@ -50,10 +49,6 @@ export default defineComponent({
50
49
  },
51
50
 
52
51
  mixins: [imageProxy, resizePhone],
53
-
54
- props: {
55
- isEducation: { default: false, type: Boolean },
56
- },
57
52
  data() {
58
53
  return {
59
54
  scrolled: false as boolean,
@@ -18,7 +18,7 @@
18
18
  alt=""
19
19
  width="140"
20
20
  height="50"
21
- :class="isEducation ? 'educationLogo' : 'octopusLogo'"
21
+ :class="platformEducation ? 'educationLogo' : 'octopusLogo'"
22
22
  />
23
23
  <img
24
24
  v-else
@@ -26,7 +26,7 @@
26
26
  role="presentation"
27
27
  alt=""
28
28
  class="client-logo"
29
- :class="isEducation ? 'educationLogo' : ''"
29
+ :class="platformEducation ? 'educationLogo' : ''"
30
30
  />
31
31
  </router-link>
32
32
  <h1 v-if="titleIsDisplayed" class="text-truncate m-0 align-self-center">
@@ -49,7 +49,7 @@
49
49
  width="100"
50
50
  height="29"
51
51
  class="ms-2"
52
- :class="isEducation ? 'educationLogo' : 'octopusLogo'"
52
+ :class="platformEducation ? 'educationLogo' : 'octopusLogo'"
53
53
  />
54
54
  <a
55
55
  v-else
@@ -65,7 +65,7 @@
65
65
  width="100"
66
66
  height="29"
67
67
  class="ms-2"
68
- :class="isEducation ? 'educationLogo' : 'octopusLogo'"
68
+ :class="platformEducation ? 'educationLogo' : 'octopusLogo'"
69
69
  />
70
70
  </a>
71
71
  </template>
@@ -103,6 +103,7 @@
103
103
  :only-click="true"
104
104
  :is-fixed="true"
105
105
  :left-pos="true"
106
+ :is-top-layer="true"
106
107
  >
107
108
  <nav class="d-flex flex-column" :aria-label="$t('Site menu')">
108
109
  <ul class="p-0 m-0">
@@ -126,13 +127,13 @@
126
127
  </nav>
127
128
  </ClassicPopover>
128
129
  <MobileMenu
129
- :is-education="isEducation"
130
+ :is-education="platformEducation"
130
131
  :show="mobileMenuDisplay"
131
132
  :not-podcast-and-emission="inContentDisplayPage && !scrolled"
132
133
  :scrolled="scrolled"
133
134
  />
134
135
  <HomeDropdown
135
- :is-education="isEducation"
136
+ :is-education="platformEducation"
136
137
  :mobile-menu-display="mobileMenuDisplay"
137
138
  :scrolled="scrolled"
138
139
  />
@@ -163,6 +164,7 @@ import { useAuthStore } from "../../stores/AuthStore";
163
164
  import { mapState } from "pinia";
164
165
  import ClassicPopover from "../misc/ClassicPopover.vue";
165
166
  import { defineComponent, defineAsyncComponent } from "vue";
167
+ import { useGeneralStore } from "../../stores/GeneralStore";
166
168
  const MobileMenu = defineAsyncComponent(() => import("./MobileMenu.vue"));
167
169
  export default defineComponent({
168
170
  name: "TopBarMainContent",
@@ -175,7 +177,6 @@ export default defineComponent({
175
177
  },
176
178
  mixins: [imageProxy, rubriquesFilterComputed],
177
179
  props: {
178
- isEducation: { default: false, type: Boolean },
179
180
  isPhone: { default: false, type: Boolean },
180
181
  titleDisplay: { default: "", type: String },
181
182
  scrolled: { default: false, type: Boolean },
@@ -184,6 +185,7 @@ export default defineComponent({
184
185
  return {};
185
186
  },
186
187
  computed: {
188
+ ...mapState(useGeneralStore, ["platformEducation"]),
187
189
  ...mapState(useFilterStore, [
188
190
  "filterLive",
189
191
  "filterOrgaId",
@@ -243,12 +245,12 @@ export default defineComponent({
243
245
  title: this.$t("Productors"),
244
246
  routeName: "productors",
245
247
  condition:
246
- !this.isPodcastmaker && (!this.filterOrgaId || this.isEducation),
248
+ !this.isPodcastmaker && (!this.filterOrgaId || this.platformEducation),
247
249
  },
248
250
  ];
249
251
  },
250
252
  logoUrl(): string {
251
- if (this.isEducation) {
253
+ if (this.platformEducation) {
252
254
  return "/img/logo_education_white.svg";
253
255
  }
254
256
  return this.isPhone
@@ -12,7 +12,7 @@
12
12
  class="player-speed-dropdown"
13
13
  :top-pos="true"
14
14
  :only-click="true"
15
- :is-fixed="true"
15
+ :is-fixed="true"
16
16
  >
17
17
  <button
18
18
  v-for="(speed, index) in speedArray"
@@ -17,6 +17,9 @@ export default defineComponent({
17
17
  ? 0
18
18
  : dayjs(this.podcast.pubDate).diff(dayjs(), "seconds");
19
19
  },
20
+ isPlannedInProcessor(): boolean {
21
+ return "PLANNED" === this.podcast?.processingStatus;
22
+ },
20
23
  isLiveReadyToRecord(): boolean {
21
24
  return (
22
25
  undefined !== this.podcast &&
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <section class="page-box">
3
- <template v-if="loaded && !error">
3
+ <template v-if="loaded && !error && emission">
4
4
  <PodcastmakerHeader
5
5
  v-if="isPodcastmaker"
6
6
  :page-title="$t('Emission')"
@@ -50,8 +50,6 @@
50
50
  <EditBox
51
51
  v-if="editRight && !isPodcastmaker"
52
52
  :emission="emission"
53
- :rss-emission="rssEmission"
54
- :ftp-emission="ftpEmission"
55
53
  @is-updated="getEmissionDetails"
56
54
  />
57
55
  </section>
@@ -61,7 +59,6 @@
61
59
  :exclusive="exclusive"
62
60
  :not-exclusive="notExclusive"
63
61
  :organisation-id="authOrgaId"
64
- :is-education="isEducation"
65
62
  />
66
63
  <section class="module-box">
67
64
  <LiveHorizontalList
@@ -157,7 +154,6 @@ export default defineComponent({
157
154
  mixins: [displayMethods, handle403, orgaComputed, imageProxy, seoTitleUrl],
158
155
  props: {
159
156
  emissionId: { default: undefined, type: Number },
160
- isEducation: { default: false, type: Boolean },
161
157
  },
162
158
 
163
159
  data() {
@@ -166,8 +162,6 @@ export default defineComponent({
166
162
  title: "" as string,
167
163
  emission: undefined as Emission | undefined,
168
164
  error: false as boolean,
169
- rssEmission: false as boolean,
170
- ftpEmission: false as boolean,
171
165
  exclusive: false as boolean,
172
166
  notExclusive: false as boolean,
173
167
  fetchLive: true as boolean,
@@ -223,8 +217,6 @@ export default defineComponent({
223
217
  },
224
218
  handleAnnotations() {
225
219
  if (!this.emission?.annotations) return;
226
- this.rssEmission = "RSS" === this.emission.annotations.SOURCE_KIND;
227
- this.ftpEmission = "FTP" === this.emission.annotations.SOURCE_KIND;
228
220
  if (this.emission.annotations.exclusive) {
229
221
  this.exclusive = "true" === this.emission.annotations.exclusive;
230
222
  this.exclusive =
@@ -15,7 +15,6 @@
15
15
  v-model:to-date="toDate"
16
16
  v-model:rubrique-filter="rubriqueFilter"
17
17
  :search-pattern="searchPattern"
18
- :is-education="isEducation"
19
18
  :is-emission="true"
20
19
  :organisation-id="organisationId"
21
20
  />
@@ -54,7 +53,6 @@ export default defineComponent({
54
53
  },
55
54
  mixins: [advancedParamInit],
56
55
  props: {
57
- isEducation: { default: false, type: Boolean },
58
56
  pr: { default: 0, type: Number },
59
57
  ps: { default: 30, type: Number },
60
58
  routeQuery: { default: "", type: String },
@@ -67,11 +65,5 @@ export default defineComponent({
67
65
  routeOrga: { default: undefined, type: String },
68
66
  routeRubriques: { default: "", type: String },
69
67
  },
70
-
71
- data() {
72
- return {
73
- isEmission: true as boolean,
74
- };
75
- },
76
68
  });
77
69
  </script>
@@ -46,7 +46,6 @@ interface LinkMapSite {
46
46
  }
47
47
  export default defineComponent({
48
48
  props: {
49
- isEducation: { default: false, type: Boolean },
50
49
  externLinks: { default: () => [], type: Array as () => Array<LinkMapSite> },
51
50
  titleTag: { default: "h1", type: String },
52
51
  },
@@ -145,7 +144,7 @@ export default defineComponent({
145
144
  id: "link-page-productors",
146
145
  href: "/main/pub/productors",
147
146
  condition:
148
- !this.isPodcastmaker && (!this.filterOrgaId || this.isEducation),
147
+ !this.isPodcastmaker && (!this.filterOrgaId || this.platformEducation),
149
148
  },
150
149
  ];
151
150
  },
@@ -32,7 +32,6 @@
32
32
  v-if="!isPodcastmaker && undefined !== authOrgaId"
33
33
  :playlist="playlist"
34
34
  :organisation-id="authOrgaId"
35
- :is-education="isEducation"
36
35
  />
37
36
  <ShareButtons
38
37
  v-if="pageParameters.isShareButtons"
@@ -92,7 +91,6 @@ export default defineComponent({
92
91
 
93
92
  props: {
94
93
  playlistId: { default: undefined, type: Number },
95
- isEducation: { default: false, type: Boolean },
96
94
  },
97
95
  data() {
98
96
  return {
@@ -23,7 +23,6 @@
23
23
  :exclusive="exclusive"
24
24
  :not-exclusive="notExclusive"
25
25
  :organisation-id="authOrgaId"
26
- :is-education="isEducation"
27
26
  />
28
27
 
29
28
  <CommentSection v-if="!isPodcastmaker" :podcast="podcast" />
@@ -128,11 +127,8 @@ export default defineComponent({
128
127
  updateStatus: { default: undefined, type: String },
129
128
  playingPodcast: { default: undefined, type: Object as () => Podcast },
130
129
  podcastId: { default: 0, type: Number },
131
- isEducation: { default: false, type: Boolean },
132
130
  },
133
131
 
134
- emits: ["initConferenceId"],
135
-
136
132
  data() {
137
133
  return {
138
134
  loaded: false as boolean,
@@ -141,6 +137,7 @@ export default defineComponent({
141
137
  exclusive: false as boolean,
142
138
  notExclusive: false as boolean,
143
139
  fetchConference: undefined as Conference | undefined,
140
+ infoReload: undefined as ReturnType<typeof setTimeout> | undefined,
144
141
  };
145
142
  },
146
143
 
@@ -221,46 +218,32 @@ export default defineComponent({
221
218
  if (!this.podcast || this.error) {
222
219
  return;
223
220
  }
224
- this.getCommentsConfig(this.podcast);
225
221
  this.initCommentUser();
226
- this.initConference();
227
222
  },
228
223
  },
229
224
  },
230
225
  beforeUnmount() {
231
226
  this.contentToDisplayUpdate(null);
227
+ clearTimeout(this.infoReload);
232
228
  },
233
229
 
234
230
  methods: {
235
231
  ...mapActions(useGeneralStore, ["contentToDisplayUpdate"]),
236
232
  ...mapActions(useCommentStore, ["getCommentsConfig", "initCommentUser"]),
237
- async fetchConferencePublic() {
238
- const data = await classicApi.fetchData<ConferencePublicInfo>({
239
- api: 9,
240
- path: "conference/info/" + this.podcast?.conferenceId,
241
- });
242
- this.fetchConference = {
243
- ...data,
244
- ...{
245
- conferenceId: this.podcast?.conferenceId ?? 0,
246
- title: "",
247
- },
248
- };
249
- },
250
233
  async initConference() {
251
- if (!this.podcast || undefined == this.podcast.conferenceId) return;
234
+ if (!this.podcast || undefined == this.podcast.conferenceId || "READY_TO_RECORD" !== this.podcast.processingStatus) return;
235
+ this.fetchConference = { conferenceId: this.podcast.conferenceId, title: "" };
252
236
  if (this.isOctopusAndAnimator) {
253
237
  try {
254
- const data = await classicApi.fetchData<Conference>({
238
+ this.fetchConference = await classicApi.fetchData<Conference>({
255
239
  api: 9,
256
240
  path: "conference/" + this.podcast.conferenceId,
257
241
  });
258
- this.fetchConference = data ?? { conferenceId: -1, title: "" };
259
242
  } catch {
260
- await this.fetchConferencePublic();
243
+ await this.fetchConferenceStatus();
261
244
  }
262
245
  } else {
263
- await this.fetchConferencePublic();
246
+ await this.fetchConferenceStatus();
264
247
  }
265
248
  if (
266
249
  this.fetchConference &&
@@ -268,7 +251,27 @@ export default defineComponent({
268
251
  "PUBLISHING" !== this.fetchConference.status &&
269
252
  "DEBRIEFING" !== this.fetchConference.status
270
253
  ) {
271
- this.$emit("initConferenceId", this.podcast.conferenceId);
254
+ this.fetchConferenceStatusLoop();
255
+ }
256
+ },
257
+ async fetchConferenceStatusLoop() {
258
+ if("PUBLISHING" ===this.fetchConference?.status){
259
+ return;
260
+ }
261
+ this.infoReload = setTimeout(async () => {
262
+ await this.fetchConferenceStatus();
263
+ this.fetchConferenceStatusLoop();
264
+ }, 3000);
265
+ },
266
+ async fetchConferenceStatus() {
267
+ try {
268
+ const data = await classicApi.fetchData<ConferencePublicInfo>({
269
+ api: 9,
270
+ path: "conference/info/" + this.podcast?.conferenceId,
271
+ });
272
+ this.fetchConference.status = data.status;
273
+ } catch {
274
+ //Do nothing
272
275
  }
273
276
  },
274
277
  updatePodcast(podcastUpdated: Podcast): void {
@@ -320,15 +323,32 @@ export default defineComponent({
320
323
  !this.editRight
321
324
  ) {
322
325
  this.error = true;
323
- } else {
324
- this.updatePathParams(this.podcast.title);
326
+ this.loaded = true;
327
+ return;
325
328
  }
329
+ this.podcastInProcessing();
330
+ this.updatePathParams(this.podcast.title);
331
+ await this.getCommentsConfig(this.podcast);
326
332
  this.loaded = true;
327
333
  } catch (error) {
328
334
  this.handle403(error as AxiosError);
329
335
  this.initError();
330
336
  }
331
337
  },
338
+
339
+ podcastInProcessing(){
340
+ if("PLANNED" !== this.podcast?.processingStatus){
341
+ this.initConference();
342
+ return;
343
+ }
344
+ this.infoReload = setTimeout(async () => {
345
+ this.podcast = await classicApi.fetchData<Podcast>({
346
+ api: 0,
347
+ path: "podcast/" + this.podcastId,
348
+ });
349
+ this.podcastInProcessing();
350
+ }, 2000);
351
+ }
332
352
  },
333
353
  });
334
354
  </script>
@@ -15,7 +15,6 @@
15
15
  v-model:not-valid="notValid"
16
16
  v-model:rubrique-filter="rubriqueFilter"
17
17
  :search-pattern="searchPattern"
18
- :is-education="isEducation"
19
18
  :is-emission="false"
20
19
  :organisation-id="organisationId"
21
20
  />
@@ -55,7 +54,6 @@ export default defineComponent({
55
54
  },
56
55
  mixins: [advancedParamInit],
57
56
  props: {
58
- isEducation: { default: false, type: Boolean },
59
57
  pr: { default: 0, type: Number },
60
58
  ps: { default: 30, type: Number },
61
59
  routeQuery: { default: "", type: String },
package/src/locale/de.ts CHANGED
@@ -403,4 +403,5 @@ export default {
403
403
  "Show more days":"Weitere Tage anzeigen",
404
404
  "Show fewer days":"Weniger Tage anzeigen",
405
405
  "Site menu":"Site-Menü",
406
+ "The episode is being processed":"Die Episode wird bearbeitet",
406
407
  }
package/src/locale/en.ts CHANGED
@@ -404,4 +404,5 @@ export default {
404
404
  "Show more days":"Show more days",
405
405
  "Show fewer days":"Show fewer days",
406
406
  "Site menu":"Site menu",
407
+ "The episode is being processed":"The episode is being processed",
407
408
  };
package/src/locale/es.ts CHANGED
@@ -404,4 +404,5 @@ export default {
404
404
  "Show more days":"Mostrar más días",
405
405
  "Show fewer days":"Mostrar menos días",
406
406
  "Site menu":"Menú del sitio",
407
+ "The episode is being processed":"El episodio está siendo procesado",
407
408
  }
package/src/locale/fr.ts CHANGED
@@ -411,4 +411,5 @@ export default {
411
411
  "Show more days":"Afficher plus de jours",
412
412
  "Show fewer days":"Afficher moins de jours",
413
413
  "Site menu":"Menu du site",
414
+ "The episode is being processed":"L'épisode est en cours de traitement",
414
415
  };
package/src/locale/it.ts CHANGED
@@ -398,4 +398,5 @@ export default{
398
398
  "Show more days":"Mostra più giorni",
399
399
  "Show fewer days":"Mostra meno giorni",
400
400
  "Site menu":"Menù del sito",
401
+ "The episode is being processed":"L'episodio è in fase di elaborazione",
401
402
  };
package/src/locale/sl.ts CHANGED
@@ -394,4 +394,5 @@ export default {
394
394
  "Show more days":"Prikaži več dni",
395
395
  "Show fewer days":"Prikaži manj dni",
396
396
  "Site menu":"Meni spletnega mesta",
397
+ "The episode is being processed":"Epizoda je v obdelavi",
397
398
  }
package/proxy.ts DELETED
@@ -1,133 +0,0 @@
1
- 'use strict';
2
-
3
- const fs = require('fs');
4
- const BRANCH = fs.readFileSync('plateform.conf', 'utf8').trim();
5
- console.log("Content of BRANCH is " + BRANCH);
6
-
7
- const KEYCLOAK_TOKEN_URL = "https://keycloak." + BRANCH + "/realms/catalogue/protocol/openid-connect/token";
8
- const KEYCLOAK_USER = "admin";
9
- const KEYCLOAK_PASSWORD = "saooti-admin";
10
- const CLIENT_ID = "catalogue-web";
11
-
12
- const express = require('express');
13
- const axios = require('axios');
14
- const qs = require('querystring');
15
- const exec = require('child_process').exec;
16
-
17
- const app = express();
18
-
19
-
20
- const myArgs = process.argv.slice(2);
21
-
22
- let authenticated = true;
23
- if(myArgs.length){
24
- authenticated = !(myArgs[0] === "false");
25
- }
26
- app.get('/api/init', async function (req, res) {
27
- console.log("Requesting initialization of user ...");
28
- console.log("Content of KEYCLOAK_TOKEN_URL : "+KEYCLOAK_TOKEN_URL);
29
- console.log("Content of KEYCLOAK_USER : "+KEYCLOAK_USER);
30
- console.log("Content of KEYCLOAK_PASSWORD : "+KEYCLOAK_PASSWORD);
31
- console.log("Content of CLIENT_ID : "+CLIENT_ID);
32
- try {
33
- let result = await axios.post(KEYCLOAK_TOKEN_URL, qs.stringify({
34
- "username": KEYCLOAK_USER,
35
- "password": KEYCLOAK_PASSWORD,
36
- "grant_type": "password",
37
- "client_id": CLIENT_ID,
38
- "scope":"openid"
39
- }),{headers: {
40
- 'Content-Type': 'application/x-www-form-urlencoded'
41
- }});
42
- console.log("Content of result "+result);
43
- res.send({
44
- "authenticated": authenticated,
45
- "accessToken": result.data.access_token,
46
- "accessKeycloakUri":"https://keycloak." + BRANCH +"/realms/catalogue/protocol/openid-connect/",
47
- "refreshToken": result.data.refresh_token,
48
- "clientId": "catalogue-web",
49
- "expiration": new Date( Date.now() + result.data.expires_in * 1000 ),
50
- "name": "Fake Authentication",
51
- "apiUri": "https://api." + BRANCH +"/",
52
- "mediaUri": "https://media." + BRANCH +"/",
53
- "studioUri": "https://studio." + BRANCH +"/",
54
- "importerUri": "https://importer." + BRANCH +"/" ,
55
- "storageUri": "https://storage." + BRANCH +"/" ,
56
- "playerUri": "https://playerbeta." + BRANCH +"/" ,
57
- "processorUri": "https://processor." + BRANCH +"/" ,
58
- "keycloakApiUri": "https://keycloakApi." + BRANCH +"/" ,
59
- "frontendUri": "https://" + BRANCH +"" ,
60
- "hlsUri": "https://hls.live." + BRANCH +"/" ,
61
- "videomakerUri": "https://videomaker." + BRANCH +"/" ,
62
- "recoUri": "https://reco." + BRANCH +"/" ,
63
- "rtmpUri": "rtmp://rtmp.live." + BRANCH +"/",
64
- "commentsUri": "https://comments." + BRANCH +"/" ,
65
- "imageUri":"https://imageproxy." + BRANCH +"/",
66
- "speechToTextUri":"https://speech2text." + BRANCH +"/",
67
- "textToSpeechUri":"https://text2speech." + BRANCH +"/",
68
- "radioUri":"https://radio." + BRANCH +"/",
69
- "billingUri":"https://facturation." + BRANCH +"/",
70
- "openAiUri": "https://openai." + BRANCH +"/" ,
71
- "chapteringUri":"https://chaptering." + BRANCH +"/",
72
- "statRadioUri":"https://stats.radio." + BRANCH +"/",
73
- "isEducation": false,
74
- "captchaDevelopmentProfil": true,
75
- "goodNewsOrgaId": "bd1596f3-9653-4378-a9e6-6dd3bef5c873",
76
- "role": [
77
- "ADMIN",
78
- "ORGANISATION",
79
- "ANIMATION",
80
- "USERS",
81
- "PODCAST_VALIDATION",
82
- "PRODUCTION",
83
- "PLAYLISTS",
84
- "COMMENTS_MODERATION",
85
- "EDITOR",
86
- "ANALYTICS",
87
- "ADVERTISING",
88
- "LIVE",
89
- "EDITION",
90
- "PODCAST_CRUD",
91
- "RADIO",
92
- "BILLING_ADMIN",
93
- "BILLING_VIEWER",
94
- "RESTRICTED_PRODUCTION"
95
- ]
96
- });
97
- } catch (error) {
98
- res.send({
99
- "authenticated": true,
100
- "accessToken": null,
101
- "refreshToken": null,
102
- "expiration": null,
103
- "name": null,
104
- "clientId": null,
105
- "apiUri": "https://api." + BRANCH + "/",
106
- "importerUri": "https://importer." + BRANCH +"/" ,
107
- "mediaUri": "https://media." + BRANCH + "/",
108
- "studioUri": "https://studio." + BRANCH + "/",
109
- "storageUri": "https://storage." + BRANCH + "/",
110
- "playerUri": "https://playerbeta." + BRANCH + "/",
111
- "processorUri": "https://processor." + BRANCH + "/",
112
- "keycloakApiUri": "https://keycloakApi." + BRANCH + "/" ,
113
- "hlsUri": "https://hls.live." + BRANCH +"/" ,
114
- "videomakerUri": "https://videomaker." + BRANCH +"/" ,
115
- "recoUri": "https://reco." + BRANCH +"/" ,
116
- "frontendUri": "https://" + BRANCH +"/" ,
117
- "commentsUri": "https://comments." + BRANCH +"/" ,
118
- "imageUri":"https://imageproxy." + BRANCH +"/",
119
- "speechToTextUri":"https://speech2text." + BRANCH +"/",
120
- "textToSpeechUri":"https://text2speech." + BRANCH +"/",
121
- "billingUri":"https://facturation." + BRANCH +"/",
122
- "radioUri":"https://radio." + BRANCH +"/",
123
- "openAiUri": "https://openai." + BRANCH +"/" ,
124
- "chapteringUri":"https://chaptering." + BRANCH +"/",
125
- "statRadioUri":"https://stats.radio." + BRANCH +"/",
126
- "isEducation": false,
127
- "captchaDevelopmentProfil": true,
128
- "goodNewsOrgaId": null,
129
- });
130
- }
131
- });
132
-
133
- app.listen(3000, function () { });