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 |