diff --git a/freeze.go b/freeze.go index f717d1a..0db0ba8 100644 --- a/freeze.go +++ b/freeze.go @@ -727,6 +727,26 @@ func (server *Server) UpdateFrozenUser(client *Client, state *mumbleproto.UserSt server.numLogOps += 1 } +// Update a user's last active channel +func (server *Server) UpdateFrozenUserLastChannel(client *Client) { + if client.IsRegistered() { + user := client.user + + fu := &freezer.User{} + fu.Id = proto.Uint32(user.Id) + fu.LastChannelId = proto.Uint32(uint32(client.Channel.Id)) + fu.LastActive = proto.Uint64(uint64(time.Nanoseconds())) + + err := server.freezelog.Put(fu) + if err != nil { + server.Fatal(err) + } + + server.numLogOps += 1 + } +} + + // Mark a user as deleted in the datstore. func (server *Server) DeleteFrozenUser(user *User) { err := server.freezelog.Put(&freezer.UserRemove{Id: proto.Uint32(user.Id)}) diff --git a/server.go b/server.go index 620e5bb..fdd5567 100644 --- a/server.go +++ b/server.go @@ -994,7 +994,9 @@ func (server *Server) userEnterChannel(client *Client, channel *Channel, usersta channel.AddClient(client) server.ClearCaches() - // fixme(mkrautz): Set LastChannel for user in datastore + + server.UpdateFrozenUserLastChannel(client) + // fixme(mkrautz): Remove channel if temporary canspeak := server.HasPermission(client, channel, SpeakPermission)