@saooti/octopus-sdk 40.2.19 → 41.0.1-SNAPSHOT

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 (204) hide show
  1. package/package.json +2 -3
  2. package/src/App.vue +68 -88
  3. package/src/components/composable/player/usePlayerLive.ts +12 -3
  4. package/src/components/composable/player/usePlayerLogic.ts +6 -6
  5. package/src/components/composable/podcasts/usePodcastView.ts +3 -3
  6. package/src/components/composable/useInit.ts +2 -2
  7. package/src/components/composable/useMetaTitleWatch.ts +2 -2
  8. package/src/components/display/accessibility/AccessibilityModal.vue +56 -68
  9. package/src/components/display/categories/CategoryChooser.vue +142 -145
  10. package/src/components/display/categories/CategoryFilter.vue +172 -198
  11. package/src/components/display/categories/CategoryList.vue +122 -147
  12. package/src/components/display/comments/CommentInput.vue +100 -122
  13. package/src/components/display/comments/CommentList.vue +169 -191
  14. package/src/components/display/comments/CommentName.vue +35 -45
  15. package/src/components/display/comments/CommentParentInfo.vue +28 -34
  16. package/src/components/display/comments/CommentPlayer.vue +38 -50
  17. package/src/components/display/comments/CommentSection.vue +85 -103
  18. package/src/components/display/comments/item/CommentBasicView.vue +48 -61
  19. package/src/components/display/comments/item/CommentItem.vue +101 -116
  20. package/src/components/display/comments/item/CommentMoreActions.vue +174 -189
  21. package/src/components/display/comments/item/CommentMoreActionsAdmin.vue +1 -3
  22. package/src/components/display/comments/like/LikeButton.vue +36 -41
  23. package/src/components/display/comments/like/LikeSection.vue +128 -136
  24. package/src/components/display/comments/modal/CheckIdentityModal.vue +35 -40
  25. package/src/components/display/comments/modal/EditCommentModal.vue +72 -78
  26. package/src/components/display/comments/modal/RecaptchaModal.vue +58 -63
  27. package/src/components/display/comments/modal/ReportAbuseModal.vue +59 -66
  28. package/src/components/display/edit/EditBox.vue +6 -9
  29. package/src/components/display/edit/EditBoxRadio.vue +1 -5
  30. package/src/components/display/emission/EmissionInlineList.vue +82 -97
  31. package/src/components/display/emission/EmissionItem.vue +57 -69
  32. package/src/components/display/emission/EmissionList.vue +192 -218
  33. package/src/components/display/emission/EmissionPlayerItem.vue +47 -64
  34. package/src/components/display/emission/EmissionPresentationItem.vue +44 -54
  35. package/src/components/display/emission/EmissionPresentationList.vue +51 -61
  36. package/src/components/display/filter/AdvancedSearch.vue +154 -176
  37. package/src/components/display/filter/CategorySearchFilter.vue +43 -46
  38. package/src/components/display/filter/DateFilter.vue +76 -91
  39. package/src/components/display/filter/MonetizableFilter.vue +27 -30
  40. package/src/components/display/filter/ProductorSearch.vue +87 -90
  41. package/src/components/display/filter/RubriqueChoice.vue +58 -63
  42. package/src/components/display/filter/RubriqueFilter.vue +154 -169
  43. package/src/components/display/filter/SearchOrder.vue +35 -35
  44. package/src/components/display/list/ListPaginate.vue +80 -93
  45. package/src/components/display/list/PaginateParams.vue +36 -40
  46. package/src/components/display/list/PaginateSection.vue +113 -124
  47. package/src/components/display/list/SwiperList.vue +97 -109
  48. package/src/components/display/live/CountDown.vue +15 -9
  49. package/src/components/display/live/CountdownOctopus.vue +16 -10
  50. package/src/components/display/live/LiveHorizontalList.vue +95 -103
  51. package/src/components/display/live/LiveItem.vue +65 -73
  52. package/src/components/display/live/LiveList.vue +125 -137
  53. package/src/components/display/live/RadioCurrently.vue +66 -73
  54. package/src/components/display/live/RadioImage.vue +39 -50
  55. package/src/components/display/live/RadioItem.vue +9 -14
  56. package/src/components/display/live/RadioList.vue +39 -53
  57. package/src/components/display/live/RadioPlanning.vue +210 -222
  58. package/src/components/display/organisation/OrganisationChooser.vue +116 -122
  59. package/src/components/display/organisation/OrganisationChooserLight.vue +44 -52
  60. package/src/components/display/participant/ParticipantInlineList.vue +42 -58
  61. package/src/components/display/participant/ParticipantItem.vue +66 -74
  62. package/src/components/display/participant/ParticipantList.vue +119 -141
  63. package/src/components/display/playlist/PlaylistItem.vue +33 -46
  64. package/src/components/display/playlist/PlaylistList.vue +118 -144
  65. package/src/components/display/playlist/PodcastList.vue +79 -101
  66. package/src/components/display/playlist/PodcastPlaylistInlineList.vue +58 -70
  67. package/src/components/display/podcastmaker/PodcastmakerHeader.vue +21 -22
  68. package/src/components/display/podcasts/AnimatorsItem.vue +15 -16
  69. package/src/components/display/podcasts/DownloadPodcastButton.vue +21 -29
  70. package/src/components/display/podcasts/ParticipantDescription.vue +22 -24
  71. package/src/components/display/podcasts/PodcastFilterList.vue +48 -53
  72. package/src/components/display/podcasts/PodcastImage.vue +96 -99
  73. package/src/components/display/podcasts/PodcastInlineList.vue +30 -28
  74. package/src/components/display/podcasts/PodcastInlineListTemplate.vue +107 -114
  75. package/src/components/display/podcasts/PodcastIsPlaying.vue +4 -12
  76. package/src/components/display/podcasts/PodcastItem.vue +48 -63
  77. package/src/components/display/podcasts/PodcastItemInfo.vue +19 -35
  78. package/src/components/display/podcasts/PodcastList.vue +183 -206
  79. package/src/components/display/podcasts/PodcastModuleBox.vue +100 -137
  80. package/src/components/display/podcasts/PodcastPlannedSpinner.vue +4 -6
  81. package/src/components/display/podcasts/PodcastPlayBar.vue +50 -61
  82. package/src/components/display/podcasts/PodcastPlayBasicButton.vue +38 -41
  83. package/src/components/display/podcasts/PodcastPlayButton.vue +164 -175
  84. package/src/components/display/podcasts/PodcastRawTranscript.vue +69 -80
  85. package/src/components/display/podcasts/PodcastRubriqueList.vue +35 -38
  86. package/src/components/display/podcasts/PodcastSwiperList.vue +100 -110
  87. package/src/components/display/podcasts/TagList.vue +48 -50
  88. package/src/components/display/podcasts/VideoModuleBox.vue +13 -24
  89. package/src/components/display/rubriques/RubriqueChooser.vue +135 -140
  90. package/src/components/display/rubriques/RubriqueList.vue +140 -160
  91. package/src/components/display/sharing/ChooseEpisodesNumber.vue +34 -33
  92. package/src/components/display/sharing/FormatSwitch.vue +16 -11
  93. package/src/components/display/sharing/PlayerAnonymousModal.vue +24 -27
  94. package/src/components/display/sharing/PlayerCommonParameters.vue +20 -13
  95. package/src/components/display/sharing/PlayerParameters.vue +69 -71
  96. package/src/components/display/sharing/QrCode.vue +55 -67
  97. package/src/components/display/sharing/ShareAnonymous.vue +160 -178
  98. package/src/components/display/sharing/ShareDistribution.vue +103 -117
  99. package/src/components/display/sharing/ShareNewsletter.vue +154 -161
  100. package/src/components/display/sharing/SharePlayer.vue +273 -295
  101. package/src/components/display/sharing/SharePlayerColors.vue +25 -16
  102. package/src/components/display/sharing/SharePlayerRadio.vue +61 -69
  103. package/src/components/display/sharing/SharePlayerTypes.vue +176 -176
  104. package/src/components/display/sharing/ShareSocialsButtons.vue +63 -75
  105. package/src/components/display/sharing/SubscribeButtons.vue +184 -207
  106. package/src/components/display/studio/RecordingItemButton.vue +1 -4
  107. package/src/components/form/ClassicCheckbox.vue +26 -30
  108. package/src/components/form/ClassicContentEditable.vue +37 -33
  109. package/src/components/form/ClassicCopyButton.vue +40 -44
  110. package/src/components/form/ClassicDatePicker.vue +114 -114
  111. package/src/components/form/ClassicEmojiPicker.vue +20 -28
  112. package/src/components/form/ClassicInputText.vue +116 -120
  113. package/src/components/form/ClassicLoading.vue +7 -12
  114. package/src/components/form/ClassicMultiselect.vue +106 -116
  115. package/src/components/form/ClassicRadio.vue +21 -16
  116. package/src/components/form/ClassicRadioLabel.vue +23 -22
  117. package/src/components/form/ClassicSearch.vue +24 -19
  118. package/src/components/form/ClassicSelect.vue +47 -38
  119. package/src/components/form/ClassicWysiwyg.vue +116 -123
  120. package/src/components/icons/AmazonMusicIcon.vue +7 -10
  121. package/src/components/icons/ApplePodcastIcon.vue +7 -11
  122. package/src/components/icons/BlueSkyIcon.vue +8 -11
  123. package/src/components/icons/DeezerIcon.vue +8 -11
  124. package/src/components/icons/EditFtpIcon.vue +8 -11
  125. package/src/components/icons/IHeartIcon.vue +8 -11
  126. package/src/components/icons/PlayVideoIcon.vue +7 -10
  127. package/src/components/icons/PlayerFmIcon.vue +7 -10
  128. package/src/components/icons/PocketCastIcon.vue +8 -11
  129. package/src/components/icons/PodcastAddictIcon.vue +7 -10
  130. package/src/components/icons/RadiolineIcon.vue +8 -11
  131. package/src/components/icons/TuninIcon.vue +8 -11
  132. package/src/components/icons/XIcon.vue +7 -10
  133. package/src/components/misc/AcpmImage.vue +6 -7
  134. package/src/components/misc/ClassicAccordion.vue +26 -31
  135. package/src/components/misc/ClassicLazy.vue +86 -90
  136. package/src/components/misc/ClassicNav.vue +16 -20
  137. package/src/components/misc/ClassicPopover.vue +266 -282
  138. package/src/components/misc/ClassicSpinner.vue +5 -27
  139. package/src/components/misc/ErrorMessage.vue +11 -12
  140. package/src/components/misc/FooterGarSection.vue +33 -41
  141. package/src/components/misc/FooterSection.vue +109 -130
  142. package/src/components/misc/HomeDropdown.vue +83 -105
  143. package/src/components/misc/MobileMenu.vue +101 -111
  144. package/src/components/misc/ProgressBar.vue +53 -62
  145. package/src/components/misc/TopBar.vue +97 -120
  146. package/src/components/misc/TopBarMainContent.vue +114 -133
  147. package/src/components/misc/modal/ClassicModal.vue +40 -33
  148. package/src/components/misc/modal/ClassicModalInBody.vue +34 -28
  149. package/src/components/misc/modal/ClipboardModal.vue +27 -30
  150. package/src/components/misc/modal/ContractPreviewModal.vue +64 -62
  151. package/src/components/misc/modal/MessageModal.vue +50 -47
  152. package/src/components/misc/modal/NewsletterModal.vue +30 -31
  153. package/src/components/misc/modal/QrCodeModal.vue +21 -21
  154. package/src/components/misc/modal/ShareModalPlayer.vue +43 -52
  155. package/src/components/misc/player/PlayerCompact.vue +6 -4
  156. package/src/components/misc/player/PlayerComponent.vue +8 -9
  157. package/src/components/misc/player/PlayerLarge.vue +9 -8
  158. package/src/components/misc/player/ads/AdsProgressBar.vue +8 -11
  159. package/src/components/misc/player/ads/AdsSkipButton.vue +24 -30
  160. package/src/components/misc/player/chaptering/ChapteringModal.vue +44 -54
  161. package/src/components/misc/player/chaptering/PlayerChaptering.vue +50 -62
  162. package/src/components/misc/player/elements/PlayerImage.vue +51 -57
  163. package/src/components/misc/player/elements/PlayerPlayButton.vue +81 -92
  164. package/src/components/misc/player/elements/PlayerSpeedButton.vue +23 -27
  165. package/src/components/misc/player/elements/PlayerTitle.vue +85 -111
  166. package/src/components/misc/player/progressbar/PlayerProgressBar.vue +18 -29
  167. package/src/components/misc/player/progressbar/PodcastProgressBar.vue +45 -56
  168. package/src/components/misc/player/radio/RadioHistory.vue +80 -99
  169. package/src/components/misc/player/radio/RadioProgressBar.vue +43 -54
  170. package/src/components/misc/player/video/PlayerVideo.vue +27 -40
  171. package/src/components/misc/player/video/PlayerVideoDigiteka.vue +32 -37
  172. package/src/components/misc/player/video/PlayerVideoHls.vue +199 -198
  173. package/src/components/misc/player/video/PlayerYoutubeEmbed.vue +10 -12
  174. package/src/components/pages/CategoryPage.vue +28 -33
  175. package/src/components/pages/EmissionPage.vue +99 -132
  176. package/src/components/pages/EmissionsPage.vue +2 -0
  177. package/src/components/pages/Error403Page.vue +21 -20
  178. package/src/components/pages/HomePage.vue +91 -100
  179. package/src/components/pages/LivesPage.vue +35 -37
  180. package/src/components/pages/MapPage.vue +209 -241
  181. package/src/components/pages/PageLogout.vue +8 -11
  182. package/src/components/pages/PageNotFound.vue +9 -5
  183. package/src/components/pages/ParticipantPage.vue +82 -110
  184. package/src/components/pages/ParticipantsPage.vue +3 -0
  185. package/src/components/pages/PlaylistPage.vue +97 -115
  186. package/src/components/pages/PlaylistsPage.vue +9 -2
  187. package/src/components/pages/PodcastPage.vue +223 -238
  188. package/src/components/pages/PodcastsPage.vue +9 -2
  189. package/src/components/pages/RadioPage.vue +56 -70
  190. package/src/components/pages/RubriquePage.vue +7 -3
  191. package/src/components/pages/SearchPage.vue +31 -36
  192. package/src/components/pages/TagPage.vue +11 -9
  193. package/src/components/pages/VideoPage.vue +14 -11
  194. package/src/helper/displayHelper.ts +1 -1
  195. package/src/i18n.ts +2 -2
  196. package/src/main.ts +1 -1
  197. package/src/stores/class/general/player.ts +1 -0
  198. package/public/css/fonts/icomoon.eot +0 -0
  199. package/public/css/fonts/icomoon.svg +0 -113
  200. package/public/css/fonts/icomoon.ttf +0 -0
  201. package/public/css/fonts/icomoon.woff +0 -0
  202. package/public/css/fonts/icomoon.woff2 +0 -0
  203. package/public/css/fonts/style.css +0 -352
  204. package/sonarqube-scanner.js +0 -10
