chore(frontend): clean logging and lint suppressions

This commit is contained in:
4gray authored and GitHub committed 2026-05-26 20:18:12 +02:00
1 parent a1b0d9186c
commit 701cf23299
7 files changed
+54 -38

No files matched your search

@@ -6,6 +6,7 @@ import { PlaylistActions } from '@iptvnator/m3u-state';
import { DataService } from '@iptvnator/services';
import {
AUTO_UPDATE_PLAYLISTS,
createDevLogger,
ERROR,
Playlist,
PLAYLIST_PARSE_BY_URL,
@@ -46,6 +47,7 @@ export class ElectronService extends DataService {
private readonly snackBar = inject(MatSnackBar);
private readonly store = inject(Store);
private readonly translateService = inject(TranslateService);
private readonly debugLog = createDevLogger('ElectronService');
private readonly silentXtreamActions = new Set<string>([
XtreamCodeActions.GetAccountInfo,
XtreamCodeActions.GetLiveCategories,
@@ -58,7 +60,7 @@ export class ElectronService extends DataService {
constructor() {
super();
console.log('Electron service initialized...');
this.debugLog('Electron service initialized...');
this.setupPlayerErrorListener();
this.setupPortalDebugListener();
}
@@ -225,7 +227,7 @@ export class ElectronService extends DataService {
return playlists as T;
}
console.log('Unknown type', type);
this.debugLog('Unknown IPC event type:', type);
return undefined as T;
}
@@ -476,7 +478,7 @@ export class ElectronService extends DataService {
// Log error to console
if (isSilentAction) {
console.log(
this.debugLog(
`Background Xtream action failed (${action ?? 'unknown'}):`,
normalizedMessage
);
+5 -3
View File
@@ -15,6 +15,7 @@ import {
} from 'rxjs';
import { DataService } from '@iptvnator/services';
import {
createDevLogger,
ERROR,
Playlist,
PLAYLIST_PARSE_BY_URL,
@@ -70,6 +71,7 @@ export class PwaService extends DataService {
private readonly store = inject(Store);
private readonly swUpdate = inject(SwUpdate);
private readonly translateService = inject(TranslateService);
private readonly debugLog = createDevLogger('PwaService');
private readonly providerTargetIds = new Map<string, Promise<string>>();
private readonly silentXtreamActions = new Set<string>([
XtreamCodeActions.GetAccountInfo,
@@ -86,7 +88,7 @@ export class PwaService extends DataService {
constructor() {
super();
console.log('PWA service initialized...');
this.debugLog('PWA service initialized...');
}
/** Uses service worker mechanism to check for available application updates */
@@ -355,7 +357,7 @@ export class PwaService extends DataService {
);
if (isSilentAction) {
console.log(
this.debugLog(
`Background Xtream action failed (${action ?? 'unknown'}):`,
normalizedMessage
);
@@ -395,7 +397,7 @@ export class PwaService extends DataService {
// Log error to console
if (isSilentAction) {
console.log(
this.debugLog(
`Background Xtream action failed (${action ?? 'unknown'}):`,
normalizedMessage
);
@@ -85,6 +85,7 @@ import {
} from '@iptvnator/services';
import {
Channel,
createDevLogger,
EpgProgram,
ExternalPlayerSession,
OPEN_MPV_PLAYER,
@@ -142,6 +143,7 @@ export class VideoPlayerComponent implements OnInit, OnDestroy {
private readonly workspaceHeaderContext = inject(
WorkspaceHeaderContextService
);
private readonly debugLog = createDevLogger('VideoPlayerComponent');
/** Active selected channel */
readonly activeChannel = this.store.selectSignal(selectActive);
@@ -442,7 +444,7 @@ export class VideoPlayerComponent implements OnInit, OnDestroy {
* Handle remote control channel change
*/
handleRemoteChannelChange(direction: 'up' | 'down'): void {
console.log(`Remote control: changing channel ${direction}`);
this.debugLog('Remote control channel change:', direction);
// Use combineLatest to get both values and take only the first emission
combineLatest([this.channels$, this.store.select(selectActive)])
@@ -1,5 +1,9 @@
import { Injectable, inject } from '@angular/core';
import { Playlist, STALKER_REQUEST } from '@iptvnator/shared/interfaces';
import {
createDevLogger,
Playlist,
STALKER_REQUEST,
} from '@iptvnator/shared/interfaces';
import { DataService } from '@iptvnator/services';
import {
getStalkerPortalIdentityFromPlaylist,
@@ -87,6 +91,7 @@ interface StalkerAuthConfirmationResponse {
})
export class StalkerSessionService {
private dataService = inject(DataService);
private readonly debugLog = createDevLogger('StalkerSession');
// In-memory token cache for current session (keyed by playlist ID)
private tokenCache = new Map<string, string>();
@@ -482,9 +487,7 @@ export class StalkerSessionService {
// This prevents race conditions when multiple resources request a token simultaneously
const pendingPromise = this.pendingAuth.get(playlist._id);
if (pendingPromise) {
console.log(
'[StalkerSession] Waiting for pending authentication...'
);
this.debugLog('Waiting for pending authentication...');
return pendingPromise;
}
+18 -19
View File
@@ -1,4 +1,3 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import { inject, Injectable } from '@angular/core';
import { MatSnackBar } from '@angular/material/snack-bar';
import { TranslateService } from '@ngx-translate/core';
@@ -141,6 +140,20 @@ export class PlaylistsService {
return this.indexedDbMigrationPromise;
}
private toPlaylistMeta(playlist: Playlist): Playlist {
const playlistMeta = { ...playlist };
delete playlistMeta.playlist;
delete playlistMeta.items;
delete playlistMeta.header;
return playlistMeta;
}
private toAutoUpdatePlaylistMeta(playlist: Playlist): Playlist {
const playlistMeta = this.toPlaylistMeta(playlist);
delete playlistMeta.favorites;
return playlistMeta;
}
private async migrateIndexedDbPlaylistsToSqlite(): Promise<void> {
try {
const electron = this.electronApi;
@@ -366,10 +379,8 @@ export class PlaylistsService {
const playlists = electron
? await electron.dbGetAppPlaylists()
: [];
return (playlists as Playlist[]).map(
({ playlist, items, header, ...rest }) => ({
...(rest as Playlist),
})
return (playlists as Playlist[]).map((playlist) =>
this.toPlaylistMeta(playlist)
);
});
}
@@ -377,11 +388,7 @@ export class PlaylistsService {
return this.runOnIndexedDb(() =>
firstValueFrom(this.dbService.getAll<Playlist>(DbStores.Playlists))
).pipe(
map((data) =>
data.map(({ playlist, items, header, ...rest }) => ({
...(rest as Playlist),
}))
)
map((data) => data.map((playlist) => this.toPlaylistMeta(playlist)))
);
}
@@ -855,15 +862,7 @@ export class PlaylistsService {
map((playlists: Playlist[]) => {
return playlists
.filter((item) => item.autoRefresh)
.map(
({
playlist,
header,
items,
favorites,
...rest
}: Playlist) => rest
);
.map((playlist) => this.toAutoUpdatePlaylistMeta(playlist));
})
);
}
@@ -182,7 +182,7 @@ export class PortalStatusService {
} else {
return 'inactive';
}
} catch (error) {
} catch {
return 'unavailable';
}
}
@@ -135,7 +135,9 @@ export const SettingsStore = signalStore(
showCaptions: store.showCaptions(),
showDashboard: store.showDashboard(),
startupBehavior: store.startupBehavior(),
showExternalPlaybackBar: store.showExternalPlaybackBar!(),
showExternalPlaybackBar:
store.showExternalPlaybackBar?.() ??
DEFAULT_SETTINGS.showExternalPlaybackBar,
theme: store.theme(),
mpvPlayerPath: store.mpvPlayerPath(),
mpvPlayerArguments: store.mpvPlayerArguments(),
@@ -146,20 +148,26 @@ export const SettingsStore = signalStore(
remoteControl: store.remoteControl(),
remoteControlPort: store.remoteControlPort(),
epgUrl: store.epgUrl(),
downloadFolder: store.downloadFolder!(),
recordingFolder: store.recordingFolder!(),
coverSize: store.coverSize!(),
downloadFolder:
store.downloadFolder?.() ?? DEFAULT_SETTINGS.downloadFolder,
recordingFolder:
store.recordingFolder?.() ??
DEFAULT_SETTINGS.recordingFolder,
coverSize: store.coverSize?.() ?? DEFAULT_SETTINGS.coverSize,
preferUploadedEpgOverXtream:
store.preferUploadedEpgOverXtream!(),
store.preferUploadedEpgOverXtream?.() ??
DEFAULT_SETTINGS.preferUploadedEpgOverXtream,
};
},
getDownloadFolder() {
return store.downloadFolder!();
return store.downloadFolder?.() ?? DEFAULT_SETTINGS.downloadFolder;
},
getRecordingFolder() {
return store.recordingFolder!();
return (
store.recordingFolder?.() ?? DEFAULT_SETTINGS.recordingFolder
);
},
getPlayer() {