Skip to content

Commit

Permalink
Small refactoring and added join/leave support
Browse files Browse the repository at this point in the history
  • Loading branch information
Ole Andre Birkedal committed Oct 25, 2019
1 parent b154b34 commit badd8bd
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 31 deletions.
41 changes: 35 additions & 6 deletions events/event.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package events

import (
"encoding/json"
"github.com/termoose/irccloud/requests"
"github.com/termoose/irccloud/ui"
"log"
)

Expand All @@ -22,12 +24,39 @@ type channelInit struct {
}

type eventData struct {
Type string
Chan string `json:"chan"`
Members []member `json:"members"`
From string `json:"from"`
Msg string `json:"msg"`
Cid int `json:"cid"`
Type string
Chan string `json:"chan"`
Members []member `json:"members"`
From string `json:"from"`
Msg string `json:"msg"`
Cid int `json:"cid"`
Hostmask string `json:"hostmask"`
Nick string `json:"nick"`
}

func InitBacklog(token, url string, window *ui.View) {
backlog := requests.GetBacklog(token, url)
backlogData := parseBacklog(backlog)

// First we initialize all channels
for _, event := range backlogData {
if event.Type == "channel_init" {
user_strings := []string{}
for _, user_string := range event.Members {
user_strings = append(user_strings, user_string.Nick)
}

window.AddChannel(event.Chan, event.Cid, user_strings)
//log.Printf("event: %v\n", event.Chan)
}
}

// Then we fill them with the message backlog
for _, event := range backlogData {
if event.Type == "buffer_msg" {
window.AddBufferMsg(event.Chan, event.From, event.Msg)
}
}
}

func parseBacklog(backlog []byte) []eventData {
Expand Down
39 changes: 14 additions & 25 deletions events/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package events
import (
"encoding/json"
_ "fmt"
"github.com/termoose/irccloud/requests"
_ "github.com/termoose/irccloud/requests"
"github.com/termoose/irccloud/ui"
_ "log"
)
Expand Down Expand Up @@ -63,34 +63,23 @@ func (e *eventHandler) handle(curr_event event) {
case "oob_include":
oob_data := &oob_include{}
json.Unmarshal(curr_event.Data, &oob_data)
backlog := requests.GetBacklog(e.SessionToken, oob_data.Url)

//log.Printf("BACKLOG: %s\n", backlog)

backlogData := parseBacklog(backlog)

// First we initialize all channels
for _, event := range backlogData {
if event.Type == "channel_init" {
user_strings := []string{}
for _, user_string := range event.Members {
user_strings = append(user_strings, user_string.Nick)
}

e.Window.AddChannel(event.Chan, event.Cid, user_strings)
//log.Printf("event: %v\n", event.Chan)
}
}

for _, event := range backlogData {
if event.Type == "buffer_msg" {
e.Window.AddBufferMsg(event.Chan, event.From, event.Msg)
}
}
InitBacklog(e.SessionToken, oob_data.Url, e.Window)

case "buffer_msg":
msg_data := &eventData{}
json.Unmarshal(curr_event.Data, &msg_data)
e.Window.AddBufferMsg(msg_data.Chan, msg_data.From, msg_data.Msg)

case "joined_channel":
join_data := &eventData{}
json.Unmarshal(curr_event.Data, &join_data)
e.Window.AddUser(join_data.Chan, join_data.Nick)
e.Window.AddJoinEvent(join_data.Chan, join_data.Nick, join_data.Hostmask)

case "parted_channel":
part_data := &eventData{}
json.Unmarshal(curr_event.Data, &part_data)
e.Window.RemoveUser(part_data.Chan, part_data.Nick)
e.Window.AddPartEvent(part_data.Chan, part_data.Nick, part_data.Hostmask)
}
}
36 changes: 36 additions & 0 deletions ui/ui.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,42 @@ func (v *View) getChannel(name string) *channel {
return nil
}

func (v *View) AddUser(channel, nick string) {
c := v.getChannel(channel)

c.users.AddItem(nick, nick, 0, nil)
}

func (v *View) RemoveUser(channel, nick string) {
c := v.getChannel(channel)

list := c.users.FindItems(nick, nick, true, false)
if len(list) > 0 {
// Remove the first occurence
c.users.RemoveItem(list[0])
}
}

func (v *View) AddPartEvent(channel, nick, hostmask string) {
c := v.getChannel(channel)

if c != nil {
line := fmt.Sprintf(" <- %s left (%s)\n", nick, hostmask)
c.chat.Write([]byte(line))
c.chat.ScrollToEnd()
}
}

func (v *View) AddJoinEvent(channel, nick, hostmask string) {
c := v.getChannel(channel)

if c != nil {
line := fmt.Sprintf(" -> %s joined (%s)\n", nick, hostmask)
c.chat.Write([]byte(line))
c.chat.ScrollToEnd()
}
}

func (v *View) AddBufferMsg(channel, from, msg string) {
c := v.getChannel(channel)

Expand Down

0 comments on commit badd8bd

Please # to comment.