mcabber/src/jabglue.c
changeset 1016 4d3c48844746
parent 1015 579299b1c9b2
child 1017 41f9a2a4c1de
equal deleted inserted replaced
1015:579299b1c9b2 1016:4d3c48844746
  1225       xmlnode_insert_cdata(xmlnode_insert_tag(x, "password"), passwd, -1);
  1225       xmlnode_insert_cdata(xmlnode_insert_tag(x, "password"), passwd, -1);
  1226   }
  1226   }
  1227 
  1227 
  1228   if (online)
  1228   if (online)
  1229     send_storage_bookmarks();
  1229     send_storage_bookmarks();
       
  1230   else
       
  1231     scr_LogPrint(LPRINT_LOGNORM,
       
  1232                  "Warning: you're not connected to the server.");
       
  1233 }
       
  1234 
       
  1235 //  jb_get_storage_rosternotes(barejid)
       
  1236 // Return thenote associated to this jid.
       
  1237 // The caller should g_free the string after use.
       
  1238 char *jb_get_storage_rosternotes(const char *barejid)
       
  1239 {
       
  1240   xmlnode x;
       
  1241 
       
  1242   if (!barejid)
       
  1243     return NULL;
       
  1244 
       
  1245   // If we have no rosternotes, probably the server doesn't support them.
       
  1246   if (!rosternotes) {
       
  1247     scr_LogPrint(LPRINT_LOGNORM,
       
  1248                  "Sorry, your server doesn't seem to support private storage.");
       
  1249     return NULL;
       
  1250   }
       
  1251 
       
  1252   // Walk through the storage tags
       
  1253   x = xmlnode_get_firstchild(rosternotes);
       
  1254   for ( ; x; x = xmlnode_get_nextsibling(x)) {
       
  1255     const char *jid;
       
  1256     const char *p;
       
  1257     p = xmlnode_get_name(x);
       
  1258     // If the current node is a conference item, see if we have to replace it.
       
  1259     if (p && !strcmp(p, "note")) {
       
  1260       jid = xmlnode_get_attrib(x, "jid");
       
  1261       if (!jid)
       
  1262         continue;
       
  1263       if (!strcmp(jid, barejid)) {
       
  1264         // We've found a note for this contact.
       
  1265         return g_strdup(xmlnode_get_data(x));
       
  1266       }
       
  1267     }
       
  1268   }
       
  1269   return NULL;  // No note found
       
  1270 }
       
  1271 
       
  1272 //  jb_set_storage_rosternotes(barejid, note)
       
  1273 // Update the private storage rosternotes: add/delete a note.
       
  1274 // If note is nil, we remove the existing note.
       
  1275 void jb_set_storage_rosternotes(const char *barejid, const char *note)
       
  1276 {
       
  1277   xmlnode x;
       
  1278 
       
  1279   if (!barejid)
       
  1280     return;
       
  1281 
       
  1282   // If we have no rosternotes, probably the server doesn't support them.
       
  1283   if (!rosternotes) {
       
  1284     scr_LogPrint(LPRINT_LOGNORM,
       
  1285                  "Sorry, your server doesn't seem to support private storage.");
       
  1286     return;
       
  1287   }
       
  1288 
       
  1289   // Walk through the storage tags
       
  1290   x = xmlnode_get_firstchild(rosternotes);
       
  1291   for ( ; x; x = xmlnode_get_nextsibling(x)) {
       
  1292     const char *jid;
       
  1293     const char *p;
       
  1294     p = xmlnode_get_name(x);
       
  1295     // If the current node is a conference item, see if we have to replace it.
       
  1296     if (p && !strcmp(p, "note")) {
       
  1297       jid = xmlnode_get_attrib(x, "jid");
       
  1298       if (!jid)
       
  1299         continue;
       
  1300       if (!strcmp(jid, barejid)) {
       
  1301         // We've found a note for this jid.  Let's hide it and we'll
       
  1302         // create a new one.
       
  1303         xmlnode_hide(x);
       
  1304         break;
       
  1305       }
       
  1306     }
       
  1307   }
       
  1308 
       
  1309   // Let's create a node for this jid, if the note is not NULL.
       
  1310   if (note) {
       
  1311     x = xmlnode_insert_tag(rosternotes, "note");
       
  1312     xmlnode_put_attrib(x, "jid", barejid);
       
  1313     xmlnode_insert_cdata(x, note, -1);
       
  1314   }
       
  1315 
       
  1316   if (online)
       
  1317     send_storage_rosternotes();
  1230   else
  1318   else
  1231     scr_LogPrint(LPRINT_LOGNORM,
  1319     scr_LogPrint(LPRINT_LOGNORM,
  1232                  "Warning: you're not connected to the server.");
  1320                  "Warning: you're not connected to the server.");
  1233 }
  1321 }
  1234 
  1322