summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbt <bt@rctt.net>2026-05-26 12:13:46 +0200
committerbt <bt@rctt.net>2026-05-26 12:13:46 +0200
commitaf6ccd597024aa867a5742a5c6771c9a11c18c9f (patch)
treed24acf3999d8a930dbca52bf995b4f75010731de
parent5d689490cc90f0698802a01d2d058cfdc382a382 (diff)
downloadsolec-0.5.2.tar.gz
solec-0.5.2.zip
[daemon] Fix users historyv0.5.2
-rw-r--r--server/storage.go3
-rw-r--r--server/user.go14
-rw-r--r--storage/storage.go28
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, &timestamp, &msg.Content); err != nil {
+ if err = rows.Scan(&msg.Source, &msg.Target, &timestamp, &msg.Content); err != nil {
return history, err
}
msg.Timestamp = time.Unix(timestamp, 0)