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
+84
View File
@@ -0,0 +1,84 @@
import { Injectable, signal, inject } from '@angular/core';
import { Storage } from '@ionic/storage-angular';
import { Canto, CantiService } from './canti.service';
import { ToastController } from '@ionic/angular';
@Injectable({
providedIn: 'root'
})
export class MyCantiService {
private storage = inject(Storage);
private cantiService = inject(CantiService);
private toastController = inject(ToastController);
private _storage: Storage | null = null;
public myCanti = signal<Canto[]>([]);
constructor() {
this.init();
}
async init() {
this._storage = this.cantiService.getStorage();
if (!this._storage) {
// If CantiService hasn't initialized storage yet, wait a bit
setTimeout(() => this.init(), 500);
return;
}
const saved = await this._storage.get('my-canti');
if (saved) {
this.myCanti.set(saved);
}
}
async saveCanto(canto: Partial<Canto>) {
const current = this.myCanti();
const newCanto: Canto = {
id: `my_${Date.now()}`,
id_canti: Date.now(), // Fake ID for internal logic
titolo: canto.titolo || 'Senza Titolo',
testo: canto.testo || '',
accordi: canto.accordi,
autore: canto.autore,
link_youtube: canto.link_youtube,
id_momenti: canto.id_momenti || []
};
const updated = [...current, newCanto];
this.myCanti.set(updated);
await this._storage?.set('my-canti', updated);
const toast = await this.toastController.create({
message: 'Canto salvato nei "Miei Canti"!',
duration: 2000,
color: 'success'
});
toast.present();
}
async deleteCanto(id: string) {
const updated = this.myCanti().filter(c => c.id !== id);
this.myCanti.set(updated);
await this._storage?.set('my-canti', updated);
}
async sendAllMyCanti() {
const data = {
version: new Date().toISOString(),
canti: this.myCanti()
};
const body = JSON.stringify(data, null, 2);
const subject = `Proposta Collection Canti: ${this.myCanti().length} brani`;
const mailtoUrl = `mailto:frassidavid@gmail.com?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;
window.location.href = mailtoUrl;
const toast = await this.toastController.create({
message: 'Email generata con il JSON dei tuoi canti.',
duration: 3000,
color: 'secondary'
});
toast.present();
}
}