From 98f41454fbf0ee6771ce6bc2c455afc10551d78a Mon Sep 17 00:00:00 2001 From: Sarv Date: Tue, 25 Mar 2025 18:11:25 +0800 Subject: [PATCH] Fix HTTP Addr & macOS v3 m_nsUsrName is NULL (#4) --- internal/chatlog/app.go | 12 ++++++------ internal/chatlog/manager.go | 16 ++++++++++++++++ .../wechatdb/datasource/darwinv3/datasource.go | 10 +++++----- pkg/util/strings.go | 9 +++++++++ 4 files changed, 36 insertions(+), 11 deletions(-) diff --git a/internal/chatlog/app.go b/internal/chatlog/app.go index 7a1085a..4f77bb0 100644 --- a/internal/chatlog/app.go +++ b/internal/chatlog/app.go @@ -338,8 +338,8 @@ func (a *App) settingSelected(i *menu.Item) { settings := []settingItem{ { - name: "设置 HTTP 服务端口", - description: "配置 HTTP 服务监听的端口", + name: "设置 HTTP 服务地址", + description: "配置 HTTP 服务监听的地址", action: a.settingHTTPPort, }, { @@ -373,17 +373,17 @@ func (a *App) settingHTTPPort() { // 实现端口设置逻辑 // 这里可以使用 tview.InputField 让用户输入端口 form := tview.NewForm(). - AddInputField("端口", a.ctx.HTTPAddr, 20, nil, func(text string) { - a.ctx.SetHTTPAddr(text) + AddInputField("地址", a.ctx.HTTPAddr, 20, nil, func(text string) { + a.m.SetHTTPAddr(text) }). AddButton("保存", func() { a.mainPages.RemovePage("submenu2") - a.showInfo("HTTP 端口已设置为 " + a.ctx.HTTPAddr) + a.showInfo("HTTP 地址已设置为 " + a.ctx.HTTPAddr) }). AddButton("取消", func() { a.mainPages.RemovePage("submenu2") }) - form.SetBorder(true).SetTitle("设置 HTTP 端口") + form.SetBorder(true).SetTitle("设置 HTTP 地址") a.mainPages.AddPage("submenu2", form, true, true) a.SetFocus(form) diff --git a/internal/chatlog/manager.go b/internal/chatlog/manager.go index 7827ed9..168c7fa 100644 --- a/internal/chatlog/manager.go +++ b/internal/chatlog/manager.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "path/filepath" + "strings" "github.com/sjzar/chatlog/internal/chatlog/conf" "github.com/sjzar/chatlog/internal/chatlog/ctx" @@ -128,6 +129,21 @@ func (m *Manager) StopService() error { return nil } +func (m *Manager) SetHTTPAddr(text string) error { + var addr string + if util.IsNumeric(text) { + addr = fmt.Sprintf("0.0.0.0:%s", text) + } else if strings.HasPrefix(text, "http://") { + addr = strings.TrimPrefix(text, "http://") + } else if strings.HasPrefix(text, "https://") { + addr = strings.TrimPrefix(text, "https://") + } else { + addr = text + } + m.ctx.SetHTTPAddr(addr) + return nil +} + func (m *Manager) GetDataKey() error { if m.ctx.Current == nil { return fmt.Errorf("未选择任何账号") diff --git a/internal/wechatdb/datasource/darwinv3/datasource.go b/internal/wechatdb/datasource/darwinv3/datasource.go index 856ce9c..7fda605 100644 --- a/internal/wechatdb/datasource/darwinv3/datasource.go +++ b/internal/wechatdb/datasource/darwinv3/datasource.go @@ -260,13 +260,13 @@ func (ds *DataSource) GetContacts(ctx context.Context, key string, limit, offset if key != "" { // 按照关键字查询 - query = `SELECT m_nsUsrName, nickname, IFNULL(m_nsRemark,""), m_uiSex, IFNULL(m_nsAliasName,"") + query = `SELECT IFNULL(m_nsUsrName,""), nickname, IFNULL(m_nsRemark,""), m_uiSex, IFNULL(m_nsAliasName,"") FROM WCContact WHERE m_nsUsrName = ? OR nickname = ? OR m_nsRemark = ? OR m_nsAliasName = ?` args = []interface{}{key, key, key, key} } else { // 查询所有联系人 - query = `SELECT m_nsUsrName, nickname, IFNULL(m_nsRemark,""), m_uiSex, IFNULL(m_nsAliasName,"") + query = `SELECT IFNULL(m_nsUsrName,""), nickname, IFNULL(m_nsRemark,""), m_uiSex, IFNULL(m_nsAliasName,"") FROM WCContact` } @@ -314,13 +314,13 @@ func (ds *DataSource) GetChatRooms(ctx context.Context, key string, limit, offse if key != "" { // 按照关键字查询 - query = `SELECT m_nsUsrName, nickname, IFNULL(m_nsRemark,""), IFNULL(m_nsChatRoomMemList,""), IFNULL(m_nsChatRoomAdminList,"") + query = `SELECT IFNULL(m_nsUsrName,""), nickname, IFNULL(m_nsRemark,""), IFNULL(m_nsChatRoomMemList,""), IFNULL(m_nsChatRoomAdminList,"") FROM GroupContact WHERE m_nsUsrName = ? OR nickname = ? OR m_nsRemark = ?` args = []interface{}{key, key, key} } else { // 查询所有群聊 - query = `SELECT m_nsUsrName, nickname, IFNULL(m_nsRemark,""), IFNULL(m_nsChatRoomMemList,""), IFNULL(m_nsChatRoomAdminList,"") + query = `SELECT IFNULL(m_nsUsrName,""), nickname, IFNULL(m_nsRemark,""), IFNULL(m_nsChatRoomMemList,""), IFNULL(m_nsChatRoomAdminList,"") FROM GroupContact` } @@ -364,7 +364,7 @@ func (ds *DataSource) GetChatRooms(ctx context.Context, key string, limit, offse if err == nil && len(contacts) > 0 && strings.HasSuffix(contacts[0].UserName, "@chatroom") { // 再次尝试通过用户名查找群聊 rows, err := ds.chatRoomDb.QueryContext(ctx, - `SELECT m_nsUsrName, nickname, m_nsRemark, m_nsChatRoomMemList, m_nsChatRoomAdminList + `SELECT IFNULL(m_nsUsrName,""), nickname, IFNULL(m_nsRemark,""), IFNULL(m_nsChatRoomMemList,""), IFNULL(m_nsChatRoomAdminList,"") FROM GroupContact WHERE m_nsUsrName = ?`, contacts[0].UserName) diff --git a/pkg/util/strings.go b/pkg/util/strings.go index 2ec791c..25d403a 100644 --- a/pkg/util/strings.go +++ b/pkg/util/strings.go @@ -32,3 +32,12 @@ func MustAnyToInt(v interface{}) int { } return 0 } + +func IsNumeric(s string) bool { + for _, r := range s { + if !unicode.IsDigit(r) { + return false + } + } + return len(s) > 0 +}