Feat : import session into auto firefox
This commit is contained in:
@@ -46,6 +46,8 @@ const EVENT_STYLES: Record<AgentEvent, EventStyle> = {
|
||||
'fullscreen.failed': { icon: '⛶', tone: 'warn' },
|
||||
'browser.opened': { icon: '⊞', tone: 'info' },
|
||||
'browser.closed': { icon: '⊟', tone: 'offline' },
|
||||
'browser.imported': { icon: '⇄', tone: 'ok' },
|
||||
'browser.importFailed': { icon: '⇄', tone: 'warn' },
|
||||
'preset.applied': { icon: '≡', tone: 'ok' },
|
||||
'preset.failed': { icon: '≡', tone: 'warn' },
|
||||
'config.changed': { icon: '⚙', tone: 'info' },
|
||||
|
||||
@@ -6,6 +6,7 @@ import type {
|
||||
PresetApplyResult,
|
||||
RecordingPreset,
|
||||
RecordingSettings,
|
||||
SessionImportResult,
|
||||
StreamState,
|
||||
WatchSettings,
|
||||
WatchTarget,
|
||||
@@ -85,6 +86,8 @@ export function AgentSettings({ agent, targets, onClose, onCommand, notify }: Pr
|
||||
const [recording, setRecording] = useState<RecordingSettings>(agent.recording);
|
||||
const [presetResult, setPresetResult] = useState<PresetApplyResult | null>(null);
|
||||
const [applyingPreset, setApplyingPreset] = useState(false);
|
||||
const [importResult, setImportResult] = useState<SessionImportResult | null>(null);
|
||||
const [importingSession, setImportingSession] = useState(false);
|
||||
|
||||
const preset = findRecordingPreset(recording.presetId) ?? RECORDING_PRESETS[0]!;
|
||||
const encoderInfo = RECORDING_ENCODERS[recording.encoder];
|
||||
@@ -127,6 +130,25 @@ export function AgentSettings({ agent, targets, onClose, onCommand, notify }: Pr
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Copie les cookies du Firefox personnel dans le profil piloté, pour que la
|
||||
* capture démarre déjà connectée. Ferme au passage l'instance pilotée si
|
||||
* elle tournait — la prochaine capture la relance avec les cookies neufs.
|
||||
*/
|
||||
async function importSession() {
|
||||
setImportingSession(true);
|
||||
setImportResult(null);
|
||||
try {
|
||||
const { data } = await api.command(agent.id, 'browser.importSession');
|
||||
setImportResult(data as SessionImportResult);
|
||||
notify('Session importée');
|
||||
} catch (err) {
|
||||
notify(err instanceof Error ? err.message : "Import de session impossible", 'error');
|
||||
} finally {
|
||||
setImportingSession(false);
|
||||
}
|
||||
}
|
||||
|
||||
async function save() {
|
||||
setBusy(true);
|
||||
try {
|
||||
@@ -441,6 +463,33 @@ export function AgentSettings({ agent, targets, onClose, onCommand, notify }: Pr
|
||||
</label>
|
||||
)}
|
||||
|
||||
{browser.mode === 'bidi' && (
|
||||
<div className="row" style={{ alignItems: 'flex-start' }}>
|
||||
<div className="field grow">
|
||||
<button
|
||||
className="ghost"
|
||||
disabled={importingSession}
|
||||
onClick={() => void importSession()}
|
||||
>
|
||||
{importingSession ? 'Import…' : 'Importer les cookies du Firefox personnel'}
|
||||
</button>
|
||||
<span className="muted small">
|
||||
Le profil piloté part vierge, donc déconnecté des sites où tu es connecté
|
||||
ailleurs. Cette action copie les cookies de session (et rien d'autre) depuis
|
||||
ton Firefox habituel, en lecture seule — rien n'y est jamais écrit. Connecte-toi
|
||||
d'abord dans ce Firefox-là si ce n'est pas déjà fait. L'instance pilotée en
|
||||
cours, s'il y en a une, est fermée : la prochaine capture repart connectée.
|
||||
</span>
|
||||
{importResult && (
|
||||
<p className="small">
|
||||
Copié depuis <code>{importResult.sourceProfile}</code> :{' '}
|
||||
{importResult.copied.join(', ')}
|
||||
</p>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className="row">
|
||||
<label className="field grow">
|
||||
<span>Délai avant le plein écran (s)</span>
|
||||
|
||||
Reference in New Issue
Block a user