@@ -6,13 +6,13 @@
6
6
  :live="true"
7
7
  :recording="podcastConference"
8
8
  @delete-item="removeDeleted"
9
- @validate-podcast="$emit('updatePodcast', $event)"
9
+ @validate-podcast="emit('updatePodcast', $event)"
10
10
  />
11
11
  <EditBox
12
12
  v-else-if="editRight && isEditBox"
13
13
  :podcast="podcast"
14
14
  :display-studio-access="isDebriefing"
15
- @validate-podcast="$emit('updatePodcast', $event)"
15
+ @validate-podcast="emit('updatePodcast', $event)"
16
16
  />
17
17
  <div class="mb-2 w-100">
18
18
  <PodcastImage
@@ -38,7 +38,7 @@
38
38
  {{ date }}
39
39
  </time>
40
40
  <div v-if="isLiveReady" class="text-danger">
41
- {{ $t("Episode record in live") }}
41
+ {{ t("Episode record in live") }}
42
42
  </div>
43
43
  <div class="d-flex flex-column align-items-end">
44
44
  <time :datetime="durationIso">
@@ -60,13 +60,13 @@
60
60
  <!-- eslint-enable -->
61
61
  <div class="my-3">
62
62
  <div class="mb-1">
63
- {{ $t("Emission") + " : " }}
63
+ {{ t("Emission") + " : " }}
64
64
  <router-link
