refactor(external-playback): add translation support for close player button and update UI styles

Entire-Checkpoint: c6e522b4276c
This commit is contained in:
4gray committed 2026-04-25 23:43:22 +02:00
1 parent 58ee06bb2b
commit ce7ae1a251
21 files changed
+54 -25

No files matched your search

+2 -1
View File
@@ -402,7 +402,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -394,7 +394,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -362,7 +362,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -750,7 +750,8 @@
"DROP_OVERLAY_REJECTED_UNSUPPORTED": "Unsupported file type",
"DROP_OVERLAY_REJECTED_EMPTY": "That file is empty",
"DROP_OVERLAY_REJECTED_READ_ERROR": "Could not read that file",
"DROP_IMPORT_SUCCESS": "Importing \"{{title}}\"…"
"DROP_IMPORT_SUCCESS": "Importing \"{{title}}\"…",
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"SOURCES": {
"TITLE": "Quellen",
+2 -1
View File
@@ -525,7 +525,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+1
View File
@@ -770,6 +770,7 @@
"RAIL_RECENT": "Recently viewed",
"RAIL_FAVORITES": "Favorites",
"RAIL_DOWNLOADS": "Downloads",
"EXTERNAL_PLAYBACK_CLOSE": "Close player",
"RAIL_ALL_CHANNELS": "All channels",
"RAIL_GROUPS": "Groups",
"RAIL_CONTEXT_ACTIONS": "Section actions",
+2 -1
View File
@@ -443,7 +443,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -464,7 +464,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -436,7 +436,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -382,7 +382,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -331,7 +331,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -394,7 +394,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -394,7 +394,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -432,7 +432,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -706,7 +706,8 @@
"DROP_OVERLAY_REJECTED_UNSUPPORTED": "Unsupported file type",
"DROP_OVERLAY_REJECTED_EMPTY": "That file is empty",
"DROP_OVERLAY_REJECTED_READ_ERROR": "Could not read that file",
"DROP_IMPORT_SUCCESS": "Importing \"{{title}}\"…"
"DROP_IMPORT_SUCCESS": "Importing \"{{title}}\"…",
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"SOURCES": {
"TITLE": "Источники",
+2 -1
View File
@@ -573,7 +573,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -330,7 +330,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
+2 -1
View File
@@ -412,7 +412,8 @@
"ADD_PLAYLIST_XTREAM_DESCRIPTION": "Open add dialog on the Xtream Codes tab",
"ADD_PLAYLIST_STALKER_LABEL": "Add Stalker portal",
"ADD_PLAYLIST_STALKER_DESCRIPTION": "Open add dialog on the Stalker Portal tab"
}
},
"EXTERNAL_PLAYBACK_CLOSE": "Close player"
},
"GLOBAL_FAVORITES": {
"NO_PLAYLISTS_TITLE": "No favorites to show",
@@ -20,7 +20,9 @@
<div class="external-playback-dock__meta">
<div class="external-playback-dock__topline">
<span class="external-playback-dock__chip">{{ playerLabel() }}</span>
<span class="external-playback-dock__chip">{{
playerLabel()
}}</span>
@if (!compact()) {
<span class="external-playback-dock__caption">
External player
@@ -44,13 +46,15 @@
@if (showCloseButton()) {
<button
type="button"
mat-stroked-button
mat-button
class="external-playback-dock__button"
(click)="closeClicked.emit()"
>
<mat-icon>stop_circle</mat-icon>
@if (!compact()) {
<span>Close player</span>
<span>{{
'WORKSPACE.SHELL.EXTERNAL_PLAYBACK_CLOSE' | translate
}}</span>
}
</button>
}
@@ -8,9 +8,9 @@
align-items: center;
gap: 14px;
min-height: 72px;
padding: 12px 14px;
padding: 8px 14px;
border: 1px solid color-mix(in srgb, var(--mat-sys-outline-variant) 60%, transparent);
border-radius: 20px;
border-radius: 15px 15px 0 0;
background:
linear-gradient(
135deg,
@@ -20,7 +20,6 @@
box-shadow:
0 18px 42px rgba(15, 23, 42, 0.12),
inset 0 1px 0 rgba(255, 255, 255, 0.28);
backdrop-filter: blur(18px);
}
.external-playback-dock--error {
@@ -10,11 +10,17 @@ import {
import { MatButtonModule } from '@angular/material/button';
import { MatIcon } from '@angular/material/icon';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { TranslatePipe } from '@ngx-translate/core';
import { ExternalPlayerSession } from 'shared-interfaces';
@Component({
selector: 'app-external-playback-dock',
imports: [MatButtonModule, MatIcon, MatProgressSpinnerModule],
imports: [
MatButtonModule,
MatIcon,
MatProgressSpinnerModule,
TranslatePipe,
],
templateUrl: './external-playback-dock.component.html',
styleUrl: './external-playback-dock.component.scss',
changeDetection: ChangeDetectionStrategy.OnPush,
@@ -27,7 +33,9 @@ export class ExternalPlaybackDockComponent {
private readonly artworkFailed = signal(false);
readonly playerLabel = computed(() => this.session().player.toUpperCase());
readonly artworkUrl = computed(() => this.session().thumbnail?.trim() ?? '');
readonly artworkUrl = computed(
() => this.session().thumbnail?.trim() ?? ''
);
readonly statusLabel = computed(() => {
const session = this.session();
const player = this.playerLabel();