mcabber/src/jabglue.c
changeset 321 59193965f2cb
parent 319 db45371106a5
child 325 ff6fb51bfd78
equal deleted inserted replaced
320:dce1dd4d0ca8 321:59193965f2cb
   248 }
   248 }
   249 
   249 
   250 void jb_setstatus(enum imstatus st, const char *msg)
   250 void jb_setstatus(enum imstatus st, const char *msg)
   251 {
   251 {
   252   xmlnode x;
   252   xmlnode x;
       
   253   char *utf8_msg;
   253 
   254 
   254   if (!online) return;
   255   if (!online) return;
   255 
   256 
   256   x = jutil_presnew(JPACKET__UNKNOWN, 0, 0);
   257   x = jutil_presnew(JPACKET__UNKNOWN, 0, 0);
   257 
   258 
   296   }
   297   }
   297 
   298 
   298   if (!msg)
   299   if (!msg)
   299       msg = settings_get_status_msg(st);
   300       msg = settings_get_status_msg(st);
   300 
   301 
   301   xmlnode_insert_cdata(xmlnode_insert_tag(x, "status"), msg,
   302   utf8_msg = utf8_encode(msg);
       
   303   xmlnode_insert_cdata(xmlnode_insert_tag(x, "status"), utf8_msg,
   302           (unsigned) -1);
   304           (unsigned) -1);
   303 
   305 
   304   jab_send(jc, x);
   306   jab_send(jc, x);
   305   xmlnode_free(x);
   307   xmlnode_free(x);
       
   308   free(utf8_msg);
   306 
   309 
   307   //sendvisibility();   ???
   310   //sendvisibility();   ???
   308 
   311 
   309   // We'll need to update the roster if we switch to/from offline because
   312   // We'll need to update the roster if we switch to/from offline because
   310   // we don't know the presences of buddies when offline...
   313   // we don't know the presences of buddies when offline...
   850             else if (!strcmp(ns, "xa"))   ust = notavail;
   853             else if (!strcmp(ns, "xa"))   ust = notavail;
   851             else if (!strcmp(ns, "chat")) ust = freeforchat;
   854             else if (!strcmp(ns, "chat")) ust = freeforchat;
   852           }
   855           }
   853         }
   856         }
   854 
   857 
   855         if (type && !strcmp(type, "unavailable")) {
   858         if (type && !strcmp(type, "unavailable"))
   856           ust = offline;
   859           ust = offline;
   857         }
       
   858 
   860 
   859         if ((x = xmlnode_get_tag(packet->x, "status")) != NULL)
   861         if ((x = xmlnode_get_tag(packet->x, "status")) != NULL)
   860           p = xmlnode_get_data(x);
   862           p = utf8_decode(xmlnode_get_data(x));
   861         else
   863         else
   862           p = NULL;
   864           p = NULL;
   863 
   865 
   864         r = jidtodisp(from);
   866         r = jidtodisp(from);
   865         // Call hk_statuschange() if status has changed or if the
   867         // Call hk_statuschange() if status has changed or if the
   866         // status message is different
   868         // status message is different
   867         m = roster_getstatusmsg(r);
   869         m = roster_getstatusmsg(r);
   868         if ((ust != roster_getstatus(r)) || (p && (!m || strcmp(p, m))))
   870         if ((ust != roster_getstatus(r)) || (p && (!m || strcmp(p, m))))
   869           hk_statuschange(r, 0, ust, p);
   871           hk_statuschange(r, 0, ust, p);
   870         g_free(r);
   872         g_free(r);
       
   873         if (p) free(p);
   871         break;
   874         break;
   872 
   875 
   873     case JPACKET_S10N:
   876     case JPACKET_S10N:
   874         scr_LogPrint("Received (un)subscription packet (type=%s)",
   877         scr_LogPrint("Received (un)subscription packet (type=%s)",
   875                 ((type) ? type : ""));
   878                 ((type) ? type : ""));