65
65
  :to="{
66
66
  name: 'emission',
67
67
  params: { emissionId: podcast.emission.emissionId },
68
68
  }"
69
- :title="$t('Series name page', { name: podcast.emission.name })"
69
+ :title="t('Series name page', { name: podcast.emission.name })"
70
70
  >
71
71
  {{ podcast.emission.name }}
72
72
  </router-link>
@@ -77,7 +77,7 @@
77
77
  :is-guest="true"
78
78
  />
79
79
  <div v-if="!isPodcastmaker" class="mb-1">
80
- {{ $t("Producted by : ") }}
80
+ {{ t("Producted by : ") }}
81
81
  <router-link
82
82
  :to="{
83
83
  name: 'productor',
@@ -88,27 +88,27 @@
88
88
  </router-link>
89
89
  </div>
90
90
  <div v-if="'' !== photoCredit" class="mb-1">
91
- {{ $t("Photo credits") + " : " + photoCredit }}
91
+ {{ t("Photo credits") + " : " + photoCredit }}
92
92
  </div>
93
93
  <div v-if="'' !== audioCredit" class="mb-1">
94
- {{ $t("Audio credits") + " : " + audioCredit }}
94
+ {{ t("Audio credits") + " : " + audioCredit }}
95
95
  </div>
96
96
  <div v-if="'' !== authorCredit" class="mb-1">
