some more types

This commit is contained in:
ticaki
2024-01-03 17:02:32 +01:00
parent 360fb881f1
commit b14687cb30

View File

@@ -1,5 +1,5 @@
/*----------------------------------------------------------------------- /*-----------------------------------------------------------------------
TypeScript v4.3.3.30 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @ticaki / @Sternmiere / @Britzelpuf / @ravenS0ne TypeScript v4.3.3.31 zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar / @TT-Tom / @ticaki / @Sternmiere / @Britzelpuf / @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
@@ -91,6 +91,9 @@ ReleaseNotes:
- 02.01.2024 - v4.3.3.29 Add Tasmota Buzzer for NotifyPage - 02.01.2024 - v4.3.3.29 Add Tasmota Buzzer for NotifyPage
- 02.02.2024 - v4.3.3.29 Fix ThermoPage -> UnSubScribsWatcher - 02.02.2024 - v4.3.3.29 Fix ThermoPage -> UnSubScribsWatcher
- 02.02.2024 - v4.3.3.30 Add stronger config type checks - 02.02.2024 - v4.3.3.30 Add stronger config type checks
- 03.02.2024 - v4.3.3.31 Remove: autoCreateAlias from cardMedia
- 03.02.2024 - v4.3.3.31 Remove: adapterPlayerInstance from every card except cardMedia
- 03.02.2024 - v4.3.3.31 [dev]: optional with type - cardMedia has adapterPlayerInstance all other not
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
@@ -953,7 +956,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.30'; const scriptVersion: string = 'v4.3.3.31';
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;
@@ -3022,7 +3025,9 @@ function HandleMessage(typ: string, method: string, page: number | undefined, wo
} }
let pageItem: PageItem = findPageItem(tempId); let pageItem: PageItem = findPageItem(tempId);
if (pageItem !== undefined) { if (pageItem !== undefined) {
SendToPanel(GenerateDetailPage(words[2], tempPageItem[1], pageItem, placeId)); let temp: string | mediaOptional | undefined = tempPageItem[1]
if (isMediaOptional(temp)) SendToPanel(GenerateDetailPage(words[2], temp, pageItem, placeId));
else SendToPanel(GenerateDetailPage(words[2], undefined, pageItem, placeId));
} }
} }
break; break;
@@ -4286,8 +4291,8 @@ function GenerateThermoPage(page: PageThermo): Payload[] {
if ((i_list.length - 3) != 0) { if ((i_list.length - 3) != 0) {
let i = 0; let i = 0;
switch (o.common.role) {
if (o.common.role == 'thermostat') { case 'thermostat': {
if (existsState(id + '.AUTOMATIC') && getState(id + '.AUTOMATIC').val != null) { if (existsState(id + '.AUTOMATIC') && getState(id + '.AUTOMATIC').val != null) {
if (getState(id + '.AUTOMATIC').val) { if (getState(id + '.AUTOMATIC').val) {
@@ -4429,8 +4434,8 @@ function GenerateThermoPage(page: PageThermo): Payload[] {
bt[j] = '~~~~'; bt[j] = '~~~~';
} }
} }
break;
if (o.common.role == 'airCondition') { case 'airCondition': {
if (existsState(id + '.MODE') && getState(id + '.MODE').val != null) { if (existsState(id + '.MODE') && getState(id + '.MODE').val != null) {
let Mode = getState(id + '.MODE').val let Mode = getState(id + '.MODE').val
let States = getObject(id + '.MODE').common.states; let States = getObject(id + '.MODE').common.states;
@@ -4569,6 +4574,8 @@ function GenerateThermoPage(page: PageThermo): Payload[] {
} }
} }
} }
break;
}
} }
let destTemp2 = ''; let destTemp2 = '';
@@ -4887,10 +4894,9 @@ function GenerateMediaPage(page: PageMedia): Payload[] {
} }
} }
if (page.items[0].autoCreateALias) {
let vMediaDevice = (page.items[0].mediaDevice != undefined) ? page.items[0].mediaDevice : ''; let vMediaDevice = (page.items[0].mediaDevice != undefined) ? page.items[0].mediaDevice : '';
if (!vMediaDevice) throw new Error(`Error in cardMedia! mediaDevice is empty! Page: ${JSON.stringify(page)}`);
createAutoMediaAlias(id, vMediaDevice, page.items[0].adapterPlayerInstance!); createAutoMediaAlias(id, vMediaDevice, page.items[0].adapterPlayerInstance!);
}
// Leave the display on if the alwaysOnDisplay parameter is specified (true) // Leave the display on if the alwaysOnDisplay parameter is specified (true)
if (page.type == 'cardMedia' && pageCounter == 0 && page.items[0].alwaysOnDisplay != undefined) { if (page.type == 'cardMedia' && pageCounter == 0 && page.items[0].alwaysOnDisplay != undefined) {
@@ -6253,12 +6259,18 @@ function HandleButtonEvent(words: any): void {
case 'hue': case 'hue':
toggleState(id + '.ON_ACTUAL'); toggleState(id + '.ON_ACTUAL');
case 'media': case 'media':
if (!activePage || activePage.type != 'cardMedia') {
if (activePage) throw new Error(`Found channel role media for card: ${activePage.type} not allowed`)
else throw new Error(`Something went wrong! Active Page is empty!`);
}
if (tempid[1] == undefined) { if (tempid[1] == undefined) {
if (Debug) log('Logo click', 'info'); if (Debug) log('Logo click', 'info');
GeneratePage(activePage!); GeneratePage(activePage!);
} else if (tempid[1] == 'repeat') { } else if (tempid[1] == 'repeat') {
let pageItemRepeat = findPageItem(id); let pageItemRepeat = findPageItem(id);
let adapterInstanceRepeat = pageItemRepeat.adapterPlayerInstance!; if (isPageMediaItem(pageItemRepeat)) {
let adapterInstanceRepeat = pageItemRepeat.adapterPlayerInstance;
let adapterRepeat = adapterInstanceRepeat.split('.'); let adapterRepeat = adapterInstanceRepeat.split('.');
let deviceAdapterRP = adapterRepeat[0]; let deviceAdapterRP = adapterRepeat[0];
@@ -6334,6 +6346,7 @@ function HandleButtonEvent(words: any): void {
} }
} }
} }
}
break; break;
case 'up': case 'up':
setIfExists(id + '.OPEN', true); setIfExists(id + '.OPEN', true);
@@ -6478,6 +6491,7 @@ function HandleButtonEvent(words: any): void {
break; break;
case 'media-pause': case 'media-pause':
let pageItemTemp = findPageItem(id); let pageItemTemp = findPageItem(id);
if (isPageMediaItem(pageItemTemp)) {
let adaInstanceSplit = pageItemTemp.adapterPlayerInstance!.split('.'); let adaInstanceSplit = pageItemTemp.adapterPlayerInstance!.split('.');
if (adaInstanceSplit[0] == 'squeezeboxrpc') { if (adaInstanceSplit[0] == 'squeezeboxrpc') {
let adapterPlayerInstanceStateSeceltor: string = [pageItemTemp.adapterPlayerInstance, 'Players', pageItemTemp.mediaDevice, 'state'].join('.'); let adapterPlayerInstanceStateSeceltor: string = [pageItemTemp.adapterPlayerInstance, 'Players', pageItemTemp.mediaDevice, 'state'].join('.');
@@ -6499,30 +6513,33 @@ function HandleButtonEvent(words: any): void {
} }
} }
GeneratePage(activePage!); GeneratePage(activePage!);
}
break; break;
case 'media-next': case 'media-next':
setIfExists(id + '.NEXT', true); setIfExists(id + '.NEXT', true);
GeneratePage(activePage!); GeneratePage(activePage!);
break; break;
case 'media-shuffle': case 'media-shuffle':
if ((findPageItem(id).adapterPlayerInstance!).startsWith("volumio")) { const tempPage = findPageItem(id);
if (isPageMediaItem(tempPage)) {
if (tempPage.adapterPlayerInstance.startsWith("volumio")) {
findPageItem(id).playList = []; break; findPageItem(id).playList = []; break;
} //Volumio: empty playlist $uha-20230103 } //Volumio: empty playlist $uha-20230103
if ((findPageItem(id).adapterPlayerInstance!).startsWith("spotify")) { if ((tempPage.adapterPlayerInstance).startsWith("spotify")) {
if (getState(id + '.SHUFFLE').val == 'off') { if (getState(id + '.SHUFFLE').val == 'off') {
setIfExists(id + '.SHUFFLE', 'on'); setIfExists(id + '.SHUFFLE', 'on');
} else { } else {
setIfExists(id + '.SHUFFLE', 'off'); setIfExists(id + '.SHUFFLE', 'off');
} }
} }
if ((findPageItem(id).adapterPlayerInstance!).startsWith("alexa")) { if ((tempPage.adapterPlayerInstance).startsWith("alexa")) {
if (getState(id + '.SHUFFLE').val == false) { if (getState(id + '.SHUFFLE').val == false) {
setIfExists(id + '.SHUFFLE', true); setIfExists(id + '.SHUFFLE', true);
} else { } else {
setIfExists(id + '.SHUFFLE', false); setIfExists(id + '.SHUFFLE', false);
} }
} }
if ((findPageItem(id).adapterPlayerInstance!).startsWith("sonos")) { if ((tempPage.adapterPlayerInstance).startsWith("sonos")) {
if (getState(id + '.SHUFFLE').val == false) { if (getState(id + '.SHUFFLE').val == false) {
setIfExists(id + '.SHUFFLE', true); setIfExists(id + '.SHUFFLE', true);
} else { } else {
@@ -6530,6 +6547,7 @@ function HandleButtonEvent(words: any): void {
} }
} }
GeneratePage(activePage!); GeneratePage(activePage!);
}
break; break;
case 'volumeSlider': case 'volumeSlider':
pageCounter = -1; pageCounter = -1;
@@ -6544,6 +6562,7 @@ function HandleButtonEvent(words: any): void {
break; break;
case 'mode-speakerlist': case 'mode-speakerlist':
let pageItem = findPageItem(id); let pageItem = findPageItem(id);
if (isPageMediaItem(pageItem)) {
let adapterInstance = pageItem.adapterPlayerInstance!; let adapterInstance = pageItem.adapterPlayerInstance!;
let adapter = adapterInstance!.split('.'); let adapter = adapterInstance!.split('.');
let deviceAdapter = adapter[0]; let deviceAdapter = adapter[0];
@@ -6574,6 +6593,7 @@ function HandleButtonEvent(words: any): void {
case 'squeezeboxrpc': case 'squeezeboxrpc':
pageItem.mediaDevice = pageItem.speakerList![words[4]]; pageItem.mediaDevice = pageItem.speakerList![words[4]];
break; break;
} }
pageCounter = 0; pageCounter = 0;
GeneratePage(activePage!); GeneratePage(activePage!);
@@ -6581,9 +6601,11 @@ function HandleButtonEvent(words: any): void {
pageCounter = 1; pageCounter = 1;
GeneratePage(activePage!); GeneratePage(activePage!);
}, 3000); }, 3000);
}
break; break;
case 'mode-playlist': case 'mode-playlist':
let pageItemPL = findPageItem(id); let pageItemPL = findPageItem(id);
if (!isPageMediaItem(pageItemPL)) break;
let adapterInstancePL = pageItemPL.adapterPlayerInstance!; let adapterInstancePL = pageItemPL.adapterPlayerInstance!;
let adapterPL = adapterInstancePL.split('.'); let adapterPL = adapterInstancePL.split('.');
let deviceAdapterPL = adapterPL[0]; let deviceAdapterPL = adapterPL[0];
@@ -6639,6 +6661,7 @@ function HandleButtonEvent(words: any): void {
break; break;
case 'mode-tracklist': case 'mode-tracklist':
let pageItemTL = findPageItem(id); let pageItemTL = findPageItem(id);
if (!isPageMediaItem(pageItemTL)) break;
let adapterInstanceTL = pageItemTL.adapterPlayerInstance!; let adapterInstanceTL = pageItemTL.adapterPlayerInstance!;
let adapterTL = adapterInstanceTL.split('.'); let adapterTL = adapterInstanceTL.split('.');
let deviceAdapterTL = adapterTL[0]; let deviceAdapterTL = adapterTL[0];
@@ -6683,6 +6706,7 @@ function HandleButtonEvent(words: any): void {
break; break;
case 'mode-repeat': case 'mode-repeat':
let pageItemRP = findPageItem(id); let pageItemRP = findPageItem(id);
if (!isPageMediaItem(pageItemRP)) break;
let adapterInstanceRP = pageItemRP.adapterPlayerInstance!; let adapterInstanceRP = pageItemRP.adapterPlayerInstance!;
let adapterRP = adapterInstanceRP.split('.'); let adapterRP = adapterInstanceRP.split('.');
let deviceAdapterRP = adapterRP[0]; let deviceAdapterRP = adapterRP[0];
@@ -6712,6 +6736,7 @@ function HandleButtonEvent(words: any): void {
break; break;
case 'mode-seek': case 'mode-seek':
let pageItemSeek = findPageItem(id); let pageItemSeek = findPageItem(id);
if (!isPageMediaItem(pageItemSeek)) break;
let adapterInstanceSK = pageItemSeek.adapterPlayerInstance!; let adapterInstanceSK = pageItemSeek.adapterPlayerInstance!;
let adapterSK = adapterInstanceSK.split('.'); let adapterSK = adapterInstanceSK.split('.');
let deviceAdapterSK = adapterSK[0]; let deviceAdapterSK = adapterSK[0];
@@ -6732,6 +6757,7 @@ function HandleButtonEvent(words: any): void {
break; break;
case 'mode-crossfade': case 'mode-crossfade':
let pageItemCrossfade = findPageItem(id); let pageItemCrossfade = findPageItem(id);
if (!isPageMediaItem(pageItemCrossfade)) break;
let adapterInstanceCF = pageItemCrossfade.adapterPlayerInstance!; let adapterInstanceCF = pageItemCrossfade.adapterPlayerInstance!;
let adapterCF = adapterInstanceCF.split('.'); let adapterCF = adapterInstanceCF.split('.');
let deviceAdapterCF = adapterCF[0]; let deviceAdapterCF = adapterCF[0];
@@ -6756,6 +6782,7 @@ function HandleButtonEvent(words: any): void {
break; break;
case 'mode-favorites': case 'mode-favorites':
let pageItemFav = findPageItem(id); let pageItemFav = findPageItem(id);
if (!isPageMediaItem(pageItemFav)) break;
if (Debug) log(getState(pageItemFav.adapterPlayerInstance + 'root.' + pageItemFav.mediaDevice + '.favorites_set').val, 'info'); if (Debug) log(getState(pageItemFav.adapterPlayerInstance + 'root.' + pageItemFav.mediaDevice + '.favorites_set').val, 'info');
let favListArray = getState(pageItemFav.adapterPlayerInstance + 'root.' + pageItemFav.mediaDevice + '.favorites_list_array').val; let favListArray = getState(pageItemFav.adapterPlayerInstance + 'root.' + pageItemFav.mediaDevice + '.favorites_list_array').val;
setState(pageItemFav.adapterPlayerInstance + 'root.' + pageItemFav.mediaDevice + '.favorites_set', favListArray[words[4]]); setState(pageItemFav.adapterPlayerInstance + 'root.' + pageItemFav.mediaDevice + '.favorites_set', favListArray[words[4]]);
@@ -6771,6 +6798,7 @@ function HandleButtonEvent(words: any): void {
break; break;
case 'media-OnOff': case 'media-OnOff':
let pageItemTem = findPageItem(id); let pageItemTem = findPageItem(id);
if (!isPageMediaItem(pageItemTem)) break;
let adaInstanceSpli = pageItemTem.adapterPlayerInstance!.split('.'); let adaInstanceSpli = pageItemTem.adapterPlayerInstance!.split('.');
if (adaInstanceSpli[0] == 'squeezeboxrpc') { if (adaInstanceSpli[0] == 'squeezeboxrpc') {
let adapterPlayerInstancePowerSelector: string = [pageItemTem.adapterPlayerInstance, 'Players', pageItemTem.mediaDevice, 'Power'].join('.'); let adapterPlayerInstancePowerSelector: string = [pageItemTem.adapterPlayerInstance, 'Players', pageItemTem.mediaDevice, 'Power'].join('.');
@@ -7089,7 +7117,7 @@ function GetNavigationString(pageId: number): string {
return ''; return '';
} }
function GenerateDetailPage(type: string, optional: string | undefined, pageItem: PageItem, placeId: number | undefined): Payload[] { function GenerateDetailPage(type: string, optional: mediaOptional | undefined, pageItem: PageItem, placeId: number | undefined): Payload[] {
if (Debug) log('GenerateDetailPage Übergabe Type: ' + type + ' - optional: ' + optional + ' - pageItem.id: ' + pageItem.id, 'info'); if (Debug) log('GenerateDetailPage Übergabe Type: ' + type + ' - optional: ' + optional + ' - pageItem.id: ' + pageItem.id, 'info');
try { try {
let out_msgs: Array<Payload> = []; let out_msgs: Array<Payload> = [];
@@ -7106,7 +7134,9 @@ function GenerateDetailPage(type: string, optional: string | undefined, pageItem
let switchVal = '0'; let switchVal = '0';
let brightness = 0; let brightness = 0;
if (o.common.role == 'light' || o.common.role == 'socket') { switch (o.common.role) {
case 'light':
case 'socket': {
if (existsState(id + '.GET')) { if (existsState(id + '.GET')) {
val = getState(id + '.GET').val; val = getState(id + '.GET').val;
RegisterDetailEntityWatcher(id + '.GET', pageItem, type, placeId); RegisterDetailEntityWatcher(id + '.GET', pageItem, type, placeId);
@@ -7152,9 +7182,9 @@ function GenerateDetailPage(type: string, optional: string | undefined, pageItem
+ effect_supported + effect_supported
}); });
} }
break;
// Dimmer // Dimmer
if (o.common.role == 'dimmer') { case 'dimmer': {
if (existsState(id + '.ON_ACTUAL')) { if (existsState(id + '.ON_ACTUAL')) {
val = getState(id + '.ON_ACTUAL').val; val = getState(id + '.ON_ACTUAL').val;
RegisterDetailEntityWatcher(id + '.ON_ACTUAL', pageItem, type, placeId); RegisterDetailEntityWatcher(id + '.ON_ACTUAL', pageItem, type, placeId);
@@ -7209,9 +7239,9 @@ function GenerateDetailPage(type: string, optional: string | undefined, pageItem
+ effect_supported + effect_supported
}); });
} }
break;
// HUE-Licht // HUE-Licht
if (o.common.role == 'hue') { case 'hue': {
if (existsState(id + '.ON_ACTUAL')) { if (existsState(id + '.ON_ACTUAL')) {
val = getState(id + '.ON_ACTUAL').val; val = getState(id + '.ON_ACTUAL').val;
@@ -7281,9 +7311,9 @@ function GenerateDetailPage(type: string, optional: string | undefined, pageItem
+ effect_supported + effect_supported
}); });
} }
break;
// RGB-Licht // RGB-Licht
if (o.common.role == 'rgb') { case 'rgb': {
if (existsState(id + '.ON_ACTUAL')) { if (existsState(id + '.ON_ACTUAL')) {
val = getState(id + '.ON_ACTUAL').val; val = getState(id + '.ON_ACTUAL').val;
@@ -7352,9 +7382,9 @@ function GenerateDetailPage(type: string, optional: string | undefined, pageItem
+ effect_supported + effect_supported
}); });
} }
break;
// RGB-Licht-einzeln (HEX) // RGB-Licht-einzeln (HEX)
if (o.common.role == 'rgbSingle') { case 'rgbSingle': {
if (existsState(id + '.ON_ACTUAL')) { if (existsState(id + '.ON_ACTUAL')) {
val = getState(id + '.ON_ACTUAL').val; val = getState(id + '.ON_ACTUAL').val;
@@ -7428,9 +7458,9 @@ function GenerateDetailPage(type: string, optional: string | undefined, pageItem
+ effect_supported + effect_supported
}); });
} }
break;
// Farbtemperatur (CT) // Farbtemperatur (CT)
if (o.common.role == 'ct') { case 'ct': {
if (existsState(id + '.ON')) { if (existsState(id + '.ON')) {
val = getState(id + '.ON').val; val = getState(id + '.ON').val;
@@ -7492,6 +7522,8 @@ function GenerateDetailPage(type: string, optional: string | undefined, pageItem
+ effect_supported + effect_supported
}); });
} }
break;
}
} }
if (type == 'popupShutter') { if (type == 'popupShutter') {
@@ -7774,7 +7806,7 @@ function GenerateDetailPage(type: string, optional: string | undefined, pageItem
let actualState: any = ''; let actualState: any = '';
let optionalString: string = 'Kein Eintrag'; let optionalString: string = 'Kein Eintrag';
let mode: string = ''; let mode: string = '';
if (isPageMediaItem(pageItem)) {
let vTempAdapter = (pageItem.adapterPlayerInstance!).split('.'); let vTempAdapter = (pageItem.adapterPlayerInstance!).split('.');
let vAdapter = vTempAdapter[0]; let vAdapter = vTempAdapter[0];
if (optional == 'seek') { if (optional == 'seek') {
@@ -7996,6 +8028,7 @@ function GenerateDetailPage(type: string, optional: string | undefined, pageItem
+ optionalString + optionalString
}); });
GeneratePage(activePage!); GeneratePage(activePage!);
}
} else if (o.common.role == 'buttonSensor') { } else if (o.common.role == 'buttonSensor') {
let actualValue: string = ''; let actualValue: string = '';
@@ -9406,8 +9439,8 @@ type PageThermo = {
type PageMedia = { type PageMedia = {
type: 'cardMedia', type: 'cardMedia',
items: PageItem[], items: PageMediaItem[],
} & Omit<PageBaseType, 'useColor'> } & Omit<PageBaseType, 'useColor' | 'autoCreateAlias'>
type PageAlarm = { type PageAlarm = {
type: 'cardAlarm', type: 'cardAlarm',
@@ -9434,7 +9467,16 @@ type PageChart = {
items: PageItem[], items: PageItem[],
} & Omit<PageBaseType, 'useColor'> } & Omit<PageBaseType, 'useColor'>
type PageItem = { type PageItem = PageBaseItem | PageMediaItem
function isPageMediaItem(F: PageItem | PageMediaItem):F is PageMediaItem {
return (F as PageMediaItem).adapterPlayerInstance !== undefined
}
type PageMediaItem = {
adapterPlayerInstance: adapterPlayerInstanceType,
} & PageBaseItem
type PageBaseItem = {
id?: string | null, id?: string | null,
icon?: string, icon?: string,
icon2?: string, icon2?: string,
@@ -9462,7 +9504,7 @@ type PageItem = {
navigate?: boolean, navigate?: boolean,
colormode?: string, colormode?: string,
colorScale?: any, colorScale?: any,
adapterPlayerInstance?: string, //adapterPlayerInstance?: adapterPlayerInstanceType,
mediaDevice?: string, mediaDevice?: string,
targetPage?: string, targetPage?: string,
speakerList?: string[], speakerList?: string[],
@@ -9568,3 +9610,36 @@ type IconScaleElement = {
val_max:number, val_max:number,
val_best?: number val_best?: number
} }
type adapterPlayerInstanceType =
'alexa2.1.' | 'sonos.1.' | 'spotify-premium.1.' | 'volumio.1.' | 'squeezebox-rpc.1.'
| 'alexa2.2.' | 'sonos.2.' | 'spotify-premium.2.' | 'volumio.2.' | 'squeezebox-rpc.2.'
| 'alexa2.0.' | 'sonos.0.' | 'spotify-premium.0.' | 'volumio.0.' | 'squeezebox-rpc.0.'
| 'alexa2.3.' | 'sonos.3.' | 'spotify-premium.3.' | 'volumio.3.' | 'squeezebox-rpc.3.'
| 'alexa2.4.' | 'sonos.4.' | 'spotify-premium.4.' | 'volumio.4.' | 'squeezebox-rpc.4.'
| 'alexa2.5.' | 'sonos.5.' | 'spotify-premium.5.' | 'volumio.5.' | 'squeezebox-rpc.5.'
| 'alexa2.6.' | 'sonos.6.' | 'spotify-premium.6.' | 'volumio.6.' | 'squeezebox-rpc.6.'
| 'alexa2.7.' | 'sonos.7.' | 'spotify-premium.7.' | 'volumio.7.' | 'squeezebox-rpc.7.'
| 'alexa2.8.' | 'sonos.8.' | 'spotify-premium.8.' | 'volumio.8.' | 'squeezebox-rpc.8.'
| 'alexa2.9.' | 'sonos.9.' | 'spotify-premium.9.' | 'volumio.9.' | 'squeezebox-rpc.9.'
| 'alexa2.10.' | 'sonos.10.' | 'spotify-premium.10.' | 'volumio.10.' | 'squeezebox-rpc.10'
type mediaOptional = 'seek' | 'crossfade' | 'speakerlist' | 'playlist' | 'tracklist' | 'equalizer' | 'repeat' | 'favorites'
function isMediaOptional(F: string | mediaOptional): F is mediaOptional {
switch(F as mediaOptional) {
case "seek":
case "crossfade":
case "speakerlist":
case "playlist":
case "tracklist":
case "equalizer":
case "repeat":
case "favorites":
return true;
default:
return false
}
}