refactor: og and msg history mark

This commit is contained in:
Tristan Yang
2023-03-14 22:01:18 +08:00
parent b7882fb890
commit 546898556e
6 changed files with 126 additions and 64 deletions
@@ -37,6 +37,17 @@ export default async function handler({ operation, data = {}, payload }: Params)
await table?.setItem("muteChannels", data.muteChannels || {});
}
break;
case "updateHistoryMark":
{
const { type } = payload;
if (type == "channel") {
await table?.setItem("historyChannels", data.historyChannels);
} else {
await table?.setItem("historyUsers", data.historyUsers);
}
}
break;
case "updateReadChannels":
{
await table?.setItem("readChannels", data.readChannels);
+20 -2
View File
@@ -1,6 +1,6 @@
import { createApi } from "@reduxjs/toolkit/query/react";
import { ContentTypes } from "../config";
import { updateReadChannels, updateReadUsers } from "../slices/footprint";
import { updateReadChannels, updateReadUsers, upsertOG } from "../slices/footprint";
import { fillFavorites, populateFavorite, addFavorite, deleteFavorite } from "../slices/favorites";
import { onMessageSendStarted } from "./handlers";
import { normalizeArchiveData } from "../../common/utils";
@@ -64,8 +64,26 @@ export const messageApi = createApi({
getOGInfo: builder.query<OG, string>({
query: (url) => ({
url: `/resource/open_graphic_parse?url=${encodeURIComponent(url)}`
})
}),
async onQueryStarted(url, { dispatch, queryFulfilled }) {
try {
const { data } = await queryFulfilled;
dispatch(upsertOG({ key: url, value: data }));
} catch (err) {
console.log("get og error", err);
dispatch(upsertOG({
key: url, value: {
images: [],
audios: [],
videos: [],
title: "",
url,
}
}));
}
}
}),
getArchiveMessage: builder.query<Archive, string>({
query: (file_path) => ({
url: `/resource/archive?file_path=${encodeURIComponent(file_path)}`
+30 -3
View File
@@ -1,21 +1,28 @@
import { createSlice, PayloadAction } from "@reduxjs/toolkit";
import { MuteDTO } from "../../types/message";
import { OG } from "../../types/resource";
import { AutoDeleteMessageSettingDTO, AutoDeleteMsgForGroup, AutoDeleteMsgForUser, AutoDeleteSettingForChannels, AutoDeleteSettingForUsers } from "../../types/sse";
export interface State {
og: { [url: string]: OG }
usersVersion: number;
afterMid: number;
historyUsers: { [uid: number]: string | "reached" };
historyChannels: { [cid: number]: string | "reached" };
readUsers: { [uid: number]: number };
readChannels: { [gid: number]: number };
readChannels: { [cid: number]: number };
muteUsers: { [uid: number]: { expired_in?: number } | undefined };
muteChannels: { [gid: number]: { expired_in?: number } | undefined };
muteChannels: { [cid: number]: { expired_in?: number } | undefined };
autoDeleteMsgUsers: AutoDeleteMsgForUser[];
autoDeleteMsgChannels: AutoDeleteMsgForGroup[];
}
const initialState: State = {
og: {},
usersVersion: 0,
afterMid: 0,
historyUsers: {},
historyChannels: {},
readUsers: {},
readChannels: {},
muteUsers: {},
@@ -33,8 +40,11 @@ const footprintSlice = createSlice({
},
fillFootprint(state, action) {
const {
og = {},
usersVersion = 0,
afterMid = 0,
historyUsers = {},
historyChannels = {},
readUsers = {},
readChannels = {},
muteUsers = {},
@@ -43,8 +53,11 @@ const footprintSlice = createSlice({
autoDeleteMsgChannels = []
} = action.payload;
return {
og,
usersVersion,
afterMid,
historyUsers,
historyChannels,
readUsers,
readChannels,
muteUsers,
@@ -139,6 +152,18 @@ const footprintSlice = createSlice({
}
});
},
upsertOG(state, action: PayloadAction<{ key: string, value: OG }>) {
const { key, value } = action.payload;
state.og[key] = value;
},
updateHistoryMark(state, action: PayloadAction<{ type: "channel" | "user", id: number, mid: string, }>) {
const { type, id, mid } = action.payload;
if (type == "channel") {
state.historyChannels[id] = mid;
} else {
state.historyUsers[id] = mid;
}
},
updateReadUsers(state, action: PayloadAction<{ uid: number; mid: number }[] | undefined>) {
const reads = action.payload || [];
if (reads.length == 0) return;
@@ -164,7 +189,9 @@ export const {
updateReadChannels,
updateReadUsers,
updateMute,
updateAutoDeleteSetting
updateAutoDeleteSetting,
updateHistoryMark,
upsertOG
} = footprintSlice.actions;
export default footprintSlice.reducer;