canti primo tag

This commit is contained in:
David Frassi
2026-05-16 17:24:59 +02:00
commit 0c33fc6fcf
106 changed files with 28210 additions and 0 deletions
+80
View File
@@ -0,0 +1,80 @@
import { Injectable, inject } from '@angular/core';
import { CantiService } from './canti.service';
import { MyCantiService } from './my-canti.service';
@Injectable({
providedIn: 'root'
})
export class MediaSessionService {
private cantiService = inject(CantiService);
private myCantiService = inject(MyCantiService);
public updateMetadata(cantoId: string) {
if (!('mediaSession' in navigator)) return;
let canto = this.cantiService.getCantoById(cantoId);
if (!canto) {
canto = this.myCantiService.myCanti().find(c => c.id === cantoId);
}
if (!canto) return;
const thumb = this.cantiService.getYoutubeThumb(canto.link_youtube) || 'assets/icons/icon-512x512.png';
if (!('MediaMetadata' in window)) return;
try {
(navigator as any).mediaSession.metadata = new (window as any).MediaMetadata({
title: canto.titolo,
artist: canto.autore || 'Canti Cristiani',
album: 'Canti Cristiani',
artwork: [
{ src: thumb, sizes: '96x96', type: 'image/jpeg' },
{ src: thumb, sizes: '128x128', type: 'image/jpeg' },
{ src: thumb, sizes: '192x192', type: 'image/jpeg' },
{ src: thumb, sizes: '256x256', type: 'image/jpeg' },
{ src: thumb, sizes: '384x384', type: 'image/jpeg' },
{ src: thumb, sizes: '512x512', type: 'image/jpeg' },
]
});
} catch (e) {
console.error('Error updating Media Session metadata', e);
}
}
public setPlaybackState(state: 'playing' | 'paused' | 'none') {
if (!('mediaSession' in navigator)) return;
(navigator as any).mediaSession.playbackState = state;
}
public initActionHandlers(callbacks: {
play: () => void,
pause: () => void,
next?: () => void,
prev?: () => void,
seekto?: (time: number) => void
}) {
if (!('mediaSession' in navigator)) return;
const ms = (navigator as any).mediaSession;
ms.setActionHandler('play', callbacks.play);
ms.setActionHandler('pause', callbacks.pause);
if (callbacks.next) {
ms.setActionHandler('nexttrack', callbacks.next);
}
if (callbacks.prev) {
ms.setActionHandler('previoustrack', callbacks.prev);
}
try {
if (callbacks.seekto) {
ms.setActionHandler('seekto', (details: any) => {
if (details.seekTime !== undefined && callbacks.seekto) {
callbacks.seekto(details.seekTime);
}
});
}
} catch (e) {}
}
}