This repository has been archived on 2025-07-31. You can view files and clone it, but cannot push or open issues or pull requests.
Files
terminally-online/src/utilities/meme.ts
2023-07-26 16:10:45 +03:00

55 lines
1.6 KiB
TypeScript

import { NavigationProp } from '@react-navigation/native';
import { Dirs, FileSystem } from 'react-native-file-access';
import { extension } from 'react-native-mime-types';
import Share from 'react-native-share';
import Clipboard from '@react-native-clipboard/clipboard';
import { Meme } from '../database';
import { ROUTE, RootStackParamList } from '../types';
import { noOp } from './constants';
const favoriteMeme = (realm: Realm, meme: Meme) => {
realm.write(() => {
meme.isFavorite = !meme.isFavorite;
});
};
const shareMeme = async (meme: Meme) => {
const fileExtension = extension(meme.mimeType) as string;
const cacheUri = `${Dirs.CacheDir}/${meme.id.toHexString()}.${fileExtension}`;
await FileSystem.cp(meme.uri, cacheUri);
await Share.open({
url: `file://${cacheUri}`,
type: meme.mimeType,
failOnCancel: false,
});
};
const copyMeme = async (meme: Meme) => {
const exists = await FileSystem.exists(meme.uri);
if (!exists) throw new Error('File does not exist');
Clipboard.setURI(meme.uri);
};
const editMeme = (
navigation: NavigationProp<RootStackParamList>,
meme: Meme,
) => {
navigation.navigate(ROUTE.EDIT_MEME, { id: meme.id.toHexString() });
};
const deleteMeme = async (realm: Realm, meme: Meme) => {
await FileSystem.unlink(meme.uri).catch(noOp);
realm.write(() => {
for (const tag of meme.tags) {
tag.dateModified = new Date();
tag.memes.slice(tag.memes.indexOf(meme), 1);
tag.memesLength -= 1;
}
realm.delete(meme);
});
};
export { favoriteMeme, shareMeme, copyMeme, editMeme, deleteMeme };