97
- {{ $t("Author credits") + " : " + authorCredit }}
97
+ {{ t("Author credits") + " : " + authorCredit }}
98
98
  </div>
99
99
  <a
100
- v-if="podcast.article && !isGarRole"
100
+ v-if="podcast.article && !authStore.isGarRole"
101
101
  class="btn d-flex align-items-center my-2 w-fit-content mb-1"
102
102
  :href="podcast.article"
103
103
  rel="noreferrer noopener"
104
104
  target="_blank"
105
- :title="$t('New window', {text : $t('See associated article')})"
105
+ :title="t('New window', {text : t('See associated article')})"
106
106
  >
107
107
  <NewspaperVariantOutlineIcon class="me-1" />
108
- <div>{{ $t("See associated article") }}</div>
108
+ <div>{{ t("See associated article") }}</div>
109
109
  </a>
110
110
  <PodcastPlayBar
111
- v-if="isProgressBar"
111
+ v-if="state.emissionsPage.progressBar"
112
112
  :podcast="podcast"
113
113
  />
114
114
  <div v-if="editRight && !isPodcastmaker">
@@ -118,13 +118,13 @@
118
118
  "
119
119
  class="me-5 text-secondary"
120
120
  >
121
- {{ $t("From RSS") }}
121
+ {{ t("From RSS") }}
122
122
  </div>
