iobroker.emby 1.3.0 → 2.0.0

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.
Files changed (46) hide show
  1. package/README.md +100 -49
  2. package/admin/i18n/de.json +17 -0
  3. package/admin/i18n/en.json +17 -0
  4. package/admin/i18n/es.json +17 -0
  5. package/admin/i18n/fr.json +17 -0
  6. package/admin/i18n/it.json +17 -0
  7. package/admin/i18n/nl.json +17 -0
  8. package/admin/i18n/pl.json +17 -0
  9. package/admin/i18n/pt.json +17 -0
  10. package/admin/i18n/ru.json +17 -0
  11. package/admin/i18n/uk.json +17 -0
  12. package/admin/i18n/zh-cn.json +17 -0
  13. package/admin/jsonConfig.json +130 -0
  14. package/build/lib/types.js +5 -0
  15. package/build/lib/types.js.map +1 -0
  16. package/build/main.js +979 -0
  17. package/build/main.js.map +1 -0
  18. package/io-package.json +53 -6
  19. package/package.json +33 -23
  20. package/.gitattributes +0 -2
  21. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -38
  22. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  23. package/.github/auto-merge.yml +0 -17
  24. package/.github/copilot-instructions.md +0 -880
  25. package/.github/dependabot.yml +0 -20
  26. package/.github/workflows/automerge-dependabot.yml +0 -35
  27. package/.github/workflows/check-copilot-template.yml +0 -206
  28. package/.github/workflows/dependabot-auto-merge.yml.OLD +0 -27
  29. package/.github/workflows/test-and-release.yml +0 -94
  30. package/.mocharc.json +0 -5
  31. package/.releaseconfig.json +0 -3
  32. package/CHANGELOG_OLD.md +0 -28
  33. package/admin/i18n/de/translations.json +0 -9
  34. package/admin/i18n/en/translations.json +0 -9
  35. package/admin/i18n/es/translations.json +0 -9
  36. package/admin/i18n/fr/translations.json +0 -9
  37. package/admin/i18n/it/translations.json +0 -9
  38. package/admin/i18n/nl/translations.json +0 -9
  39. package/admin/i18n/pl/translations.json +0 -9
  40. package/admin/i18n/pt/translations.json +0 -9
  41. package/admin/i18n/ru/translations.json +0 -9
  42. package/admin/i18n/uk/translations.json +0 -9
  43. package/admin/i18n/zh-cn/translations.json +0 -9
  44. package/admin/index_m.html +0 -119
  45. package/admin/words.js +0 -18
  46. package/main.js +0 -1030
package/README.md CHANGED
@@ -17,77 +17,104 @@
17
17
  </br>
18
18
  **Tests:** </br>
