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