summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/storage.go6
-rw-r--r--server/user.go22
2 files changed, 26 insertions, 2 deletions
diff --git a/server/storage.go b/server/storage.go
index 99402c8..bffb783 100644
--- a/server/storage.go
+++ b/server/storage.go
@@ -8,8 +8,8 @@ import (
type Storage interface {
AddMessage(msg 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)
+ GetHistory(target string, since time.Time, count, offset int) (history []core.Message, err error)
+ GetHistoryUser(user1, user2 string, since time.Time, count, offset int) (history []core.Message, err error)
SetUser(user core.UserData) error
DelUser(name string) error
@@ -17,5 +17,7 @@ type Storage interface {
SetPermission(data core.PermissionData) error
GetPermission(user, channel string) (core.PermissionData, error)
+
GetChannelUsers(channel string) ([]string, error)
+ GetUserChannels(user string, count, offset int) ([]string, error)
}
diff --git a/server/user.go b/server/user.go
index 69b7ced..5e29c8d 100644
--- a/server/user.go
+++ b/server/user.go
@@ -126,6 +126,8 @@ func (s *Server) handleUserPayload(user *User, sender net.Conn, payload any) err
return s.handleUsermode(user, sender, v)
case core.History:
return s.handleHistory(user, sender, v)
+ case core.List:
+ return s.handleList(user, sender, v)
default:
return core.ErrUnexpectedPayloadType
}
@@ -206,3 +208,23 @@ func (s *Server) handleHistory(user *User, conn net.Conn, hist core.History) err
return nil
}
+
+func (s *Server) handleList(user *User, conn net.Conn, list core.List) error {
+ channels, err := s.Storage.GetUserChannels(user.Addr, int(list.Count), int(list.Offset))
+ if err != nil {
+ return fmt.Errorf("cannot get user channels list: %v", err)
+ }
+
+ for _, c := range channels {
+ li := core.ListItem{c}
+ data, err := core.Encode(li)
+ if err != nil {
+ return err
+ }
+ if _, err := conn.Write(data); err != nil {
+ return err
+ }
+ }
+
+ return nil
+}