@christianriedl/media 1.0.303 → 1.0.304
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
|
@@ -364,10 +364,12 @@ export interface IPlaylistState {
|
|
|
364
364
|
export interface IPlaylistService {
|
|
365
365
|
log: ILogger;
|
|
366
366
|
soundbarOn: boolean;
|
|
367
|
+
soundbarVolume: number;
|
|
367
368
|
searchFeeds(query: Dictionary<any>, limit?: number): Promise<IRssFeed[]>;
|
|
368
369
|
getFeed(rssUrl: string): Promise<IRssFeed | null>;
|
|
369
370
|
play(url: string): Promise<boolean>;
|
|
370
371
|
playList(urls: string[], clear: boolean, index?: number): Promise<boolean>;
|
|
371
372
|
playCommand(cmd: EPlaylistCommand): Promise<boolean>;
|
|
373
|
+
setSoundbarVolume(value: number): Promise<boolean>;
|
|
372
374
|
getState(): Promise<IPlaylistState | null>;
|
|
373
375
|
}
|
|
@@ -6,6 +6,7 @@ export declare class PlaylistService implements IPlaylistService {
|
|
|
6
6
|
mediaUrl: string;
|
|
7
7
|
log: ILogger;
|
|
8
8
|
soundbarOn: boolean;
|
|
9
|
+
soundbarVolume: number;
|
|
9
10
|
setSoundbar: (name: string, value: string) => Promise<boolean>;
|
|
10
11
|
getSoundbarValue: (name: string) => any;
|
|
11
12
|
constructor(rest: IRest, log: ILogger, getSoundbarValue: (name: string) => any, setSoundbar: (name: string, value: string) => Promise<boolean>);
|
|
@@ -15,5 +16,6 @@ export declare class PlaylistService implements IPlaylistService {
|
|
|
15
16
|
playList(urls: string[], clear: boolean, index?: number): Promise<boolean>;
|
|
16
17
|
playCommand(cmd: EPlaylistCommand): Promise<boolean>;
|
|
17
18
|
getState(): Promise<IPlaylistState | null>;
|
|
18
|
-
|
|
19
|
+
ensureSoundbarOn(): Promise<boolean>;
|
|
20
|
+
setSoundbarVolume(value: number): Promise<boolean>;
|
|
19
21
|
}
|
package/dist/playlistService.js
CHANGED
|
@@ -5,6 +5,7 @@ export class PlaylistService {
|
|
|
5
5
|
mediaUrl;
|
|
6
6
|
log;
|
|
7
7
|
soundbarOn;
|
|
8
|
+
soundbarVolume;
|
|
8
9
|
setSoundbar;
|
|
9
10
|
getSoundbarValue;
|
|
10
11
|
constructor(rest, log, getSoundbarValue, setSoundbar) {
|
|
@@ -47,14 +48,14 @@ export class PlaylistService {
|
|
|
47
48
|
}
|
|
48
49
|
*/
|
|
49
50
|
async play(url) {
|
|
50
|
-
this.soundbarOn = await this.
|
|
51
|
+
this.soundbarOn = await this.ensureSoundbarOn();
|
|
51
52
|
if (!this.soundbarOn)
|
|
52
53
|
return false;
|
|
53
54
|
const res = await this.rest.postData(`apiplaylist/play?url=${encodeURIComponent(url)}`);
|
|
54
55
|
return res.ok ? res.result : false;
|
|
55
56
|
}
|
|
56
57
|
async playList(urls, clear, index) {
|
|
57
|
-
this.soundbarOn = await this.
|
|
58
|
+
this.soundbarOn = await this.ensureSoundbarOn();
|
|
58
59
|
if (!this.soundbarOn)
|
|
59
60
|
return false;
|
|
60
61
|
let url = `apiplaylist/play?clear=${clear}`;
|
|
@@ -64,7 +65,7 @@ export class PlaylistService {
|
|
|
64
65
|
return res.ok ? res.result : false;
|
|
65
66
|
}
|
|
66
67
|
async playCommand(cmd) {
|
|
67
|
-
this.soundbarOn = await this.
|
|
68
|
+
this.soundbarOn = await this.ensureSoundbarOn();
|
|
68
69
|
if (!this.soundbarOn)
|
|
69
70
|
return false;
|
|
70
71
|
let url = `apiplaylist/playcommand?cmd=${EPlaylistCommand[cmd]}`;
|
|
@@ -72,10 +73,11 @@ export class PlaylistService {
|
|
|
72
73
|
return res.ok ? res.result : false;
|
|
73
74
|
}
|
|
74
75
|
async getState() {
|
|
76
|
+
this.soundbarVolume = Number(this.getSoundbarValue('Volume'));
|
|
75
77
|
const res = await this.rest.getData('apiplaylist/state');
|
|
76
78
|
return res.ok ? res.result : null;
|
|
77
79
|
}
|
|
78
|
-
async
|
|
80
|
+
async ensureSoundbarOn() {
|
|
79
81
|
let i = 0;
|
|
80
82
|
for (i = 0; i < 5; i++) {
|
|
81
83
|
if (this.getSoundbarValue('On') === true)
|
|
@@ -93,5 +95,9 @@ export class PlaylistService {
|
|
|
93
95
|
}
|
|
94
96
|
return false;
|
|
95
97
|
}
|
|
98
|
+
async setSoundbarVolume(value) {
|
|
99
|
+
const result = await this.setSoundbar('VOLUME', value.toString());
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
96
102
|
}
|
|
97
103
|
//# sourceMappingURL=playlistService.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playlistService.js","sourceRoot":"","sources":["../src/playlistService.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAc,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAY,gBAAgB,EAAoC,MAAM,UAAU,CAAC;AAExF,MAAM,OAAO,eAAe;IACxB,IAAI,CAAQ;IACZ,QAAQ,CAAS;IACjB,GAAG,CAAU;IACb,UAAU,CAAU;IACpB,WAAW,CAAoD;IAC/D,gBAAgB,CAAwB;IACxC,YAAY,IAAW,EAAE,GAAY,EAAE,gBAAuC,EAAE,WAA8D;QAC1I,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC;QAChC,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QACtC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IACrB,CAAC;IACD,KAAK,CAAC,WAAW,CAAC,KAAsB,EAAE,KAAc;QAC3D,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAa,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAClF,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,MAAc;QACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAW,kBAAkB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACtF,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IACD;;;;;;;;;;;;;;;;;;;;;MAqBE;IACF,KAAK,CAAC,IAAI,CAAC,GAAW;QACzB,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"playlistService.js","sourceRoot":"","sources":["../src/playlistService.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -21,7 +21,6 @@
|
|
|
21
21
|
const listhead = ref<ComponentPublicInstance | null>(null);
|
|
22
22
|
const listHeight = ref(0);
|
|
23
23
|
const playerNames = ['Local', 'Soundbar'];
|
|
24
|
-
const backVisible = computed(() => !!route.query?.feed);
|
|
25
24
|
const currentPlayer = ref<string>(playerNames[0]);
|
|
26
25
|
const playLocal = computed(() => currentPlayer.value == 'Local');
|
|
27
26
|
const playIndex = ref(-1);
|
|
@@ -33,6 +32,9 @@
|
|
|
33
32
|
const paused = ref(false);
|
|
34
33
|
const search = ref(true);
|
|
35
34
|
let statusTimer = 0;
|
|
35
|
+
let volumeTimer = 0;
|
|
36
|
+
let volumeCount = 0;
|
|
37
|
+
|
|
36
38
|
const positionText = computed(() => {
|
|
37
39
|
if (playingItem.value?.duration)
|
|
38
40
|
return toTime(position.value) + '/' + toTime(playingItem.value.duration);
|
|
@@ -53,7 +55,7 @@
|
|
|
53
55
|
});
|
|
54
56
|
onUnmounted(() => {
|
|
55
57
|
if (statusTimer > 0) {
|
|
56
|
-
clearTimeout(statusTimer);
|
|
58
|
+
window.clearTimeout(statusTimer);
|
|
57
59
|
statusTimer = 0;
|
|
58
60
|
}
|
|
59
61
|
});
|
|
@@ -84,15 +86,14 @@
|
|
|
84
86
|
listHeight.value = height;
|
|
85
87
|
})
|
|
86
88
|
}
|
|
87
|
-
|
|
88
89
|
async function onSearch() {
|
|
89
90
|
const dict: Dictionary<any> = {};
|
|
90
|
-
if (feedType.value != EFeedType.
|
|
91
|
-
dict["media"] = EFeedType[feedType];
|
|
91
|
+
if (feedType.value != EFeedType.Unknown)
|
|
92
|
+
dict["media"] = EFeedType[feedType.value];
|
|
92
93
|
if (country.value != "")
|
|
93
94
|
dict["country"] = country.value;;
|
|
94
95
|
dict["query"] = query.value;
|
|
95
|
-
const fds = await playlistService.searchFeeds(dict, limit.value)
|
|
96
|
+
const fds = await playlistService.searchFeeds(dict, limit.value);
|
|
96
97
|
feeds.splice (0, feeds.length, ...fds);
|
|
97
98
|
}
|
|
98
99
|
async function play() {
|
|
@@ -110,11 +111,11 @@
|
|
|
110
111
|
return;
|
|
111
112
|
playingItem.value = selectedItem.value;
|
|
112
113
|
await getStatus();
|
|
113
|
-
playlistService.log.trace(`play remote ${selectedItem.value!.title}`)
|
|
114
|
+
playlistService.log.trace(`play remote ${selectedItem.value!.title}`);
|
|
114
115
|
}
|
|
115
|
-
itemIndex.value = playIndex.value =
|
|
116
|
+
itemIndex.value = playIndex.value = items.findIndex((f) => f.link == selectedItem.value!.link);
|
|
116
117
|
}
|
|
117
|
-
function listFeed(feed: IRssFeed) {
|
|
118
|
+
function listFeed(feed: IRssFeed) {
|
|
118
119
|
router.push ({path: 'onlinePodcasts', query: { rssUrl: feed.rssUrl }});
|
|
119
120
|
}
|
|
120
121
|
|
|
@@ -131,6 +132,10 @@
|
|
|
131
132
|
status.value = state;
|
|
132
133
|
if (state)
|
|
133
134
|
setPosition(Number(state.position));
|
|
135
|
+
if (volumeCount > 0)
|
|
136
|
+
volumeCount--;
|
|
137
|
+
else
|
|
138
|
+
volume.value = playlistService.soundbarVolume;
|
|
134
139
|
statusTimer = window.setTimeout(async () => getStatus(), 1000);
|
|
135
140
|
}
|
|
136
141
|
|
|
@@ -140,7 +145,7 @@
|
|
|
140
145
|
return toTime(f.duration);
|
|
141
146
|
}
|
|
142
147
|
|
|
143
|
-
function toTime(s
|
|
148
|
+
function toTime(s?: number): string {
|
|
144
149
|
if (!s)
|
|
145
150
|
return "";
|
|
146
151
|
let r = "";
|
|
@@ -208,16 +213,27 @@
|
|
|
208
213
|
function previous() {
|
|
209
214
|
if (playIndex.value <= 0)
|
|
210
215
|
return;
|
|
211
|
-
selectedItem.value =
|
|
216
|
+
selectedItem.value = items[playIndex.value - 1];
|
|
212
217
|
play();
|
|
213
218
|
}
|
|
214
219
|
function next() {
|
|
215
|
-
if (playIndex.value >=
|
|
220
|
+
if (playIndex.value >= items.length - 1)
|
|
216
221
|
return;
|
|
217
|
-
selectedItem.value =
|
|
222
|
+
selectedItem.value = items[playIndex.value + 1];
|
|
218
223
|
play();
|
|
219
224
|
}
|
|
220
|
-
function
|
|
225
|
+
async function stop() {
|
|
226
|
+
await playlistService.playCommand(EPlaylistCommand.Stop);
|
|
227
|
+
}
|
|
228
|
+
async function changeVolume() {
|
|
229
|
+
if (volumeTimer)
|
|
230
|
+
window.clearTimeout(volumeTimer);
|
|
231
|
+
|
|
232
|
+
volumeCount = 3;
|
|
233
|
+
volumeTimer = window.setTimeout(async () => {
|
|
234
|
+
await playlistService.setSoundbarVolume(volume.value);
|
|
235
|
+
volumeTimer = 0;
|
|
236
|
+
}, 500);
|
|
221
237
|
}
|
|
222
238
|
|
|
223
239
|
</script>
|
|
@@ -236,8 +252,6 @@
|
|
|
236
252
|
</v-row>
|
|
237
253
|
<v-row class="align-center">
|
|
238
254
|
<v-col cols="1">
|
|
239
|
-
<v-btn v-if="backVisible" icon="$back" class="bg-media_head" variant="tonal" @click="listBack">
|
|
240
|
-
</v-btn>
|
|
241
255
|
</v-col>
|
|
242
256
|
<v-col cols="2">
|
|
243
257
|
<v-select density="compact" v-model="feedType"
|
|
@@ -266,17 +280,17 @@
|
|
|
266
280
|
<v-container v-else fluid>
|
|
267
281
|
<v-row class="align-center">
|
|
268
282
|
<v-col cols="1">
|
|
269
|
-
<v-btn
|
|
283
|
+
<v-btn icon="$back" class="bg-media_head" variant="tonal" @click="listBack">
|
|
270
284
|
</v-btn>
|
|
271
285
|
</v-col>
|
|
272
286
|
<v-col cols="1">
|
|
273
|
-
<v-img :src="selectedFeed
|
|
287
|
+
<v-img :src="selectedFeed!.imageUrl"></v-img>
|
|
274
288
|
</v-col>
|
|
275
|
-
<v-col cols="1">{{selectedFeed
|
|
276
|
-
<v-col cols="2">{{selectedFeed
|
|
277
|
-
<v-col cols="2">{{selectedFeed
|
|
278
|
-
<v-col cols="
|
|
279
|
-
<v-col cols="
|
|
289
|
+
<v-col cols="1">{{selectedFeed!.country}}</v-col>
|
|
290
|
+
<v-col cols="2">{{selectedFeed!.genre}}</v-col>
|
|
291
|
+
<v-col cols="2">{{selectedFeed!.owner}}</v-col>
|
|
292
|
+
<v-col cols="4">{{selectedFeed!.title}}</v-col>
|
|
293
|
+
<v-col cols="1">
|
|
280
294
|
<v-select v-model="currentPlayer" density="compact" :items="playerNames" persistent-hint
|
|
281
295
|
@update:modelValue="onPlayerChange" hide-details single-line>
|
|
282
296
|
</v-select>
|
|
@@ -284,14 +298,16 @@
|
|
|
284
298
|
</v-row>
|
|
285
299
|
<v-row v-if="playingItem" class="align-center">
|
|
286
300
|
<v-col cols="4">
|
|
287
|
-
<v-btn :icon="paused ? '$play' : '$pause'" @click="playpause">
|
|
288
|
-
<v-btn icon="$
|
|
289
|
-
<v-btn icon="$
|
|
301
|
+
<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>
|
|
303
|
+
<v-btn icon="$prev" class="bg-media_head" variant="tonal" @click="previous"></v-btn>
|
|
304
|
+
<v-btn icon="$next" class="bg-media_head" variant="tonal" @click="next"></v-btn>
|
|
290
305
|
</v-col>
|
|
291
306
|
<v-col cols ="8">
|
|
292
307
|
<v-slider v-if="!playLocal" style="width:30%" color="red" track-color="blue" track-fill-color="red" v-model="volume" hide-details density="compact"
|
|
293
308
|
min="0" max="100" step="5" @update:modelValue="changeVolume">
|
|
294
309
|
</v-slider>
|
|
310
|
+
<v-div v-else>{{playingItem.title}}</v-div>
|
|
295
311
|
</v-col>
|
|
296
312
|
</v-row>
|
|
297
313
|
<v-row v-if="playingItem">
|
|
@@ -311,11 +327,9 @@
|
|
|
311
327
|
</v-row>
|
|
312
328
|
</v-container>
|
|
313
329
|
<v-container v-else>
|
|
314
|
-
<v-row v-for="(item,index) in items" :key="item.
|
|
315
|
-
<v-col cols="
|
|
316
|
-
<v-col cols="
|
|
317
|
-
<v-col cols="2">{{feed.owner}}</v-col>
|
|
318
|
-
<v-col cols="5">{{item.title}}</v-col>
|
|
330
|
+
<v-row v-for="(item,index) in items" :key="item.title" :class="{ active: index == playIndex }" @click="listItem(item)">
|
|
331
|
+
<v-col cols="6">{{item.title}}</v-col>
|
|
332
|
+
<v-col cols="6">{{toTime(item.duration)}}</v-col>
|
|
319
333
|
</v-row>
|
|
320
334
|
</v-container>
|
|
321
335
|
</v-card>
|
|
@@ -370,3 +384,9 @@
|
|
|
370
384
|
-->
|
|
371
385
|
</template>
|
|
372
386
|
|
|
387
|
+
<style scoped>
|
|
388
|
+
.active {
|
|
389
|
+
background-color: aliceblue;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
</style>
|