@christianriedl/media 1.0.305 → 1.0.306

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.
@@ -82,6 +82,8 @@ export class PlaylistService {
82
82
  return res.ok ? res.result : false;
83
83
  }
84
84
  async playCommand(cmd) {
85
+ if (cmd == EPlaylistCommand.Stop && this.getSoundbarValue('On') === false)
86
+ return true;
85
87
  this.soundbarOn = await this.ensureSoundbarOn();
86
88
  if (!this.soundbarOn)
87
89
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"playlistService.js","sourceRoot":"","sources":["../src/playlistService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"playlistService.js","sourceRoot":"","sources":["../src/playlistService.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@christianriedl/media",
3
- "version": "1.0.305",
3
+ "version": "1.0.306",
4
4
  "description": "RIC media interfaces",
5
5
 
6
6
  "main": "dist/index.js",
@@ -6,6 +6,7 @@
6
6
  import { getPlaylistSymbol, IPlaylistService, IPlaylistState, IRssFeed, IRssItem, EPlaylistCommand, EFeedType } from '@christianriedl/media';
7
7
 
8
8
  const appState = inject(appStateSymbol)!;
9
+ const appConfig = inject(appConfigSymbol)!;
9
10
  const getPlaylistService = inject(getPlaylistSymbol)!;
10
11
  const playlistService = getPlaylistService() ;
11
12
  const heightStyle = computed<StyleValue>(() => { return { height: appState.bodyHeight.value + 'px', overflowY: 'auto' } });
@@ -139,6 +140,16 @@
139
140
  play();
140
141
  computeListHeight();
141
142
  }
143
+
144
+ function download(item: IRssItem) {
145
+ const anchor = document.createElement("a");
146
+ anchor.href = item.link;
147
+ anchor.download = item.title + ".mp3";
148
+ document.body.appendChild(anchor);
149
+ anchor.click();
150
+ document.body.removeChild(anchor);
151
+ }
152
+
142
153
  function listBack() {
143
154
  router.back();
144
155
  }
@@ -184,6 +195,15 @@
184
195
  }
185
196
  return r;
186
197
  }
198
+
199
+ function firstGenre(s?: string) {
200
+ if (!s)
201
+ return "";
202
+ const idx = s.indexOf('|');
203
+ if (idx > 0)
204
+ return s.substring(0, idx);
205
+ return s;
206
+ }
187
207
  function onEnded() {
188
208
  }
189
209
  function onTimeUpdate() {
@@ -238,6 +258,13 @@
238
258
  selectedItem.value = items[playIndex.value + 1];
239
259
  play();
240
260
  }
