From 932971d498738901dcda04eeb058df49991af270 Mon Sep 17 00:00:00 2001
From: 4gray
Date: Sun, 11 Oct 2026 23:21:04 +0200
Subject: [PATCH] feat(settings): warn that delete-all clears the server
Co-Authored-By: Claude Opus 5.5
---
...delete-all-playlists-dialog.component.html | 8 +++++++
...ete-all-playlists-dialog.component.spec.ts | 23 +++++++++++++++++++
...s-delete-all-playlists-dialog.component.ts | 3 +++
3 files changed, 34 insertions(+)
diff --git a/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.html b/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.html
index f9e84765e..51bc1b240 100644
--- a/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.html
+++ b/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.html
@@ -9,6 +9,14 @@
| translate: { count: dialogData.summary.total }
}}
+ @if (clearsServer()) {
+
+ {{ 'SERVER_STORAGE.DELETE_ALL_WARNING' | translate }}
+
+ }
diff --git a/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.spec.ts b/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.spec.ts
index 2736033e2..31f536931 100644
--- a/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.spec.ts
+++ b/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.spec.ts
@@ -2,6 +2,7 @@ import { NoopAnimationsModule } from '@angular/platform-browser/animations';
import { ComponentFixture, TestBed } from '@angular/core/testing';
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
import { TranslateModule, TranslateService } from '@ngx-translate/core';
+import { ServerStorageStatusService } from '@iptvnator/services';
import { SettingsDeleteAllPlaylistsDialogComponent } from './settings-delete-all-playlists-dialog.component';
describe('SettingsDeleteAllPlaylistsDialogComponent', () => {
@@ -93,4 +94,26 @@ describe('SettingsDeleteAllPlaylistsDialogComponent', () => {
expect(buttons).toEqual(['Cancel', 'Delete everything']);
});
+
+ it('warns about every device only with server storage', () => {
+ const warning = () =>
+ fixture.nativeElement.querySelector(
+ '[data-test-id="delete-all-server-warning"]'
+ );
+ expect(warning()).toBeNull();
+
+ TestBed.inject(ServerStorageStatusService).activate(
+ {
+ service: 'iptvnator',
+ apiVersion: 1,
+ instanceId: 'i',
+ storage: 'server',
+ auth: 'none',
+ },
+ () => undefined
+ );
+ fixture.detectChanges();
+
+ expect(warning()).not.toBeNull();
+ });
});
diff --git a/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.ts b/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.ts
index 9f4a0fea2..90649f56b 100644
--- a/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.ts
+++ b/apps/web/src/app/settings/settings-delete-all-playlists-dialog.component.ts
@@ -9,6 +9,7 @@ import { MatButtonModule } from '@angular/material/button';
import { MatDialogModule, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatIconModule } from '@angular/material/icon';
import { TranslateModule } from '@ngx-translate/core';
+import { ServerStorageStatusService } from '@iptvnator/services';
import { SOURCE_TYPE_ICONS } from '@iptvnator/shared/interfaces';
export interface SettingsDeleteAllPlaylistsDialogData {
@@ -43,6 +44,8 @@ type SettingsDeleteSummaryItem = {
export class SettingsDeleteAllPlaylistsDialogComponent {
readonly dialogData =
inject(MAT_DIALOG_DATA);
+ /** Self-hosted server storage: the playlists go for every device. */
+ readonly clearsServer = inject(ServerStorageStatusService).isActive;
readonly summaryItems = computed(() => [
{