iobroker.squeezeboxrpc 1.5.2 → 1.6.4
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/LICENSE +21 -21
- package/README.md +124 -46
- package/io-package.json +44 -17
- package/lib/ioUtil.js +0 -14
- package/lib/iosbplayer.js +0 -18
- package/lib/iosbserver.js +0 -7
- package/package.json +20 -30
- package/widgets/package-lock.json +13 -0
- package/widgets/package.json +5 -1
- package/widgets/squeezeboxrpc/{js → build}/squeezeboxrpc-dist.js +1732 -10
- package/widgets/squeezeboxrpc/img/browser.png +0 -0
- package/widgets/squeezeboxrpc/js/bundle.js +1 -0
- package/widgets/squeezeboxrpc/js/sbClasses.js +1133 -0
- package/widgets/squeezeboxrpc/js/squeezeboxrpc.js +636 -6
- package/widgets/squeezeboxrpc/js/textImage.js +22 -1
- package/widgets/squeezeboxrpc.html +6 -6
- package/lib/tools.js +0 -71
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2019-
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2019-2026 oweitman <oweitman@gmx.de>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|

|
|
2
2
|
|
|
3
|
-
# ioBroker Logitech Squeezebox Adapter over JSON/RPC-Protocol
|
|
3
|
+
# ioBroker Logitech/Lyrion Squeezebox Adapter over JSON/RPC-Protocol
|
|
4
4
|
|
|
5
5
|
[](https://www.npmjs.com/package/iobroker.squeezeboxrpc)
|
|
6
6
|
[](https://www.npmjs.com/package/iobroker.squeezeboxrpc)
|
|
@@ -12,24 +12,19 @@
|
|
|
12
12
|
**Tests:** 
|
|
13
13
|
|
|
14
14
|
This is an alternative Adapter that uses the `JSON/RPC`-protocol to get data
|
|
15
|
-
and send commands to the Logitech Media Server ([LMS](https://de.wikipedia.org/wiki/
|
|
15
|
+
and send commands to the Logitech Media Server/Lyrion Media Server ([LMS](https://de.wikipedia.org/wiki/Lyrion_Music_Server))
|
|
16
16
|
for controlling connected devices like
|
|
17
17
|
|
|
18
18
|
- native [squeezebox](https://de.wikipedia.org/wiki/Squeezebox),
|
|
19
19
|
- raspberry pi with additional audio module and small linux based firmwares
|
|
20
20
|
like [picoreplayer](https://picoreplayer.org/) or [max2play](https://www.max2play.com).
|
|
21
|
+
- WiiM Multiroom Audio ([can talk to an LMS/Lyrion server](https://faq.wiimhome.com/en/support/solutions/articles/72000610226-how-to-stream-music-from-lms-to-your-wiim-device-with-squeezelite))
|
|
21
22
|
- with plugins chromecast, airplay or `UPnP/DLNA`-Devices
|
|
22
23
|
|
|
23
24
|
The `LMS`-Server can manage/provide very big music collections on harddrives
|
|
24
25
|
or `NAS`, connect to different streaming providers like `Spotify`, `Deezer`,
|
|
25
26
|
`Soundcloud`, `shoutcast`, `tunein`, `napster`, `pandora`, `tidal` and more
|
|
26
27
|
|
|
27
|
-
Why another `Squeezebox` adapter?
|
|
28
|
-
|
|
29
|
-
The existing adapter use `telnet` to access the `LMS`. The telnet has some disadvantages.
|
|
30
|
-
The actual main web interface of the `LMS` also uses the rpc/json-protocol to get
|
|
31
|
-
all needed informations or send commands to the server/players.
|
|
32
|
-
|
|
33
28
|
## Features
|
|
34
29
|
|
|
35
30
|
- most of [data](#server) that the `LMS`-Service provides is available in the adapter
|
|
@@ -49,7 +44,7 @@ all needed informations or send commands to the server/players.
|
|
|
49
44
|
|
|
50
45
|
- Install the package
|
|
51
46
|
- Create an instance
|
|
52
|
-
- Configure the Instance with the IP of the logitech media server
|
|
47
|
+
- Configure the Instance with the IP of the logitech/Lyrion media server
|
|
53
48
|
and the port (normaly 9000)
|
|
54
49
|
- start/restart the instance
|
|
55
50
|
|
|
@@ -60,6 +55,16 @@ all needed informations or send commands to the server/players.
|
|
|
60
55
|
|
|
61
56
|
`iobroker upload squeezeboxrpc`
|
|
62
57
|
|
|
58
|
+
## Trouble Shooting
|
|
59
|
+
|
|
60
|
+
### SLIMP3 players
|
|
61
|
+
|
|
62
|
+
It has been reported that older SLIMP3 players may be
|
|
63
|
+
unable to connect to the server while the adapter is searching
|
|
64
|
+
for new servers. Disabling the search under
|
|
65
|
+
´Instance Configuration -> Performance Settings -> Search for other LMS servers´
|
|
66
|
+
should allow the player to connect.
|
|
67
|
+
|
|
63
68
|
## Provided states
|
|
64
69
|
|
|
65
70
|
### Server
|
|
@@ -197,7 +202,7 @@ For more information visit the CLI-documentation:
|
|
|
197
202
|
|
|
198
203
|

|
|
199
204
|
|
|
200
|
-
All players that are integrated into your Logitech Media Server can be selected\
|
|
205
|
+
All players that are integrated into your Logitech/Lyrion Media Server can be selected\
|
|
201
206
|
using this widget. After selecting a `squeezerpc.?` instance, the available\
|
|
202
207
|
players are displayed in the widget.
|
|
203
208
|
|
|
@@ -227,7 +232,7 @@ players are displayed in the widget.
|
|
|
227
232
|

|
|
228
233
|
|
|
229
234
|
You can use this widget to select all of the favorites that have been\
|
|
230
|
-
created in your Logitech Media Server.
|
|
235
|
+
created in your Logitech/Lyrion Media Server.
|
|
231
236
|
After selecting the Player widget, the available favorites are displayed in the widget.
|
|
232
237
|
|
|
233
238
|
| Group | Attribute | Description |
|
|
@@ -440,7 +445,7 @@ you must connect the button to the player widget.
|
|
|
440
445
|
|
|
441
446
|
### Playlist
|
|
442
447
|
|
|
443
|
-

|
|
444
449
|
|
|
445
450
|
Display the playlist from the server. If you click on an entry the playlist
|
|
446
451
|
is loaded and the player starts.
|
|
@@ -448,19 +453,19 @@ The widged dosent refresh automaticly, you have to press the refreshh button.
|
|
|
448
453
|
|
|
449
454
|
#### Attributes for Playlist
|
|
450
455
|
|
|
451
|
-
| Group
|
|
452
|
-
|
|
|
453
|
-
| Player widget
|
|
456
|
+
| Group | Attribute | Description |
|
|
457
|
+
| ------------- | ------------- | ------------------------------- |
|
|
458
|
+
| Player widget | General group | Selection of the player widget. |
|
|
454
459
|
|
|
455
460
|
The widget itself has very little formatting.
|
|
456
461
|
For self formating there are some predefined css-classes:
|
|
457
462
|
|
|
458
|
-
| CSS-class
|
|
459
|
-
|
|
|
460
|
-
| plcontainer| Class name assigned to the ul-tag |
|
|
461
|
-
| plentry
|
|
462
|
-
| plrefresh
|
|
463
|
-
| pltext
|
|
463
|
+
| CSS-class | description |
|
|
464
|
+
| ----------- | ----------------------------------------- |
|
|
465
|
+
| plcontainer | Class name assigned to the ul-tag |
|
|
466
|
+
| plentry | Class name assigned to the li-tag |
|
|
467
|
+
| plrefresh | Class name assigned to the refresh-li tag |
|
|
468
|
+
| pltext | Class name assigned to the playlist name |
|
|
464
469
|
|
|
465
470
|
The following CSS for the vis-css tab can serve as an example:
|
|
466
471
|
|
|
@@ -469,21 +474,21 @@ Dark-mode
|
|
|
469
474
|
```css
|
|
470
475
|
.plentry {
|
|
471
476
|
border: 1px #505050 groove;
|
|
472
|
-
margin:1px 0px;
|
|
473
|
-
padding:5px;
|
|
474
|
-
background-color
|
|
477
|
+
margin: 1px 0px;
|
|
478
|
+
padding: 5px;
|
|
479
|
+
background-color: #202020;
|
|
475
480
|
}
|
|
476
481
|
.plrefresh {
|
|
477
|
-
padding:5px;
|
|
482
|
+
padding: 5px;
|
|
478
483
|
}
|
|
479
484
|
.plentry:hover {
|
|
480
|
-
background-color
|
|
485
|
+
background-color: #404040;
|
|
481
486
|
}
|
|
482
487
|
.plrefresh svg {
|
|
483
|
-
color
|
|
488
|
+
color: #cccccc;
|
|
484
489
|
}
|
|
485
490
|
.plrefresh svg:hover {
|
|
486
|
-
color
|
|
491
|
+
color: #ffffff;
|
|
487
492
|
filter: drop-shadow(0px 0px 1px #87ceeb);
|
|
488
493
|
}
|
|
489
494
|
```
|
|
@@ -493,25 +498,79 @@ Light-mode
|
|
|
493
498
|
```css
|
|
494
499
|
.plentry {
|
|
495
500
|
border: 1px #b0b0b0 groove;
|
|
496
|
-
margin:1px 0px;
|
|
497
|
-
padding:5px;
|
|
498
|
-
background-color
|
|
501
|
+
margin: 1px 0px;
|
|
502
|
+
padding: 5px;
|
|
503
|
+
background-color: #c0c0c0;
|
|
499
504
|
}
|
|
500
505
|
.plrefresh {
|
|
501
|
-
padding:5px;
|
|
506
|
+
padding: 5px;
|
|
502
507
|
}
|
|
503
508
|
.plentry:hover {
|
|
504
|
-
background-color
|
|
509
|
+
background-color: #e0e0e0;
|
|
505
510
|
}
|
|
506
511
|
.plrefresh svg {
|
|
507
|
-
color
|
|
512
|
+
color: #444444;
|
|
508
513
|
}
|
|
509
514
|
.plrefresh svg:hover {
|
|
510
|
-
color
|
|
515
|
+
color: #000000;
|
|
511
516
|
filter: drop-shadow(0px 0px 1px #87ceeb);
|
|
512
517
|
}
|
|
513
518
|
```
|
|
514
519
|
|
|
520
|
+
### Browser
|
|
521
|
+
|
|
522
|
+

|
|
523
|
+
|
|
524
|
+
Displays music, albums, artists, radio stations, apps, etc. from the server.
|
|
525
|
+
Click on an item to navigate deeper into the hierarchy. The available commands
|
|
526
|
+
are displayed with additional buttons.
|
|
527
|
+
You can go up one level by clicking on the path displayed at the top.
|
|
528
|
+
|
|
529
|
+
#### Attributes for Browser
|
|
530
|
+
|
|
531
|
+
| Group | Attribute | Description |
|
|
532
|
+
| --------------------- | ------------- | ------------------------------------------------------------------- |
|
|
533
|
+
| Player widget | General group | Selection of the player widget. |
|
|
534
|
+
| debug | General group | Enable extra debugging (function reference) in the browser console. |
|
|
535
|
+
| debugwithfetchresults | General group | Enable extra debugging (object reference) in the browser console. |
|
|
536
|
+
|
|
537
|
+
The widget itself has very some formatting.
|
|
538
|
+
For self formating there are some predefined css-classes:
|
|
539
|
+
|
|
540
|
+
| CSS-class | description |
|
|
541
|
+
| ------------------------------------------ | ------------------------------------- |
|
|
542
|
+
| sqbrowser-list-container | container for the widget |
|
|
543
|
+
| sqbrowser-parent-directory | element to show the parent directory |
|
|
544
|
+
| sqbrowser-btn-svg | Class for all svg buttons |
|
|
545
|
+
| sqbrowser-btn-svg-menu | Class for svg menus |
|
|
546
|
+
| sqbrowser-scrollable-area | Class for scroll container |
|
|
547
|
+
| sqbrowser-list-item | Class for single item |
|
|
548
|
+
| sqbrowser-list-item-content | Class for item title |
|
|
549
|
+
| sqbrowser-button-group | Class for button group in a list item |
|
|
550
|
+
| sqbrowser-btn-svg sqbrowser-btn-svg-action | Class for action button |
|
|
551
|
+
|
|
552
|
+
**Note about alpha state of this widget:**
|
|
553
|
+
|
|
554
|
+
- Implementing LMS/Lyrion for browsing is hell.
|
|
555
|
+
- The technical model for this widget is the "Material" theme plugin
|
|
556
|
+
in the LMS/Lyrion server.
|
|
557
|
+
- Not all features are currently implemented.
|
|
558
|
+
- All input field types are not yet available.
|
|
559
|
+
- Not all item types may have been implemented.
|
|
560
|
+
- Optional, extensive debug output has been added for analysis (see also attributes).
|
|
561
|
+
- Output of the function reference: All function names are output in
|
|
562
|
+
order in the browser console.
|
|
563
|
+
- Output of the data reference: All data requested and returned
|
|
564
|
+
by the server is output.
|
|
565
|
+
|
|
566
|
+
If testers encounter errors/problems or missing implementations,
|
|
567
|
+
please provide as detailed a description as possible:
|
|
568
|
+
|
|
569
|
+
- Where does the data come from in the LMS/Lyrion
|
|
570
|
+
(already built-in service/additionally installed plugin)
|
|
571
|
+
- What steps/clicks were performed to create the problem
|
|
572
|
+
- What are the function references and data references?
|
|
573
|
+
|
|
515
574
|
## SendTo-Befehle
|
|
516
575
|
|
|
517
576
|
### cmdGeneral
|
|
@@ -524,11 +583,11 @@ Example:
|
|
|
524
583
|
|
|
525
584
|
```js
|
|
526
585
|
async function main() {
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
586
|
+
let data = await sendToAsync('squeezeboxrpc.0', 'cmdGeneral', {
|
|
587
|
+
playerid: '',
|
|
588
|
+
cmdArray: ['playlists', '0', '999', 'tags:us'],
|
|
589
|
+
});
|
|
590
|
+
console.log(JSON.stringify(data));
|
|
532
591
|
}
|
|
533
592
|
main();
|
|
534
593
|
```
|
|
@@ -539,11 +598,11 @@ This command is used internally by the adapter to load the favorites.
|
|
|
539
598
|
|
|
540
599
|
```js
|
|
541
600
|
async function main() {
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
601
|
+
let data = await sendToAsync('squeezeboxrpc.0', 'cmdGeneral', {
|
|
602
|
+
playerid: '',
|
|
603
|
+
cmdArray: ['favorites', 'items', '0', '999', 'want_url:1', 'item_id:'],
|
|
604
|
+
});
|
|
605
|
+
console.log(JSON.stringify(data));
|
|
547
606
|
}
|
|
548
607
|
main();
|
|
549
608
|
```
|
|
@@ -581,6 +640,25 @@ are contained in the following CLI documentation:
|
|
|
581
640
|
### **WORK IN PROGRESS**
|
|
582
641
|
|
|
583
642
|
-->
|
|
643
|
+
### 1.6.4 (2026-03-25)
|
|
644
|
+
|
|
645
|
+
- test remove node 18,extend to node 24
|
|
646
|
+
- update packages
|
|
647
|
+
|
|
648
|
+
### 1.6.2 (2025-05-05)
|
|
649
|
+
|
|
650
|
+
- fix node version in github workflow
|
|
651
|
+
|
|
652
|
+
### 1.6.1 (2025-05-05)
|
|
653
|
+
|
|
654
|
+
- Fix eslint
|
|
655
|
+
|
|
656
|
+
### 1.6.0 (2025-05-05)
|
|
657
|
+
|
|
658
|
+
- upgrade dependency js-controller
|
|
659
|
+
- new widget, but only alpha version for testing and improvement
|
|
660
|
+
- fix issues of adapter checker
|
|
661
|
+
|
|
584
662
|
### 1.5.2 (2024-12-16)
|
|
585
663
|
|
|
586
664
|
- fix spelling of iobroker upload squeezeboxrpc in readme
|
|
@@ -919,4 +997,4 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
919
997
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
920
998
|
SOFTWARE.
|
|
921
999
|
|
|
922
|
-
Copyright (c) 2019-
|
|
1000
|
+
Copyright (c) 2019-2026 oweitman
|
package/io-package.json
CHANGED
|
@@ -1,8 +1,47 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "squeezeboxrpc",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.6.4",
|
|
5
5
|
"news": {
|
|
6
|
+
"1.6.4": {
|
|
7
|
+
"en": "test remove node 18,extend to node 24\nupdate packages",
|
|
8
|
+
"de": "test entfernen node 18,extend to node 24\nupdate-pakete",
|
|
9
|
+
"ru": "тест удалить узел 18, расширить узел 24\nобновление пакетов",
|
|
10
|
+
"pt": "teste remover o nó 18, extend ao nó 24\natualizar pacotes",
|
|
11
|
+
"nl": "test verwijder node 18, extend naar node 24\npakketten bijwerken",
|
|
12
|
+
"fr": "test enlever le noeud 18,extendre au noeud 24\nmettre à jour les paquets",
|
|
13
|
+
"it": "prova rimuovere nodo 18, estend to node 24\npacchetti di aggiornamento",
|
|
14
|
+
"es": "prueba eliminar nodo 18,extender a nodo 24\nactualizar paquetes",
|
|
15
|
+
"pl": "test usunąć węzeł 18, rozszerzyć na węzeł 24\naktualizacja pakietów",
|
|
16
|
+
"uk": "test remove node 18,потенд в вузол 24\nоновлення пакетів",
|
|
17
|
+
"zh-cn": "测试去除节点 18, 延伸至节点 24\n更新软件包"
|
|
18
|
+
},
|
|
19
|
+
"1.6.3": {
|
|
20
|
+
"en": "test remove node 18,extend to node 24\nupdate packages",
|
|
21
|
+
"de": "test entfernen node 18,extend to node 24\nupdate-pakete",
|
|
22
|
+
"ru": "тест удалить узел 18, расширить узел 24\nобновление пакетов",
|
|
23
|
+
"pt": "teste remover o nó 18, extend ao nó 24\natualizar pacotes",
|
|
24
|
+
"nl": "test verwijder node 18, extend naar node 24\npakketten bijwerken",
|
|
25
|
+
"fr": "test enlever le noeud 18,extendre au noeud 24\nmettre à jour les paquets",
|
|
26
|
+
"it": "prova rimuovere nodo 18, estend to node 24\npacchetti di aggiornamento",
|
|
27
|
+
"es": "prueba eliminar nodo 18,extender a nodo 24\nactualizar paquetes",
|
|
28
|
+
"pl": "test usunąć węzeł 18, rozszerzyć na węzeł 24\naktualizacja pakietów",
|
|
29
|
+
"uk": "test remove node 18,потенд в вузол 24\nоновлення пакетів",
|
|
30
|
+
"zh-cn": "测试去除节点 18, 延伸至节点 24\n更新软件包"
|
|
31
|
+
},
|
|
32
|
+
"1.6.2": {
|
|
33
|
+
"en": "upgrade dependency js-controller\nnew widget, but only alpha version for testing and improvement\nfix issues of adapter checker",
|
|
34
|
+
"de": "upgrade abhängigkeit js-controller\nneue widget, aber nur alpha-version für tests und verbesserung\nprobleme des adapter-checkers beheben",
|
|
35
|
+
"ru": "обновление зависимостей js-контроллера\nновый виджет, но только альфа-версия для тестирования и улучшения\nустранение проблем с проверкой адаптера",
|
|
36
|
+
"pt": "upgrade de dependência js-controller\nnovo widget, mas apenas versão alfa para testes e melhoria\ncorrigir problemas do verificador do adaptador",
|
|
37
|
+
"nl": "upgrade afhankelijkheid js-controller\nnieuw widget, maar alleen alfa versie voor testen en verbetering\nproblemen van adaptercontrole oplossen",
|
|
38
|
+
"fr": "upgrade dépendance js-controller\nnouveau widget, mais seulement version alpha pour tester et améliorer\nrésoudre les problèmes de vérification de l'adaptateur",
|
|
39
|
+
"it": "potenziare la dipendenza js-controller\nnuovo widget, ma solo versione alfa per test e miglioramento\nrisolvere problemi di adattatore checker",
|
|
40
|
+
"es": "actualización dependencia js-controller\nnuevo widget, pero sólo versión alfa para pruebas y mejoras\nsolucionar problemas de control de adaptador",
|
|
41
|
+
"pl": "upgrade independent js- controller\nnowy widget, ale tylko wersja alfa do testowania i doskonalenia\nnaprawić problemy z sprawdzaniem adaptera",
|
|
42
|
+
"uk": "оновлення залежності js-controller\nновий віджет, але тільки альфа-версія для тестування та вдосконалення\nвиправити питання перевірки адаптера",
|
|
43
|
+
"zh-cn": "升级依赖性js控制器\n新部件, 但只用于测试和改进的 alpha 版本\n适配器检查器的固定问题"
|
|
44
|
+
},
|
|
6
45
|
"1.5.2": {
|
|
7
46
|
"en": "fix spelling of iobroker upload squeezeboxrpc in readme\nfix playtime bar",
|
|
8
47
|
"de": "fix buchstabierung von iobroker laden pressboxrpc in readme\nspielzeitleiste",
|
|
@@ -54,19 +93,6 @@
|
|
|
54
93
|
"pl": "naprawić kilka brakujących błędów obiektów\nsanitize więcej nazw graczy w zespołach\ndodaj polecenie sendTo \"cmdGeneral\"\nsanitize more the playername\npoprawić tłumaczenie\njeśli trackartist jest użyteczny, napisz do artysty jeśli pusty\npoprawa obsługi grafiki _ url\nprzenieść dokumentację widget z html do markdown\ndopasowanie odpowiadającego stylu karty\npoprawić widżety atrybutów\nzmienić obsługę TPE2 jeszcze raz\njsonConfig dodać opcje rozmiaru dla różnej wielkości ekranu\ntestowa realizacja obsługi TPE2. przełączanie w ustawieniach\nadd datapoints album _ artist, track _ artist, artistOriginal",
|
|
55
94
|
"uk": "виправити деякі помилки відсутніх об'єктів\nдезінфікувати більше назв гравців у синкгрупах\nдодати команду \"Команда\"\nсатизувати більше ім'я гравця\nполіпшення перекладу\nякщо трактист - аваїл, то напишіть художника, якщо порожня\nпокращити роботу для арт-роботи_url\nперемістити документацію віджету з html для розмітки\nрегулюйте чуйний стиль вкладки\nполіпшення віджетів атрибутів\nзміна обробки TPE2 ще раз\njsonConfig add sizing options для різних розмірів екрана\nтестування впровадження TPE2 обробки. Перемикач в налаштуваннях\nдодавати альбоми/артист, трек_artist, художникOriginal",
|
|
56
95
|
"zh-cn": "修正一些缺失的对象错误\n在同步组中消毒更多玩家名\n添加发送到命令“ cmdGeneral ”\n更多消毒玩家名称\n改进翻译\n如果 trackartist 有用, 如果空则写给艺人\n改进对艺术品的处理_ url\n将部件文档从 html 移动到下标记\n调整响应标签样式\n改进属性部件\n再次更改TPE2处理\njsonConfig 添加不同屏幕大小的大小选项\n试验实施TPE2处理。 在设置中切换\n添加数据点相册_艺人,音轨_艺人,艺人"
|
|
57
|
-
},
|
|
58
|
-
"1.3.17": {
|
|
59
|
-
"en": "add edit button to the vie index field of favorites widget",
|
|
60
|
-
"de": "fügen sie edit-taste in das vie-index-feld der favoriten widget",
|
|
61
|
-
"ru": "добавить редактирующую кнопку в поле индекса vie",
|
|
62
|
-
"pt": "adicionar botão de edição para o campo de índice vie de widget favorito",
|
|
63
|
-
"nl": "bewerken knop toevoegen aan het vie index veld van favorieten widget",
|
|
64
|
-
"fr": "ajouter le bouton d'édition au champ d'index de vie des favoris widget",
|
|
65
|
-
"it": "aggiungere il pulsante di modifica al campo indice vie di widget preferiti",
|
|
66
|
-
"es": "añadir botón de edición al campo índice vie de favoritos widget",
|
|
67
|
-
"pl": "dodaj przycisk edycji do pola indeksu vie ulubionych widget",
|
|
68
|
-
"uk": "додати кнопку редагування в vie index поле улюблених віджетів",
|
|
69
|
-
"zh-cn": "在最爱部件的vie索引字段中添加编辑按钮"
|
|
70
96
|
}
|
|
71
97
|
},
|
|
72
98
|
"titleLang": {
|
|
@@ -116,7 +142,8 @@
|
|
|
116
142
|
"loglevel": "info",
|
|
117
143
|
"tier": 3,
|
|
118
144
|
"restartAdapters": [
|
|
119
|
-
"vis"
|
|
145
|
+
"vis",
|
|
146
|
+
"vis-2"
|
|
120
147
|
],
|
|
121
148
|
"mode": "daemon",
|
|
122
149
|
"type": "multimedia",
|
|
@@ -129,12 +156,12 @@
|
|
|
129
156
|
},
|
|
130
157
|
"dependencies": [
|
|
131
158
|
{
|
|
132
|
-
"js-controller": ">=
|
|
159
|
+
"js-controller": ">=6.0.12"
|
|
133
160
|
}
|
|
134
161
|
],
|
|
135
162
|
"globalDependencies": [
|
|
136
163
|
{
|
|
137
|
-
"admin": ">=
|
|
164
|
+
"admin": ">=7.6.17"
|
|
138
165
|
}
|
|
139
166
|
]
|
|
140
167
|
},
|
package/lib/ioUtil.js
CHANGED
|
@@ -169,20 +169,6 @@ class ioUtil {
|
|
|
169
169
|
const name = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + id;
|
|
170
170
|
this.adapter.getState(name, callback);
|
|
171
171
|
}
|
|
172
|
-
/**
|
|
173
|
-
* Creates a state object in the ioBroker system.
|
|
174
|
-
*
|
|
175
|
-
* @param stateTemplate - The template containing the common properties of the state.
|
|
176
|
-
* @param level1path - The first level path to prepend to the state name, can be null or empty.
|
|
177
|
-
* @param level2path - The second level path to prepend to the state name, can be null or empty.
|
|
178
|
-
* @param callback - Optional callback function, called when the state is created.
|
|
179
|
-
*/
|
|
180
|
-
createState(stateTemplate, level1path = false, level2path = false, callback) {
|
|
181
|
-
this.logdebug(`createState ${stateTemplate.name}`);
|
|
182
|
-
const name = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + stateTemplate.name;
|
|
183
|
-
this.logdebug(`Create Key ${name}`);
|
|
184
|
-
this.adapter.createState(level1path, level2path, stateTemplate.name, stateTemplate, callback);
|
|
185
|
-
}
|
|
186
172
|
/**
|
|
187
173
|
* Sets the state of an object in the ioBroker system.
|
|
188
174
|
*
|
package/lib/iosbplayer.js
CHANGED
|
@@ -46,7 +46,6 @@ const { ioUtil } = require('./ioUtil');
|
|
|
46
46
|
* - createArtworkUrl: Generates a URL for player artwork.
|
|
47
47
|
* - disconnect: Handles player disconnection.
|
|
48
48
|
* - connect: Handles player connection.
|
|
49
|
-
* - createState: Creates a state object for the player.
|
|
50
49
|
* - createObject: Creates a device or state object.
|
|
51
50
|
* - request: Sends a request to the server.
|
|
52
51
|
* - setTPE2Handling: Sets the TPE2 handling mode.
|
|
@@ -1052,23 +1051,6 @@ function ioSBPlayer(server, playerdata) {
|
|
|
1052
1051
|
this.doObserverPlayer();
|
|
1053
1052
|
this.connected = 1;
|
|
1054
1053
|
};
|
|
1055
|
-
/**
|
|
1056
|
-
* Creates a state object for the player if it does not already exist.
|
|
1057
|
-
*
|
|
1058
|
-
* @param stateTemplate - The template containing the common properties of the state.
|
|
1059
|
-
* @param [level1path] - The first level path to prepend to the state name, can be false or empty.
|
|
1060
|
-
* @param [level2path] - The second level path to prepend to the state name, can be false or empty.
|
|
1061
|
-
* @returns The state template with an 'exist' property set to true.
|
|
1062
|
-
*/
|
|
1063
|
-
this.createState = function (stateTemplate, level1path = false, level2path = false) {
|
|
1064
|
-
const name = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + stateTemplate.name;
|
|
1065
|
-
this.ioUtil.logsilly(`Create state ${name}`);
|
|
1066
|
-
if (!this.currentStates[name]) {
|
|
1067
|
-
this.adapter.createState(level1path, level2path, stateTemplate.name, stateTemplate);
|
|
1068
|
-
}
|
|
1069
|
-
stateTemplate.exist = true;
|
|
1070
|
-
return stateTemplate;
|
|
1071
|
-
};
|
|
1072
1054
|
/**
|
|
1073
1055
|
* Creates a state object in the ioBroker system if it does not already exist.
|
|
1074
1056
|
*
|
package/lib/iosbserver.js
CHANGED
|
@@ -1231,13 +1231,6 @@ function IoSbServer(adapter) {
|
|
|
1231
1231
|
stateTemplate.exist = true;
|
|
1232
1232
|
return stateTemplate;
|
|
1233
1233
|
};
|
|
1234
|
-
this.createState = function (stateTemplate, level1path = false, level2path = false, callback) {
|
|
1235
|
-
const name = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + stateTemplate.name;
|
|
1236
|
-
this.ioUtil.logsilly(`Create state ${name}`);
|
|
1237
|
-
this.adapter.createState(level1path, level2path, stateTemplate.name, stateTemplate, callback);
|
|
1238
|
-
stateTemplate.exist = true;
|
|
1239
|
-
return stateTemplate;
|
|
1240
|
-
};
|
|
1241
1234
|
this.createFolder = async function (foldername, level1path, level2path) {
|
|
1242
1235
|
const id = (level1path ? `${level1path}.` : '') + (level2path ? `${level2path}.` : '') + foldername;
|
|
1243
1236
|
this.ioUtil.logsilly(`createFolder ${id}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.squeezeboxrpc",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.4",
|
|
4
4
|
"description": "ioBroker Logitech Squeezebox Adapter over JSON/RPC-Protocol",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "oweitman",
|
|
@@ -20,39 +20,28 @@
|
|
|
20
20
|
"url": "https://github.com/oweitman/ioBroker.squeezeboxrpc"
|
|
21
21
|
},
|
|
22
22
|
"engines": {
|
|
23
|
-
"node": ">=
|
|
23
|
+
"node": ">= 20"
|
|
24
24
|
},
|
|
25
25
|
"dependencies": {
|
|
26
|
-
"@iobroker/adapter-core": "^3.
|
|
27
|
-
"jayson": "^4.
|
|
28
|
-
"lodash": "^4.17.
|
|
29
|
-
"request": "^2.88.0",
|
|
26
|
+
"@iobroker/adapter-core": "^3.3.2",
|
|
27
|
+
"jayson": "^4.3.0",
|
|
28
|
+
"lodash": "^4.17.23",
|
|
30
29
|
"super": "^0.2.3"
|
|
31
30
|
},
|
|
32
31
|
"devDependencies": {
|
|
33
|
-
"@alcalzone/release-script": "^
|
|
34
|
-
"@alcalzone/release-script-plugin-iobroker": "^
|
|
35
|
-
"@alcalzone/release-script-plugin-license": "^
|
|
36
|
-
"@alcalzone/release-script-plugin-manual-review": "^
|
|
37
|
-
"@iobroker/adapter-dev": "^1.
|
|
38
|
-
"@iobroker/eslint-config": "^
|
|
39
|
-
"@iobroker/testing": "^5.
|
|
40
|
-
"@tsconfig/node18": "^18.2.
|
|
41
|
-
"@types/
|
|
42
|
-
"@types/chai-as-promised": "^8.0.0",
|
|
43
|
-
"@types/mocha": "^10.0.9",
|
|
44
|
-
"@types/node": "^22.8.6",
|
|
32
|
+
"@alcalzone/release-script": "^5.1.1",
|
|
33
|
+
"@alcalzone/release-script-plugin-iobroker": "^5.1.2",
|
|
34
|
+
"@alcalzone/release-script-plugin-license": "^5.1.1",
|
|
35
|
+
"@alcalzone/release-script-plugin-manual-review": "^5.1.1",
|
|
36
|
+
"@iobroker/adapter-dev": "^1.5.0",
|
|
37
|
+
"@iobroker/eslint-config": "^2.2.0",
|
|
38
|
+
"@iobroker/testing": "^5.2.2",
|
|
39
|
+
"@tsconfig/node18": "^18.2.6",
|
|
40
|
+
"@types/node": "^25.5.0",
|
|
45
41
|
"@types/proxyquire": "^1.3.31",
|
|
46
|
-
"
|
|
47
|
-
"@types/sinon-chai": "^3.2.12",
|
|
48
|
-
"axios": "^1.7.7",
|
|
49
|
-
"chai": "^4.4.1",
|
|
50
|
-
"chai-as-promised": "^8.0.0",
|
|
51
|
-
"mocha": "^10.8.2",
|
|
42
|
+
"npm-watch": "^0.13.0",
|
|
52
43
|
"proxyquire": "^2.1.3",
|
|
53
|
-
"
|
|
54
|
-
"sinon-chai": "^3.7.0",
|
|
55
|
-
"typescript": "~5.6.3"
|
|
44
|
+
"typescript": "~5.9.3"
|
|
56
45
|
},
|
|
57
46
|
"main": "squeezeboxrpc.js",
|
|
58
47
|
"files": [
|
|
@@ -70,11 +59,12 @@
|
|
|
70
59
|
"test:js": "mocha --config test/mocharc.custom.json \"{!(node_modules|test)/**/*.test.js,*.test.js,test/**/test!(PackageFiles|Startup).js}\"",
|
|
71
60
|
"test:package": "mocha test/package --exit",
|
|
72
61
|
"test:integration": "mocha test/integration --exit",
|
|
73
|
-
"test": "npm run test:
|
|
62
|
+
"test": "npm run test:integration && npm run test:package",
|
|
74
63
|
"check": "tsc --noEmit -p tsconfig.check.json",
|
|
75
|
-
"lint": "eslint -c eslint.config.mjs .",
|
|
64
|
+
"lint": "eslint -c eslint.config.mjs . ",
|
|
65
|
+
"npm": "npm i && cd widgets && npm i",
|
|
76
66
|
"build": "cd widgets/squeezeboxrpc && npm run build && cd ../..",
|
|
77
|
-
"repochecker": "npx github:oweitman/ioBroker.repochecker https://github.com/oweitman/ioBroker.squeezeboxrpc --local",
|
|
67
|
+
"repochecker": "npx github:oweitman/ioBroker.repochecker https://github.com/oweitman/ioBroker.squeezeboxrpc --local --noinfo",
|
|
78
68
|
"translate": "translate-adapter",
|
|
79
69
|
"translate-widgets": "node ./bin/translate.js --source widgets/squeezeboxrpc/i18n/en.json --format single",
|
|
80
70
|
"release": "release-script --all"
|
package/widgets/package.json
CHANGED
|
@@ -2,9 +2,13 @@
|
|
|
2
2
|
"name": "squeezeboxrpc-vis1-widget",
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"main": "squeezeboxrpc/js/squeezeboxrpc.js",
|
|
5
|
+
"watch": {
|
|
6
|
+
"build": "squeezeboxrpc/**/js/*.js"
|
|
7
|
+
},
|
|
5
8
|
"scripts": {
|
|
6
9
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
7
|
-
"
|
|
10
|
+
"watch": "npm-watch",
|
|
11
|
+
"build": "esbuild squeezeboxrpc/js/bundle.js --bundle --outfile=squeezeboxrpc/build/squeezeboxrpc-dist.js --target=es6 --sourcemap",
|
|
8
12
|
"buildxx": "esbuild squeezeboxrpc/js/bundle.js --minify --bundle --outfile=squeezeboxrpc/js/squeezeboxrpc-dist.js --target=es6 --sourcemap"
|
|
9
13
|
},
|
|
10
14
|
"author": "",
|