From 67d546ed16a1f532a6135966e4f7159a5b9e4b96 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 13 Oct 2022 10:48:58 -0400 Subject: [PATCH] added syncing flag --- scripts/upload_pinata.js | 73 ----------------------------------- src/@types/global.d.ts | 1 + src/components/NewBlog.tsx | 3 +- src/components/Profile.tsx | 3 +- src/components/SyncWorker.tsx | 35 ++--------------- src/slices/dbSlice.ts | 6 ++- src/utils/config.ts | 2 +- 7 files changed, 14 insertions(+), 109 deletions(-) delete mode 100644 scripts/upload_pinata.js diff --git a/scripts/upload_pinata.js b/scripts/upload_pinata.js deleted file mode 100644 index 565b9c2..0000000 --- a/scripts/upload_pinata.js +++ /dev/null @@ -1,73 +0,0 @@ -const fs = require('fs-extra'); -const axios = require('axios'); -const FormData = require('form-data'); - -const buildPath = "./build"; -let cssFilename = ""; - -// move css file -const cssFiles = fs.readdirSync(buildPath + "/static/css"); -for (let i = 0; i < cssFiles.length; i++) { - const filename = cssFiles[i]; - if (filename.substring(filename.length - 4) === ".css") { - cssFilename = filename; - fs.moveSync(buildPath + "/static/css/" + filename, buildPath + "/" + filename); - break; - } -} - -// remove js map file -const files = fs.readdirSync(buildPath); -for (let i = 0; i < files.length; i++) { - const filename = files[i]; - if (filename.substring(filename.length - 4) === ".map") { - fs.removeSync(buildPath + "/" + filename); - } - else if (filename.substring(filename.length - 4) === ".css") { - cssFilename = filename; - } -} - -const pinata = { - apiKey: '74b148e5d7e7f830d57e', - apiSecret: 'a0eee26f43e71af17cc83a8d46d877581dbfe11dba6ef7287dcc28781241bc37', - jwt: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySW5mb3JtYXRpb24iOnsiaWQiOiJhNDBlNzQwOS03Mzc1LTQxNmUtOTY3Zi1mNTdmNmQyZjM5YWMiLCJlbWFpbCI6Imxlb2d1c2hpa2VuMDExMEBnbWFpbC5jb20iLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwicGluX3BvbGljeSI6eyJyZWdpb25zIjpbeyJpZCI6IkZSQTEiLCJkZXNpcmVkUmVwbGljYXRpb25Db3VudCI6MX0seyJpZCI6Ik5ZQzEiLCJkZXNpcmVkUmVwbGljYXRpb25Db3VudCI6MX1dLCJ2ZXJzaW9uIjoxfSwibWZhX2VuYWJsZWQiOmZhbHNlLCJzdGF0dXMiOiJBQ1RJVkUifSwiYXV0aGVudGljYXRpb25UeXBlIjoic2NvcGVkS2V5Iiwic2NvcGVkS2V5S2V5IjoiNzRiMTQ4ZTVkN2U3ZjgzMGQ1N2UiLCJzY29wZWRLZXlTZWNyZXQiOiJhMGVlZTI2ZjQzZTcxYWYxN2NjODNhOGQ0NmQ4Nzc1ODFkYmZlMTFkYmE2ZWY3Mjg3ZGNjMjg3ODEyNDFiYzM3IiwiaWF0IjoxNjY0MzA2OTk5fQ.vtp_-dfhkZd1WCj1up0-LLljXsTB21gfQBczI2zOJug' -}; - -// update index.html file -let html = fs.readFileSync(buildPath + "/index.html").toString(); -html = html.replaceAll("static/css/" + cssFilename, cssFilename); -fs.writeFileSync(buildPath + "/index.html", html); - -// upload to pinata -const api = axios.create({ - headers: { - common: { - pinata_api_key: pinata.apiKey, - pinata_secret_api_key: pinata.apiSecret, - }, - }, -}) - -const data = new FormData() -files.forEach((file) => { - if (file === "static" || file.substring(file.length - 4) === ".map") { - return; - } - - data.append(`file`, fs.createReadStream("./build/" + file), { - filepath: "./build/" + file, - }) -}) - -api.post('https://api.pinata.cloud/pinning/pinFileToIPFS', data, { - maxContentLength: 'Infinity', - maxBodyLength: 'Infinity', - headers: { - 'Content-Type': `multipart/form-data; boundary=${data._boundary}`, - }, -}).then(res => { - console.log(res.data); -}, err => { - console.error(err); -}); diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts index 0782323..37446f7 100644 --- a/src/@types/global.d.ts +++ b/src/@types/global.d.ts @@ -30,4 +30,5 @@ interface IDatabase { ipnsData: Number[]; Blogs: IBlog[]; Users: { [key: string]: IUser; }; + syncedVersion: number; } diff --git a/src/components/NewBlog.tsx b/src/components/NewBlog.tsx index 1219a7b..ef5bc03 100644 --- a/src/components/NewBlog.tsx +++ b/src/components/NewBlog.tsx @@ -1,7 +1,7 @@ import { Button, TextField } from "@mui/material"; import React, { useState, useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { createBlog } from "slices/dbSlice"; +import { createBlog, setSyncFlag } from "slices/dbSlice"; import { AppDispatch } from "slices/store"; import { NotificationManager } from "./Notification"; import { v4 as uuidv4 } from "uuid"; @@ -78,6 +78,7 @@ const NewBlog = (props: INewBlog) => { ); navigate(`/main/${ipnsCid}`); dispatch(setLoading(false)); + dispatch(setSyncFlag()); }) .catch((rejectedValueOrSerializedError) => { // handle error here diff --git a/src/components/Profile.tsx b/src/components/Profile.tsx index 94bd3ed..9b69870 100644 --- a/src/components/Profile.tsx +++ b/src/components/Profile.tsx @@ -1,7 +1,7 @@ import { Button, TextField } from "@mui/material"; import React, { useState, useEffect } from "react"; import { useDispatch, useSelector } from "react-redux"; -import { createUser, uploadImage } from "slices/dbSlice"; +import { createUser, setSyncFlag, uploadImage } from "slices/dbSlice"; import { AppDispatch } from "slices/store"; import { NotificationManager } from "./Notification"; import { useNavigate, useParams } from "react-router-dom"; @@ -74,6 +74,7 @@ const Profile = (props: IProfile) => { NotificationManager.success("", "Saved"); navigate(`/main/${ipnsCid}`); dispatch(setLoading(false)); + dispatch(setSyncFlag()); }) .catch((rejectedValueOrSerializedError) => { // handle error here diff --git a/src/components/SyncWorker.tsx b/src/components/SyncWorker.tsx index 6d72392..ce1c183 100644 --- a/src/components/SyncWorker.tsx +++ b/src/components/SyncWorker.tsx @@ -19,47 +19,18 @@ const SyncWorker = (props: ISyncWorker) => { const isSyncing = useSelector( (state) => state.viewState.syncing ); - const account = useSelector( - (state) => state.web3.selectedAddress + const syncedVersion = useSelector( + (state) => state.db.syncedVersion ); const [progress, setProgress] = useState(0); const {ipnsCid} = useParams(); const ipnsData = useIPNSData(); - // useEffect(() => { - // const lastSyncNumber = - // getStorageItem(config.LAST_SYNC_NUMBER + account, 0) || 0; - // dispatch(resetFromLocalStorage({ lastSyncNumber, account })); - // sync(); - // }, [account]); - - // useEffect(() => { - // (async function() { - // if (!account) { - // return; - // } - - // let ipnsData = (getStorageItem(config.ACCOUNT_IPNS + account, []) || []) as number[]; - // if (!ipnsData.length) { - // ipnsData = await fetchIPNS(account); - // setStorageItem(config.ACCOUNT_IPNS + account, ipnsData) - // } - - // dispatch(setIPNSData(ipnsData)); - - // // redirect page - // const name = await Name.from(new Uint8Array(ipnsData)); - // console.log("Reditect url: ", `/main/${name.toString()}`); - // navigate(`/main/${name.toString()}`); - - // })(); - // }, [account]); - useEffect(() => { sync(); const intervalId = setInterval(() => sync(), 60000); return () => clearInterval(intervalId); - }, [ipnsCid, ipnsData]); + }, [ipnsCid, ipnsData, syncedVersion]); const sync = async () => { if (!ipnsCid || ipnsCid === "undefined") { diff --git a/src/slices/dbSlice.ts b/src/slices/dbSlice.ts index f838251..fdf0d03 100644 --- a/src/slices/dbSlice.ts +++ b/src/slices/dbSlice.ts @@ -11,6 +11,7 @@ const client = new Web3Storage({ const initialState = { Initialized: false, + syncedVersion: 0, ipnsData: [] as Number[], Blogs: [] as IBlog[], Users: {} as { [key: string]: IUser }, @@ -151,6 +152,9 @@ export const dbSlice = createSlice({ state.Blogs = blogs; state.Users = users; state.Initialized = true; + }, + setSyncFlag: (state: IDatabase, action: PayloadAction) => { + state.syncedVersion = state.syncedVersion + 1; } }, extraReducers: (builder) => { @@ -161,6 +165,6 @@ export const dbSlice = createSlice({ }, }); -export const { resetFromLocalStorage } = dbSlice.actions; +export const { resetFromLocalStorage, setSyncFlag } = dbSlice.actions; export default dbSlice.reducer; diff --git a/src/utils/config.ts b/src/utils/config.ts index b89ae0b..08d8c8b 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -6,7 +6,7 @@ const config = { LAST_SYNC_RECORD: "LAST_SYNC_RECORD_", IPNS_DATA: "IPNS_DATA_", VERSION_LABEL: "VERSION", - version: "#9", + version: "#10", RSS_COUNT: 10 }; -- 2.51.2