From d02b42c404747270202fb1657cedb097aa1c3057 Mon Sep 17 00:00:00 2001
From: Shen Junzheng
Date: Sat, 19 Apr 2025 02:59:59 +0800
Subject: [PATCH] message search
---
internal/chatlog/database/service.go | 4 +-
internal/chatlog/http/route.go | 46 +--
internal/chatlog/http/static/index.htm | 46 ++-
internal/chatlog/mcp/const.go | 132 +++++++-
internal/chatlog/mcp/service.go | 51 ++-
internal/errors/errors.go | 2 +-
internal/errors/middleware.go | 3 +-
internal/model/message.go | 20 +-
.../datasource/darwinv3/datasource.go | 191 ++++++++---
internal/wechatdb/datasource/datasource.go | 2 +-
internal/wechatdb/datasource/v4/datasource.go | 309 ++++++++----------
.../datasource/windowsv3/datasource.go | 297 ++++++++---------
internal/wechatdb/repository/chatroom.go | 87 +++--
internal/wechatdb/repository/contact.go | 102 ++++--
internal/wechatdb/repository/message.go | 63 +++-
internal/wechatdb/repository/repository.go | 20 +-
internal/wechatdb/wechatdb.go | 4 +-
pkg/util/strings.go | 24 ++
pkg/util/time.go | 26 +-
19 files changed, 910 insertions(+), 519 deletions(-)
diff --git a/internal/chatlog/database/service.go b/internal/chatlog/database/service.go
index 2d0ac23..875f202 100644
--- a/internal/chatlog/database/service.go
+++ b/internal/chatlog/database/service.go
@@ -40,8 +40,8 @@ func (s *Service) GetDB() *wechatdb.DB {
return s.db
}
-func (s *Service) GetMessages(start, end time.Time, talker string, limit, offset int) ([]*model.Message, error) {
- return s.db.GetMessages(start, end, talker, limit, offset)
+func (s *Service) GetMessages(start, end time.Time, talker string, sender string, keyword string, limit, offset int) ([]*model.Message, error) {
+ return s.db.GetMessages(start, end, talker, sender, keyword, limit, offset)
}
func (s *Service) GetContacts(key string, limit, offset int) (*wechatdb.GetContactsResp, error) {
diff --git a/internal/chatlog/http/route.go b/internal/chatlog/http/route.go
index e78cfe6..d32d103 100644
--- a/internal/chatlog/http/route.go
+++ b/internal/chatlog/http/route.go
@@ -75,11 +75,13 @@ func (s *Service) NoRoute(c *gin.Context) {
func (s *Service) GetChatlog(c *gin.Context) {
q := struct {
- Time string `form:"time"`
- Talker string `form:"talker"`
- Limit int `form:"limit"`
- Offset int `form:"offset"`
- Format string `form:"format"`
+ Time string `form:"time"`
+ Talker string `form:"talker"`
+ Sender string `form:"sender"`
+ Keyword string `form:"keyword"`
+ Limit int `form:"limit"`
+ Offset int `form:"offset"`
+ Format string `form:"format"`
}{}
if err := c.BindQuery(&q); err != nil {
@@ -100,7 +102,7 @@ func (s *Service) GetChatlog(c *gin.Context) {
q.Offset = 0
}
- messages, err := s.db.GetMessages(start, end, q.Talker, q.Limit, q.Offset)
+ messages, err := s.db.GetMessages(start, end, q.Talker, q.Sender, q.Keyword, q.Limit, q.Offset)
if err != nil {
errors.Err(c, err)
return
@@ -119,7 +121,7 @@ func (s *Service) GetChatlog(c *gin.Context) {
c.Writer.Flush()
for _, m := range messages {
- c.Writer.WriteString(m.PlainText(len(q.Talker) == 0, c.Request.Host))
+ c.Writer.WriteString(m.PlainText(strings.Contains(q.Talker, ","), util.PerfectTimeFormat(start, end), c.Request.Host))
c.Writer.WriteString("\n")
c.Writer.Flush()
}
@@ -129,10 +131,10 @@ func (s *Service) GetChatlog(c *gin.Context) {
func (s *Service) GetContacts(c *gin.Context) {
q := struct {
- Key string `form:"key"`
- Limit int `form:"limit"`
- Offset int `form:"offset"`
- Format string `form:"format"`
+ Keyword string `form:"keyword"`
+ Limit int `form:"limit"`
+ Offset int `form:"offset"`
+ Format string `form:"format"`
}{}
if err := c.BindQuery(&q); err != nil {
@@ -140,7 +142,7 @@ func (s *Service) GetContacts(c *gin.Context) {
return
}
- list, err := s.db.GetContacts(q.Key, q.Limit, q.Offset)
+ list, err := s.db.GetContacts(q.Keyword, q.Limit, q.Offset)
if err != nil {
errors.Err(c, err)
return
@@ -174,10 +176,10 @@ func (s *Service) GetContacts(c *gin.Context) {
func (s *Service) GetChatRooms(c *gin.Context) {
q := struct {
- Key string `form:"key"`
- Limit int `form:"limit"`
- Offset int `form:"offset"`
- Format string `form:"format"`
+ Keyword string `form:"keyword"`
+ Limit int `form:"limit"`
+ Offset int `form:"offset"`
+ Format string `form:"format"`
}{}
if err := c.BindQuery(&q); err != nil {
@@ -185,7 +187,7 @@ func (s *Service) GetChatRooms(c *gin.Context) {
return
}
- list, err := s.db.GetChatRooms(q.Key, q.Limit, q.Offset)
+ list, err := s.db.GetChatRooms(q.Keyword, q.Limit, q.Offset)
if err != nil {
errors.Err(c, err)
return
@@ -218,10 +220,10 @@ func (s *Service) GetChatRooms(c *gin.Context) {
func (s *Service) GetSessions(c *gin.Context) {
q := struct {
- Key string `form:"key"`
- Limit int `form:"limit"`
- Offset int `form:"offset"`
- Format string `form:"format"`
+ Keyword string `form:"keyword"`
+ Limit int `form:"limit"`
+ Offset int `form:"offset"`
+ Format string `form:"format"`
}{}
if err := c.BindQuery(&q); err != nil {
@@ -229,7 +231,7 @@ func (s *Service) GetSessions(c *gin.Context) {
return
}
- sessions, err := s.db.GetSessions(q.Key, q.Limit, q.Offset)
+ sessions, err := s.db.GetSessions(q.Keyword, q.Limit, q.Offset)
if err != nil {
errors.Err(c, err)
return
diff --git a/internal/chatlog/http/static/index.htm b/internal/chatlog/http/static/index.htm
index b8d05a1..7a53ed1 100644
--- a/internal/chatlog/http/static/index.htm
+++ b/internal/chatlog/http/static/index.htm
@@ -377,12 +377,12 @@
-
@@ -408,12 +408,12 @@
-
@@ -459,6 +459,26 @@
placeholder="wxid、群ID、备注名或昵称"
/>
+
+
+
+
+
+
+
+