refactor: og and msg history mark
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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)}`
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user