261
+ async function stopAll() {
262
+ if (audio.value) {
263
+ audio.value!.pause();
264
+ audio.value!.currentTime = 0;
265
+ }
266
+ await playlistService.playCommand(EPlaylistCommand.Stop);
267
+ }
241
268
  async function stop() {
242
269
  if (playLocal.value) {
243
270
  audio.value!.pause();
@@ -265,11 +292,14 @@
265
292
  </audio>
266
293
  <v-container v-if="search" fluid>
267
294
  <v-row class="align-center" density="compact">
268
- <v-col cols="1">ORF</v-col>
269
- <v-col cols="2">Type</v-col>
270
- <v-col cols="1">Country</v-col>
271
- <v-col cols="6">Query</v-col>
272
- <v-col cols="1">Limit</v-col>
295
+ <v-col cols="1">Orf</v-col>
296
+ <v-col v-if="orf" cols="3">Category</v-col>
297
+ <template v-else>
298
+ <v-col cols="2">Type</v-col>
299
+ <v-col cols="1">Country</v-col>
300
+ </template>
301
+ <v-col cols="4">Query</v-col>
302
+ <v-col cols="2">Limit</v-col>
273
303
  </v-row>
274
304
  <v-row class="align-center" density="compact">
275
305
  <v-col cols="1">
@@ -295,45 +325,50 @@
295
325
  </v-combobox>
296
326
  </v-col>
297
327
  </template>
298
- <v-col cols="6">
328
+ <v-col cols="4">
299
329
  <v-text-field v-model="query" hide-details density="compact"></v-text-field>
300
330
  </v-col>
301
- <v-col cols="1">
331
+ <v-col cols="2">
302
332
  <v-text-field v-model="limit" hide-details type="number" density="compact"></v-text-field>
303
333
  </v-col>
304
334
  <v-col cols="1">
305
- <v-btn icon="$search" class="bg-media_head" variant="tonal" @click="onSearch">
306
- </v-btn>
335
+ <v-btn icon="$search" class="bg-media_head" variant="tonal" density="default" @click="onSearch"></v-btn>
336
+ </v-col>
337
+ <v-col cols="1">
338
+ <v-btn icon="$stop" class="bg-media_head" variant="tonal" density="default" @click="stopAll"></v-btn>
307
339
  </v-col>
308
340
  </v-row>
309
341
  </v-container>
310
342
  <v-container v-else fluid>
311
343
  <v-row class="align-center" density="compact">
312
344
  <v-col cols="1">
313
- <v-btn icon="$back" class="bg-media_head" variant="tonal" @click="listBack">
314
- </v-btn>
345
+ <v-btn icon="$back" class="bg-media_head" variant="tonal" density="compact" @click="listBack"></v-btn>
315
346
  </v-col>
316
347
  <v-col cols="1">
317
348
  <v-img :src="selectedFeed!.imageUrl"></v-img>
318
349
  </v-col>
319
350
  <v-col cols="1">{{selectedFeed!.country}}</v-col>
320
- <v-col cols="2">{{selectedFeed!.genre}}</v-col>
351
+ <v-col cols="2">{{firstGenre(selectedFeed!.genre)}}
352
+ <v-tooltip v-if="!isMobile && selectedFeed!.genre && selectedFeed!.genre.indexOf('|') > 0" activator="parent" location="top">
353
+ {{selectedFeed!.genre.replaceAll('|', ', ')}}
354
+ </v-tooltip>
355
+ </v-col>
321
356
  <v-col cols="2">{{selectedFeed!.owner}}</v-col>
322
- <v-col cols="4">{{selectedFeed!.title}}</v-col>
323
- <v-col cols="1">
357
+ <v-col :cols="(appConfig.isLocal && isMobile) ? 3 : 4">{{selectedFeed!.title}}</v-col>
358
+ <v-col v-if="appConfig.isLocal" :cols="isMobile ? 2 : 1">
324
359
  <v-select v-model="currentPlayer" density="compact" :items="playerNames" persistent-hint
325
360
  @update:modelValue="onPlayerChange" hide-details single-line>
326
361
  </v-select>
327
362
  </v-col>
328
363
  </v-row>
329
364
  <v-row v-if="playingItem" class="align-center" density="compact">
330
- <v-col cols="4">
331
- <v-btn :icon="paused ? '$play' : '$pause'" class="bg-media_head" variant="tonal" @click="playpause"></v-btn>
332
- <v-btn icon="$stop" class="bg-media_head" variant="tonal" @click="stop"></v-btn>
333
- <v-btn icon="$prev" class="bg-media_head" variant="tonal" @click="previous"></v-btn>
334
- <v-btn icon="$next" class="bg-media_head" variant="tonal" @click="next"></v-btn>
365
+ <v-col :cols="isMobile ? 5 : 3">
366
+ <v-btn :icon="paused ? '$play' : '$pause'" class="bg-media_head" variant="tonal" density="compact" @click="playpause"></v-btn>
367
+ <v-btn icon="$stop" class="bg-media_head" variant="tonal" density="compact" @click="stop"></v-btn>
368
+ <v-btn icon="$prev" class="bg-media_head" variant="tonal" density="compact" @click="previous"></v-btn>
369
+ <v-btn icon="$next" class="bg-media_head" variant="tonal" density="compact" @click="next"></v-btn>
335
370
  </v-col>
336
- <v-col cols ="8">
371
+ <v-col :cols ="isMobile? 7 : 9">
337
372
  <v-slider v-if="!playLocal" style="width:30%" color="red" track-color="blue" track-fill-color="red" v-model="volume" hide-details density="compact"
338
373
  min="0" max="100" step="5" @update:modelValue="changeVolume">
339
374
  </v-slider>
@@ -351,67 +386,33 @@
351
386
  <v-container v-if="search" fluid>
352
387
  <v-row v-for="(feed,index) in feeds" :key="feed.rssUrl" density="compact" @click="listFeed(feed)">
353
388
  <v-col cols="1">{{feed.country}}</v-col>
354
- <v-col cols="2">{{feed.genre}}</v-col>
389
+ <v-col cols="2">{{firstGenre(feed.genre)}}
390
+ <v-tooltip v-if="!isMobile && feed.genre && feed.genre.indexOf('|') > 0" activator="parent" location="top">
391
+ {{feed.genre.replaceAll('|', ', ')}}
392
+ </v-tooltip>
393
+ </v-col>
355
394
  <v-col cols="2">{{feed.owner}}</v-col>
356
- <v-col cols="5">{{feed.title}}</v-col>
395
+ <v-col cols="5">{{feed.title}}
396
+ <v-tooltip v-if="!isMobile && feed.description" activator="parent" location="top">
397
+ <div v-html="feed.description"></div>
398
+ </v-tooltip>
399
+ </v-col>
357
400
  </v-row>
358
401
  </v-container>
359
- <v-container v-else>
402
+ <v-container v-else fluid>
360
403
  <v-row v-for="(item,index) in items" :key="item.title" density="compact" :class="{ active: index == playIndex }" @click="listItem(item)">
361
- <v-col cols="6">{{item.title}}</v-col>
362
- <v-col cols="6">{{toTime(item.duration)}}</v-col>
404
+ <v-col cols="8">{{item.title}}
405
+ <v-tooltip v-if="!isMobile && item.description" activator="parent" location="top">
406
+ <div v-html="item.description"></div>
407
+ </v-tooltip>
408
+ </v-col>
409
+ <v-col cols="2">{{toTime(item.duration)}}</v-col>
410
+ <v-col cols="2">
411
+ <v-btn icon="$download" class="bg-media" density="compact" variant="flat" @click.stop="download(item)"></v-btn>
412
+ </v-col>
363
413
  </v-row>
364
414
  </v-container>
365
415
  </v-card>
366
-
367
- <!--
368
- <v-card class="bg-media_head">
369
- <audio ref="audio" preload="none" @ended="onEnded" @timeupdate="onTimeUpdate">
370
- </audio>
371
- <v-list-item lines="three">
372
- <v-list-item-content>
373
- <v-list-item-title text-h6>{{selected?.title}}</v-list-item-title>
374
- <v-list-item-subtitle>{{toSubTitle(selected!)}}</v-list-item-subtitle>
375
- </v-list-item-content>
376
- <template v-slot:append>
377
- <v-select v-model="currentPlayer" density="compact"
378
- :items="playerNames"
379
- persistent-hint
380
- @update:modelValue="onPlayerChange"
381
- hide-details single-line>
382
- </v-select>
383
- </template>
384
- </v-list-item>
385
- <v-card-actions>
386
- <v-btn v-if="backVisible" @click="listBack">
387
- <v-icon icon="$back" />
388
- </v-btn>
389
- <v-btn size="small" v-if="playingFeed" @click="playpause">
390
- <v-icon v-if="paused" icon="$play" />
391
- <v-icon v-else icon="$pause" />
392
- </v-btn>
393
- <v-btn size="small" v-if="playingFeed" @click="previous">
394
- <v-icon icon="$prev" />
395
- </v-btn>
396
- <v-btn size="small" v-if="playingFeed" @click="next">
397
- <v-icon icon="$next" />
398
- </v-btn>
399
- <v-slider v-if="!playLocal && playingFeed" style="width:30%" color="red" track-color="blue" track-fill-color="red" v-model="volume" hide-details density="compact"
400
- min="0" max="100" step="5" @update:modelValue="changeVolume">
401
- </v-slider>
402
- </v-card-actions>
403
- <v-progress-linear v-if="playingFeed" v-model="positionLength" color="blue" height="25"><strong>{{positionText}}</strong></v-progress-linear>
404
- </v-card>
405
- <v-card :height="listHeight" density="compact" class="overflow-y-auto bg-media">
406
- <v-list lines="two" class="bg-media">
407
- <v-list-item-group v-model="itemIndex">
408
- <v-list-item v-for="(feed,index) in feeds" :key="feed.title" density="compact" :title="feed.title" :subtitle="toSubTitle(feed)"
409
- active-color="blue" :active="index == playIndex" @click="listItem(feed)">
410
- </v-list-item>
411
- </v-list-item-group>
412
- </v-list>
413
- </v-card>
414
- -->
415
416
  </template>
416
417
 
417
418
  <style scoped>