mcabber/src/jabglue.c
changeset 534 3569d38f7bbb
parent 533 c478e8f7f074
child 535 b407d19c39ab
equal deleted inserted replaced
533:c478e8f7f074 534:3569d38f7bbb
   286   to = g_strdup_printf("%s/%s", jid, nickname);
   286   to = g_strdup_printf("%s/%s", jid, nickname);
   287   jb_setstatus(pres->st, to, pres->msg);
   287   jb_setstatus(pres->st, to, pres->msg);
   288   g_free(to);
   288   g_free(to);
   289 }
   289 }
   290 
   290 
   291 void jb_setstatus(enum imstatus st, const char *recipient, const char *msg)
   291 //  presnew(status, recipient, message)
   292 {
   292 // Create an xmlnode with default presence attributes
       
   293 // Note: the caller must free the node after use
       
   294 static xmlnode presnew(enum imstatus st, const char *recipient,
       
   295                         const char *msg)
       
   296 {
       
   297   unsigned int prio;
   293   xmlnode x;
   298   xmlnode x;
   294   gchar *utf8_msg;
       
   295   unsigned int prio;
       
   296   struct T_presence room_presence;
       
   297 
       
   298   if (!online) return;
       
   299 
   299 
   300   x = jutil_presnew(JPACKET__UNKNOWN, 0, 0);
   300   x = jutil_presnew(JPACKET__UNKNOWN, 0, 0);
   301 
   301 
   302   if (recipient)
   302   if (recipient)
   303     xmlnode_put_attrib(x, "to", recipient);
   303     xmlnode_put_attrib(x, "to", recipient);
   338   prio = settings_opt_get_int("priority");
   338   prio = settings_opt_get_int("priority");
   339   if (prio) {
   339   if (prio) {
   340     char strprio[8];
   340     char strprio[8];
   341     snprintf(strprio, 8, "%u", prio);
   341     snprintf(strprio, 8, "%u", prio);
   342     xmlnode_insert_cdata(xmlnode_insert_tag(x, "priority"),
   342     xmlnode_insert_cdata(xmlnode_insert_tag(x, "priority"),
   343             strprio, (unsigned) -1);
   343                          strprio, (unsigned) -1);
   344   }
   344   }
       
   345 
       
   346   if (msg) {
       
   347     gchar *utf8_msg = to_utf8(msg);
       
   348     xmlnode_insert_cdata(xmlnode_insert_tag(x, "status"), utf8_msg,
       
   349                          (unsigned) -1);
       
   350     g_free(utf8_msg);
       
   351   }
       
   352 
       
   353   return x;
       
   354 }
       
   355 
       
   356 void jb_setstatus(enum imstatus st, const char *recipient, const char *msg)
       
   357 {
       
   358   xmlnode x;
       
   359   struct T_presence room_presence;
       
   360 
       
   361   if (!online) return;
   345 
   362 
   346   if (msg) {
   363   if (msg) {
   347     // The status message has been specified.  We'll use it, unless it is
   364     // The status message has been specified.  We'll use it, unless it is
   348     // "-" which is a special case (option meaning "no status message").
   365     // "-" which is a special case (option meaning "no status message").
   349     if (!strcmp(msg, "-"))
   366     if (!strcmp(msg, "-"))
   360       else
   377       else
   361         msg = "";
   378         msg = "";
   362     }
   379     }
   363   }
   380   }
   364 
   381 
   365   utf8_msg = to_utf8(msg);
   382   x = presnew(st, recipient, msg);
   366   xmlnode_insert_cdata(xmlnode_insert_tag(x, "status"), utf8_msg,
       
   367           (unsigned) -1);
       
   368 
       
   369   jab_send(jc, x);
   383   jab_send(jc, x);
   370   g_free(utf8_msg);
       
   371   xmlnode_free(x);
   384   xmlnode_free(x);
   372 
   385 
   373   // If we didn't change our _global_ status, we are done
   386   // If we didn't change our _global_ status, we are done
   374   if (recipient) return;
   387   if (recipient) return;
   375 
   388