Browse Source

Merge pull request #5 from C0DK/master

Pulling into dev for testing
pull/7/head
Gregory Rudolph 5 years ago committed by GitHub
parent
commit
86b4eea4c0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 42
      colors.go
  2. 61
      main.go
  3. 15
      userConfigs.go

42
colors.go

@ -0,0 +1,42 @@
package main
import (
"fmt"
"regexp"
)
// TODO maybe datastructure
// BASH-like PS1 variable equivalent (without colours)
// TODO bold? cursive etc?
func color(c int) string {
if colorless {
return ""
}
if c < 0 {
return "\033[0m"
} else {
return fmt.Sprintf("\033[0;%dm", 29+c)
}
}
// TODO maybe make the text into some datastructure which remembers the color
func colorText(text string, color string, offColor string) string {
return fmt.Sprintf("%s%s%s", color, text, offColor)
}
func colorUsername(username string, offColor string) string {
var color = messageSenderDefaultColor
if username == k.Username {
color = mentionColor
}
return colorText(username, color, offColor)
}
func colorRegex(msg string, match string, color string, offColor string) string {
var re = regexp.MustCompile(match)
return re.ReplaceAllString(msg, colorText(`$1`, color, offColor))
}
func colorReplaceMentionMe(msg string, offColor string) string {
//var coloredOwnName = colorText(k.Username, mentionColor, offColor)
//return strings.Replace(msg, k.Username, coloredOwnName, -1)
return colorRegex(msg, "(@?"+k.Username+")", mentionColor, offColor)
}

61
main.go

