blackajiro_Resonance/HelpModal.ts
Michael Gorini b4862b8aad init
2025-08-29 11:00:21 +02:00

77 lines
4.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { App, Modal } from "obsidian";
export type HelpTopic = 'ffmpeg' | 'whisper' | 'llm' | 'devices' | 'obsidian';
export class HelpModal extends Modal {
private topic: HelpTopic;
constructor(app: App, topic: HelpTopic) {
super(app);
this.topic = topic;
}
onOpen(): void {
const { contentEl } = this;
contentEl.empty();
contentEl.addClass('resonance-modal');
const title = {
ffmpeg: 'Guida installazione FFmpeg',
whisper: 'Guida installazione Whisper.cpp',
llm: 'Guida configurazione LLM (Gemini)',
devices: 'Guida dispositivi audio (FFmpeg)',
obsidian: 'Guida configurazione Obsidian',
}[this.topic];
contentEl.createEl('h2', { text: title });
const body = contentEl.createEl('div', { cls: 'resonance-help' });
const sections = this.getContent(this.topic);
sections.forEach(sec => {
body.createEl('h3', { text: sec.title });
sec.paragraphs.forEach(p => body.createEl('p', { text: p }));
if (sec.code) {
const pre = body.createEl('pre');
const code = pre.createEl('code');
code.innerText = sec.code.trim();
}
});
}
private getContent(topic: HelpTopic): { title: string; paragraphs: string[]; code?: string }[] {
switch (topic) {
case 'ffmpeg':
return [
{ title: 'Cosè FFmpeg', paragraphs: ['Utility usata per acquisire/registrare audio. È richiesta per registrare riunioni.'] },
{ title: 'macOS', paragraphs: ['Installa Homebrew, poi FFmpeg, e rileva il percorso.'], code: 'xcode-select --install\nbrew install ffmpeg' },
{ title: 'Windows', paragraphs: ['Scarica la build statica da ffmpeg.org, estrai e punta a ffmpeg.exe.'], code: 'C:/ffmpeg/bin/ffmpeg.exe' },
{ title: 'Linux', paragraphs: ['Installa dal gestore pacchetti del sistema (apt, yum, pacman).'], code: 'sudo apt install ffmpeg' },
];
case 'whisper':
return [
{ title: 'Cosè whisper.cpp', paragraphs: ['Trascrizione locale. Usa modelli generici multilingua (.bin). Seleziona una lingua nelle impostazioni oppure lascia Automatico.'] },
{ title: 'Repo locale', paragraphs: ['Imposta la cartella root del repo whisper.cpp nelle impostazioni. Il plugin proverà a trovare automaticamente whisper-cli dentro build/bin/.'] },
{ title: 'Compilazione', paragraphs: ['Compila il progetto (make su macOS/Linux o CMake/Visual Studio su Windows).'], code: 'git clone https://github.com/ggerganov/whisper.cpp\ncd whisper.cpp\n# macOS/Linux\nmake -j\n# Windows\ncmake -B build -S .\ncmake --build build --config Release -j' },
{ title: 'Scaricare un modello', paragraphs: ['Usa la voce Modello (preset) nelle impostazioni per scaricare small/medium/large in whisper.cpp/models/. Oppure esegui lo script del repo.'], code: './models/download-ggml-model.sh medium' },
{ title: 'Esecuzione di test', paragraphs: ['Esempio con lingua italiana:'], code: './build/bin/whisper-cli -m ./models/ggml-medium.bin -f ./samples/jfk.wav -l it' },
];
case 'llm':
return [
{ title: 'Google Gemini', paragraphs: ['Crea lAPI Key in Google AI Studio e incollala nelle impostazioni. Scegli il modello (flash/pro/exp).'] },
{ title: 'Privacy', paragraphs: ['Solo la trascrizione testuale viene inviata al servizio per il riassunto.'] },
];
case 'devices':
return [
{ title: 'Selezione dispositivi', paragraphs: ['Clicca Scansiona per popolare i menu di Microfono e Audio di sistema.'] },
{ title: 'Windows (dshow)', paragraphs: ['I nomi appaiono come audio=… Mic / Stereo Mix.'] },
{ title: 'macOS (avfoundation)', paragraphs: ['I dispositivi sono indicizzati. Laudio di sistema può richiedere un dispositivo virtuale (es. BlackHole).'] },
{ title: 'Linux (pulse/alsa)', paragraphs: ['Spesso il mic è default. Laudio di sistema richiede un loopback.'] },
];
case 'obsidian':
return [
{ title: 'Cartella note', paragraphs: ['Imposta la cartella del vault dove salvare le note generate. Se vuoto: root del vault.'] },
{ title: 'Ricaricare il plugin', paragraphs: ['Dopo una build, disattiva/riattiva il plugin o riavvia Obsidian.'] },
];
}
}
}