@christianriedl/media 1.0.304 → 1.0.305

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/dist/iMedia.d.ts CHANGED
@@ -367,6 +367,7 @@ export interface IPlaylistService {
367
367
  soundbarVolume: number;
368
368
  searchFeeds(query: Dictionary<any>, limit?: number): Promise<IRssFeed[]>;
369
369
  getFeed(rssUrl: string): Promise<IRssFeed | null>;
370
+ getCategories(owner: string): Promise<string[]>;
370
371
  play(url: string): Promise<boolean>;
371
372
  playList(urls: string[], clear: boolean, index?: number): Promise<boolean>;
372
373
  playCommand(cmd: EPlaylistCommand): Promise<boolean>;
@@ -9,9 +9,11 @@ export declare class PlaylistService implements IPlaylistService {
9
9
  soundbarVolume: number;
10
10
  setSoundbar: (name: string, value: string) => Promise<boolean>;
11
11
  getSoundbarValue: (name: string) => any;
12
+ cachedCategories: Dictionary<string[]>;
12
13
  constructor(rest: IRest, log: ILogger, getSoundbarValue: (name: string) => any, setSoundbar: (name: string, value: string) => Promise<boolean>);
13
14
  searchFeeds(query: Dictionary<any>, limit?: number): Promise<IRssFeed[]>;
14
15
  getFeed(rssUrl: string): Promise<IRssFeed | null>;
16
+ getCategories(owner: string): Promise<string[]>;
15
17
  play(url: string): Promise<boolean>;
16
18
  playList(urls: string[], clear: boolean, index?: number): Promise<boolean>;
17
19
  playCommand(cmd: EPlaylistCommand): Promise<boolean>;
@@ -8,6 +8,7 @@ export class PlaylistService {
8
8
  soundbarVolume;
9
9
  setSoundbar;
10
10
  getSoundbarValue;
11
+ cachedCategories;
11
12
  constructor(rest, log, getSoundbarValue, setSoundbar) {
12
13
  this.log = log;
13
14
  this.rest = rest;
@@ -15,6 +16,8 @@ export class PlaylistService {
15
16
  this.getSoundbarValue = getSoundbarValue;
16
17
  this.setSoundbar = setSoundbar;
17
18
  this.soundbarOn = false;
19
+ this.cachedCategories = {};
20
+ ;
18
21
  }
19
22
  async searchFeeds(query, limit) {
20
23
  query['limit'] = limit ?? 50;
@@ -25,6 +28,20 @@ export class PlaylistService {
25
28
  const res = await this.rest.getData('apiplaylist/feed', { rssUrl: rssUrl });
26
29
  return res.ok ? res.result : null;
27
30
  }
31
+ async getCategories(owner) {
32
+ let categories = this.cachedCategories[owner];
33
+ if (!categories) {
34
+ const res = await this.rest.getData('apiplaylist/feed/categories', { owner: owner });
35
+ if (!res.ok || !res.result) {
36
+ return [''];
37
+ }
38
+ categories = [''];
39
+ categories.push(...res.result);
40
+ this.cachedCategories[owner] = categories;
41
+ ;
42
+ }
43
+ return categories;
44
+ }
28
45
  /*
29
46
  async getTitles(): Promise<string[]> {
30
47
  const res = await this.rest.getData<string[]>('apiplaylist/title');
@@ -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.304",
3
+ "version": "1.0.305",
4
4
  "description": "RIC media interfaces",
5
5
 
6
6
  "main": "dist/index.js",
@@ -22,6 +22,7 @@
22
22
  const listHeight = ref(0);
23
23
  const playerNames = ['Local', 'Soundbar'];
24
24
  const currentPlayer = ref<string>(playerNames[0]);
25
+ const orf = ref(true);
25
26
  const playLocal = computed(() => currentPlayer.value == 'Local');
26
27
  const playIndex = ref(-1);
27
28
  const itemIndex = ref(0);
@@ -43,21 +44,25 @@
43
44
  });
44
45
 
45
46
  const feedTypes = Helper.getEnumOptions(EFeedType);
46
- const feedType = ref<EFeedType>(0);
47
+ const feedType = ref<EFeedType>(EFeedType.Podcast);
47
48
  const countries = ["", "AT", "DE", "US"];
48
49
  const country = ref("");
49
50
  const query = ref("");
51
+ const categories = ref<string[]>([]);
52
+ const category = ref("");
53
+
50
54
  const limit = ref(50);
51
55
 
52
56
  onMounted(async () => {
57
+ statusTimer = 0;
53
58
  playlistService.log.info('OnlinePodcastsPage created');
54
59
  await start();
55
60
  });
56
61
  onUnmounted(() => {
57
62
  if (statusTimer > 0) {
58
63
  window.clearTimeout(statusTimer);
59
- statusTimer = 0;
60
64
  }
65
+ statusTimer = -1;
61
66
  });
62
67
  async function start() {
63
68
  if (route.query?.rssUrl) {
@@ -70,6 +75,9 @@
70
75
  }
71
76
  }
72
77
  else {
78
+ if (categories.value.length == 0) {
79
+ categories.value = await playlistService.getCategories('ORF');
80
+ }
73
81
  search.value = true;
74
82
  }
75
83
  computeListHeight();
@@ -88,10 +96,17 @@
88
96
  }
89
97
  async function onSearch() {
90
98
  const dict: Dictionary<any> = {};
91
- if (feedType.value != EFeedType.Unknown)
92
- dict["media"] = EFeedType[feedType.value];
93
- if (country.value != "")
94
- dict["country"] = country.value;;
99
+ if (orf.value) {
100
+ dict['owner'] = 'ORF';
101
+ if (category.value)
102
+ dict['category'] = category.value;
103
+ }
104
+ else {
105
+ if (feedType.value != EFeedType.Unknown)
106
+ dict["media"] = EFeedType[feedType.value];
107
+ if (country.value != "")
108
+ dict["country"] = country.value;;
109
+ }
95
110
  dict["query"] = query.value;
96
111
  const fds = await playlistService.searchFeeds(dict, limit.value);
97
112
  feeds.splice (0, feeds.length, ...fds);
@@ -136,7 +151,8 @@
136
151
  volumeCount--;
137
152
  else
138
153
  volume.value = playlistService.soundbarVolume;
139
- statusTimer = window.setTimeout(async () => getStatus(), 1000);
154
+ if (statusTimer >= 0)
155
+ statusTimer = window.setTimeout(async () => getStatus(), 1000);
140
156
  }
141
157
 
142
158
  function toSubTitle(f: IRssFeed): string {
@@ -223,7 +239,12 @@
223
239
  play();
224
240
  }
225
241
  async function stop() {
226
- await playlistService.playCommand(EPlaylistCommand.Stop);
242
+ if (playLocal.value) {
243
+ audio.value!.pause();
244
+ audio.value!.currentTime = 0;
245
+ }
246
+ else
247
+ await playlistService.playCommand(EPlaylistCommand.Stop);
227
248
  }
228
249
  async function changeVolume() {
229
250
  if (volumeTimer)
@@ -243,28 +264,37 @@
243
264
  <audio ref="audio" preload="none" @ended="onEnded" @timeupdate="onTimeUpdate">
244
265
  </audio>
245
266
  <v-container v-if="search" fluid>
246
- <v-row class="align-center">
247
- <v-col cols="1"></v-col>
267
+ <v-row class="align-center" density="compact">
268
+ <v-col cols="1">ORF</v-col>
248
269
  <v-col cols="2">Type</v-col>
249
270
  <v-col cols="1">Country</v-col>
250
271
  <v-col cols="6">Query</v-col>
251
272
  <v-col cols="1">Limit</v-col>
252
273
  </v-row>
253
- <v-row class="align-center">
274
+ <v-row class="align-center" density="compact">
254
275
  <v-col cols="1">
276
+ <v-checkbox v-model="orf" hide-details density="compact"></v-checkbox>
255
277
  </v-col>
256
- <v-col cols="2">
257
- <v-select density="compact" v-model="feedType"
258
- :items="feedTypes"
278
+ <v-col v-if="orf" cols="3">
279
+ <v-select density="compact" v-model="category"
280
+ :items="categories"
259
281
  persistent-hint hide-details single-line>
260
282
  </v-select>
261
283
  </v-col>
262
- <v-col cols="1">
263
- <v-combobox density="compact" v-model="country"
264
- :items="countries"
265
- persistent-hint hide-details single-line>
266
- </v-combobox>
267
- </v-col>
284
+ <template v-else>
285
+ <v-col cols="2">
286
+ <v-select density="compact" v-model="feedType"
287
+ :items="feedTypes"
288
+ persistent-hint hide-details single-line>
289
+ </v-select>
290
+ </v-col>
291
+ <v-col cols="1">
292
+ <v-combobox density="compact" v-model="country"
293
+ :items="countries"
294
+ persistent-hint hide-details single-line>
295
+ </v-combobox>
296
+ </v-col>
297
+ </template>
268
298
  <v-col cols="6">
269
299
  <v-text-field v-model="query" hide-details density="compact"></v-text-field>
270
300
  </v-col>
@@ -278,7 +308,7 @@
278
308
  </v-row>
279
309
  </v-container>
280
310
  <v-container v-else fluid>
281
- <v-row class="align-center">
311
+ <v-row class="align-center" density="compact">
282
312
  <v-col cols="1">
283
313
  <v-btn icon="$back" class="bg-media_head" variant="tonal" @click="listBack">
284
314
  </v-btn>
@@ -296,10 +326,10 @@
296
326
  </v-select>
297
327
  </v-col>
298
328
  </v-row>
299
- <v-row v-if="playingItem" class="align-center">
329
+ <v-row v-if="playingItem" class="align-center" density="compact">
300
330
  <v-col cols="4">
301
331
  <v-btn :icon="paused ? '$play' : '$pause'" class="bg-media_head" variant="tonal" @click="playpause"></v-btn>
302
- <v-btn v-if="!playLocal" icon="$stop" class="bg-media_head" variant="tonal" @click="stop"></v-btn>
332
+ <v-btn icon="$stop" class="bg-media_head" variant="tonal" @click="stop"></v-btn>
303
333
  <v-btn icon="$prev" class="bg-media_head" variant="tonal" @click="previous"></v-btn>
304
334
  <v-btn icon="$next" class="bg-media_head" variant="tonal" @click="next"></v-btn>
305
335
  </v-col>
@@ -310,7 +340,7 @@
310
340
  <v-div v-else>{{playingItem.title}}</v-div>
311
341
  </v-col>
312
342
  </v-row>
313
- <v-row v-if="playingItem">
343
+ <v-row v-if="playingItem" density="compact">
314
344
  <v-col cols="12">
315
345
  <v-progress-linear v-model="positionLength" color="blue" height="25"><strong>{{positionText}}</strong></v-progress-linear>
316
346
  </v-col>
@@ -319,7 +349,7 @@
319
349
  </v-card>
320
350
  <v-card :height="listHeight" density="compact" class="overflow-y-auto bg-media">
321
351
  <v-container v-if="search" fluid>
322
- <v-row v-for="(feed,index) in feeds" :key="feed.rssUrl" @click="listFeed(feed)">
352
+ <v-row v-for="(feed,index) in feeds" :key="feed.rssUrl" density="compact" @click="listFeed(feed)">
323
353
  <v-col cols="1">{{feed.country}}</v-col>
324
354
  <v-col cols="2">{{feed.genre}}</v-col>
325
355
  <v-col cols="2">{{feed.owner}}</v-col>
@@ -327,7 +357,7 @@
327
357
  </v-row>
328
358
  </v-container>
329
359
  <v-container v-else>
330
- <v-row v-for="(item,index) in items" :key="item.title" :class="{ active: index == playIndex }" @click="listItem(item)">
360
+ <v-row v-for="(item,index) in items" :key="item.title" density="compact" :class="{ active: index == playIndex }" @click="listItem(item)">
331
361
  <v-col cols="6">{{item.title}}</v-col>
332
362
  <v-col cols="6">{{toTime(item.duration)}}</v-col>
333
363
  </v-row>