@ -5,6 +5,7 @@ import (
"log"
"os"
"os/signal"
"strings"
"sync"
"syscall"
@ -12,6 +13,7 @@ import (
"github.com/manifoldco/promptui"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"go.yarn.social/lextwt"
"go.mills.io/salty"
"go.mills.io/saltyim"
@ -38,7 +40,8 @@ messages to the user via their endpoint.`,
Run : func ( cmd * cobra . Command , args [ ] string ) {
uri := viper . GetString ( "uri" )
identity := viper . GetString ( "identity" )
chat ( identity , uri , args [ 0 ] )
inbox := viper . GetString ( "inbox" )
chat ( identity , uri , inbox , args [ 0 ] )
} ,
}
@ -46,7 +49,7 @@ func init() {
rootCmd . AddCommand ( chatCmd )
}
func chat ( identity , uri string , user string ) {
func chat ( identity , uri , inbox , user string ) {
key , me , err := saltyim . GetIdentity ( identity )
if err != nil {
fmt . Fprintf ( os . Stderr , "error opening identity: %q" , identity )
@ -63,10 +66,11 @@ func chat(identity, uri string, user string) {
os . Exit ( 2 )
}
inbox := os . Getenv ( "USER" )
tm . Clear ( )
tm . Printf ( "Chatting with %s\n" , user )
tm . Printf ( "Chatting as %s" , me )
tm . Printf ( " via %s/%s\n" , uri , inbox )
tm . Printf ( " with %s" , user )
tm . Printf ( " via %s\n" , config . Endpoint )
tm . Flush ( )
stop := make ( chan struct { } )
@ -86,8 +90,21 @@ func chat(identity, uri string, user string) {
go func ( ) {
defer wg . Done ( )
for msg := range saltyim . Read ( key , uri , inbox , stop ) {
tm . Println ( formatMsg ( msg ) )
tm . Flush ( )
s , err := lextwt . ParseSalty ( msg )
if err != nil {
continue
}
switch s := s . ( type ) {
case * lextwt . SaltyEvent :
case * lextwt . SaltyText :
if s . User . String ( ) != user {
continue
}
tm . Println ( formatMsg ( msg ) )
tm . Flush ( )
}
}
} ( )
wg . Add ( 1 )
@ -101,6 +118,10 @@ func chat(identity, uri string, user string) {
break
}
if strings . TrimSpace ( msg ) == "" {
continue
}
b , err := salty . Encrypt ( key , packMsg ( me , msg ) , [ ] string { config . Key } )
if err != nil {
log . Fatalf ( "error encrypting message: %v" , err )