19
19
  [![Test and Release](https://github.com/iobroker-community-adapters/ioBroker.emby/actions/workflows/test-and-release.yml/badge.svg)](https://github.com/iobroker-community-adapters/ioBroker.emby/actions/workflows/test-and-release.yml)
20
- [![CodeQL](https://github.com/iobroker-community-adapters/ioBroker.emby/actions/workflows/codeql.yml/badge.svg)](https://github.com/iobroker-community-adapters/ioBroker.emby/actions/workflows/codeql.yml)
21
20
 
22
- <!--
23
- ## Sentry
24
- **This adapter uses Sentry libraries to automatically report exceptions and code errors to the developers.**
25
- For more details and for information how to disable the error reporting see [Sentry-Plugin Documentation](https://github.com/ioBroker/plugin-sentry#plugin-sentry)! Sentry reporting is used starting with js-controller 3.0.
26
- -->
27
-
28
- ## EMBY Adapter for ioBroker
21
+ ## Emby adapter for ioBroker
29
22
 
30
- This adapter will allow you to connect to your Emby Server and controle it.
23
+ Connects ioBroker to an [Emby](https://emby.media) media server. The adapter receives the active client sessions via WebSocket (what is playing, playback state, user) and can control clients that support remote control (play/pause, mute, volume, messages, navigation).
31
24
 
32
25
  ## Credits
33
26
 
34
- This adapter would not have been possible without the great work of @thewhobox <iobroker@mikegerst.de>, who Wrote the initial versions of this adapter and doneted it to the iobroker-community-adapters organization.
27
+ This adapter would not have been possible without the great work of @thewhobox <iobroker@mikegerst.de>, who wrote the initial versions of this adapter and donated it to the iobroker-community-adapters organization.
35
28
 
29
+ ## Requirements
36
30
 
37
- ## Usage
31
+ - Node.js >= 22.19.0
32
+ - js-controller >= 6.0.11, admin >= 7.7.22
33
+ - Emby Server (tested with 4.10) reachable from the ioBroker host
34
+ - An Emby API key for controlling clients (Emby dashboard > Advanced > API Keys)
38
35
 
39
- Please follow the Steps to ensure the Adapter will work correctly and you can see all Devices.
36
+ ## Configuration
40
37
 
41
- 1. Edit the Settings and enter the IP, ApiKey and maybe some DeviceIds you want to ignore.
38
+ | Setting | Description |
39
+ | ------------- | ------------- |
40
+ | IP/Domain | Address of the Emby server **with port**, e.g. `192.168.0.100:8096` |
41
+ | Connection requires SSL | Use `https`/`wss` (e.g. behind a reverse proxy) |
42
+ | API Key | Key from the Emby dashboard. Stored encrypted. Without a key the adapter only receives data and cannot control clients. |
43
+ | Session or device IDs to ignore | Comma separated list. Matches the session ID (object name below `emby.0`) or the Emby device ID. |
44
+ | Delay for pause/idle | Time in ms before `media.state` changes from `playing` to `paused`/`idle`. Prevents flickering between two episodes. |
45
+ | Poll interval for sessions | Seconds between REST queries of the sessions (default 60, 0 = off). Emby pushes only changes, the poll keeps `info.lastActivity` current and runs the cleanup. Requires the API key. |
46
+ | Remove objects of clients deleted in Emby | Default on. When a client is removed in the Emby dashboard (Devices), its objects are deleted as soon as the server no longer reports its session. |
47
+ | Remove objects of inactive clients after | Days without activity after which the objects of a client the server no longer reports are deleted (default 0 = off). Scripts and history settings on these objects are lost. |
42
48
 
43
- ```IP **with** Port => 192.168.0.100:8096```
44
-
45
- 2. Save and restart the Adapter.
46
-
47
- 3. To see the first Items you will have to open a Emby Client to recieve some Data.
48
-
49
- ```The Adapter will not get Data if **no** client is open.```
49
+ The adapter creates a device for every session the server reports. The object ID is the Emby session ID, the object name is the device name shown in Emby (it can be changed in the Emby dashboard under Devices). Emby only reports a session while the client is connected, so open an Emby app or the web client once to see the first device.
50
50
 
51
+ Note: Emby assigns a new session ID when a client reconnects. The adapter then removes the objects of the old session of the same client automatically, so only one device per client remains. Scripts that use the session ID in the object path have to be adjusted in that case. Devices of clients that are not seen again are kept with `info.online = false`; they are removed when the client is deleted in the Emby dashboard or after the configured number of inactive days (see Configuration), or can be deleted manually.
51
52
 
52
53
  ## Objects
53
54
 
54
- ### Infos
55
+ ### Adapter
55
56
 
56
- | Command | Description | Info |
57
- | ------------- | ------------- | ------------- |
58
- | x.info.deviceName | Shows the Name of the Device | |
59
- | x.info.userName | Shows the Name of User logged in on the device | |
60
- | x.info.supportedCommands | List of supported commands | |
57
+ | Object | Description |
58
+ | ------------- | ------------- |
59
+ | info.connection | `true` while the WebSocket connection to the server is open |
60
+
61
+ ### Info
61
62
 
63
+ | Object | Description | Info |
64
+ | ------------- | ------------- | ------------- |
65
+ | x.info.online | Session is currently reported by the server | `false` after the client was closed or switched off |
66
+ | x.info.deviceName | Name of the device | |
67
+ | x.info.userName | Name of the user logged in on the device | |
68
+ | x.info.supportedCommands | Commands supported by the client (JSON array) | |
69
+ | x.info.lastActivity | Time of the last activity reported by the server | Timestamp (ms). Emby keeps sessions of closed clients for a while, so this shows whether a client is really in use |
62
70
 
63
71
  ### Media
64
72
 
65
- | Command | Description | Info |
73
+ | Object | Description | Info |
66
74
  | ------------- | ------------- | ------------- |
67
- | x.media.description | Description of the shown File. | |
68
- | x.media.isMuted | If Media is Muted. | Not all devices support this and will be False. |
69
- | x.media.state | State of Media. | playing, paused, idle |
70
- | x.media.title | The Title of the shown File. | |
71
- | x.media.type | The Type of the shown File. | Episode, Movie, Audio, None, etc. |
72
- | x.media.seasonName | The Name of the Season | Only if .media.type is Episode otherwise it will be empty. |
73
- | x.media.seriesName | The Name of the Serie | Only if .media.type is Episode otherwise it will be empty. |
74
-
75
+ | x.media.state | State of the client | `playing`, `paused`, `idle` |
76
+ | x.media.title | Title of the item | |
77
+ | x.media.originaltitle | Original title | |
78
+ | x.media.description | Description of the item | |
79
+ | x.media.type | Type of the item | `Episode`, `Movie`, `Audio`, `None`, … |
80
+ | x.media.seriesName | Name of the series | Only for episodes, otherwise empty |
81
+ | x.media.seasonName | Name of the season | Only for episodes, otherwise empty |
82
+ | x.media.endtime | Expected end of playback | `HH:MM` |
83
+ | x.media.rating | Community rating | `null` if unknown |
84
+ | x.media.agerating | Official age rating | |
85
+ | x.media.year | Production year | `null` if unknown |
86
+ | x.media.genres | Genres (comma separated) | |
87
+ | x.media.tags | Taglines (comma separated) | |
88
+ | x.media.backdropimage | Backdrop image tags (comma separated) | |
89
+ | x.media.ratio | Aspect ratio of the primary image | `null` if unknown |
90
+ | x.media.isMuted | Client is muted | Not all clients report this |
91
+
92
+ ### Posters
93
+
94
+ | Object | Description | Info |
95
+ | ------------- | ------------- | ------------- |
96
+ | x.posters.main | URL of the main poster (movie or series) | |
97
+ | x.posters.season | URL of the season poster | Only for episodes |
98
+ | x.posters.episode | URL of the episode image | Only for episodes |
75
99
 
76
100
  ### Commands
77
101
 
78
- | Command | Description | Info |
79
- | ------------- | ------------- | ------------- |
80
- | x.command.dialog | Show a dialog on the selected Device. | For example: Header\|Some text (if no header given, ioBroker will be Header) |
81
- | x.command.goHome | Sends a command to the selected Device which will return to the Homescreen | |
82
- | x.command.message | Show a message on the selected Device for 5 sec. | |
83
- | x.command.play | Plays Media | Only if media is paused |
84
- | x.command.pause | Pauses Media | Only if media is playing |
85
- | x.command.toggleplay | Toggles Playstate | play/pause |
86
- | x.command.mute | Mutes the device | |
87
- | x.command.unmute | Unmutes the device | |
88
- | x.command.togglemute | Toggles mute of device | |
89
- | x.command.volume | Sets the Volume of the selected Device. | Doesn't work on the most of devices since it doenst controle the TV Volume. |
102
+ Only created for clients that support remote control, and only for commands the client reports.
90
103
 
104
+ | Object | Description | Info |
105
+ | ------------- | ------------- | ------------- |
106
+ | x.command.play | Resume playback | Button |
107
+ | x.command.pause | Pause playback | Button |
108
+ | x.command.toggleplay | Toggle play/pause | Button |
109
+ | x.command.mute | Mute | Button |
110
+ | x.command.unmute | Unmute | Button |
111
+ | x.command.togglemute | Toggle mute | Button |
112
+ | x.command.goHome | Go to the home screen | Button |
113
+ | x.command.goToSearch | Open the search | Button |
114
+ | x.command.back | Navigate back | Button |
115
+ | x.command.volume | Volume 0-100 | Also shows the current volume reported by the client. Many clients (e.g. TV apps) do not control the TV volume. |
116
+ | x.command.message | Show a message for 5 seconds | Text |
117
+ | x.command.dialog | Show a dialog that stays until it is closed | `Header\|Text`, without `\|` the header is "ioBroker" |
91
118
 
92
119
  ## Changelog
93
120
 
@@ -95,6 +122,31 @@ Please follow the Steps to ensure the Adapter will work correctly and you can se
95
122
  Placeholder for the next version (at the beginning of the line):
96
123
  ### **WORK IN PROGRESS**
97
124
  -->
125
+ ### 2.0.0 (2026-10-29)
126
+ - (copilot) Adapter requires node.js >= 22.19.0 now
127
+ - (Schimi1983) Connection is re-established after the server closes it (e.g. server restart), KeepAlive is sent, info.connection reflects the real state
128
+ - (Schimi1983) Only "Sessions" messages are processed as sessions, invalid messages no longer cause errors
129
+ - (Schimi1983) Fixed command.volume (always failed), command.unmute is created for clients reporting "Unmute"
130
+ - (Schimi1983) Messages and dialogs with quotes or line breaks work now
131
+ - (Schimi1983) Commands use https if SSL is enabled, API key is sent as header and no longer logged
132
+ - (Schimi1983) API key is stored encrypted, an existing key is converted automatically (one restart)
133
+ - (Schimi1983) New states info.online and info.lastActivity per session; sessions that disappear are reset to idle
134
+ - (Schimi1983) Current sessions are read via REST right after connecting, the server pushes them only on the next change
135
+ - (Schimi1983) Sessions are polled every 60 s (configurable) to keep info.lastActivity current
136
+ - (Schimi1983) Optional cleanup: objects of clients deleted in Emby (default on) or inactive for a configurable number of days (default off) are removed
137
+ - (Schimi1983) Object types of buttons fixed, empty numbers are written as null, states are only written on change
138
+ - (Schimi1983) Dependencies "request" and "websocket" replaced by native fetch and WebSocket
139
+ - (Schimi1983) API key is entered in a password field
140
+ - (Schimi1983) The adapter no longer shows up as its own device, it connects with a device ID per instance
141
+ - (Schimi1983) Objects of an old session are removed when the same client connects with a new session ID
142
+ - (Schimi1983) Command states are created as soon as a client reports remote control support, not only on adapter start
143
+ - (Schimi1983) Device names follow the display name set in the Emby dashboard; REST calls use the adapter's device ID so they do not appear as an extra client
144
+ - (Schimi1983) README updated: configuration, all objects, broken CodeQL badge removed
145
+ - (Schimi1983) Admin UI migrated to jsonConfig (based on #275), API key is entered in a password field, short-form i18n files
146
+ - (GermanBluefox) Dependencies updated (@iobroker/adapter-core 3.4.3)
147
+ - (GermanBluefox) Package content defined via "files" in package.json, tsconfig added for type checking
148
+ - (GermanBluefox) The adapter was refactored to TypeScript
149
+
98
150
  ### 1.3.0 (2026-03-03)
99
151
  - (mcm1957) Adapter requires node.js >= 20 now
100
152
  - (copilot) Adapter requires admin >= 7.7.22 now
@@ -115,8 +167,7 @@ Please follow the Steps to ensure the Adapter will work correctly and you can se
115
167
  - (thewhobox) An error causing multiple 'undefined' messages has been fixed. [#23]
116
168
  - (mcm1957) Dependencies have been updated.
117
169
 
118
- ### 1.0.3
119
- * Added more info for playing item
170
+ [Older changelogs can be found there](CHANGELOG_OLD.md)
120
171
 
121
172
  ## License
122
173
 
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "API-Schlüssel",
3
+ "ApiKeyHelp": "Einen Schlüssel im Emby-Dashboard unter Erweitert > API-Schlüssel anlegen. Ohne Schlüssel können Clients nur überwacht, aber nicht gesteuert werden.",
4
+ "DeviceIds": "Zu ignorierende Session- oder Geräte-IDs (mit Komma getrennt)",
5
+ "hdrCleanup": "Aufräumen",
6
+ "hdrConnection": "Verbindung",
7
+ "hdrOptions": "Optionen",
8
+ "IP": "IP/Domain des Emby-Servers (mit Port)",
9
+ "isSSL": "Verbindung benötigt SSL",
10
+ "PollInterval": "Abfrageintervall für Sessions (s, 0 = aus)",
11
+ "PollIntervalDesc": "Emby meldet nur Änderungen. Die Abfrage hält die letzte Aktivität aktuell und wird für das Aufräumen benötigt.",
12
+ "RemoveDeletedDevices": "Objekte von Clients entfernen, die in Emby gelöscht wurden (Dashboard > Geräte)",
13
+ "RemoveInactiveDays": "Objekte inaktiver Clients entfernen nach (Tage, 0 = aus)",
14
+ "RemoveInactiveDaysDesc": "Nur Clients, die der Server nicht mehr meldet. Skripte und History-Einstellungen an diesen Objekten gehen verloren.",
15
+ "Timeout": "Verzögerung für Pause/Leerlauf (ms)",
16
+ "TimeoutDesc": "Nötig, wenn mehrere Folgen hintereinander gespielt werden."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "API Key",
3
+ "ApiKeyHelp": "Create a key in the Emby dashboard under Advanced > API Keys. Without a key clients can be monitored but not controlled.",
4
+ "DeviceIds": "Session or device IDs to ignore (comma separated)",
5
+ "hdrCleanup": "Cleanup",
6
+ "hdrConnection": "Connection",
7
+ "hdrOptions": "Options",
8
+ "IP": "IP/Domain of the Emby server (with port)",
9
+ "isSSL": "Connection requires SSL",
10
+ "PollInterval": "Poll interval for sessions (s, 0 = off)",
11
+ "PollIntervalDesc": "Emby only pushes changes. The poll keeps the last activity up to date and is needed for the cleanup.",
12
+ "RemoveDeletedDevices": "Remove objects of clients deleted in Emby (Dashboard > Devices)",
13
+ "RemoveInactiveDays": "Remove objects of inactive clients after (days, 0 = off)",
14
+ "RemoveInactiveDaysDesc": "Only clients the server no longer reports. Scripts and history settings on these objects are lost.",
15
+ "Timeout": "Delay for pause/idle (ms)",
16
+ "TimeoutDesc": "Necessary when you watch more episodes in one row."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "Clave API",
3
+ "ApiKeyHelp": "Cree una clave en el panel de Emby en Avanzado > Claves API. Sin clave, los clientes se pueden supervisar pero no controlar.",
4
+ "DeviceIds": "ID de sesión o de dispositivo a ignorar (separados por comas)",
5
+ "hdrCleanup": "Limpieza",
6
+ "hdrConnection": "Conexión",
7
+ "hdrOptions": "Opciones",
8
+ "IP": "IP/Dominio del servidor Emby (con puerto)",
9
+ "isSSL": "La conexión requiere SSL",
10
+ "PollInterval": "Intervalo de consulta de sesiones (s, 0 = desactivado)",
11
+ "PollIntervalDesc": "Emby solo envía cambios. La consulta mantiene actualizada la última actividad y es necesaria para la limpieza.",
12
+ "RemoveDeletedDevices": "Eliminar los objetos de clientes borrados en Emby (Panel > Dispositivos)",
13
+ "RemoveInactiveDays": "Eliminar los objetos de clientes inactivos después de (días, 0 = desactivado)",
14
+ "RemoveInactiveDaysDesc": "Solo clientes que el servidor ya no informa. Se pierden los scripts y la configuración del historial de estos objetos.",
15
+ "Timeout": "Retraso para pausa/inactividad (ms)",
16
+ "TimeoutDesc": "Necesario cuando miras más episodios seguidos."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "clé API",
3
+ "ApiKeyHelp": "Créez une clé dans le tableau de bord Emby sous Avancé > Clés API. Sans clé, les clients peuvent être surveillés mais pas contrôlés.",
4
+ "DeviceIds": "ID de session ou d’appareil à ignorer (séparés par des virgules)",
5
+ "hdrCleanup": "Nettoyage",
6
+ "hdrConnection": "Connexion",
7
+ "hdrOptions": "Options",
8
+ "IP": "IP/Domaine du serveur Emby (avec port)",
9
+ "isSSL": "La connexion nécessite SSL",
10
+ "PollInterval": "Intervalle d’interrogation des sessions (s, 0 = désactivé)",
11
+ "PollIntervalDesc": "Emby n’envoie que les changements. L’interrogation maintient la dernière activité à jour et est nécessaire au nettoyage.",
12
+ "RemoveDeletedDevices": "Supprimer les objets des clients supprimés dans Emby (Tableau de bord > Appareils)",
13
+ "RemoveInactiveDays": "Supprimer les objets des clients inactifs après (jours, 0 = désactivé)",
14
+ "RemoveInactiveDaysDesc": "Uniquement les clients que le serveur ne signale plus. Les scripts et réglages d’historique de ces objets sont perdus.",
15
+ "Timeout": "Délai pour pause/inactivité (ms)",
16
+ "TimeoutDesc": "Nécessaire lorsque vous regardez plusieurs épisodes d’affilée."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "Chiave API",
3
+ "ApiKeyHelp": "Crea una chiave nella dashboard di Emby in Avanzate > Chiavi API. Senza chiave i client possono essere monitorati ma non controllati.",
4
+ "DeviceIds": "ID di sessione o dispositivo da ignorare (separati da virgola)",
5
+ "hdrCleanup": "Pulizia",
6
+ "hdrConnection": "Connessione",
7
+ "hdrOptions": "Opzioni",
8
+ "IP": "IP/Dominio del server Emby (con porta)",
9
+ "isSSL": "La connessione richiede SSL",
10
+ "PollInterval": "Intervallo di interrogazione delle sessioni (s, 0 = disattivato)",
11
+ "PollIntervalDesc": "Emby invia solo le modifiche. L’interrogazione mantiene aggiornata l’ultima attività ed è necessaria per la pulizia.",
12
+ "RemoveDeletedDevices": "Rimuovi gli oggetti dei client eliminati in Emby (Dashboard > Dispositivi)",
13
+ "RemoveInactiveDays": "Rimuovi gli oggetti dei client inattivi dopo (giorni, 0 = disattivato)",
14
+ "RemoveInactiveDaysDesc": "Solo i client che il server non segnala più. Script e impostazioni della cronologia di questi oggetti vanno persi.",
15
+ "Timeout": "Ritardo per pausa/inattività (ms)",
16
+ "TimeoutDesc": "Necessario quando guardi più episodi di seguito."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "API sleutel",
3
+ "ApiKeyHelp": "Maak een sleutel aan in het Emby-dashboard onder Geavanceerd > API-sleutels. Zonder sleutel kunnen clients worden gevolgd maar niet bediend.",
4
+ "DeviceIds": "Te negeren sessie- of apparaat-ID’s (kommagescheiden)",
5
+ "hdrCleanup": "Opruimen",
6
+ "hdrConnection": "Verbinding",
7
+ "hdrOptions": "Opties",
8
+ "IP": "IP/domein van de Emby-server (met poort)",
9
+ "isSSL": "Verbinding vereist SSL",
10
+ "PollInterval": "Pollinginterval voor sessies (s, 0 = uit)",
11
+ "PollIntervalDesc": "Emby meldt alleen wijzigingen. De polling houdt de laatste activiteit actueel en is nodig voor het opruimen.",
12
+ "RemoveDeletedDevices": "Objecten verwijderen van clients die in Emby zijn verwijderd (Dashboard > Apparaten)",
13
+ "RemoveInactiveDays": "Objecten van inactieve clients verwijderen na (dagen, 0 = uit)",
14
+ "RemoveInactiveDaysDesc": "Alleen clients die de server niet meer meldt. Scripts en historie-instellingen van deze objecten gaan verloren.",
15
+ "Timeout": "Vertraging voor pauze/inactief (ms)",
16
+ "TimeoutDesc": "Noodzakelijk als je meerdere afleveringen achter elkaar bekijkt."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "Klucz API",
3
+ "ApiKeyHelp": "Utwórz klucz w panelu Emby w sekcji Zaawansowane > Klucze API. Bez klucza klienty można monitorować, ale nie można nimi sterować.",
4
+ "DeviceIds": "Identyfikatory sesji lub urządzeń do pominięcia (oddzielone przecinkami)",
5
+ "hdrCleanup": "Porządkowanie",
6
+ "hdrConnection": "Połączenie",
7
+ "hdrOptions": "Opcje",
8
+ "IP": "IP/domena serwera Emby (z portem)",
9
+ "isSSL": "Połączenie wymaga protokołu SSL",
10
+ "PollInterval": "Interwał odpytywania sesji (s, 0 = wył.)",
11
+ "PollIntervalDesc": "Emby wysyła tylko zmiany. Odpytywanie aktualizuje ostatnią aktywność i jest potrzebne do porządkowania.",
12
+ "RemoveDeletedDevices": "Usuń obiekty klientów usuniętych w Emby (Panel > Urządzenia)",
13
+ "RemoveInactiveDays": "Usuń obiekty nieaktywnych klientów po (dni, 0 = wył.)",
14
+ "RemoveInactiveDaysDesc": "Tylko klienci, których serwer już nie zgłasza. Skrypty i ustawienia historii tych obiektów zostaną utracone.",
15
+ "Timeout": "Opóźnienie dla pauzy/bezczynności (ms)",
16
+ "TimeoutDesc": "Niezbędne, gdy oglądasz więcej odcinków w jednym rzędzie."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "Chave API",
3
+ "ApiKeyHelp": "Crie uma chave no painel do Emby em Avançado > Chaves de API. Sem chave, os clientes podem ser monitorados, mas não controlados.",
4
+ "DeviceIds": "IDs de sessão ou de dispositivo a ignorar (separados por vírgula)",
5
+ "hdrCleanup": "Limpeza",
6
+ "hdrConnection": "Conexão",
7
+ "hdrOptions": "Opções",
8
+ "IP": "IP/Domínio do servidor Emby (com porta)",
9
+ "isSSL": "A conexão requer SSL",
10
+ "PollInterval": "Intervalo de consulta das sessões (s, 0 = desligado)",
11
+ "PollIntervalDesc": "O Emby só envia alterações. A consulta mantém a última atividade atualizada e é necessária para a limpeza.",
12
+ "RemoveDeletedDevices": "Remover os objetos de clientes excluídos no Emby (Painel > Dispositivos)",
13
+ "RemoveInactiveDays": "Remover os objetos de clientes inativos após (dias, 0 = desligado)",
14
+ "RemoveInactiveDaysDesc": "Apenas clientes que o servidor já não informa. Scripts e configurações de histórico desses objetos são perdidos.",
15
+ "Timeout": "Atraso para pausa/inatividade (ms)",
16
+ "TimeoutDesc": "Necessário quando você assiste mais episódios seguidos."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "Ключ API",
3
+ "ApiKeyHelp": "Создайте ключ в панели Emby в разделе «Дополнительно > API-ключи». Без ключа клиенты можно отслеживать, но не управлять ими.",
4
+ "DeviceIds": "ID сеансов или устройств, которые нужно игнорировать (через запятую)",
5
+ "hdrCleanup": "Очистка",
6
+ "hdrConnection": "Подключение",
7
+ "hdrOptions": "Параметры",
8
+ "IP": "IP / Домен сервера Emby (с портом)",
9
+ "isSSL": "Для подключения требуется SSL",
10
+ "PollInterval": "Интервал опроса сеансов (с, 0 = выкл.)",
11
+ "PollIntervalDesc": "Emby сообщает только об изменениях. Опрос поддерживает актуальность последней активности и нужен для очистки.",
12
+ "RemoveDeletedDevices": "Удалять объекты клиентов, удалённых в Emby (Панель > Устройства)",
13
+ "RemoveInactiveDays": "Удалять объекты неактивных клиентов через (дней, 0 = выкл.)",
14
+ "RemoveInactiveDaysDesc": "Только клиенты, о которых сервер больше не сообщает. Скрипты и настройки истории этих объектов будут потеряны.",
15
+ "Timeout": "Задержка для паузы/простоя (мс)",
16
+ "TimeoutDesc": "Необходим при просмотре нескольких серий подряд."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "Ключ API",
3
+ "ApiKeyHelp": "Створіть ключ на панелі Emby у розділі «Додатково > API-ключі». Без ключа клієнтів можна відстежувати, але не керувати ними.",
4
+ "DeviceIds": "ID сеансів або пристроїв, які потрібно ігнорувати (через кому)",
5
+ "hdrCleanup": "Очищення",
6
+ "hdrConnection": "Підключення",
7
+ "hdrOptions": "Параметри",
8
+ "IP": "IP/домен сервера Emby (з портом)",
9
+ "isSSL": "Для підключення потрібен SSL",
10
+ "PollInterval": "Інтервал опитування сеансів (с, 0 = вимк.)",
11
+ "PollIntervalDesc": "Emby повідомляє лише про зміни. Опитування підтримує актуальність останньої активності та потрібне для очищення.",
12
+ "RemoveDeletedDevices": "Видаляти об’єкти клієнтів, видалених в Emby (Панель > Пристрої)",
13
+ "RemoveInactiveDays": "Видаляти об’єкти неактивних клієнтів через (днів, 0 = вимк.)",
14
+ "RemoveInactiveDaysDesc": "Лише клієнти, про яких сервер більше не повідомляє. Скрипти та налаштування історії цих об’єктів буде втрачено.",
15
+ "Timeout": "Затримка для паузи/простою (мс)",
16
+ "TimeoutDesc": "Необхідно, коли ви переглядаєте кілька серій в одному рядку."
17
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "ApiKey": "API密钥",
3
+ "ApiKeyHelp": "在 Emby 控制台的“高级 > API 密钥”中创建密钥。没有密钥时只能监视客户端,无法控制。",
4
+ "DeviceIds": "要忽略的会话或设备 ID(逗号分隔)",
5
+ "hdrCleanup": "清理",
6
+ "hdrConnection": "连接",
7
+ "hdrOptions": "选项",
8
+ "IP": "Emby 服务器的 IP/域名(带端口)",
9
+ "isSSL": "连接需要 SSL",
10
+ "PollInterval": "会话轮询间隔(秒,0 = 关闭)",
11
+ "PollIntervalDesc": "Emby 只推送变化。轮询使最后活动时间保持最新,并且是清理所必需的。",
12
+ "RemoveDeletedDevices": "删除在 Emby 中已删除的客户端的对象(控制台 > 设备)",
13
+ "RemoveInactiveDays": "在以下天数后删除不活动客户端的对象(天,0 = 关闭)",
14
+ "RemoveInactiveDaysDesc": "仅限服务器不再报告的客户端。这些对象上的脚本和历史记录设置将丢失。",
15
+ "Timeout": "暂停/空闲延迟(毫秒)",
16
+ "TimeoutDesc": "当您连续观看更多剧集时,这是必要的。"
17
+ }
@@ -0,0 +1,130 @@
1
+ {
2
+ "i18n": true,
3
+ "type": "panel",
4
+ "items": {
5
+ "hdrConnection": {
6
+ "type": "header",
7
+ "text": "hdrConnection",
8
+ "size": 2,
9
+ "xs": 12,
10
+ "sm": 12,
11
+ "md": 12,
12
+ "lg": 12,
13
+ "xl": 12
14
+ },
15
+ "ip": {
16
+ "type": "text",
17
+ "label": "IP",
18
+ "placeholder": "192.168.0.100:8096",
19
+ "newLine": true,
20
+ "xs": 12,
21
+ "sm": 12,
22
+ "md": 6,
23
+ "lg": 6,
24
+ "xl": 6
25
+ },
26
+ "isSSL": {
27
+ "type": "checkbox",
28
+ "label": "isSSL",
29
+ "xs": 12,
30
+ "sm": 12,
31
+ "md": 6,
32
+ "lg": 6,
33
+ "xl": 6
34
+ },
35
+ "apikey": {
36
+ "type": "password",
37
+ "label": "ApiKey",
38
+ "help": "ApiKeyHelp",
39
+ "visible": true,
40
+ "newLine": true,
41
+ "xs": 12,
42
+ "sm": 12,
43
+ "md": 6,
44
+ "lg": 6,
45
+ "xl": 6
46
+ },
47
+ "hdrOptions": {
48
+ "type": "header",
49
+ "text": "hdrOptions",
50
+ "size": 2,
51
+ "newLine": true,
52
+ "xs": 12,
53
+ "sm": 12,
54
+ "md": 12,
55
+ "lg": 12,
56
+ "xl": 12
57
+ },
58
+ "deviceIds": {
59
+ "type": "text",
60
+ "label": "DeviceIds",
61
+ "newLine": true,
62
+ "xs": 12,
63
+ "sm": 12,
64
+ "md": 12,
65
+ "lg": 12,
66
+ "xl": 12
67
+ },
68
+ "timeout": {
69
+ "type": "number",
70
+ "label": "Timeout",
71
+ "help": "TimeoutDesc",
72
+ "min": 0,
73
+ "max": 60000,
74
+ "step": 100,
75
+ "newLine": true,
76
+ "xs": 12,
77
+ "sm": 12,
78
+ "md": 6,
79
+ "lg": 6,
80
+ "xl": 6
81
+ },
82
+ "pollInterval": {
83
+ "type": "number",
84
+ "label": "PollInterval",
85
+ "help": "PollIntervalDesc",
86
+ "min": 0,
87
+ "max": 3600,
88
+ "newLine": true,
89
+ "xs": 12,
90
+ "sm": 12,
91
+ "md": 6,
92
+ "lg": 6,
93
+ "xl": 6
94
+ },
95
+ "hdrCleanup": {
96
+ "type": "header",
97
+ "text": "hdrCleanup",
98
+ "size": 2,
99
+ "newLine": true,
100
+ "xs": 12,
101
+ "sm": 12,
102
+ "md": 12,
103
+ "lg": 12,
104
+ "xl": 12
105
+ },
106
+ "removeDeletedDevices": {
107
+ "type": "checkbox",
108
+ "label": "RemoveDeletedDevices",
109
+ "newLine": true,
110
+ "xs": 12,
111
+ "sm": 12,
112
+ "md": 12,
113
+ "lg": 12,
114
+ "xl": 12
115
+ },
116
+ "removeInactiveDays": {
117
+ "type": "number",
118
+ "label": "RemoveInactiveDays",
119
+ "help": "RemoveInactiveDaysDesc",
120
+ "min": 0,
121
+ "max": 3650,
122
+ "newLine": true,
123
+ "xs": 12,
124
+ "sm": 12,
125
+ "md": 6,
126
+ "lg": 6,
127
+ "xl": 6
128
+ }
129
+ }
130
+ }
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ // Payloads of the Emby server (WebSocket and REST). Only the fields the adapter reads are listed,
3
+ // all of them optional: the data comes from the server and is checked at runtime.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":";AAAA,kGAAkG;AAClG,kFAAkF"}