123
123
  <ErrorMessage v-if="'' !== errorMessage" :message="errorMessage" />
124
124
  </div>
125
125
  <div class="d-flex align-items-center flex-wrap">
126
126
  <LikeSection :edit-right="editRight" :podcast="podcast" />
127
- <DownloadPodcastButton v-if="isDownloadButton" :podcast="podcast" />
127
+ <DownloadPodcastButton v-if="state.podcastPage.downloadButton" :podcast="podcast" />
128
128
  </div>
129
129
  </div>
130
130
  </div>
@@ -150,7 +150,7 @@
150
150
  </section>
151
151
  </template>
152
152
 
153
- <script lang="ts">
153
+ <script setup lang="ts">
154
154
  import NewspaperVariantOutlineIcon from "vue-material-design-icons/NewspaperVariantOutline.vue";
155
155
  import PodcastImage from "./PodcastImage.vue";
156
156
  import ParticipantDescription from "./ParticipantDescription.vue";
@@ -162,7 +162,7 @@ import {usePodcastView} from "../../composable/podcasts/usePodcastView";
162
162
  import { Podcast } from "@/stores/class/general/podcast";
163
163
  import { Conference } from "@/stores/class/conference/conference";
164
164
 
165
- import { defineComponent, defineAsyncComponent, toRefs } from "vue";
165
+ import { defineAsyncComponent, toRefs, computed } from "vue";
166
166
  const ErrorMessage = defineAsyncComponent(
167
167
  () => import("../../misc/ErrorMessage.vue"),
168
168
  );
@@ -191,129 +191,92 @@ const Countdown = defineAsyncComponent(() => import("../live/CountDown.vue"));
191
191
  const TagList = defineAsyncComponent(() => import("./TagList.vue"));
192
192
  const ShareAnonymous = defineAsyncComponent(() => import("../sharing/ShareAnonymous.vue"));
193
193
  const PodcastRubriqueList = defineAsyncComponent(() => import("./PodcastRubriqueList.vue"));
