feat: decoupling GM_Cookie utility class

This commit is contained in:
Liam Chan 2023-03-22 15:45:04 +08:00
parent b9a667a61d
commit fec81b11a3
4 changed files with 64 additions and 60 deletions

View File

@ -12,15 +12,20 @@ import Menu from '@mui/material/Menu';
import MenuItem from '@mui/material/MenuItem'; import MenuItem from '@mui/material/MenuItem';
import Snackbar from '@mui/material/Snackbar'; import Snackbar from '@mui/material/Snackbar';
import { useState } from 'react'; import { useState } from 'react';
import useToast from './hooks/useToast'; import useToast from './hooks/use-toast';
import {
deleteCookie as gmDeleteCookie,
getCookie as gmGetCookie,
setCookie as gmSetCookie,
} from './utils/gm-cookie';
const Z_INDEX_MAX = 2 ** 31 - 1; const MAX_Z_INDEX = 2 ** 31 - 1;
const CustomButton = styled(IconButton)` const ToolButton = styled(IconButton)`
position: fixed; position: fixed;
right: 20px; right: 20px;
bottom: 20px; bottom: 20px;
z-index: ${Z_INDEX_MAX - 1}; z-index: ${MAX_Z_INDEX};
opacity: 0.75; opacity: 0.75;
transition: all 225ms linear; transition: all 225ms linear;
background-color: #c2e0ff; background-color: #c2e0ff;
@ -30,8 +35,8 @@ const CustomButton = styled(IconButton)`
} }
`; `;
const CustomMenu = styled(Menu)` const ToolMenu = styled(Menu)`
z-index: ${Z_INDEX_MAX}; z-index: ${MAX_Z_INDEX};
`; `;
const App = () => { const App = () => {
@ -57,49 +62,9 @@ const App = () => {
GM_setClipboard(text); GM_setClipboard(text);
}; };
const getCookie = () =>
new Promise<TampermonkeyBeta.Cookie[]>((resolve, reject) => {
GM_cookie('list', {}, (cookie, error) => {
if (error) {
reject(error);
} else {
resolve(cookie);
}
});
});
const setCookie = (cookieObj: TampermonkeyBeta.Cookie) =>
new Promise<TampermonkeyBeta.Cookie[]>((resolve, reject) => {
GM_cookie('set', cookieObj, (cookie, error) => {
if (error) {
reject(error);
} else {
resolve(cookie);
}
});
});
const deleteCookie = async () => {
const currentCookie = await getCookie();
if (currentCookie.length === 0) {
return;
}
return new Promise((resolve, reject) => {
currentCookie.forEach((cookieRecord) => {
GM_cookie('delete', { name: cookieRecord.name }, (cookie, error) => {
if (error) {
reject(error);
} else {
resolve(cookie);
}
});
});
});
};
const getSession = async () => { const getSession = async () => {
try { try {
const cookie = await getCookie(); const cookie = await gmGetCookie();
const exportSessionData = JSON.stringify(cookie); const exportSessionData = JSON.stringify(cookie);
copyToClipboard(exportSessionData); copyToClipboard(exportSessionData);
handleToastOpen('Session 数据已复制到剪贴板', 'success'); handleToastOpen('Session 数据已复制到剪贴板', 'success');
@ -114,7 +79,7 @@ const App = () => {
prompt('在此处粘贴你的 Session 数据', '[{}]') || '[{}]'; prompt('在此处粘贴你的 Session 数据', '[{}]') || '[{}]';
const cookie = JSON.parse(importSessionData) as TampermonkeyBeta.Cookie[]; const cookie = JSON.parse(importSessionData) as TampermonkeyBeta.Cookie[];
cookie.forEach(async (item) => { cookie.forEach(async (item) => {
await setCookie(item); await gmSetCookie(item);
}); });
handleToastOpen('Session 数据已导入', 'success'); handleToastOpen('Session 数据已导入', 'success');
} catch (error) { } catch (error) {
@ -124,7 +89,7 @@ const App = () => {
const deleteSession = async () => { const deleteSession = async () => {
try { try {
await deleteCookie(); await gmDeleteCookie();
handleToastOpen('Session 数据已删除', 'success'); handleToastOpen('Session 数据已删除', 'success');
} catch (error) { } catch (error) {
handleToastOpen('删除 Cookie 失败', 'error'); handleToastOpen('删除 Cookie 失败', 'error');
@ -148,8 +113,7 @@ const App = () => {
return ( return (
<> <>
{/* 工具按钮 */} <ToolButton
<CustomButton
color="primary" color="primary"
id="custom-button" id="custom-button"
aria-controls={menuOpen ? 'custom-menu' : undefined} aria-controls={menuOpen ? 'custom-menu' : undefined}
@ -158,10 +122,9 @@ const App = () => {
onClick={handleMenuOpen} onClick={handleMenuOpen}
> >
<AutoFixHighIcon /> <AutoFixHighIcon />
</CustomButton> </ToolButton>
{/* 工具菜单 */} <ToolMenu
<CustomMenu
id="custom-menu" id="custom-menu"
anchorEl={anchorEl} anchorEl={anchorEl}
open={menuOpen} open={menuOpen}
@ -192,9 +155,8 @@ const App = () => {
</ListItemIcon> </ListItemIcon>
<ListItemText> Session </ListItemText> <ListItemText> Session </ListItemText>
</MenuItem> </MenuItem>
</CustomMenu> </ToolMenu>
{/* 提示 */}
<Snackbar <Snackbar
anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }} anchorOrigin={{ vertical: 'bottom', horizontal: 'center' }}
open={toastOpen} open={toastOpen}

41
src/utils/gm-cookie.ts Normal file
View File

@ -0,0 +1,41 @@
const getCookie = () =>
new Promise<TampermonkeyBeta.Cookie[]>((resolve, reject) => {
GM_cookie('list', {}, (cookie, error) => {
if (error) {
reject(error);
} else {
resolve(cookie);
}
});
});
const setCookie = (cookieObj: TampermonkeyBeta.Cookie) =>
new Promise<TampermonkeyBeta.Cookie[]>((resolve, reject) => {
GM_cookie('set', cookieObj, (cookie, error) => {
if (error) {
reject(error);
} else {
resolve(cookie);
}
});
});
const deleteCookie = async () => {
const currentCookie = await getCookie();
if (currentCookie.length === 0) {
return [];
}
return new Promise<TampermonkeyBeta.Cookie[]>((resolve, reject) => {
currentCookie.forEach((cookieRecord) => {
GM_cookie('delete', { name: cookieRecord.name }, (cookie, error) => {
if (error) {
reject(error);
} else {
resolve(cookie);
}
});
});
});
};
export { getCookie, setCookie, deleteCookie };

View File

@ -9,14 +9,15 @@ export default defineConfig({
monkey({ monkey({
entry: 'src/main.tsx', entry: 'src/main.tsx',
userscript: { userscript: {
name: 'Session Magician', name: 'Cookie Magician',
namespace: 'https://www.imbytecat.com/', namespace: 'https://www.imbytecat.com/',
icon: 'https://vitejs.dev/logo.svg', icon: 'https://vitejs.dev/logo.svg',
version: '3.1.0', version: '3.1.2',
description: 'Session Magician & Session Tools & Export/Import Sessions', description: 'Cookie Magician & Cookie Tools & Export/Import Cookies',
author: 'imbytecat', author: 'imbytecat',
match: ['*://*/*'], match: ['*://*/*'],
grant: ['GM_registerMenuCommand', 'GM_setClipboard', 'GM_notification'], grant: ['GM_setClipboard'],
license: 'GPL-3.0-or-later',
$extra: { $extra: {
grant: ['GM_cookie'], grant: ['GM_cookie'],
}, },