aboutsummaryrefslogtreecommitdiffstats
path: root/extra/dircproxy/1.1.0-less-lag-on-attach.patch
blob: 2eb3998db1c1ea4e4b5af0874e6931f2313c2e4e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
--- a/src/irc_client.c	2005-01-06 02:48:12.964637427 +0100
+++ b/src/irc_client.c.lessflood	2005-01-06 02:47:50.433376383 +0100
@@ -1910,13 +1910,34 @@
   /* Recall channel log files, and get channel topic and members from server */
   if (p->channels) {
     struct ircchannel *c;
+    unsigned int cnames_length = 0;
+    char *cnames = 0;
+
+    c = p->channels;
+    while (c) {
+      if (!c->inactive && !c->unjoined) {
+        cnames_length += strlen(c->name) + 1; // +1 to hold comma
+      }
+
+      c = c->next;
+    }
+
+    if(cnames_length)
+    {
+      cnames = (char *)malloc(cnames_length + 1);
+      memset(cnames, 0, cnames_length + 1);
+    }
 
     c = p->channels;
     while (c) {
       if (!c->inactive && !c->unjoined) {
         ircclient_send_selfcmd(p, "JOIN", ":%s", c->name);
-        ircserver_send_command(p, "TOPIC", ":%s", c->name);
-        ircserver_send_command(p, "NAMES", ":%s", c->name);
+        if(cnames_length) {
+          if(c == p->channels) // first channel in list
+            sprintf(cnames, "%s", c->name);
+          else
+            sprintf(cnames, "%s,%s", cnames, c->name);
+        }
 
         if (p->conn_class->chan_log_enabled) {
           irclog_autorecall(p, c->name);
@@ -1926,6 +1948,13 @@
 
       c = c->next;
     }
+    
+    if(cnames_length)
+    {
+      ircserver_send_command(p, "TOPIC", ":%s", cnames);
+      ircserver_send_command(p, "NAMES", ":%s", cnames);
+      free(cnames);
+    }
   }
 
   /* Recall private log file */