Release 1.1.0: Add Import Audio Files feature

- New Import tab with drag-and-drop support for audio files
- Support for 8 formats: MP3, MP4, WAV, M4A, FLAC, OGG, AAC, WMA
- File metadata display (duration, size, format)
- Editable meeting titles
- Progress tracking with visual indicators
- Smart template selection
- Auto-navigation to Transcription view
- Updated README with BlackHole requirement and Teams config
- Added get_audio_metadata Rust command
- Version bump to 1.1.0
This commit is contained in:
michael.borak
2026-01-21 09:08:56 +01:00
parent 79f509951c
commit a06e473e85
12 changed files with 1041 additions and 171 deletions

View File

@@ -7,6 +7,7 @@ import TranscriptionView from "./components/TranscriptionView";
import Tabs from "./components/Tabs";
import MeetingsView from "./components/MeetingsView";
import HistoryView from "./components/HistoryView";
import Import from "./components/Import";
import ToastContainer, { ToastMessage, ToastType } from "./components/ui/Toast";
export interface PromptTemplate {
@@ -24,8 +25,8 @@ export interface EmailTemplate {
}
function App() {
const [view, setView] = useState<'recorder' | 'settings' | 'transcription' | 'meetings' | 'history'>('recorder');
const [lastTab, setLastTab] = useState<'recorder' | 'transcription' | 'meetings' | 'history'>('recorder');
const [view, setView] = useState<'recorder' | 'settings' | 'transcription' | 'meetings' | 'history' | 'import'>('recorder');
const [lastTab, setLastTab] = useState<'recorder' | 'transcription' | 'meetings' | 'history' | 'import'>('recorder');
// Auto-start recording state to handle "Join & Record" transition
@@ -311,6 +312,14 @@ Thanks!`
}
};
const handleRenameHistory = (id: string, newSubject: string) => {
const newHistory = history.map(item =>
item.id === id ? { ...item, subject: newSubject } : item
);
setHistory(newHistory);
localStorage.setItem('infomaniak_history', JSON.stringify(newHistory));
};
const handleDeleteHistory = (id: string) => {
const newHistory = history.filter(item => item.id !== id);
setHistory(newHistory);
@@ -343,7 +352,7 @@ Thanks!`
</div>
<Tabs
currentTab={view as 'recorder' | 'transcription' | 'meetings' | 'history'}
currentTab={view as 'recorder' | 'transcription' | 'meetings' | 'history' | 'import'}
onTabChange={(t) => setView(t)}
/>
</div>
@@ -410,6 +419,7 @@ Thanks!`
history={history}
onLoad={handleLoadHistory}
onDelete={handleDeleteHistory}
onRename={handleRenameHistory}
/>
)}
@@ -429,6 +439,23 @@ Thanks!`
/>
)}
{view === 'import' && (
<Import
apiKey={apiKey}
productId={productId}
prompts={prompts}
selectedModel={selectedModel}
onSaveToHistory={handleSaveToHistory}
onComplete={() => setView('transcription')}
addToast={addToast}
setTranscription={setTranscription}
setSummary={setSummary}
/>
)}
{view === 'settings' && (