Skip to content

Commit a745519

Browse files
authored
message search (#60)
1 parent 85b5465 commit a745519

File tree

19 files changed

+905
-514
lines changed

19 files changed

+905
-514
lines changed

internal/chatlog/database/service.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ func (s *Service) GetDB() *wechatdb.DB {
4040
return s.db
4141
}
4242

43-
func (s *Service) GetMessages(start, end time.Time, talker string, limit, offset int) ([]*model.Message, error) {
44-
return s.db.GetMessages(start, end, talker, limit, offset)
43+
func (s *Service) GetMessages(start, end time.Time, talker string, sender string, keyword string, limit, offset int) ([]*model.Message, error) {
44+
return s.db.GetMessages(start, end, talker, sender, keyword, limit, offset)
4545
}
4646

4747
func (s *Service) GetContacts(key string, limit, offset int) (*wechatdb.GetContactsResp, error) {

internal/chatlog/http/route.go

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,13 @@ func (s *Service) NoRoute(c *gin.Context) {
7575
func (s *Service) GetChatlog(c *gin.Context) {
7676

7777
q := struct {
78-
Time string `form:"time"`
79-
Talker string `form:"talker"`
80-
Limit int `form:"limit"`
81-
Offset int `form:"offset"`
82-
Format string `form:"format"`
78+
Time string `form:"time"`
79+
Talker string `form:"talker"`
80+
Sender string `form:"sender"`
81+
Keyword string `form:"keyword"`
82+
Limit int `form:"limit"`
83+
Offset int `form:"offset"`
84+
Format string `form:"format"`
8385
}{}
8486

8587
if err := c.BindQuery(&q); err != nil {
@@ -100,7 +102,7 @@ func (s *Service) GetChatlog(c *gin.Context) {
100102
q.Offset = 0
101103
}
102104

103-
messages, err := s.db.GetMessages(start, end, q.Talker, q.Limit, q.Offset)
105+
messages, err := s.db.GetMessages(start, end, q.Talker, q.Sender, q.Keyword, q.Limit, q.Offset)
104106
if err != nil {
105107
errors.Err(c, err)
106108
return
@@ -119,7 +121,7 @@ func (s *Service) GetChatlog(c *gin.Context) {
119121
c.Writer.Flush()
120122

121123
for _, m := range messages {
122-
c.Writer.WriteString(m.PlainText(len(q.Talker) == 0, c.Request.Host))
124+
c.Writer.WriteString(m.PlainText(strings.Contains(q.Talker, ","), util.PerfectTimeFormat(start, end), c.Request.Host))
123125
c.Writer.WriteString("\n")
124126
c.Writer.Flush()
125127
}
@@ -129,18 +131,18 @@ func (s *Service) GetChatlog(c *gin.Context) {
129131
func (s *Service) GetContacts(c *gin.Context) {
130132

131133
q := struct {
132-
Key string `form:"key"`
133-
Limit int `form:"limit"`
134-
Offset int `form:"offset"`
135-
Format string `form:"format"`
134+
Keyword string `form:"keyword"`
135+
Limit int `form:"limit"`
136+
Offset int `form:"offset"`
137+
Format string `form:"format"`
136138
}{}
137139

138140
if err := c.BindQuery(&q); err != nil {
139141
errors.Err(c, err)
140142
return
141143
}
142144

143-
list, err := s.db.GetContacts(q.Key, q.Limit, q.Offset)
145+
list, err := s.db.GetContacts(q.Keyword, q.Limit, q.Offset)
144146
if err != nil {
145147
errors.Err(c, err)
146148
return
@@ -174,18 +176,18 @@ func (s *Service) GetContacts(c *gin.Context) {
174176
func (s *Service) GetChatRooms(c *gin.Context) {
175177

176178
q := struct {
177-
Key string `form:"key"`
178-
Limit int `form:"limit"`
179-
Offset int `form:"offset"`
180-
Format string `form:"format"`
179+
Keyword string `form:"keyword"`
180+
Limit int `form:"limit"`
181+
Offset int `form:"offset"`
182+
Format string `form:"format"`
181183
}{}
182184

183185
if err := c.BindQuery(&q); err != nil {
184186
errors.Err(c, err)
185187
return
186188
}
187189

188-
list, err := s.db.GetChatRooms(q.Key, q.Limit, q.Offset)
190+
list, err := s.db.GetChatRooms(q.Keyword, q.Limit, q.Offset)
189191
if err != nil {
190192
errors.Err(c, err)
191193
return
@@ -218,18 +220,18 @@ func (s *Service) GetChatRooms(c *gin.Context) {
218220
func (s *Service) GetSessions(c *gin.Context) {
219221

220222
q := struct {
221-
Key string `form:"key"`
222-
Limit int `form:"limit"`
223-
Offset int `form:"offset"`
224-
Format string `form:"format"`
223+
Keyword string `form:"keyword"`
224+
Limit int `form:"limit"`
225+
Offset int `form:"offset"`
226+
Format string `form:"format"`
225227
}{}
226228

227229
if err := c.BindQuery(&q); err != nil {
228230
errors.Err(c, err)
229231
return
230232
}
231233

232-
sessions, err := s.db.GetSessions(q.Key, q.Limit, q.Offset)
234+
sessions, err := s.db.GetSessions(q.Keyword, q.Limit, q.Offset)
233235
if err != nil {
234236
errors.Err(c, err)
235237
return

internal/chatlog/http/static/index.htm

Lines changed: 35 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -377,12 +377,12 @@ <h2>🔍 API 接口与调试</h2>
377377
</p>
378378
</div>
379379
<div class="form-group">
380-
<label for="chatroom-query"
380+
<label for="chatroom-keyword"
381381
>搜索群聊:<span class="optional-param">可选</span></label
382382
>
383383
<input
384384
type="text"
385-
id="chatroom-query"
385+
id="chatroom-keyword"
386386
placeholder="输入关键词搜索群聊"
387387
/>
388388
</div>
@@ -408,12 +408,12 @@ <h2>🔍 API 接口与调试</h2>
408408
</p>
409409
</div>
410410
<div class="form-group">
411-
<label for="contact-query"
411+
<label for="contact-keyword"
412412
>搜索联系人:<span class="optional-param">可选</span></label
413413
>
414414
<input
415415
type="text"
416-
id="contact-query"
416+
id="contact-keyword"
417417
placeholder="输入关键词搜索联系人"
418418
/>
419419
</div>
@@ -459,6 +459,26 @@ <h2>🔍 API 接口与调试</h2>
459459
placeholder="wxid、群ID、备注名或昵称"
460460
/>
461461
</div>
462+
<div class="form-group">
463+
<label for="sender"
464+
>发送者:<span class="optional-param">可选</span></label
465+
>
466+
<input
467+
type="text"
468+
id="sender"
469+
placeholder="指定消息发送者"
470+
/>
471+
</div>
472+
<div class="form-group">
473+
<label for="keyword"
474+
>关键词:<span class="optional-param">可选</span></label
475+
>
476+
<input
477+
type="text"
478+
id="keyword"
479+
placeholder="搜索消息内容中的关键词"
480+
/>
481+
</div>
462482
<div class="form-group">
463483
<label for="limit"
464484
>返回数量:<span class="optional-param">可选</span></label
@@ -603,6 +623,8 @@ <h2>📚 更多资源</h2>
603623
url += "chatlog";
604624
const time = document.getElementById("time").value;
605625
const talker = document.getElementById("talker").value;
626+
const sender = document.getElementById("sender").value;
627+
const keyword = document.getElementById("keyword").value;
606628
const limit = document.getElementById("limit").value;
607629
const offset = document.getElementById("offset").value;
608630
const format = document.getElementById("format").value;
@@ -617,30 +639,32 @@ <h2>📚 更多资源</h2>
617639

618640
if (time) params.append("time", time);
619641
if (talker) params.append("talker", talker);
642+
if (sender) params.append("sender", sender);
643+
if (keyword) params.append("keyword", keyword);
620644
if (limit) params.append("limit", limit);
621645
if (offset) params.append("offset", offset);
622646
if (format) params.append("format", format);
623647
break;
624648

625649
case "contact":
626650
url += "contact";
627-
const contactQuery =
628-
document.getElementById("contact-query").value;
651+
const contactKeyword =
652+
document.getElementById("contact-keyword").value;
629653
const contactFormat =
630654
document.getElementById("contact-format").value;
631655

632-
if (contactQuery) params.append("query", contactQuery);
656+
if (contactKeyword) params.append("keyword", contactKeyword);
633657
if (contactFormat) params.append("format", contactFormat);
634658
break;
635659

636660
case "chatroom":
637661
url += "chatroom";
638-
const chatroomQuery =
639-
document.getElementById("chatroom-query").value;
662+
const chatroomKeyword =
663+
document.getElementById("chatroom-keyword").value;
640664
const chatroomFormat =
641665
document.getElementById("chatroom-format").value;
642666

643-
if (chatroomQuery) params.append("query", chatroomQuery);
667+
if (chatroomKeyword) params.append("keyword", chatroomKeyword);
644668
if (chatroomFormat) params.append("format", chatroomFormat);
645669
break;
646670

@@ -730,4 +754,4 @@ <h2>📚 更多资源</h2>
730754
}
731755
</script>
732756
</body>
733-
</html>
757+
</html>

0 commit comments

Comments
 (0)