diff --git a/docs/widgets/services/emby.md b/docs/widgets/services/emby.md
index f262bfc6..1d70fdf3 100644
--- a/docs/widgets/services/emby.md
+++ b/docs/widgets/services/emby.md
@@ -16,4 +16,5 @@ widget:
key: apikeyapikeyapikeyapikeyapikey
enableBlocks: true # optional, defaults to false
enableNowPlaying: true # optional, defaults to true
+ enableUser: true # optional, defaults to false
```
diff --git a/docs/widgets/services/plex-tautulli.md b/docs/widgets/services/plex-tautulli.md
index b88f6eeb..cce45fc3 100644
--- a/docs/widgets/services/plex-tautulli.md
+++ b/docs/widgets/services/plex-tautulli.md
@@ -14,4 +14,5 @@ widget:
type: tautulli
url: http://tautulli.host.or.ip
key: apikeyapikeyapikeyapikeyapikey
+ enableUser: true # optional, defaults to false
```
diff --git a/src/utils/config/service-helpers.js b/src/utils/config/service-helpers.js
index d6552253..7fb81088 100644
--- a/src/utils/config/service-helpers.js
+++ b/src/utils/config/service-helpers.js
@@ -393,6 +393,9 @@ export function cleanServiceGroups(groups) {
enableBlocks,
enableNowPlaying,
+ // emby, jellyfin, tautulli
+ enableUser,
+
// glances, pihole
version,
@@ -517,6 +520,14 @@ export function cleanServiceGroups(groups) {
if (["emby", "jellyfin"].includes(type)) {
if (enableBlocks !== undefined) cleanedService.widget.enableBlocks = JSON.parse(enableBlocks);
if (enableNowPlaying !== undefined) cleanedService.widget.enableNowPlaying = JSON.parse(enableNowPlaying);
+ if (enableUser !== undefined) {
+ cleanedService.widget.enableUser = !!JSON.parse(enableUser);
+ }
+ }
+ if (["tautulli"].includes(type)) {
+ if (enableUser !== undefined) {
+ cleanedService.widget.enableUser = !!JSON.parse(enableUser);
+ }
}
if (["sonarr", "radarr"].includes(type)) {
if (enableQueue !== undefined) cleanedService.widget.enableQueue = JSON.parse(enableQueue);
diff --git a/src/widgets/emby/component.jsx b/src/widgets/emby/component.jsx
index 89fd44c3..f11a689d 100644
--- a/src/widgets/emby/component.jsx
+++ b/src/widgets/emby/component.jsx
@@ -27,10 +27,11 @@ function ticksToString(ticks) {
return parts.map((part) => part.toString().padStart(2, "0")).join(":");
}
-function SingleSessionEntry({ playCommand, session }) {
+function SingleSessionEntry({ playCommand, session, enableUser }) {
const {
NowPlayingItem: { Name, SeriesName },
PlayState: { PositionTicks, IsPaused, IsMuted },
+ UserName,
} = session;
const RunTimeTicks =
@@ -49,6 +50,7 @@ function SingleSessionEntry({ playCommand, session }) {
{Name}
{SeriesName && ` - ${SeriesName}`}
+ {enableUser && ` (${UserName})`}
@@ -97,10 +99,11 @@ function SingleSessionEntry({ playCommand, session }) {
);
}
-function SessionEntry({ playCommand, session }) {
+function SessionEntry({ playCommand, session, enableUser }) {
const {
NowPlayingItem: { Name, SeriesName },
PlayState: { PositionTicks, IsPaused, IsMuted },
+ UserName,
} = session;
const RunTimeTicks =
@@ -142,6 +145,7 @@ function SessionEntry({ playCommand, session }) {
{Name}
{SeriesName && ` - ${SeriesName}`}
+ {enableUser && ` (${UserName})`}
{IsMuted && }
@@ -215,6 +219,7 @@ export default function Component({ service }) {
const enableBlocks = service.widget?.enableBlocks;
const enableNowPlaying = service.widget?.enableNowPlaying ?? true;
+ const enableUser = !!service.widget?.enableUser;
if (!sessionsData || !countData) {
return (
@@ -272,6 +277,7 @@ export default function Component({ service }) {
handlePlayCommand(currentSession, command)}
session={session}
+ enableUser={enableUser}
/>
>
@@ -288,6 +294,7 @@ export default function Component({ service }) {
key={session.Id}
playCommand={(currentSession, command) => handlePlayCommand(currentSession, command)}
session={session}
+ enableUser={enableUser}
/>
))}
diff --git a/src/widgets/tautulli/component.jsx b/src/widgets/tautulli/component.jsx
index e1a4df00..d224391b 100644
--- a/src/widgets/tautulli/component.jsx
+++ b/src/widgets/tautulli/component.jsx
@@ -25,14 +25,18 @@ function millisecondsToString(milliseconds) {
return parts.map((part) => part.toString().padStart(2, "0")).join(":");
}
-function SingleSessionEntry({ session }) {
- const { full_title, duration, view_offset, progress_percent, state, video_decision, audio_decision } = session;
+function SingleSessionEntry({ session, enableUser }) {
+ const { full_title, duration, view_offset, progress_percent, state, video_decision, audio_decision, username } =
+ session;
return (
<>
-
{full_title}
+
+ {full_title}
+ {enableUser && ` (${username})`}
+
{video_decision === "direct play" && audio_decision === "direct play" && (
@@ -74,8 +78,8 @@ function SingleSessionEntry({ session }) {
);
}
-function SessionEntry({ session }) {
- const { full_title, view_offset, progress_percent, state, video_decision, audio_decision } = session;
+function SessionEntry({ session, enableUser }) {
+ const { full_title, view_offset, progress_percent, state, video_decision, audio_decision, username } = session;
return (
@@ -94,7 +98,10 @@ function SessionEntry({ session }) {
)}
-
{full_title}
+
+ {full_title}
+ {enableUser && ` (${username})`}
+
{video_decision === "direct play" && audio_decision === "direct play" && (
@@ -162,11 +169,13 @@ export default function Component({ service }) {
);
}
+ const enableUser = !!service.widget?.enableUser;
+
if (playing.length === 1) {
const session = playing[0];
return (
-
+
);
}
@@ -174,7 +183,7 @@ export default function Component({ service }) {
return (
{playing.map((session) => (
-
+
))}
);