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(() => [ {