-
Notifications
You must be signed in to change notification settings - Fork 60k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: Enhance cloud synchronization functionality, support syncing delete operations for messages and conversations, and add support for automatic sync settings #5236
base: main
Are you sure you want to change the base?
Changes from 1 commit
1d0a40b
78c4084
1cce87a
cd354cf
d957397
284d33b
c440637
22f6129
5065091
22c7959
faac0d9
4f876f3
648e600
93bfb55
4b22aaf
621b148
eae593d
2ee2d50
5e1064a
0a6ddda
b2336f5
31f2829
e515f0f
fdb89af
fc97c4b
0745b64
d0b7ddc
5c51fd2
2fdb35b
31baa10
f1d69cb
2d68f17
0638db1
e8c7ac0
2bf72d0
c204031
ccacfec
6dc8681
6f3d753
5ae4921
370ce3e
9551f5d
35f5288
144fdc9
659a389
60bd3c5
89edebd
41242ca
cf7c6f2
c6657d3
31900cb
c4ae73d
9a025ae
98ab561
f80da8a
3e02a71
f45a693
7f3ec6d
dfd3d24
af23929
9a95d32
b2381b2
bf5cdc9
e3a2e78
36edbcd
9f58a66
36525d8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -62,6 +62,7 @@ import { | |||||||||||||||||||||||||||||||||||||||||||||||||||||
getMessageImages, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
isVisionModel, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
isDalle3, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
removeOutdatedEntries, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} from "../utils"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
import { uploadImage as uploadImageRemote } from "@/app/utils/chat"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -959,10 +960,20 @@ function _Chat() { | |||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
const deleteMessage = (msgId?: string) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
chatStore.updateCurrentSession( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
(session) => | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
(session.messages = session.messages.filter((m) => m.id !== msgId)), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
chatStore.updateCurrentSession((session) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
session.deletedMessageIds && | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
removeOutdatedEntries(session.deletedMessageIds); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
session.messages = session.messages.filter((m) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (m.id !== msgId) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
return true; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
if (!session.deletedMessageIds) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
session.deletedMessageIds = {} as Record<string, number>; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
session.deletedMessageIds[m.id] = Date.now(); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
return false; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Refactor to avoid side effects within the Modifying Consider refactoring the code to separate the side effects from the filtering logic: chatStore.updateCurrentSession((session) => {
+ if (!session.deletedMessageIds) {
+ session.deletedMessageIds = {} as Record<string, number>;
+ }
+ session.deletedMessageIds && removeOutdatedEntries(session.deletedMessageIds);
- session.messages = session.messages.filter((m) => {
- if (m.id !== msgId) {
- return true;
- }
- session.deletedMessageIds[m.id] = Date.now();
- return false;
- });
+ session.messages = session.messages.filter((m) => m.id !== msgId);
+
+ if (msgId) {
+ session.deletedMessageIds[msgId] = Date.now();
+ }
}); This refactoring improves readability by:
📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
const onDelete = (msgId: string) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -270,3 +270,16 @@ export function isVisionModel(model: string) { | |||||||||||||||||||||||||||||||||||||||||||||||||||
export function isDalle3(model: string) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
return "dall-e-3" === model; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
export function removeOutdatedEntries( | ||||||||||||||||||||||||||||||||||||||||||||||||||||
timeMap: Record<string, number>, | ||||||||||||||||||||||||||||||||||||||||||||||||||||
): Record<string, number> { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
const oneMonthAgo = Date.now() - 30 * 24 * 60 * 60 * 1000; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
// Delete data from a month ago | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Object.keys(timeMap).forEach((id) => { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
if (timeMap[id] < oneMonthAgo) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||
delete timeMap[id]; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
}); | ||||||||||||||||||||||||||||||||||||||||||||||||||||
return timeMap; | ||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+274
to
+285
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🛠️ Refactor suggestion Consider enhancing type safety and robustness. While the basic functionality is correct, consider these improvements:
Here's a more robust implementation: export function removeOutdatedEntries(
- timeMap: Record<string, number>,
+ timeMap: Record<string, number>,
): Record<string, number> {
const oneMonthAgo = Date.now() - 30 * 24 * 60 * 60 * 1000;
- // Delete data from a month ago
- Object.keys(timeMap).forEach((id) => {
- if (timeMap[id] < oneMonthAgo) {
- delete timeMap[id];
- }
- });
- return timeMap;
+ // Create a new object instead of mutating the input
+ return Object.entries(timeMap).reduce((acc, [id, timestamp]) => {
+ // Ensure timestamp is valid
+ if (typeof timestamp === 'number' && !isNaN(timestamp) && timestamp >= oneMonthAgo) {
+ acc[id] = timestamp;
+ }
+ return acc;
+ }, {} as Record<string, number>);
} This implementation:
📝 Committable suggestion
Suggested change
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Initialize
deletedMessageIds
before usageIn the
deleteMessage
function,session.deletedMessageIds
is used before it's ensured to be initialized. Ifsession.deletedMessageIds
is undefined, callingremoveOutdatedEntries(session.deletedMessageIds);
could lead to errors. It's important to initializesession.deletedMessageIds
before using it to prevent potential runtime exceptions.Please apply the following diff to initialize
deletedMessageIds
before use:📝 Committable suggestion