Send irc features to the client

This commit is contained in:
Ken-Håvard Lieng 2019-01-27 08:53:07 +01:00
parent 9267c661dc
commit 613d9fca6e
20 changed files with 690 additions and 304 deletions

View file

@ -109,6 +109,26 @@ func (s *BoltStore) DeleteUser(user *storage.User) error {
})
}
func (s *BoltStore) GetServer(user *storage.User, address string) (*storage.Server, error) {
var server *storage.Server
err := s.db.View(func(tx *bolt.Tx) error {
b := tx.Bucket(bucketServers)
id := serverID(user, address)
v := b.Get(id)
if v == nil {
return storage.ErrNotFound
} else {
server = &storage.Server{}
server.Unmarshal(v)
return nil
}
})
return server, err
}
func (s *BoltStore) GetServers(user *storage.User) ([]*storage.Server, error) {
var servers []*storage.Server
@ -127,7 +147,7 @@ func (s *BoltStore) GetServers(user *storage.User) ([]*storage.Server, error) {
return servers, nil
}
func (s *BoltStore) AddServer(user *storage.User, server *storage.Server) error {
func (s *BoltStore) SaveServer(user *storage.User, server *storage.Server) error {
return s.db.Batch(func(tx *bolt.Tx) error {
b := tx.Bucket(bucketServers)
data, _ := server.Marshal(nil)

View file

@ -1,6 +1,7 @@
package storage
import (
"errors"
"os"
"github.com/khlieng/dispatch/pkg/session"
@ -13,16 +14,19 @@ func Initialize(dir string) {
os.MkdirAll(Path.Root(), 0700)
}
var (
ErrNotFound = errors.New("no item found")
)
type Store interface {
GetUsers() ([]*User, error)
SaveUser(user *User) error
DeleteUser(user *User) error
GetServer(user *User, host string) (*Server, error)
GetServers(user *User) ([]*Server, error)
AddServer(user *User, server *Server) error
SaveServer(user *User, server *Server) error
RemoveServer(user *User, host string) error
SetNick(user *User, nick, host string) error
SetServerName(user *User, name, host string) error
GetChannels(user *User) ([]*Channel, error)
AddChannel(user *User, channel *Channel) error

View file

@ -137,12 +137,16 @@ type Server struct {
Realname string
}
func (u *User) GetServer(address string) (*Server, error) {
return u.store.GetServer(u, address)
}
func (u *User) GetServers() ([]*Server, error) {
return u.store.GetServers(u)
}
func (u *User) AddServer(server *Server) error {
return u.store.AddServer(u, server)
return u.store.SaveServer(u, server)
}
func (u *User) RemoveServer(address string) error {
@ -150,13 +154,24 @@ func (u *User) RemoveServer(address string) error {
}
func (u *User) SetNick(nick, address string) error {
return u.store.SetNick(u, nick, address)
server, err := u.GetServer(address)
if err != nil {
return err
}
server.Nick = nick
return u.AddServer(server)
}
func (u *User) SetServerName(name, address string) error {
return u.store.SetServerName(u, name, address)
server, err := u.GetServer(address)
if err != nil {
return err
}
server.Name = name
return u.AddServer(server)
}
// TODO: Remove topic from disk schema
type Channel struct {
Server string
Name string