Targeted library message to correct Irssi window
authorPekka Riikonen <priikone@silcnet.org>
Mon, 28 Apr 2014 18:49:23 +0000 (21:49 +0300)
committerPekka Riikonen <priikone@silcnet.org>
Mon, 28 Apr 2014 18:49:23 +0000 (21:49 +0300)
Add support for sending the library generated say-operation messages
to correct window using either nickname or channel name as the target.
Irssi does the rest to show the message in correct window.

apps/irssi/src/silc/core/client_ops.c

index 75f3b147728d15937001fcac93bf36d6e0b595bd..41ace322591b7268ead442d55c4fb7cd2ca241c9 100644 (file)
@@ -212,14 +212,26 @@ void silc_say(SilcClient client, SilcClientConnection conn,
              SilcClientMessageType type, char *msg, ...)
 {
   SILC_SERVER_REC *server;
+  char *target = NULL;
   va_list va;
   char *str;
 
   server = conn == NULL ? NULL : conn->context;
 
+  switch (conn->context_type) {
+    case SILC_ID_CLIENT:
+      target = (conn->client_entry->nickname[0] ?
+               conn->client_entry->nickname : NULL);
+    break;
+
+    case SILC_ID_CHANNEL:
+      target = conn->channel_entry->channel_name;
+    break;
+  }
+
   va_start(va, msg);
   str = g_strdup_vprintf(msg, va);
-  printtext(server, NULL, MSGLEVEL_CRAP, "%s", str);
+  printtext(server, target, MSGLEVEL_CRAP, "%s", str);
   g_free(str);
   va_end(va);
 }
@@ -1407,7 +1419,7 @@ typedef struct {
   SilcIdType id_type;
 } *GetkeyContext;
 
-void silc_getkey_cb(bool success, void *context)
+void silc_getkey_cb(SilcBool success, void *context)
 {
   GetkeyContext getkey = (GetkeyContext)context;
   char *entity = (getkey->id_type == SILC_ID_CLIENT ? "user" : "server");