import React from 'react' import {View} from 'react-native' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {saveBytesToDisk} from '#/lib/media/manip' import {logger} from '#/logger' import {useAgent} from '#/state/session' import * as Toast from '#/view/com/util/Toast' import {atoms as a, useTheme} from '#/alf' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import * as Dialog from '#/components/Dialog' import {Download_Stroke2_Corner0_Rounded as DownloadIcon} from '#/components/icons/Download' import {InlineLinkText} from '#/components/Link' import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' export function ExportCarDialog({ control, }: { control: Dialog.DialogOuterProps['control'] }) { const {_} = useLingui() const t = useTheme() const agent = useAgent() const [loading, setLoading] = React.useState(false) const download = React.useCallback(async () => { if (!agent.session) { return // shouldnt ever happen } try { setLoading(true) const did = agent.session.did const downloadRes = await agent.com.atproto.sync.getRepo({did}) const saveRes = await saveBytesToDisk( 'repo.car', downloadRes.data, downloadRes.headers['content-type'] || 'application/vnd.ipld.car', ) if (saveRes) { Toast.show(_(msg`File saved successfully!`)) } } catch (e) { logger.error('Error occurred while downloading CAR file', {message: e}) Toast.show(_(msg`Error occurred while saving file`), 'xmark') } finally { setLoading(false) control.close() } }, [_, control, agent]) return ( Export My Data Your account repository, containing all public data records, can be downloaded as a "CAR" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately. This feature is in beta. You can read more about repository exports in{' '} this blogpost . ) }