mirror of
https://github.com/joBr99/nspanel-lovelace-ui.git
synced 2025-12-19 22:24:15 +01:00
v4.3.3.43 - Update NsPanelTs.ts
- Change pageId with Alias in Communication with HMI - Media-Player: Dynamic loading of the speaker list, playlist, tracklist, fix repeat, add seek, add elapsed/duration - Minor Fixes; Add miValue / maxValue to Volume-Slider - Fix: cardGrid2 => 9 Entities for Layout 'us-p' issue #1167 - Fix VolumeSlider
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
TypeScript v4.3.3.41 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @ticaki / @Britzelpuf / @Sternmiere / @ravenS0ne
|
TypeScript v4.3.3.43 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @ticaki / @Britzelpuf / @Sternmiere / @ravenS0ne
|
||||||
- abgestimmt auf TFT 53 / v4.3.3 / BerryDriver 9 / Tasmota 13.3.0
|
- abgestimmt auf TFT 53 / v4.3.3 / BerryDriver 9 / Tasmota 13.3.0
|
||||||
@joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker
|
@joBr99 Projekt: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker
|
||||||
NsPanelTs.ts (dieses TypeScript in ioBroker) Stable: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/NsPanelTs.ts
|
NsPanelTs.ts (dieses TypeScript in ioBroker) Stable: https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/NsPanelTs.ts
|
||||||
@@ -111,7 +111,12 @@ ReleaseNotes:
|
|||||||
- 05.02.2024 - v4.3.3.40 Fix: SqueezeboxRPC-Media-Player and add some Functions
|
- 05.02.2024 - v4.3.3.40 Fix: SqueezeboxRPC-Media-Player and add some Functions
|
||||||
- 06.02.2024 - v4.3.3.41 Fix: activeBrightness -> null
|
- 06.02.2024 - v4.3.3.41 Fix: activeBrightness -> null
|
||||||
- 06.02.2024 - v4.3.3.41 Fix: bHome -> corrected PageId
|
- 06.02.2024 - v4.3.3.41 Fix: bHome -> corrected PageId
|
||||||
|
- 07.02.2024 - v4.3.3.42 Minor Fixes
|
||||||
|
- 09.02.2024 - v4.3.3.42 Change pageId with Alias in Communication with HMI
|
||||||
|
- 09.02.2024 - v4.3.3.42 Spotify Media-Player: Dynamic loading of the speaker list, playlist, tracklist, fix repeat, add seek, add elapsed/duration
|
||||||
|
- 10.02.2024 - v4.3.3.42 Spotify Minor Fixes; Add miValue / maxValue to Volume-Slider
|
||||||
|
- 10.02.2024 - v4.3.3.43 Fix: cardGrid2 => 9 Entities for Layout 'us-p' issue #1167
|
||||||
|
- 11.02.2024 - v4.3.3.43 Fix VolumeSlider
|
||||||
|
|
||||||
Todo:
|
Todo:
|
||||||
- XX.XX.XXXX - v5.0.0 Change the bottomScreensaverEntity (rolling) if more than 6 entries are defined
|
- XX.XX.XXXX - v5.0.0 Change the bottomScreensaverEntity (rolling) if more than 6 entries are defined
|
||||||
@@ -133,7 +138,8 @@ Mögliche Seiten-Ansichten:
|
|||||||
(die 4 kleineren Icons können als Wetter-Vorschau + 4Tage (Symbol + Höchsttemperatur) oder zur Anzeige definierter Infos konfiguriert werden)
|
(die 4 kleineren Icons können als Wetter-Vorschau + 4Tage (Symbol + Höchsttemperatur) oder zur Anzeige definierter Infos konfiguriert werden)
|
||||||
cardEntities Page - 4 vertikale angeordnete Steuerelemente - auch als Subpage
|
cardEntities Page - 4 vertikale angeordnete Steuerelemente - auch als Subpage
|
||||||
cardGrid Page - 6 horizontal angeordnete Steuerelemente in 2 Reihen a 3 Steuerelemente - auch als Subpage
|
cardGrid Page - 6 horizontal angeordnete Steuerelemente in 2 Reihen a 3 Steuerelemente - auch als Subpage
|
||||||
cardGrid2 Page - 8 horizontal angeordnete Steuerelemente in 2 Reihen a 4 Steuerelemente - auch als Subpage
|
cardGrid2 Page - 8 horizontal angeordnete Steuerelemente in 2 Reihen a 4 Steuerelemente bzw. beim US-Modell im Portrait-Modus
|
||||||
|
9 horizontal angeordnete Steuerelemente in 3 Reihen a 3 Steuerelemente - auch als Subpage
|
||||||
cardThermo Page - Thermostat mit Solltemperatur, Isttemperatur, Mode - Weitere Eigenschaften können im Alias definiert werden
|
cardThermo Page - Thermostat mit Solltemperatur, Isttemperatur, Mode - Weitere Eigenschaften können im Alias definiert werden
|
||||||
cardMedia Page - Mediaplayer - Ausnahme: Alias sollte mit Alias-Manager automatisch über Alexa-Verzeichnis Player angelegt werden
|
cardMedia Page - Mediaplayer - Ausnahme: Alias sollte mit Alias-Manager automatisch über Alexa-Verzeichnis Player angelegt werden
|
||||||
cardAlarm Page - Alarmseite mit Zustand und Tastenfeld
|
cardAlarm Page - Alarmseite mit Zustand und Tastenfeld
|
||||||
@@ -209,6 +215,7 @@ Upgrades in Konsole:
|
|||||||
---------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
/******************************* Begin CONFIG Parameter *******************************/
|
/******************************* Begin CONFIG Parameter *******************************/
|
||||||
|
|
||||||
// DE: liefert bei true detailliertere Meldundgen im Log.
|
// DE: liefert bei true detailliertere Meldundgen im Log.
|
||||||
@@ -978,7 +985,7 @@ export const config: Config = {
|
|||||||
// _________________________________ DE: Ab hier keine Konfiguration mehr _____________________________________
|
// _________________________________ DE: Ab hier keine Konfiguration mehr _____________________________________
|
||||||
// _________________________________ EN: No more configuration from here _____________________________________
|
// _________________________________ EN: No more configuration from here _____________________________________
|
||||||
|
|
||||||
const scriptVersion: string = 'v4.3.3.41';
|
const scriptVersion: string = 'v4.3.3.43';
|
||||||
const tft_version: string = 'v4.3.3';
|
const tft_version: string = 'v4.3.3';
|
||||||
const desired_display_firmware_version = 53;
|
const desired_display_firmware_version = 53;
|
||||||
const berry_driver_version = 9;
|
const berry_driver_version = 9;
|
||||||
@@ -3379,7 +3386,11 @@ function GeneratePageElements(page: PageType): string {
|
|||||||
maxItems = 6;
|
maxItems = 6;
|
||||||
break;
|
break;
|
||||||
case 'cardGrid2':
|
case 'cardGrid2':
|
||||||
|
if (getState(NSPanel_Path + 'NSPanel_Version').val == 'us-p') {
|
||||||
|
maxItems = 9;
|
||||||
|
} else {
|
||||||
maxItems = 8;
|
maxItems = 8;
|
||||||
|
};
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4758,81 +4769,25 @@ function unsubscribeMediaSubscriptions(): void {
|
|||||||
|
|
||||||
function subscribeMediaSubscriptions(id: string): void {
|
function subscribeMediaSubscriptions(id: string): void {
|
||||||
on({id: [id + '.STATE',
|
on({id: [id + '.STATE',
|
||||||
id + '.VOLUME',
|
|
||||||
id + '.ARTIST',
|
id + '.ARTIST',
|
||||||
id + '.ALBUM',
|
|
||||||
id + '.TITLE',
|
id + '.TITLE',
|
||||||
|
id + '.ALBUM',
|
||||||
|
id + '.VOLUME',
|
||||||
id + '.REPEAT',
|
id + '.REPEAT',
|
||||||
id + '.SHUFFLE'], change: "any"}, async function () {
|
id + '.SHUFFLE',
|
||||||
(function () { if (timeoutMedia) { clearTimeout(timeoutMedia); timeoutMedia = null; } })();
|
id + '.DURATION',
|
||||||
timeoutMedia = setTimeout(async function () {
|
id + '.ELAPSED'], change: "any", ack: true}, async function () {
|
||||||
if (useMediaEvents) {
|
if (useMediaEvents && pageCounter == 1) {
|
||||||
GeneratePage(activePage!);
|
GeneratePage(activePage!);
|
||||||
setTimeout(async function () {
|
|
||||||
GeneratePage(activePage!);
|
|
||||||
}, 3000);
|
|
||||||
}
|
}
|
||||||
},50)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function subscribeMediaSubscriptionsSonosAdd(id: string): void {
|
function subscribeMediaSubscriptionsSonosAdd(id: string): void {
|
||||||
on({id: [id + '.QUEUE',
|
on({id: [id + '.QUEUE'], change: "any", ack: true}, async function () {
|
||||||
id + '.DURATION',
|
if (useMediaEvents && pageCounter == 1) {
|
||||||
id + '.ELAPSED'], change: "any"}, async function () {
|
|
||||||
(function () { if (timeoutMedia) { clearTimeout(timeoutMedia); timeoutMedia = null; } })();
|
|
||||||
timeoutMedia = setTimeout(async function () {
|
|
||||||
if (useMediaEvents) {
|
|
||||||
GeneratePage(activePage!);
|
GeneratePage(activePage!);
|
||||||
setTimeout(async function () {
|
|
||||||
GeneratePage(activePage!);
|
|
||||||
}, 50);
|
|
||||||
}
|
}
|
||||||
},50)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function subscribeMediaSubscriptionsAlexaAdd(id: string): void {
|
|
||||||
on({id: [id + '.DURATION',
|
|
||||||
id + '.ELAPSED'], change: "any"}, async function () {
|
|
||||||
(function () { if (timeoutMedia) { clearTimeout(timeoutMedia); timeoutMedia = null; } })();
|
|
||||||
timeoutMedia = setTimeout(async function () {
|
|
||||||
if (useMediaEvents) {
|
|
||||||
GeneratePage(activePage!);
|
|
||||||
setTimeout(async function () {
|
|
||||||
GeneratePage(activePage!);
|
|
||||||
}, 50);
|
|
||||||
}
|
|
||||||
},50)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function subscribeMediaSubscriptionsBoseAdd(id: string): void {
|
|
||||||
on({id: [id + '.DURATION',
|
|
||||||
id + '.ELAPSED'], change: "any"}, async function () {
|
|
||||||
(function () { if (timeoutMedia) { clearTimeout(timeoutMedia); timeoutMedia = null; } })();
|
|
||||||
timeoutMedia = setTimeout(async function () {
|
|
||||||
if (useMediaEvents) {
|
|
||||||
GeneratePage(activePage!);
|
|
||||||
setTimeout(async function () {
|
|
||||||
GeneratePage(activePage!);
|
|
||||||
}, 50);
|
|
||||||
}
|
|
||||||
},50)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function subscribeMediaSubscriptionsSqueezeboxAdd(id: string): void {
|
|
||||||
on({id: [id + '.ELAPSED'], change: "any"}, async function () {
|
|
||||||
(function () { if (timeoutMedia) { clearTimeout(timeoutMedia); timeoutMedia = null; } })();
|
|
||||||
timeoutMedia = setTimeout(async function () {
|
|
||||||
if (useMediaEvents) {
|
|
||||||
GeneratePage(activePage!);
|
|
||||||
setTimeout(async function () {
|
|
||||||
GeneratePage(activePage!);
|
|
||||||
}, 50);
|
|
||||||
}
|
|
||||||
},50)
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4961,6 +4916,13 @@ async function createAutoMediaAlias (id: string, mediaDevice: string, adapterPla
|
|||||||
log('error at function createAutoMediaAlias Adapter spotify-premium: ' + err.message, 'warn');
|
log('error at function createAutoMediaAlias Adapter spotify-premium: ' + err.message, 'warn');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Add Spotify Datapoints > v4.3.3.42
|
||||||
|
//Spotify-Premium has Role value and a known Bug in player.progress
|
||||||
|
if (existsObject(id + '.DURATION') == false) {
|
||||||
|
const dpPath: string = adapterPlayerInstance;
|
||||||
|
await createAliasAsync(id + '.DURATION', dpPath + 'player.duration', true, <iobJS.StateCommon> {type: 'string', role: 'media.duration.text', name: 'DURATION'});
|
||||||
|
await createAliasAsync(id + '.ELAPSED', dpPath + 'player.progress', true, <iobJS.StateCommon> {type: 'string', role: 'media.elapsed.text', name: 'ELAPSED'});
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -4998,7 +4960,12 @@ async function createAutoMediaAlias (id: string, mediaDevice: string, adapterPla
|
|||||||
log('error function createAutoMediaAlias Adapter volumio: ' + err.message, 'warn');
|
log('error function createAutoMediaAlias Adapter volumio: ' + err.message, 'warn');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
//Add Volumio Datapoints > v4.3.3.42
|
||||||
|
if (existsObject(id + '.DURATION') == false) {
|
||||||
|
const dpPath: string = adapterPlayerInstance;
|
||||||
|
await createAliasAsync(id + '.DURATION', dpPath + 'playbackInfo.duration', true, <iobJS.StateCommon> {type: 'string', role: 'media.duration', name: 'DURATION'});
|
||||||
|
//await createAliasAsync(id + '.ELAPSED', dpPath + 'player.progress', true, <iobJS.StateCommon> {type: 'string', role: 'media.elapsed.text', name: 'ELAPSED'});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case "squeezeboxrpc.0.":
|
case "squeezeboxrpc.0.":
|
||||||
@@ -5094,6 +5061,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
if (!page.items[0].id) throw new Error ('Missing page id for cardMedia!');
|
if (!page.items[0].id) throw new Error ('Missing page id for cardMedia!');
|
||||||
|
|
||||||
let id = page.items[0].id;
|
let id = page.items[0].id;
|
||||||
|
let tid = 0;
|
||||||
let out_msgs: NSPanel.Payload[] = [];
|
let out_msgs: NSPanel.Payload[] = [];
|
||||||
|
|
||||||
if (!page.items[0].adapterPlayerInstance!) throw new Error('page.items[0].adapterPlayerInstance is undefined!')
|
if (!page.items[0].adapterPlayerInstance!) throw new Error('page.items[0].adapterPlayerInstance is undefined!')
|
||||||
@@ -5120,12 +5088,10 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
subscribeMediaSubscriptions(page.items[0].id);
|
subscribeMediaSubscriptions(page.items[0].id);
|
||||||
if (v2Adapter == 'sonos') {
|
if (v2Adapter == 'sonos') {
|
||||||
subscribeMediaSubscriptionsSonosAdd(page.items[0].id);
|
subscribeMediaSubscriptionsSonosAdd(page.items[0].id);
|
||||||
} else if (v2Adapter == 'alexa2') {
|
} else if (v2Adapter == 'spotify-premium') {
|
||||||
subscribeMediaSubscriptionsAlexaAdd(page.items[0].id);
|
setState(vInstance + 'getDevices', true);
|
||||||
} else if (v2Adapter == 'bosesoundtouch') {
|
setState(vInstance + 'getPlaybackInfo', true);
|
||||||
subscribeMediaSubscriptionsBoseAdd(page.items[0].id);
|
setState(vInstance + 'getPlaylists', true);
|
||||||
} else if (v2Adapter == 'squeezeboxrpc') {
|
|
||||||
subscribeMediaSubscriptionsSqueezeboxAdd(page.items[0].id);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5135,12 +5101,6 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
subscribeMediaSubscriptions(page.items[0].id);
|
subscribeMediaSubscriptions(page.items[0].id);
|
||||||
if (v2Adapter == 'sonos') {
|
if (v2Adapter == 'sonos') {
|
||||||
subscribeMediaSubscriptionsSonosAdd(page.items[0].id);
|
subscribeMediaSubscriptionsSonosAdd(page.items[0].id);
|
||||||
} else if (v2Adapter == 'alexa2') {
|
|
||||||
subscribeMediaSubscriptionsAlexaAdd(page.items[0].id);
|
|
||||||
} else if (v2Adapter == 'bosesoundtouch') {
|
|
||||||
subscribeMediaSubscriptionsBoseAdd(page.items[0].id);
|
|
||||||
} else if (v2Adapter == 'squeezeboxrpc') {
|
|
||||||
subscribeMediaSubscriptionsSqueezeboxAdd(page.items[0].id);
|
|
||||||
}
|
}
|
||||||
} else if (page.type == 'cardMedia' && pageCounter == -1) {
|
} else if (page.type == 'cardMedia' && pageCounter == -1) {
|
||||||
//Do Nothing
|
//Do Nothing
|
||||||
@@ -5151,8 +5111,8 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
if (existsObject(id)) {
|
if (existsObject(id)) {
|
||||||
let name = getState(id + '.ALBUM').val;
|
let name = getState(id + '.ALBUM').val;
|
||||||
let title = getState(id + '.TITLE').val;
|
let title = getState(id + '.TITLE').val;
|
||||||
if (title.length > 27) {
|
if (title.length > 26) {
|
||||||
title = title.slice(0, 27) + '...';
|
title = title.slice(0, 26) + '...';
|
||||||
}
|
}
|
||||||
if (existsObject(id + '.DURATION') && existsObject(id + '.ELAPSED')) {
|
if (existsObject(id + '.DURATION') && existsObject(id + '.ELAPSED')) {
|
||||||
if (v2Adapter == 'alexa2') {
|
if (v2Adapter == 'alexa2') {
|
||||||
@@ -5174,7 +5134,14 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
vDuration = vDuration.slice(1);
|
vDuration = vDuration.slice(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (vDuration != '0:00') {
|
||||||
title = title + ' (' + vElapsed + '|' + vDuration + ')';
|
title = title + ' (' + vElapsed + '|' + vDuration + ')';
|
||||||
|
} else {
|
||||||
|
title = title + ' (' + vElapsed + ')';
|
||||||
|
}
|
||||||
|
if (title == ' (0:00)') {
|
||||||
|
title = '';
|
||||||
|
}
|
||||||
} else if (v2Adapter == 'sonos' && getState(page.items[0].adapterPlayerInstance + 'root.' + page.items[0].mediaDevice + '.current_type').val == 0) {
|
} else if (v2Adapter == 'sonos' && getState(page.items[0].adapterPlayerInstance + 'root.' + page.items[0].mediaDevice + '.current_type').val == 0) {
|
||||||
let vElapsed = getState(id + '.ELAPSED').val;
|
let vElapsed = getState(id + '.ELAPSED').val;
|
||||||
if (vElapsed.length == 5) {
|
if (vElapsed.length == 5) {
|
||||||
@@ -5230,6 +5197,24 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Settings >>Aktualisierungsintervall für Statusinformationen<< = 1 !
|
||||||
|
// If the refresh time is set to 1 second in the spotify-premium.X instance,
|
||||||
|
// the elapsed refresh bug '00:00' is not visible
|
||||||
|
if (v2Adapter == 'spotify-premium') {
|
||||||
|
let vElapsed: string = getState(id + '.ELAPSED').val;
|
||||||
|
if (vElapsed.substring(0,1) == '0') {
|
||||||
|
vElapsed = vElapsed.slice(1)
|
||||||
|
}
|
||||||
|
let vDuration: string = getState(id + '.DURATION').val;
|
||||||
|
if (vDuration.substring(0,1) == '0') {
|
||||||
|
vDuration = vDuration.slice(1)
|
||||||
|
}
|
||||||
|
title = title + ' (' + vElapsed + '|' + vDuration + ')';
|
||||||
|
if (title == ' (0:00|0:00)') {
|
||||||
|
title = '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let shuffle = getState(id + '.SHUFFLE').val;
|
let shuffle = getState(id + '.SHUFFLE').val;
|
||||||
|
|
||||||
//New Adapter/Player
|
//New Adapter/Player
|
||||||
@@ -5240,19 +5225,23 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
media_icon = Icons.GetIcon('spotify');
|
media_icon = Icons.GetIcon('spotify');
|
||||||
name = getState(id + '.CONTEXT_DESCRIPTION').val;
|
name = getState(id + '.CONTEXT_DESCRIPTION').val;
|
||||||
let nameLength = name.length;
|
let nameLength = name.length;
|
||||||
if (name.substring(0,9) == 'Playlist:') {
|
if (name.substring(0,17) == 'Playlist: This Is') {
|
||||||
|
name = name.slice(18, 34) + '...';
|
||||||
|
} else if (name.substring(0,9) == 'Playlist:') {
|
||||||
name = name.slice(10, 26) + '...';
|
name = name.slice(10, 26) + '...';
|
||||||
} else if (name.substring(0,6) == 'Album:') {
|
} else if (name.substring(0,6) == 'Album:') {
|
||||||
name = name.slice(7, 23) + '...';
|
name = name.slice(7, 23) + '...';
|
||||||
} else if (name.substring(0,6) == 'Track') {
|
} else if (name.substring(0,6) == 'Track:') {
|
||||||
name = 'Spotify-Premium';
|
name = name.slice(7, 23) + '...';
|
||||||
|
} else if (name.substring(0,7) == 'Artist:') {
|
||||||
|
name = name.slice(8, 24) + '...';
|
||||||
}
|
}
|
||||||
if (nameLength == 0) {
|
if (nameLength == 0) {
|
||||||
name = 'Spotify-Premium';
|
name = 'Spotify-Premium';
|
||||||
}
|
}
|
||||||
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
||||||
if (author.length > 30) {
|
if (author.length > 37) {
|
||||||
author = getState(id + '.ARTIST').val;
|
author = author.slice(0,37) + '...';
|
||||||
}
|
}
|
||||||
if ((getState(id + '.ARTIST').val).length == 0) {
|
if ((getState(id + '.ARTIST').val).length == 0) {
|
||||||
author = findLocale('media','no_music_to_control');
|
author = findLocale('media','no_music_to_control');
|
||||||
@@ -5303,9 +5292,10 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
//Logitech Squeezebox RPC
|
//Logitech Squeezebox RPC
|
||||||
if (v2Adapter == 'squeezeboxrpc') {
|
if (v2Adapter == 'squeezeboxrpc') {
|
||||||
media_icon = Icons.GetIcon('dlna');
|
media_icon = Icons.GetIcon('dlna');
|
||||||
let nameLength = name.length;
|
if (name.length == 0) {
|
||||||
if (nameLength == 0) {
|
name = page.heading;
|
||||||
name = page.items[0].mediaDevice;
|
} else if (name.length > 16) {
|
||||||
|
name = name.slice(0,16) + '...'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5323,6 +5313,8 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
}
|
}
|
||||||
if (nameLength == 0) {
|
if (nameLength == 0) {
|
||||||
name = 'Alexa Player';
|
name = 'Alexa Player';
|
||||||
|
} else {
|
||||||
|
name = name.slice(0,16) + '...';
|
||||||
}
|
}
|
||||||
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
author = getState(id + '.ARTIST').val + ' | ' + getState(id + '.ALBUM').val;
|
||||||
if (author.length > 30) {
|
if (author.length > 30) {
|
||||||
@@ -5335,12 +5327,12 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
|
|
||||||
//Volumio
|
//Volumio
|
||||||
if (v2Adapter == 'volumio') {
|
if (v2Adapter == 'volumio') {
|
||||||
if (name != undefined) { author = author + " [" + name + "]"; }
|
media_icon = Icons.GetIcon('clock-time-twelve-outline');
|
||||||
name = getState(vInstance + 'info.name').val; /* page.heading;
|
if (name != undefined) { author = author + " | " + name; }
|
||||||
getState(id + '.TRACK').val; */
|
name = page.heading;
|
||||||
}
|
}
|
||||||
|
|
||||||
let volume = getState(id + '.VOLUME').val;
|
let volume = scale(getState(id + '.VOLUME').val, activePage!.items[0]!.minValue ?? 0, activePage!.items[0]!.maxValue ?? 100, 100, 0);
|
||||||
let iconplaypause = Icons.GetIcon('pause'); //pause
|
let iconplaypause = Icons.GetIcon('pause'); //pause
|
||||||
let shuffle_icon = Icons.GetIcon('shuffle-variant'); //shuffle
|
let shuffle_icon = Icons.GetIcon('shuffle-variant'); //shuffle
|
||||||
let onoffbutton = 1374;
|
let onoffbutton = 1374;
|
||||||
@@ -5348,7 +5340,9 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
if (shuffle == 'off' || shuffle == false || shuffle == 0 || shuffle == 'false') {
|
if (shuffle == 'off' || shuffle == false || shuffle == 0 || shuffle == 'false') {
|
||||||
shuffle_icon = Icons.GetIcon('shuffle-disabled'); //shuffle
|
shuffle_icon = Icons.GetIcon('shuffle-disabled'); //shuffle
|
||||||
}
|
}
|
||||||
if (v2Adapter == 'volumio') { shuffle_icon = Icons.GetIcon('refresh'); } //Volumio: refresh playlist
|
|
||||||
|
// Todo: Refresh automatisieren und dafür wieder Shuffle nutzen
|
||||||
|
//if (v2Adapter == 'volumio') { shuffle_icon = Icons.GetIcon('shuffle-disabled'); } //Volumio: refresh playlist
|
||||||
|
|
||||||
|
|
||||||
//For all players
|
//For all players
|
||||||
@@ -5379,7 +5373,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let currentSpeaker = findLocale('media','no_speaker_found');
|
let currentSpeaker: string = findLocale('media','no_speaker_found');
|
||||||
|
|
||||||
if (v2Adapter == 'alexa2') {
|
if (v2Adapter == 'alexa2') {
|
||||||
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', page.items[0].mediaDevice, '.Info.name'].join(''))).val;
|
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Echo-Devices.', page.items[0].mediaDevice, '.Info.name'].join(''))).val;
|
||||||
@@ -5391,6 +5385,8 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playername'].join(''))).val;
|
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playername'].join(''))).val;
|
||||||
} else if (v2Adapter == 'bosesoundtouch') {
|
} else if (v2Adapter == 'bosesoundtouch') {
|
||||||
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'deviceInfo.name'].join(''))).val;
|
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'deviceInfo.name'].join(''))).val;
|
||||||
|
} else if (v2Adapter == 'volumio') {
|
||||||
|
currentSpeaker = getState(([page.items[0].adapterPlayerInstance, 'info.name'].join(''))).val;
|
||||||
}
|
}
|
||||||
//-------------------------------------------------------------------------------------------------------------
|
//-------------------------------------------------------------------------------------------------------------
|
||||||
// All Alexa devices (the online / player and commands directory is available) are listed and linked below
|
// All Alexa devices (the online / player and commands directory is available) are listed and linked below
|
||||||
@@ -5407,6 +5403,11 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
speakerListArray.push(getState(playerId).val);
|
speakerListArray.push(getState(playerId).val);
|
||||||
page.items[0].speakerList = speakerListArray;
|
page.items[0].speakerList = speakerListArray;
|
||||||
});
|
});
|
||||||
|
} else if (v2Adapter == 'spotify-premium') {
|
||||||
|
// All possible Devices if page.items[0].speakerList empty
|
||||||
|
if (Debug) log(getState(page.items[0].adapterPlayerInstance + 'devices.availableDeviceListString').val);
|
||||||
|
speakerListArray = (getState(page.items[0].adapterPlayerInstance + 'devices.availableDeviceListString').val).split(';');
|
||||||
|
page.items[0].speakerList = speakerListArray;
|
||||||
} else {
|
} else {
|
||||||
let i_list = Array.prototype.slice.apply($('[state.id="' + page.items[0].adapterPlayerInstance + 'Echo-Devices.*.Info.name"]'));
|
let i_list = Array.prototype.slice.apply($('[state.id="' + page.items[0].adapterPlayerInstance + 'Echo-Devices.*.Info.name"]'));
|
||||||
for (let i_index in i_list) {
|
for (let i_index in i_list) {
|
||||||
@@ -5432,7 +5433,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
if (speakerListArray.length > 0) {
|
if (speakerListArray.length > 0) {
|
||||||
speakerListIconCol = rgb_dec565(HMIOn);
|
speakerListIconCol = rgb_dec565(HMIOn);
|
||||||
speakerListString = 'input_sel' + '~' +
|
speakerListString = 'input_sel' + '~' +
|
||||||
id + '?speakerlist' + '~' +
|
tid + '?speakerlist' + '~' +
|
||||||
Icons.GetIcon('speaker') + '~' +
|
Icons.GetIcon('speaker') + '~' +
|
||||||
speakerListIconCol + '~' +
|
speakerListIconCol + '~' +
|
||||||
findLocale('media','speaker') + '~' +
|
findLocale('media','speaker') + '~' +
|
||||||
@@ -5466,10 +5467,13 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/* Spotify: get all playlists if empty */
|
||||||
|
} else if (v2Adapter == 'spotify-premium') {
|
||||||
|
page.items[0].playList = (getState(page.items[0].adapterPlayerInstance + 'playlists.playlistListString').val).split(';');
|
||||||
}
|
}
|
||||||
playListIconCol = rgb_dec565(HMIOn);
|
playListIconCol = rgb_dec565(HMIOn);
|
||||||
playListString = 'input_sel' + '~' +
|
playListString = 'input_sel' + '~' +
|
||||||
id + '?playlist' + '~' +
|
tid + '?playlist' + '~' +
|
||||||
Icons.GetIcon('playlist-play') + '~' +
|
Icons.GetIcon('playlist-play') + '~' +
|
||||||
playListIconCol + '~' +
|
playListIconCol + '~' +
|
||||||
//'PlayL ' + page.heading + '~' +
|
//'PlayL ' + page.heading + '~' +
|
||||||
@@ -5479,9 +5483,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
|
|
||||||
//InSel Tracklist
|
//InSel Tracklist
|
||||||
globalTracklist = ''
|
globalTracklist = ''
|
||||||
if (v2Adapter == 'spotify-premium') {
|
|
||||||
globalTracklist = ' ' //Todo
|
|
||||||
}
|
|
||||||
let trackListString: string = '~~~~~~'
|
let trackListString: string = '~~~~~~'
|
||||||
let trackListIconCol = rgb_dec565(HMIOff);
|
let trackListIconCol = rgb_dec565(HMIOff);
|
||||||
if (v2Adapter == 'volumio') { /* Volumio: get queue */
|
if (v2Adapter == 'volumio') { /* Volumio: get queue */
|
||||||
@@ -5532,12 +5534,19 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
trackList = trackList + ']';
|
trackList = trackList + ']';
|
||||||
if (Debug) log(trackList, 'info');
|
if (Debug) log(trackList, 'info');
|
||||||
globalTracklist = trackList;
|
globalTracklist = trackList;
|
||||||
|
} else if (v2Adapter == 'spotify-premium') {
|
||||||
|
try {
|
||||||
|
let tempTrackList = JSON.parse(getState(page.items[0].adapterPlayerInstance + 'player.playlist.trackListArray').val);
|
||||||
|
globalTracklist = tempTrackList;
|
||||||
|
} catch {
|
||||||
|
log('Hello Mr. Developer something went wrong in tracklist!', 'debug')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (globalTracklist != null && globalTracklist.length != 0) {
|
if (globalTracklist != null && globalTracklist.length != 0) {
|
||||||
trackListIconCol = rgb_dec565(HMIOn);
|
trackListIconCol = rgb_dec565(HMIOn);
|
||||||
trackListString = 'input_sel' + '~' +
|
trackListString = 'input_sel' + '~' +
|
||||||
id + '?tracklist' + '~' +
|
tid + '?tracklist' + '~' +
|
||||||
Icons.GetIcon('animation-play-outline') + '~' +
|
Icons.GetIcon('animation-play-outline') + '~' +
|
||||||
trackListIconCol + '~' +
|
trackListIconCol + '~' +
|
||||||
findLocale('media','tracklist') + '~' +
|
findLocale('media','tracklist') + '~' +
|
||||||
@@ -5550,7 +5559,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
if (page.items[0].equalizerList != undefined) {
|
if (page.items[0].equalizerList != undefined) {
|
||||||
equalizerListIconCol = rgb_dec565(HMIOn);
|
equalizerListIconCol = rgb_dec565(HMIOn);
|
||||||
equalizerListString = 'input_sel' + '~' +
|
equalizerListString = 'input_sel' + '~' +
|
||||||
id + '?equalizer' + '~' +
|
tid + '?equalizer' + '~' +
|
||||||
Icons.GetIcon('equalizer-outline') + '~' +
|
Icons.GetIcon('equalizer-outline') + '~' +
|
||||||
equalizerListIconCol + '~' +
|
equalizerListIconCol + '~' +
|
||||||
findLocale('media','equalizer') + '~' +
|
findLocale('media','equalizer') + '~' +
|
||||||
@@ -5559,7 +5568,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
let equalizerListIconCol = rgb_dec565(HMIOn);
|
let equalizerListIconCol = rgb_dec565(HMIOn);
|
||||||
//equalizerListString is used for favariteList
|
//equalizerListString is used for favariteList
|
||||||
equalizerListString = 'input_sel' + '~' +
|
equalizerListString = 'input_sel' + '~' +
|
||||||
id + '?favorites' + '~' +
|
tid + '?favorites' + '~' +
|
||||||
Icons.GetIcon('playlist-star') + '~' +
|
Icons.GetIcon('playlist-star') + '~' +
|
||||||
equalizerListIconCol + '~' +
|
equalizerListIconCol + '~' +
|
||||||
findLocale('media','favorites') + '~' +
|
findLocale('media','favorites') + '~' +
|
||||||
@@ -5608,15 +5617,10 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
repeatIcon = Icons.GetIcon('repeat');
|
repeatIcon = Icons.GetIcon('repeat');
|
||||||
repeatIconCol = rgb_dec565(HMIOn);
|
repeatIconCol = rgb_dec565(HMIOn);
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
else {
|
|
||||||
repeatIcon = Icons.GetIcon('repeat-off');
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
} else if (v2Adapter == 'volumio') { /* Volumio: only Repeat true/false with API */
|
} else if (v2Adapter == 'volumio') { /* Volumio: only Repeat true/false with API */
|
||||||
if (getState(id + '.REPEAT').val == true) {
|
if (getState(id + '.REPEAT').val == true) {
|
||||||
repeatIcon = Icons.GetIcon('repeat-variant');
|
repeatIcon = Icons.GetIcon('repeat-variant');
|
||||||
repeatIconCol = rgb_dec565(colMediaIcon);
|
repeatIconCol = rgb_dec565(HMIOn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5627,7 +5631,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
v2Adapter == 'volumio' ||
|
v2Adapter == 'volumio' ||
|
||||||
v2Adapter == 'squeezeboxrpc') {
|
v2Adapter == 'squeezeboxrpc') {
|
||||||
repeatButtonString = 'button' + '~' +
|
repeatButtonString = 'button' + '~' +
|
||||||
id + '?repeat' + '~' +
|
tid + '?repeat' + '~' +
|
||||||
repeatIcon + '~' +
|
repeatIcon + '~' +
|
||||||
repeatIconCol + '~' +
|
repeatIconCol + '~' +
|
||||||
'Repeat' + '~' +
|
'Repeat' + '~' +
|
||||||
@@ -5640,14 +5644,14 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
if (v2Adapter == 'sonos') {
|
if (v2Adapter == 'sonos') {
|
||||||
if (page.items[0].crossfade == undefined || page.items[0].crossfade == false) {
|
if (page.items[0].crossfade == undefined || page.items[0].crossfade == false) {
|
||||||
toolsString = 'input_sel' + '~' +
|
toolsString = 'input_sel' + '~' +
|
||||||
id + '?seek' + '~' +
|
tid + '?seek' + '~' +
|
||||||
media_icon + '~' +
|
media_icon + '~' +
|
||||||
toolsIconCol + '~' +
|
toolsIconCol + '~' +
|
||||||
findLocale('media','seek') + '~' +
|
findLocale('media','seek') + '~' +
|
||||||
'media5~'
|
'media5~'
|
||||||
} else {
|
} else {
|
||||||
toolsString = 'input_sel' + '~' +
|
toolsString = 'input_sel' + '~' +
|
||||||
id + '?crossfade' + '~' +
|
tid + '?crossfade' + '~' +
|
||||||
media_icon + '~' +
|
media_icon + '~' +
|
||||||
toolsIconCol + '~' +
|
toolsIconCol + '~' +
|
||||||
findLocale('media','crossfade') + '~' +
|
findLocale('media','crossfade') + '~' +
|
||||||
@@ -5656,7 +5660,16 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
} else if (v2Adapter == 'squeezeboxrpc') {
|
} else if (v2Adapter == 'squeezeboxrpc') {
|
||||||
if (page.items[0].crossfade == undefined || page.items[0].crossfade == false) {
|
if (page.items[0].crossfade == undefined || page.items[0].crossfade == false) {
|
||||||
toolsString = 'input_sel' + '~' +
|
toolsString = 'input_sel' + '~' +
|
||||||
id + '?seek' + '~' +
|
tid + '?seek' + '~' +
|
||||||
|
media_icon + '~' +
|
||||||
|
toolsIconCol + '~' +
|
||||||
|
findLocale('media','seek') + '~' +
|
||||||
|
'media5~'
|
||||||
|
}
|
||||||
|
} else if (v2Adapter == 'spotify-premium') {
|
||||||
|
if (page.items[0].crossfade == undefined || page.items[0].crossfade == false) {
|
||||||
|
toolsString = 'input_sel' + '~' +
|
||||||
|
tid + '?seek' + '~' +
|
||||||
media_icon + '~' +
|
media_icon + '~' +
|
||||||
toolsIconCol + '~' +
|
toolsIconCol + '~' +
|
||||||
findLocale('media','seek') + '~' +
|
findLocale('media','seek') + '~' +
|
||||||
@@ -5664,7 +5677,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
toolsString = 'button' + '~' +
|
toolsString = 'button' + '~' +
|
||||||
id + '' + '~' +
|
tid + '' + '~' +
|
||||||
media_icon + '~' +
|
media_icon + '~' +
|
||||||
toolsIconCol + '~' +
|
toolsIconCol + '~' +
|
||||||
findLocale('media','tools') + '~' +
|
findLocale('media','tools') + '~' +
|
||||||
@@ -5675,7 +5688,7 @@ function GenerateMediaPage(page: NSPanel.PageMedia): NSPanel.Payload[] {
|
|||||||
payload: 'entityUpd~' + //entityUpd
|
payload: 'entityUpd~' + //entityUpd
|
||||||
name + '~' + //heading
|
name + '~' + //heading
|
||||||
GetNavigationString(pageId) + '~' + //navigation
|
GetNavigationString(pageId) + '~' + //navigation
|
||||||
id + '~' + //internalNameEntiy
|
tid + '~' + //internalNameEntiy
|
||||||
title + '~' + //title
|
title + '~' + //title
|
||||||
rgb_dec565(colMediaTitle) + '~' + //titleColor
|
rgb_dec565(colMediaTitle) + '~' + //titleColor
|
||||||
author + '~' + //author
|
author + '~' + //author
|
||||||
@@ -6622,19 +6635,20 @@ function HandleButtonEvent(words: any): void {
|
|||||||
|
|
||||||
switch (deviceAdapterRP) {
|
switch (deviceAdapterRP) {
|
||||||
case 'spotify-premium':
|
case 'spotify-premium':
|
||||||
let stateSpotifyRepeat = getState(id + '.REPEAT').val
|
if (Debug) log(getState(id + '.REPEAT').val);
|
||||||
if (stateSpotifyRepeat == 'none') {
|
let stateSpotifyRepeat = getState(id + '.REPEAT').val;
|
||||||
setIfExists(id + '.REPEAT', 'all');
|
if (stateSpotifyRepeat == 'off') {
|
||||||
} else if (stateSpotifyRepeat == 'all') {
|
setIfExists(id + '.REPEAT', 'context');
|
||||||
setIfExists(id + '.REPEAT', 'one');
|
} else if (stateSpotifyRepeat == 'context') {
|
||||||
} else if (stateSpotifyRepeat == 'one') {
|
setIfExists(id + '.REPEAT', 'track');
|
||||||
setIfExists(id + '.REPEAT', 'none');
|
} else if (stateSpotifyRepeat == 'track') {
|
||||||
|
setIfExists(id + '.REPEAT', 'off');
|
||||||
}
|
}
|
||||||
GeneratePage(activePage!);
|
GeneratePage(activePage!);
|
||||||
break;
|
break;
|
||||||
case 'bosesoundtouch':
|
case 'bosesoundtouch':
|
||||||
if (Debug) log(adapterInstanceRepeat);
|
if (Debug) log(adapterInstanceRepeat);
|
||||||
let stateBoseRepeat = getState(id + '.REPEAT').val
|
let stateBoseRepeat = getState(id + '.REPEAT').val;
|
||||||
if (stateBoseRepeat == 'REPEAT_OFF') {
|
if (stateBoseRepeat == 'REPEAT_OFF') {
|
||||||
setIfExists(adapterInstanceRepeat + 'key', 'REPEAT_ALL');
|
setIfExists(adapterInstanceRepeat + 'key', 'REPEAT_ALL');
|
||||||
} else if (stateBoseRepeat == 'REPEAT_ALL') {
|
} else if (stateBoseRepeat == 'REPEAT_ALL') {
|
||||||
@@ -6645,7 +6659,7 @@ function HandleButtonEvent(words: any): void {
|
|||||||
GeneratePage(activePage!);
|
GeneratePage(activePage!);
|
||||||
break;
|
break;
|
||||||
case 'sonos':
|
case 'sonos':
|
||||||
let stateSonosRepeat = getState(id + '.REPEAT').val
|
let stateSonosRepeat = getState(id + '.REPEAT').val;
|
||||||
if (stateSonosRepeat == 0) {
|
if (stateSonosRepeat == 0) {
|
||||||
setIfExists(id + '.REPEAT', 1);
|
setIfExists(id + '.REPEAT', 1);
|
||||||
} else if (stateSonosRepeat == 1) {
|
} else if (stateSonosRepeat == 1) {
|
||||||
@@ -6944,15 +6958,11 @@ function HandleButtonEvent(words: any): void {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'volumeSlider':
|
case 'volumeSlider':
|
||||||
pageCounter = -1;
|
subscribeMediaSubscriptions(id);
|
||||||
(function () { if (timeoutSlider) { clearTimeout(timeoutSlider); timeoutSlider = null; } })();
|
useMediaEvents = true;
|
||||||
timeoutSlider = setTimeout(async function () {
|
|
||||||
setIfExists(id + '.VOLUME', parseInt(words[4]));
|
|
||||||
setTimeout(async function () {
|
|
||||||
pageCounter = 1;
|
pageCounter = 1;
|
||||||
GeneratePage(activePage!);
|
let vVolume = scale(parseInt(words[4]), 100, 0, activePage!.items[0]!.minValue ?? 0, activePage!.items[0]!.maxValue ?? 100);
|
||||||
}, 3000);
|
setIfExists(id + '.VOLUME', Math.floor(vVolume));
|
||||||
}, 20);
|
|
||||||
break;
|
break;
|
||||||
case 'mode-speakerlist':
|
case 'mode-speakerlist':
|
||||||
let pageItem = findPageItem(id);
|
let pageItem = findPageItem(id);
|
||||||
@@ -7076,8 +7086,9 @@ function HandleButtonEvent(words: any): void {
|
|||||||
|
|
||||||
switch (deviceAdapterTL) {
|
switch (deviceAdapterTL) {
|
||||||
case 'spotify-premium':
|
case 'spotify-premium':
|
||||||
let trackArray = (function () { try {return JSON.parse(getState(pageItemTL.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
|
//let trackArray = (function () { try {return JSON.parse(getState(pageItemTL.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
|
||||||
setState(adapterInstanceTL + 'player.trackId', getAttr(trackArray, words[4] + '.id'));
|
//setState(adapterInstanceTL + 'player.trackId', getAttr(trackArray, words[4] + '.id'));
|
||||||
|
setState(adapterInstanceTL + 'player.playlist.trackNo', parseInt(words[4]) + 1);
|
||||||
break;
|
break;
|
||||||
case 'sonos':
|
case 'sonos':
|
||||||
setState(adapterInstanceTL + 'root.' + pageItemTL.mediaDevice + '.current_track_number', parseInt(words[4]) + 1);
|
setState(adapterInstanceTL + 'root.' + pageItemTL.mediaDevice + '.current_track_number', parseInt(words[4]) + 1);
|
||||||
@@ -7155,6 +7166,7 @@ function HandleButtonEvent(words: any): void {
|
|||||||
let deviceAdapterSK: NSPanel.PlayerType = adapterSK[0] as NSPanel.PlayerType;
|
let deviceAdapterSK: NSPanel.PlayerType = adapterSK[0] as NSPanel.PlayerType;
|
||||||
switch (deviceAdapterSK) {
|
switch (deviceAdapterSK) {
|
||||||
case 'spotify-premium':
|
case 'spotify-premium':
|
||||||
|
setState(adapterInstanceSK + 'player.progressPercentage', parseInt(words[4]) * 10);
|
||||||
break;
|
break;
|
||||||
case 'squeezeboxrpc':
|
case 'squeezeboxrpc':
|
||||||
const vDuration: number = getState(adapterInstanceSK + 'Players.' + pageItemSeek.mediaDevice + '.Duration').val;
|
const vDuration: number = getState(adapterInstanceSK + 'Players.' + pageItemSeek.mediaDevice + '.Duration').val;
|
||||||
@@ -8252,6 +8264,11 @@ function GenerateDetailPage(type: NSPanel.PopupType, optional: NSPanel.mediaOpti
|
|||||||
actualState = Math.round(actualStateTemp / 10) * 10 + '%';
|
actualState = Math.round(actualStateTemp / 10) * 10 + '%';
|
||||||
optionalString = '0%?10%?20%?30%?40%?50%?60%?70%?80%?90%?100%';
|
optionalString = '0%?10%?20%?30%?40%?50%?60%?70%?80%?90%?100%';
|
||||||
}
|
}
|
||||||
|
if (vAdapter == 'spotify-premium') {
|
||||||
|
const actualStateTemp: number = getState(pageItem.adapterPlayerInstance + 'player.progressPercentage').val;
|
||||||
|
actualState = Math.round(actualStateTemp / 10) * 10 + '%';
|
||||||
|
optionalString = '0%?10%?20%?30%?40%?50%?60%?70%?80%?90%?100%';
|
||||||
|
}
|
||||||
if (vAdapter == 'squeezeboxrpc') {
|
if (vAdapter == 'squeezeboxrpc') {
|
||||||
const actualStateTime: number = parseInt(getState(pageItem.adapterPlayerInstance + 'Players.' + pageItem.mediaDevice + '.Time').val);
|
const actualStateTime: number = parseInt(getState(pageItem.adapterPlayerInstance + 'Players.' + pageItem.mediaDevice + '.Time').val);
|
||||||
const actualStateDuration: number = parseInt(getState(pageItem.adapterPlayerInstance + 'Players.' + pageItem.mediaDevice + '.Duration').val);
|
const actualStateDuration: number = parseInt(getState(pageItem.adapterPlayerInstance + 'Players.' + pageItem.mediaDevice + '.Duration').val);
|
||||||
@@ -8394,7 +8411,7 @@ function GenerateDetailPage(type: NSPanel.PopupType, optional: NSPanel.mediaOpti
|
|||||||
//Limit 900 characters, then memory overflow --> Shorten as much as possible
|
//Limit 900 characters, then memory overflow --> Shorten as much as possible
|
||||||
let temp_array: any[] = [];
|
let temp_array: any[] = [];
|
||||||
//let trackArray = (function () { try {return JSON.parse(getState(pageItem.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
|
//let trackArray = (function () { try {return JSON.parse(getState(pageItem.adapterPlayerInstance + 'player.playlist.trackListArray').val);} catch(e) {return {};}})();
|
||||||
for (let track_index = 0; track_index < 45; track_index++) {
|
for (let track_index = 0; track_index < 48; track_index++) {
|
||||||
let temp_cut_array = getAttr(globalTracklist, track_index + '.title');
|
let temp_cut_array = getAttr(globalTracklist, track_index + '.title');
|
||||||
/* Volumio: @local/NAS no title -> name */
|
/* Volumio: @local/NAS no title -> name */
|
||||||
if (temp_cut_array == undefined) {
|
if (temp_cut_array == undefined) {
|
||||||
@@ -8839,9 +8856,10 @@ function HandleScreensaverUpdate(): void {
|
|||||||
iconColor + '~' +
|
iconColor + '~' +
|
||||||
config.bottomScreensaverEntity[4].ScreensaverEntityText + '~' +
|
config.bottomScreensaverEntity[4].ScreensaverEntityText + '~' +
|
||||||
val
|
val
|
||||||
}
|
} // Ende zusätzlichen Status Alternativ Layout
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
// USER definierte Bottom Entities
|
||||||
let checkpoint = true;
|
let checkpoint = true;
|
||||||
let i = 0;
|
let i = 0;
|
||||||
for (i = 0; i < maxEntities - 1 && i < config.bottomScreensaverEntity.length; i++) {
|
for (i = 0; i < maxEntities - 1 && i < config.bottomScreensaverEntity.length; i++) {
|
||||||
@@ -8895,7 +8913,7 @@ function HandleScreensaverUpdate(): void {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const temp = config.bottomScreensaverEntity[4].ScreensaverEntityIconColor
|
const temp = config.bottomScreensaverEntity[i].ScreensaverEntityIconColor
|
||||||
if (temp && typeof temp == 'string' && existsObject(temp)) {
|
if (temp && typeof temp == 'string' && existsObject(temp)) {
|
||||||
iconColor = getState(temp).val;
|
iconColor = getState(temp).val;
|
||||||
}
|
}
|
||||||
@@ -10020,7 +10038,7 @@ namespace NSPanel {
|
|||||||
|
|
||||||
export type PageGrid2 = {
|
export type PageGrid2 = {
|
||||||
type: 'cardGrid2',
|
type: 'cardGrid2',
|
||||||
items: [PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?],
|
items: [PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?, PageItem?],
|
||||||
} & PageBaseType
|
} & PageBaseType
|
||||||
|
|
||||||
export type PageThermo = {
|
export type PageThermo = {
|
||||||
@@ -10124,7 +10142,6 @@ namespace NSPanel {
|
|||||||
navigate?: boolean,
|
navigate?: boolean,
|
||||||
colormode?: string,
|
colormode?: string,
|
||||||
colorScale?: IconScaleElement,
|
colorScale?: IconScaleElement,
|
||||||
//adapterPlayerInstance?: adapterPlayerInstanceType,
|
|
||||||
targetPage?: string,
|
targetPage?: string,
|
||||||
modeList?: string[],
|
modeList?: string[],
|
||||||
hidePassword?: boolean,
|
hidePassword?: boolean,
|
||||||
|
|||||||
Reference in New Issue
Block a user