an experimental irc client

perf: push ctx.redraw = true one level lower

rockorager.dev fef9ef6d 67f8bdc5

verified
+9 -1
spunky.perf

This is a binary file and will not be displayed.

+9 -1
src/irc.zig
··· 1867 1867 defer self.read_buf_mutex.unlock(); 1868 1868 var i: usize = 0; 1869 1869 while (std.mem.indexOfPos(u8, self.read_buf.items, i, "\r\n")) |idx| { 1870 - ctx.redraw = true; 1871 1870 defer i = idx + 2; 1872 1871 log.debug("[<-{s}] {s}", .{ 1873 1872 self.config.name orelse self.config.server, ··· 2069 2068 if (mem.eql(u8, channel_name, "*")) return; 2070 2069 var channel = try client.getOrCreateChannel(channel_name); 2071 2070 channel.in_flight.who = false; 2071 + ctx.redraw = true; 2072 2072 }, 2073 2073 .RPL_NAMREPLY => { 2074 2074 // syntax: <client> <symbol> <channel> :[<prefix>]<nick>{ [<prefix>]<nick>} ··· 2104 2104 const channel_name = iter.next() orelse return; // channel 2105 2105 var channel = try client.getOrCreateChannel(channel_name); 2106 2106 channel.in_flight.names = false; 2107 + ctx.redraw = true; 2107 2108 }, 2108 2109 .BOUNCER => { 2109 2110 var iter = msg.paramIterator(); ··· 2139 2140 cfg.network_nick = try self.alloc.dupe(u8, kv[n + 1 ..]); 2140 2141 } 2141 2142 try self.app.connect(cfg); 2143 + ctx.redraw = true; 2142 2144 } 2143 2145 } 2144 2146 }, ··· 2150 2152 // If there are any params, the user is away. Otherwise 2151 2153 // they are back. 2152 2154 user.away = if (iter.next()) |_| true else false; 2155 + ctx.redraw = true; 2153 2156 }, 2154 2157 .BATCH => { 2155 2158 var iter = msg.paramIterator(); ··· 2171 2174 chan.history_requested = false; 2172 2175 _ = client.batches.remove(key); 2173 2176 self.alloc.free(key); 2177 + ctx.redraw = true; 2174 2178 }, 2175 2179 else => {}, 2176 2180 } ··· 2221 2225 self.app.explicit_join = false; 2222 2226 } 2223 2227 } else try channel.addMember(user, .{}); 2228 + ctx.redraw = true; 2224 2229 }, 2225 2230 .MARKREAD => { 2226 2231 var iter = msg.paramIterator(); ··· 2242 2247 if (!channel.has_unread) { 2243 2248 channel.has_unread_highlight = false; 2244 2249 } 2250 + ctx.redraw = true; 2245 2251 }, 2246 2252 .PART => { 2247 2253 // get the user ··· 2266 2272 const channel = try client.getOrCreateChannel(target); 2267 2273 channel.removeMember(user); 2268 2274 } 2275 + ctx.redraw = true; 2269 2276 }, 2270 2277 .PRIVMSG, .NOTICE => { 2278 + ctx.redraw = true; 2271 2279 // syntax: <target> :<message> 2272 2280 const msg2 = Message.init(try self.app.alloc.dupe(u8, msg.bytes)); 2273 2281