diff options
| author | bt <bt@rctt.net> | 2026-05-26 12:13:46 +0200 |
|---|---|---|
| committer | bt <bt@rctt.net> | 2026-05-26 12:13:46 +0200 |
| commit | af6ccd597024aa867a5742a5c6771c9a11c18c9f (patch) | |
| tree | d24acf3999d8a930dbca52bf995b4f75010731de | |
| parent | 5d689490cc90f0698802a01d2d058cfdc382a382 (diff) | |
| download | solec-af6ccd597024aa867a5742a5c6771c9a11c18c9f.tar.gz solec-af6ccd597024aa867a5742a5c6771c9a11c18c9f.zip | |
[daemon] Fix users historyv0.5.2
| -rw-r--r-- | server/storage.go | 3 | ||||
| -rw-r--r-- | server/user.go | 14 | ||||
| -rw-r--r-- | storage/storage.go | 28 |
3 files changed, 37 insertions, 8 deletions
diff --git a/server/storage.go b/server/storage.go index 1cb725f..99402c8 100644 --- a/server/storage.go +++ b/server/storage.go @@ -8,7 +8,8 @@ import ( type Storage interface { AddMessage(msg core.Message) (err error) - GetHistory(channel string, since time.Time, num, offset int) (history []core.Message, err error) + GetHistory(target string, since time.Time, num, offset int) (history []core.Message, err error) + GetHistoryUser(user1, user2 string, since time.Time, num, offset int) (history []core.Message, err error) SetUser(user core.UserData) error DelUser(name string) error diff --git a/server/user.go b/server/user.go index 9a0a71b..69b7ced 100644 --- a/server/user.go +++ b/server/user.go @@ -161,7 +161,7 @@ func (s *Server) handleUsermode(user *User, conn net.Conn, mode core.Usermode) e // TODO: Better errors func (s *Server) handleHistory(user *User, conn net.Conn, hist core.History) error { - _, err := core.ReadAddr(hist.Channel) + addr, err := core.ReadAddr(hist.Channel) if err != nil { fmt.Println("cannot parse address:", err) return user.Send(conn, core.Error{core.ErrorNotFound}) @@ -178,7 +178,17 @@ func (s *Server) handleHistory(user *User, conn net.Conn, hist core.History) err return user.Send(conn, core.Error{core.ErrorNotFound}) } - messages, err := s.Storage.GetHistory(hist.Channel, hist.Since, int(hist.Count), int(hist.Offset)) + var messages []core.Message + count := int(hist.Count) + offset := int(hist.Offset) + + if addr.Type == core.AddrUser { + messages, err = s.Storage.GetHistoryUser(user.Addr, hist.Channel, hist.Since, count, offset) + + } else { + messages, err = s.Storage.GetHistory(hist.Channel, hist.Since, count, offset) + } + if err != nil { fmt.Println("cannot get message history:", err) return user.Send(conn, core.Error{core.ErrorNotFound}) diff --git a/storage/storage.go b/storage/storage.go index 1292945..a32c4a0 100644 --- a/storage/storage.go +++ b/storage/storage.go @@ -42,16 +42,34 @@ func (db *Database) AddMessage(msg core.Message) (err error) { return err } -func (db *Database) GetHistory(channel string, since time.Time, num int, offset int) (history []core.Message, err error) { +func (db *Database) GetHistory(target string, since time.Time, num, offset int) (history []core.Message, err error) { rows, err := db.Query( - `SELECT source, target, timestamp, content FROM messages WHERE target = ? AND timestamp > ? LIMIT ? OFFSET ?`, - channel, since.Unix(), num, offset, + `SELECT source, target, timestamp, content FROM messages + WHERE target = ? AND timestamp > ? LIMIT ? OFFSET ?`, + target, since.Unix(), num, offset, ) + + return db.getHistory(rows, err) +} + +func (db *Database) GetHistoryUser(user1, user2 string, since time.Time, num int, offset int) (history []core.Message, err error) { + rows, err := db.Query( + `SELECT source, target, timestamp, content FROM messages + WHERE (source = ? OR source = ? ) AND (target = ? OR target = ?) AND timestamp > ? LIMIT ? OFFSET ?`, + user1, user2, user1, user2, since.Unix(), num, offset, + ) + + return db.getHistory(rows, err) +} + +func (db *Database) getHistory(rows *sql.Rows, err error) ([]core.Message, error) { + var history []core.Message + defer func() { if rows == nil { return } - if err := rows.Close(); err != nil { + if err = rows.Close(); err != nil { log.Println("cannot close database row:", err) } }() @@ -63,7 +81,7 @@ func (db *Database) GetHistory(channel string, since time.Time, num int, offset for rows.Next() { var msg core.Message var timestamp int64 - if err := rows.Scan(&msg.Source, &msg.Target, ×tamp, &msg.Content); err != nil { + if err = rows.Scan(&msg.Source, &msg.Target, ×tamp, &msg.Content); err != nil { return history, err } msg.Timestamp = time.Unix(timestamp, 0) |
