canti primo tag
This commit is contained in:
@@ -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) {}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user