@ -141,28 +141,33 @@ func sendChat(message string) {
} }
func formatOutput(api keybase.ChatAPI) string { func formatOutput(api keybase.ChatAPI) string {
ret := "" ret := ""
if api.Msg.Content.Type == "text" { msgType := api.Msg.Content.Type
ret = outputFormat switch (msgType) {
case "text", "attachment":
var c = messageHeaderColor
ret = colorText(outputFormat, c, noColor)
tm := time.Unix(int64(api.Msg.SentAt), 0) tm := time.Unix(int64(api.Msg.SentAt), 0)
ret = strings.Replace(ret, "$MSG", api.Msg.Content.Text.Body, 1) var msg = api.Msg.Content.Text.Body
ret = strings.Replace(ret, "$USER", api.Msg.Sender.Username, 1) // mention teams or users
ret = strings.Replace(ret, "$DEVICE", api.Msg.Sender.DeviceName, 1) msg = colorRegex(msg, `(@\w*(\.\w+)*)`, messageLinkColor, messageBodyColor)
ret = strings.Replace(ret, "$ID", fmt.Sprintf("%d", api.Msg.ID), 1) // mention URL
ret = strings.Replace(ret, "$DATE", fmt.Sprintf("%s", tm.Format(dateFormat)), 1) msg = colorRegex(msg, `(https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*))`, messageLinkColor, messageBodyColor)
ret = strings.Replace(ret, "$TIME", fmt.Sprintf("%s", tm.Format(timeFormat)), 1) msg = colorText(colorReplaceMentionMe(msg, messageBodyColor), messageBodyColor,c)
ret = strings.Replace(ret, "```", fmt.Sprintf("\n<code>\n"), 10) if msgType == "attachment" {
} msg = fmt.Sprintf("%s\n%s", msg, colorText("[Attachment]", messageAttachmentColor, c))
if api.Msg.Content.Type == "attachment" { }
ret = outputFormat
tm := time.Unix(int64(api.Msg.SentAt), 0)
ret = strings.Replace(ret, "$MSG", "ATTACHMENT MSG", 1)
ret = strings.Replace(ret, "$USER", api.Msg.Sender.Username, 1)
ret = strings.Replace(ret, "$DEVICE", api.Msg.Sender.DeviceName, 1)
ret = strings.Replace(ret, "$ID", fmt.Sprintf("%d", api.Msg.ID), 1)
ret = strings.Replace(ret, "$DATE", fmt.Sprintf("%s", tm.Format(dateFormat)), 1)
ret = strings.Replace(ret, "$TIME", fmt.Sprintf("%s", tm.Format(timeFormat)), 1)
}
user := colorUsername(api.Msg.Sender.Username, c)
device := colorText(api.Msg.Sender.Username, messageSenderDeviceColor, c)
msgId := colorText(fmt.Sprintf("%d", api.Msg.ID), messageIdColor, c)
ts := colorText(fmt.Sprintf("%s", tm.Format(timeFormat)), messageTimeColor, c)
ret = strings.Replace(ret, "$MSG", msg, 1)
ret = strings.Replace(ret, "$USER", user, 1)
ret = strings.Replace(ret, "$DEVICE", device, 1)
ret = strings.Replace(ret, "$ID", msgId, 1)
ret = strings.Replace(ret, "$TIME", ts, 1)
ret = strings.Replace(ret, "```", fmt.Sprintf("\n<code>\n"), -1)
}
return ret return ret
} }
@ -173,9 +178,9 @@ func populateList() {
} else { } else {
clearView("List") clearView("List")
var recentPMs = "---[PMs]---\n" var recentPMs = fmt.Sprintf("%s---[PMs]---%s\n", channelsHeaderColor, channelsColor);
var recentPMsCount = 0 var recentPMsCount = 0
var recentChannels = "---[Teams]---\n" var recentChannels = fmt.Sprintf("%s---[Teams]---%s\n", channelsHeaderColor, channelsColor);
var recentChannelsCount = 0 var recentChannelsCount = 0
for _, s := range testVar.Result.Conversations { for _, s := range testVar.Result.Conversations {
channels = append(channels, s.Channel) channels = append(channels, s.Channel)
@ -183,22 +188,22 @@ func populateList() {
recentChannelsCount++ recentChannelsCount++
if recentChannelsCount <= ((maxY - 2) / 3) { if recentChannelsCount <= ((maxY - 2) / 3) {
if s.Unread { if s.Unread {
recentChannels += "*" recentChannels += fmt.Sprintf("%s*",color(0))
} }
recentChannels += fmt.Sprintf("%s\n\t#%s\n", s.Channel.Name, s.Channel.TopicName) recentChannels += fmt.Sprintf("%s\n\t#%s\n%s", s.Channel.Name, s.Channel.TopicName, channelsColor)
} }
} else { } else {
recentPMsCount++ recentPMsCount++
if recentPMsCount <= ((maxY - 2) / 3) { if recentPMsCount <= ((maxY - 2) / 3) {
if s.Unread { if s.Unread {
recentPMs += "*" recentChannels += fmt.Sprintf("%s*",color(0))
} }
recentPMs += fmt.Sprintf("%s\n", cleanChannelName(s.Channel.Name)) recentPMs += fmt.Sprintf("%s\n%s", cleanChannelName(s.Channel.Name), channelsColor)
} }
} }
} }
time.Sleep(1 * time.Millisecond) time.Sleep(1 * time.Millisecond)
printToView("List", fmt.Sprintf("%s%s", recentPMs, recentChannels)) printToView("List", fmt.Sprintf("%s%s%s%s", channelsColor, recentPMs, recentChannels, noColor))
} }
} }
@ -385,7 +390,7 @@ func layout(g *gocui.Gui) error {
} }
inputView.Editable = true inputView.Editable = true
inputView.Wrap = true inputView.Wrap = true
inputView.Title = " Not in a chat /j to join" inputView.Title = fmt.Sprintf(" Not in a chat - write `%sj` to join", cmdPrefix)
g.Cursor = true g.Cursor = true
} }
if listView, err4 := g.SetView("List", 0, 0, maxX/2-maxX/3-1, maxY-1, 0); err4 != nil { if listView, err4 := g.SetView("List", 0, 0, maxX/2-maxX/3-1, maxY-1, 0); err4 != nil {

15
userConfigs.go

@ -1,8 +1,21 @@
package main package main
// Path where Downloaded files will default to // Path where Downloaded files will default to
var downloadPath = "/tmp/" var downloadPath = "/tmp/"
var colorless = false
var channelsColor = color(8)
var channelsHeaderColor = color(6)
var noColor = color(-1)
var mentionColor = color(3)
var messageHeaderColor = color(8)
var messageIdColor = color(7)
var messageTimeColor = color(6)
var messageSenderDefaultColor = color(8)
var messageSenderDeviceColor = color(8)
var messageBodyColor = noColor
var messageAttachmentColor = color(2)
var messageLinkColor = color(4)
// BASH-like PS1 variable equivalent (without colours) // BASH-like PS1 variable equivalent (without colours)
var outputFormat = "┌──[$USER@$DEVICE] [$ID] [$DATE - $TIME]\n└╼ $MSG" var outputFormat = "┌──[$USER@$DEVICE] [$ID] [$DATE - $TIME]\n└╼ $MSG"

Loading…
Cancel
Save