From 9be889413c41c6d66a235437b3c4392154365007 Mon Sep 17 00:00:00 2001 From: kawamataryo Date: Wed, 6 Nov 2024 19:15:08 +0900 Subject: [PATCH] [fix] use plasmohq/storage --- package-lock.json | 18 ++++++++--------- package.json | 4 ++-- sky-follower-bridge-src.zip | Bin 0 -> 41565 bytes src/lib/hooks/useBskyUserManager.ts | 28 +++++++++++++++----------- src/lib/hooks/useRetrieveBskyUsers.ts | 16 ++++++++++++--- src/options.tsx | 28 ++------------------------ 6 files changed, 42 insertions(+), 52 deletions(-) create mode 100644 sky-follower-bridge-src.zip diff --git a/package-lock.json b/package-lock.json index 1c43697..4b72923 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { "name": "sky-follower-bridge", - "version": "0.9.8", + "version": "1.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "sky-follower-bridge", - "version": "0.9.8", + "version": "1.0.1", "dependencies": { "@atproto/api": "^0.13.12", "@changesets/cli": "^2.27.1", "@plasmohq/messaging": "^0.6.2", - "@plasmohq/storage": "^1.9.1", + "@plasmohq/storage": "^1.12.0", "framer-motion": "^11.11.11", "plasmo": "^0.84.2", "react": "18.2.0", @@ -7566,9 +7566,9 @@ } }, "node_modules/@plasmohq/storage": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@plasmohq/storage/-/storage-1.9.1.tgz", - "integrity": "sha512-65UXCZEWUA0aHhho2Mu5igrP/zdxkvPsT5N3rIypOYh0prn6Xk5HD0dt7q0mo8hb16QUUWDUL7OUPH4IDeDsIg==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@plasmohq/storage/-/storage-1.12.0.tgz", + "integrity": "sha512-LoCyO0PXl609ee8QKVEwVpkTyD/8WjYQhd0sxFomLxbdxsZC0LD4n8nv4nSegP5X8lYQBQnR/LMq4ZXoQh87wA==", "dependencies": { "pify": "6.1.0" }, @@ -28126,9 +28126,9 @@ } }, "@plasmohq/storage": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@plasmohq/storage/-/storage-1.9.1.tgz", - "integrity": "sha512-65UXCZEWUA0aHhho2Mu5igrP/zdxkvPsT5N3rIypOYh0prn6Xk5HD0dt7q0mo8hb16QUUWDUL7OUPH4IDeDsIg==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@plasmohq/storage/-/storage-1.12.0.tgz", + "integrity": "sha512-LoCyO0PXl609ee8QKVEwVpkTyD/8WjYQhd0sxFomLxbdxsZC0LD4n8nv4nSegP5X8lYQBQnR/LMq4ZXoQh87wA==", "requires": { "pify": "6.1.0" }, diff --git a/package.json b/package.json index 87d2592..10bf28c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "sky-follower-bridge", "displayName": "Sky Follower Bridge", - "version": "1.0.0", + "version": "1.0.1", "description": "Instantly find and follow the same users from your Twitter follows on Bluesky.", "author": "kawamataryou", "scripts": { @@ -22,7 +22,7 @@ "@atproto/api": "^0.13.12", "@changesets/cli": "^2.27.1", "@plasmohq/messaging": "^0.6.2", - "@plasmohq/storage": "^1.9.1", + "@plasmohq/storage": "^1.12.0", "framer-motion": "^11.11.11", "plasmo": "^0.84.2", "react": "18.2.0", diff --git a/sky-follower-bridge-src.zip b/sky-follower-bridge-src.zip new file mode 100644 index 0000000000000000000000000000000000000000..b7a0f5804845de3ad47690311adedac3ea577a03 GIT binary patch literal 41565 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 literal 0 HcmV?d00001 diff --git a/src/lib/hooks/useBskyUserManager.ts b/src/lib/hooks/useBskyUserManager.ts index 3048703..a063f29 100644 --- a/src/lib/hooks/useBskyUserManager.ts +++ b/src/lib/hooks/useBskyUserManager.ts @@ -1,3 +1,5 @@ +import { useStorage } from "@plasmohq/storage/hook"; +import { Storage } from "@plasmohq/storage"; import React from "react"; import { BskyServiceWorkerClient } from "~lib/bskyServiceWorkerClient"; import { @@ -9,13 +11,15 @@ import { import { wait } from "~lib/utils"; import type { BskyUser, MatchType } from "~types"; -export const useBskyUserManager = ({ - users, - setUsers, -}: { - users: BskyUser[]; - setUsers: React.Dispatch>; -}) => { +export const useBskyUserManager = () => { + const [users, setUsers] = useStorage({ + key: STORAGE_KEYS.DETECTED_BSKY_USERS, + instance: new Storage({ + area: "local", + }), + }, + (v) => (v === undefined ? [] : v) + ); const bskyClient = React.useRef(null); const [actionMode, setActionMode] = React.useState< (typeof ACTION_MODE)[keyof typeof ACTION_MODE] @@ -40,7 +44,7 @@ export const useBskyUserManager = ({ const result = await bskyClient.current.follow(user.did); resultUri = result.uri; } - setUsers((prev) => + await setUsers((prev) => prev.map((prevUser) => { if (prevUser.did === user.did) { return { @@ -62,7 +66,7 @@ export const useBskyUserManager = ({ const result = await bskyClient.current.block(user.did); resultUri = result.uri; } - setUsers((prev) => + await setUsers((prev) => prev.map((prevUser) => { if (prevUser.did === user.did) { return { @@ -125,7 +129,7 @@ export const useBskyUserManager = ({ } const result = await bskyClient.current.follow(user.did); resultUri = result.uri; - setUsers((prev) => + await setUsers((prev) => prev.map((prevUser) => { if (prevUser.did === user.did) { return { @@ -149,7 +153,7 @@ export const useBskyUserManager = ({ const result = await bskyClient.current.block(user.did); resultUri = result.uri; } - setUsers((prev) => + await setUsers((prev) => prev.map((prevUser) => { if (prevUser.did === user.did) { return { @@ -175,7 +179,7 @@ export const useBskyUserManager = ({ bskyClient.current = new BskyServiceWorkerClient(session); setActionMode( MESSAGE_NAME_TO_ACTION_MODE_MAP[ - result[STORAGE_KEYS.BSKY_MESSAGE_NAME] + result[STORAGE_KEYS.BSKY_MESSAGE_NAME] ], ); }, diff --git a/src/lib/hooks/useRetrieveBskyUsers.ts b/src/lib/hooks/useRetrieveBskyUsers.ts index f171b21..88c6671 100644 --- a/src/lib/hooks/useRetrieveBskyUsers.ts +++ b/src/lib/hooks/useRetrieveBskyUsers.ts @@ -1,4 +1,6 @@ import type { AtpSessionData } from "@atproto/api"; +import { useStorage } from "@plasmohq/storage/hook"; +import { Storage } from "@plasmohq/storage"; import React from "react"; import { BskyServiceWorkerClient } from "~lib/bskyServiceWorkerClient"; import { @@ -39,7 +41,14 @@ export const useRetrieveBskyUsers = () => { const [detectedXUsers, setDetectedXUsers] = React.useState< ReturnType >([]); - const [users, setUsers] = React.useState([]); + const [users, setUsers] = useStorage({ + key: STORAGE_KEYS.DETECTED_BSKY_USERS, + instance: new Storage({ + area: "local", + }) + }, + (v) => (v === undefined ? [] : v) + ); const [loading, setLoading] = React.useState(true); const [errorMessage, setErrorMessage] = React.useState(""); const [isBottomReached, setIsBottomReached] = React.useState(false); @@ -62,7 +71,7 @@ export const useRetrieveBskyUsers = () => { userData, }); if (searchResult) { - setUsers((prev) => { + await setUsers((prev) => { if (prev.some((u) => u.did === searchResult.bskyProfile.did)) { return prev; } @@ -85,7 +94,7 @@ export const useRetrieveBskyUsers = () => { } } }, - [], + [setUsers], ); const abortControllerRef = React.useRef(null); @@ -170,6 +179,7 @@ export const useRetrieveBskyUsers = () => { }, ); setLoading(true); + await setUsers([]); showModal(); }, []); diff --git a/src/options.tsx b/src/options.tsx index a1d800a..66403ce 100644 --- a/src/options.tsx +++ b/src/options.tsx @@ -1,13 +1,11 @@ -import { useEffect, useState } from "react"; import UserCard from "~lib/components/UserCard"; import { useBskyUserManager } from "~lib/hooks/useBskyUserManager"; -import type { BskyUser } from "~lib/hooks/useRetrieveBskyUsers"; import "./style.css"; import Sidebar from "~lib/components/Sidebar"; const Option = () => { - const [users, setUsers] = useState([]); const { + users, filteredUsers, matchTypeFilter, changeMatchTypeFilter, @@ -15,29 +13,7 @@ const Option = () => { actionMode, actionAll, matchTypeStats, - } = useBskyUserManager({ - users, - setUsers, - }); - useEffect(() => { - chrome.storage.local.get("users", (result) => { - setUsers(JSON.parse(result.users || "[]")); - }); - - const getUsers = () => { - chrome.storage.local.get("users", (result) => { - const _users = JSON.parse(result.users || "[]") as BskyUser[]; - setUsers((prev) => { - const newUsers = _users.filter( - (u) => !prev.some((p) => p.did === u.did), - ); - return [...prev, ...newUsers]; - }); - }); - }; - const interval = setInterval(getUsers, 2000); - return () => clearInterval(interval); - }, []); + } = useBskyUserManager(); const handleActionAll = async () => { if (