ref: df15f8864de803d47d28227233f504623ea3d874
parent: d993f492a7374c719ec879c0659e3224ec1b7fd3
author: Ori Bernstein <ori@eigenstate.org>
date: Sun Mar 18 19:42:20 EDT 2018
A few cleanups/robustness improvements.
--- a/irc.myr
+++ b/irc.myr
@@ -24,7 +24,7 @@
;;
const io = {irc, fd- var src, cmd, args
+ var src, cmd, args, a0
var srv, ln
srv = fd2srv(irc, fd)
@@ -43,6 +43,7 @@
| `std.None: -> void
;;
(src, cmd, args) = parse(ln)
+ a0 = args.len > 0 ? args[0] : ""
uppercase(cmd)
match cmd
| "001": srvmsg(irc, args)
@@ -66,10 +67,12 @@
| "PART": delchanuser(irc, srv, src, args)
| "366": shownames(irc, srv, args, 1)
| "PRIVMSG": recievemsg(irc, srv, src, args)
- | "PING": send(irc, srv, "PONG :{}\r\n", args[0])+ | "PING": send(irc, srv, "PONG :{}\r\n", a0)| "JOIN": joined(irc, srv, src, args)
| "NICK": renamed(irc, srv, src, args)
| "PONG": /* ignore; we update the time in the read */
+ | "MODE": /* ignore: nothing to do here */
+ | "KICK": status(irc, curchan(irc), "kicked {}\n", a0) | c: status(irc, irc.self, "unknown server command {}", ln);;
std.slfree(args)
@@ -85,17 +88,18 @@
const renamed = {irc, srv, src, argsvar a, b
- if args.len > 0
- for c : srv.chan
- a = displayname(src)
- b = displayname(args[0])
- match std.lsearch(c.users, a, std.strcmp)
- | `std.None: /* skip */
- | `std.Some i:
- std.slfree(c.users[i])
- c.users[i] = std.sldup(b)
- status(irc, c, "changed nick: {} => {}", a, b)- ;;
+ if args.len == 0
+ -> void
+ ;;
+ for c : srv.chan
+ a = displayname(src)
+ b = displayname(args[0])
+ match std.lsearch(c.users, a, std.strcmp)
+ | `std.None: /* skip */
+ | `std.Some i:
+ std.slfree(c.users[i])
+ c.users[i] = std.sldup(b)
+ status(irc, c, "changed nick: {} => {}", a, b);;
;;
}
@@ -154,7 +158,7 @@
;;
c = name2chan(irc, srv, args[2])
for n : std.bysplit(args[3], " ")
- n = std.strstrip(n)
+ n = displayname(n)
match std.lsearch(c.users, n, std.strcmp)
| `std.None: std.slpush(&c.users, std.sldup(n))
| `std.Some _: /* ignore */
@@ -517,8 +521,6 @@
;;
srv = irc.srv[irc.focus]
if srv.chan.len > 0
- srv.chan[srv.focus].stale = false
- srv.chan[srv.focus].flagged = false
break
;;
;;
--- a/main.myr
+++ b/main.myr
@@ -34,8 +34,10 @@
irc = mkirc(rcfile, logdir)
while true
- redraw(irc)
c = curchan(irc)
+ c.stale = false
+ c.flagged = false
+ redraw(irc)
fd = poll(irc)
/* we can get interrupted by sigwinch */
if fd <= 0
--
⑨