194
- import { mapState } from "pinia";
195
- export default defineComponent({
196
- name: "PodcastModuleBox",
197
- components: {
198
- PodcastImage,
199
- ParticipantDescription,
200
- TagList,
201
- ErrorMessage,
202
- PodcastPlayBar,
203
- EditBox,
204
- RecordingItemButton,
205
- SubscribeButtons,
206
- Countdown,
207
- LikeSection,
208
- PodcastRawTranscript,
209
- DownloadPodcastButton,
210
- NewspaperVariantOutlineIcon,
211
- PodcastPlannedSpinner,
212
- PodcastRubriqueList,
213
- ShareAnonymous
214
- },
194
+ import { useI18n } from "vue-i18n";
195
+ import { useRouter } from "vue-router";
215
196
 
216
- props: {
217
- playingPodcast: { default: undefined, type: Object as () => Podcast },
218
- podcast: { default: undefined, type: Object as () => Podcast },
219
- podcastConference: { default: undefined, type: Object as () => Conference },
220
- },
197
+ //Props
198
+ const props = defineProps({
199
+ playingPodcast: { default: undefined, type: Object as () => Podcast },
200
+ podcast: { default: undefined, type: Object as () => Podcast },
201
+ podcastConference: { default: undefined, type: Object as () => Conference },
202
+ })
221
203
 
222
- emits: ["updatePodcast"],
204
+ //Emits
205
+ const emit = defineEmits(["updatePodcast"]);
223
206
 
224
- setup(props){
225
- const propsRef = toRefs(props);
226
- const {
227
- isLiveReadyToRecord,
228
- isCounter,
229
- timeRemaining,
230
- isPlannedInProcessor,
231
- date,
232
- duration,
233
- durationIso,
234
- isPodcastmaker,
235
- editRight
236
- } = usePodcastView(propsRef.podcast, propsRef.podcastConference);
237
- return { isPodcastmaker, editRight, isLiveReadyToRecord, isCounter, timeRemaining, isPlannedInProcessor, date, duration, durationIso }
238
- },
207
+ //Composables
208
+ const { t } = useI18n();
209
+ const propsRef = toRefs(props);
210
+ const {
211
+ isLiveReadyToRecord,
212
+ isCounter,
213
+ timeRemaining,
214
+ isPlannedInProcessor,
215
+ date,
216
+ duration,
217
+ durationIso,
218
+ isPodcastmaker,
219
+ editRight
220
+ } = usePodcastView(propsRef.podcast, propsRef.podcastConference);
221
+ const authStore = useAuthStore();
222
+ const router = useRouter();
239
223
 
240
- data() {
241
- return {
242
- };
243
- },
244
-
245
- computed: {
246
- ...mapState(useAuthStore, ["isRoleLive", "isGarRole"]),
247
- podcastRubriques(){
248
- let rubriques = this.podcast?.rubriqueIds ?? [];
249
- if(this.podcast?.emission?.rubriqueIds){
250
- rubriques = [...new Set(rubriques.concat(this.podcast?.emission?.rubriqueIds))];
251
- }
252
- return rubriques;
253
- },
254
- errorMessage(): string {
255
- if (!this.podcast?.availability.visibility) {
256
- return this.$t("Podcast is not visible for listeners");
257
- }
258
- if ("ERROR" === this.podcast?.processingStatus) {
259
- return this.$t("Podcast in ERROR, please contact Saooti");
260
- }
261
- return this.podcastNotValid ? this.$t("Podcast not validated") : "";
262
- },
263
- isProgressBar(): boolean {
264
- return state.emissionsPage.progressBar as boolean;
265
- },
266
- isLiveReady(): boolean {
267
- return (
268
- undefined !== this.podcast?.conferenceId &&
269
- 0 !== this.podcast?.conferenceId &&
270
- "READY" === this.podcast?.processingStatus
271
- );
272
- },
273
- isDebriefing(): boolean {
274
- return (
275
- undefined !== this.podcastConference &&
276
- "DEBRIEFING" === this.podcastConference.status
277
- );
278
- },
279
- isOctopusAndAnimator(): boolean {
280
- return !this.isPodcastmaker && this.editRight && this.isRoleLive;
281
- },
282
- podcastNotValid(): boolean {
283
- return (
284
- undefined !== this.podcast?.availability &&
285
- false === this.podcast?.valid
286
- );
287
- },
288
- photoCredit(): string {
289
- return (this.podcast?.annotations?.photoCredit as string) ?? "";
290
- },
291
- audioCredit(): string {
292
- return (this.podcast?.annotations?.audioCredit as string) ?? "";
293
- },
294
- authorCredit(): string {
295
- return (this.podcast?.annotations?.authorCredit as string) ?? "";
296
- },
297
- isEditBox(): boolean {
298
- return !((state.generalParameters.podcastmaker as boolean) ?? false);
299
- },
300
- isDownloadButton(): boolean {
301
- return state.podcastPage.downloadButton as boolean;
302
- },
303
- },
304
- methods: {
305
- urlify(text:string|undefined){
306
- return displayHelper.urlify(text);
307
- },
308
- removeDeleted(): void {
309
- if (this.isLiveReadyToRecord) {
310
- this.$router.push("/main/pub/lives");
311
- } else if (window.history.length > 1) {
312
- this.$router.go(-1);
313
- } else {
314
- this.$router.push("/");
315
- }
316
- },
317
- },
224
+ //Computed
225
+ const podcastRubriques = computed(() => {
226
+ let rubriques = props.podcast?.rubriqueIds ?? [];
227
+ if(props.podcast?.emission?.rubriqueIds){
228
+ rubriques = [...new Set(rubriques.concat(props.podcast?.emission?.rubriqueIds))];
229
+ }
230
+ return rubriques;
231
+ });
232
+ const errorMessage = computed(() => {
233
+ if (!props.podcast?.availability.visibility) {
234
+ return t("Podcast is not visible for listeners");
235
+ }
236
+ if ("ERROR" === props.podcast?.processingStatus) {
237
+ return t("Podcast in ERROR, please contact Saooti");
238
+ }
239
+ return podcastNotValid.value ? t("Podcast not validated") : "";
240
+ });
241
+ const isLiveReady = computed(() => {
242
+ return (
243
+ undefined !== props.podcast?.conferenceId &&
244
+ 0 !== props.podcast?.conferenceId &&
245
+ "READY" === props.podcast?.processingStatus
246
+ );
247
+ });
248
+ const isDebriefing = computed(() => {
249
+ return (
250
+ undefined !== props.podcastConference &&
251
+ "DEBRIEFING" === props.podcastConference.status
252
+ );
318
253
  });
254
+ const isOctopusAndAnimator = computed(() => {
255
+ return !isPodcastmaker && editRight && authStore.isRoleLive;
256
+ });
257
+ const podcastNotValid = computed(() => {
258
+ return (
259
+ undefined !== props.podcast?.availability &&
260
+ false === props.podcast?.valid
261
+ );
262
+ });
263
+ const photoCredit = computed(() => (props.podcast?.annotations?.photoCredit as string) ?? "");
264
+ const audioCredit = computed(() => (props.podcast?.annotations?.audioCredit as string) ?? "");
265
+ const authorCredit = computed(() => (props.podcast?.annotations?.authorCredit as string) ?? "");
266
+ const isEditBox = computed(() => !((state.generalParameters.podcastmaker as boolean) ?? false));
267
+
268
+
269
+ //Methods
270
+ function urlify(text:string|undefined){
271
+ return displayHelper.urlify(text);
272
+ }
273
+ function removeDeleted(): void {
274
+ if (isLiveReadyToRecord.value) {
275
+ router.push("/main/pub/lives");
276
+ } else if (window.history.length > 1) {
277
+ router.go(-1);
278
+ } else {
279
+ router.push("/");
280
+ }
281
+ }
319
282
  </script>
@@ -8,15 +8,13 @@
8
8
  <div class="side"></div>
9
9
  <div class="side"></div>
10
10
  </div>
11
- <div class="fw-bold">{{$t('The episode is being processed')}}</div>
11
+ <div class="fw-bold">{{t('The episode is being processed')}}</div>
12
12
  </div>
13
13
  </template>
14
14
 
15
- <script lang="ts">
16
- import { defineComponent } from "vue";
17
- export default defineComponent({
18
- name: "PodcastPlannedSpinner",
19
- });
15
+ <script setup lang="ts">
16
+ import { useI18n } from "vue-i18n";
17
+ const { t } = useI18n();
20
18
  </script>
21
19
  <style lang="scss">
22
20
 
@@ -19,71 +19,60 @@
19
19
  </div>
20
20
  </template>
21
21
 
22
- <script lang="ts">
22
+ <script setup lang="ts">
23
23
  import ProgressBar from "../../misc/ProgressBar.vue";
24
24
  import DurationHelper from "../../../helper/durationHelper";
25
25
  import { usePlayerStore } from "../../../stores/PlayerStore";
26
- import { mapState, mapActions } from "pinia";
27
- import { defineAsyncComponent, defineComponent } from "vue";
26
+ import { computed, defineAsyncComponent } from "vue";
28
27
  import { Podcast } from "@/stores/class/general/podcast";
29
28
  const PodcastPlayBasicButton = defineAsyncComponent(() => import("./PodcastPlayBasicButton.vue"));
30
- export default defineComponent({
31
- name: "PodcastPlayBar",
32
- components: {
33
- ProgressBar,
34
- PodcastPlayBasicButton
35
- },
36
- props: {
37
- podcast: { default: () => ({}), type: Object as () => Podcast },
38
- displayButonPlay:{ default: false, type: Boolean },
39
- },
40
- computed: {
41
- ...mapState(usePlayerStore, [
42
- "playerPodcast",
43
- "playerElapsed",
44
- "playerTotal",
45
- "playerStatus"
46
- ]),
47
- percentProgress(): number {
48
- if (this.podcast?.podcastId !== this.playerPodcast?.podcastId) {
49
- return 0;
50
- }
51
- return !this.playerElapsed ? 0 : this.playerElapsed * 100;
52
- },
53
- playedTime(): string {
54
- if (this.podcast?.podcastId === this.playerPodcast?.podcastId) {
55
- if (
56
- this.playerElapsed &&
57
- this.playerElapsed > 0 &&
58
- this.playerTotal &&
59
- this.playerTotal > 0
60
- ) {
61
- return DurationHelper.formatDuration(
62
- Math.round(this.playerElapsed * this.playerTotal),
63
- );
64
- }
65
- }
66
- return "00:00";
67
- },
68
- totalTime(): string {
69
- return DurationHelper.formatDuration(Math.round(this.podcast.duration / 1000));
70
- },
71
- },
72
- methods: {
73
- ...mapActions(usePlayerStore, ["playerUpdateSeekTime"]),
74
- seekTo(event: MouseEvent): void {
75
- if (
76
- !this.playerPodcast ||
77
- this.podcast?.podcastId !== this.playerPodcast.podcastId
78
- ) {
79
- return;
80
- }
81
- const rect = (event.currentTarget as Element).getBoundingClientRect();
82
- const barWidth = (event.currentTarget as Element).clientWidth;
83
- const x = event.clientX - rect.left;
84
- const percentPosition = x / barWidth;
85
- this.playerUpdateSeekTime(this.playerTotal * percentPosition);
86
- },
87
- },
29
+
30
+
31
+ //Props
32
+ const props = defineProps({
33
+ podcast: { default: () => ({}), type: Object as () => Podcast },
34
+ displayButonPlay:{ default: false, type: Boolean },
35
+ })
36
+
37
+ //Composables
38
+ const playerStore = usePlayerStore();
39
+
40
+ //Computed
41
+ const percentProgress = computed(() => {
42
+ if (props.podcast?.podcastId !== playerStore.playerPodcast?.podcastId) {
43
+ return 0;
44
+ }
45
+ return !playerStore.playerElapsed ? 0 : playerStore.playerElapsed * 100;
46
+ });
47
+ const playedTime = computed(() => {
48
+ if (props.podcast?.podcastId === playerStore.playerPodcast?.podcastId) {
49
+ if (
50
+ playerStore.playerElapsed &&
51
+ playerStore.playerElapsed > 0 &&
52
+ playerStore.playerTotal &&
53
+ playerStore.playerTotal > 0
54
+ ) {
55
+ return DurationHelper.formatDuration(
56
+ Math.round(playerStore.playerElapsed * playerStore.playerTotal),
57
+ );
58
+ }
59
+ }
60
+ return "00:00";
88
61
  });
62
+ const totalTime = computed(() => DurationHelper.formatDuration(Math.round(props.podcast.duration / 1000)));
63
+
64
+ //Methods
65
+ function seekTo(event: MouseEvent): void {
66
+ if (
67
+ !playerStore.playerPodcast ||
68
+ props.podcast?.podcastId !== playerStore.playerPodcast.podcastId
69
+ ) {
70
+ return;
71
+ }
72
+ const rect = (event.currentTarget as Element).getBoundingClientRect();
73
+ const barWidth = (event.currentTarget as Element).clientWidth;
74
+ const x = event.clientX - rect.left;
75
+ const percentPosition = x / barWidth;
76
+ playerStore.playerUpdateSeekTime(playerStore.playerTotal * percentPosition);
77
+ }
89
78
  </script>
@@ -3,54 +3,51 @@
3
3
  class="btn play-button-box bg-primary"
4
4
  @click="clickBtn(podcast)"
5
5
  >
6
- <PlayIcon v-if="btnPlay" class="text-light" :title="$t('Play')" />
7
- <PauseIcon v-else class="text-light" :title="$t('Pause')" />
6
+ <PlayIcon v-if="btnPlay" class="text-light" :title="t('Play')" />
7
+ <PauseIcon v-else class="text-light" :title="t('Pause')" />
8
8
  </button>
9
9
  </template>
10
10
 
11
- <script lang="ts">
11
+ <script setup lang="ts">
12
12
  import PlayIcon from "vue-material-design-icons/Play.vue";
13
13
  import PauseIcon from "vue-material-design-icons/Pause.vue";
14
14
  import { usePlayerStore } from "../../../stores/PlayerStore";
15
- import { mapState, mapActions } from "pinia";
16
- import { defineComponent } from "vue";
15
+ import { computed } from "vue";
17
16
  import { Podcast } from "@/stores/class/general/podcast";
18
- export default defineComponent({
19
- name: "PodcastPlayBasicButton",
20
- components: {
21
- PlayIcon,
22
- PauseIcon
23
- },
24
- props: {
25
- podcast: { default: () => ({}), type: Object as () => Podcast },
26
- },
27
- computed: {
28
- ...mapState(usePlayerStore, ["playerPodcast", "playerStatus"]),
29
- btnPlay(){
30
- return this.playerPodcast !== this.podcast || (this.playerPodcast === this.podcast && 'PAUSED' === this.playerStatus);
31
- }
32
- },
33
- methods: {
34
- ...mapActions(usePlayerStore, ["playerPlay", "playerChangeStatus"]),
35
- clickBtn(podcast: Podcast){
36
- if(this.btnPlay){
37
- this.play(podcast);
38
- return;
39
- }
40
- this.pause();
41
- },
42
- play(podcast: Podcast): void {
43
- if (podcast === this.playerPodcast) {
44
- this.playerChangeStatus(false);
45
- } else {
46
- this.playerPlay(podcast);
47
- }
48
- },
49
- pause(): void {
50
- this.playerChangeStatus(true);
51
- },
52
- },
53
- });
17
+ import { useI18n } from "vue-i18n";
18
+
19
+
20
+ //Props
21
+ const props = defineProps({
22
+ podcast: { default: () => ({}), type: Object as () => Podcast },
23
+ })
24
+
25
+ //Composables
26
+ const { t } = useI18n();
27
+ const playerStore = usePlayerStore();
28
+
29
+ //Computed
30
+ const btnPlay = computed(() => playerStore.playerPodcast !== props.podcast || (playerStore.playerPodcast === props.podcast && 'PAUSED' === playerStore.playerStatus));
31
+
32
+
33
+ //Methods
34
+ function clickBtn(podcast: Podcast){
35
+ if(btnPlay.value){
36
+ play(podcast);
37
+ return;
38
+ }
39
+ pause();
40
+ }
41
+ function play(podcast: Podcast): void {
42
+ if (podcast === playerStore.playerPodcast) {
43
+ playerStore.playerChangeStatus(false);
44
+ } else {
45
+ playerStore.playerPlay(podcast);
46
+ }
47
+ }
48
+ function pause(): void {
49
+ playerStore.playerChangeStatus(true);
50
+ }
54
51
  </script>
55
52
  <style lang="scss">
56
53
  @use "../../../style/playButton";