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:
33
src/App.tsx
33
src/App.tsx
@@ -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' && (
|
||||
|
||||
Reference in New Issue
Block a user