Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/msn.c @ 27967:e1cd44c7c7af
explicit merge of 'd957c051e839d63bfc0ef71320934890e7ae63c4'
and '7fbd51e5a790f5cf3275a0bb8a8198acd078b4ec'
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Sat, 25 Jul 2009 04:54:36 +0000 |
parents | 85fa979b08c2 8cfc45425ac7 |
children | 4a2adf413aaa |
comparison
equal
deleted
inserted
replaced
27966:b4daae0798e3 | 27967:e1cd44c7c7af |
---|---|
90 { | 90 { |
91 char *smile; | 91 char *smile; |
92 MsnObject *obj; | 92 MsnObject *obj; |
93 } MsnEmoticon; | 93 } MsnEmoticon; |
94 | 94 |
95 typedef struct | |
96 { | |
97 PurpleConnection *pc; | |
98 PurpleBuddy *buddy; | |
99 PurpleGroup *group; | |
100 } MsnAddReqData; | |
101 | |
95 static const char * | 102 static const char * |
96 msn_normalize(const PurpleAccount *account, const char *str) | 103 msn_normalize(const PurpleAccount *account, const char *str) |
97 { | 104 { |
98 static char buf[BUF_LEN]; | 105 static char buf[BUF_LEN]; |
99 char *tmp; | 106 char *tmp; |
178 | 185 |
179 session = gc->proto_data; | 186 session = gc->proto_data; |
180 cmdproc = session->notification->cmdproc; | 187 cmdproc = session->notification->cmdproc; |
181 account = purple_connection_get_account(gc); | 188 account = purple_connection_get_account(gc); |
182 | 189 |
183 if(entry && strlen(entry)) { | 190 if(entry && *entry) { |
184 tmp = botch_utf(entry, strlen(entry), &dummy); | 191 tmp = botch_utf(entry, strlen(entry), &dummy); |
185 alias = purple_url_encode(tmp); | 192 alias = purple_url_encode(g_strstrip(tmp)); |
186 g_free(tmp); | 193 g_free(tmp); |
187 } | 194 } |
188 else | 195 else |
189 alias = ""; | 196 alias = ""; |
190 | 197 |
694 office = purple_status_get_attr_string(status, "office"); | 701 office = purple_status_get_attr_string(status, "office"); |
695 | 702 |
696 if (title && *title) { | 703 if (title && *title) { |
697 const char *artist = purple_status_get_attr_string(status, PURPLE_TUNE_ARTIST); | 704 const char *artist = purple_status_get_attr_string(status, PURPLE_TUNE_ARTIST); |
698 const char *album = purple_status_get_attr_string(status, PURPLE_TUNE_ALBUM); | 705 const char *album = purple_status_get_attr_string(status, PURPLE_TUNE_ALBUM); |
699 media = g_strdup_printf("%s%s%s%s%s%s", title, | 706 media = purple_util_format_song_info(title, artist, album, NULL); |
700 (artist && *artist) ? " - " : "", | 707 return media; |
701 (artist && *artist) ? artist : "", | |
702 (album && *album) ? " (" : "", | |
703 (album && *album) ? album : "", | |
704 (album && *album) ? ")" : ""); | |
705 } | 708 } |
706 else if (game && *game) | 709 else if (game && *game) |
707 media = g_strdup_printf("Playing %s", game); | 710 media = g_strdup_printf("Playing %s", game); |
708 else if (office && *office) | 711 else if (office && *office) |
709 media = g_strdup_printf("Editing %s", office); | 712 media = g_strdup_printf("Editing %s", office); |
1416 add_pending_buddy(MsnSession *session, | 1419 add_pending_buddy(MsnSession *session, |
1417 const char *who, | 1420 const char *who, |
1418 MsnNetwork network, | 1421 MsnNetwork network, |
1419 MsnUser *user) | 1422 MsnUser *user) |
1420 { | 1423 { |
1421 MsnUserList *userlist = session->userlist; | |
1422 MsnUser *user2; | |
1423 char *group; | 1424 char *group; |
1424 | 1425 |
1425 g_return_if_fail(user != NULL); | 1426 g_return_if_fail(user != NULL); |
1426 | 1427 |
1427 group = msn_user_remove_pending_group(user); | 1428 group = msn_user_remove_pending_group(user); |
1428 | 1429 |
1429 user2 = msn_userlist_find_user(userlist, who); | 1430 if (network != MSN_NETWORK_UNKNOWN) { |
1430 if (user2 != NULL) { | 1431 MsnUserList *userlist = session->userlist; |
1431 /* User already in userlist, so just update it. */ | 1432 MsnUser *user2 = msn_userlist_find_user(userlist, who); |
1433 if (user2 != NULL) { | |
1434 /* User already in userlist, so just update it. */ | |
1435 msn_user_destroy(user); | |
1436 user = user2; | |
1437 } else { | |
1438 msn_userlist_add_user(userlist, user); | |
1439 } | |
1440 | |
1441 msn_user_set_network(user, network); | |
1442 msn_userlist_add_buddy(userlist, who, group); | |
1443 } | |
1444 else | |
1445 { | |
1446 PurpleBuddy * buddy = purple_find_buddy(session->account, who); | |
1447 gchar *buf; | |
1448 buf = g_strdup_printf(_("Unable to add the buddy %s because the username is invalid. Usernames must be a valid email address."), who); | |
1449 if (!purple_conv_present_error(who, session->account, buf)) | |
1450 purple_notify_error(purple_account_get_connection(session->account), NULL, _("Unable to Add"), buf); | |
1451 g_free(buf); | |
1452 | |
1453 /* Remove from local list */ | |
1454 purple_blist_remove_buddy(buddy); | |
1432 msn_user_destroy(user); | 1455 msn_user_destroy(user); |
1433 user = user2; | 1456 } |
1434 } else { | |
1435 msn_userlist_add_user(userlist, user); | |
1436 } | |
1437 | |
1438 msn_user_set_network(user, network); | |
1439 msn_userlist_add_buddy(userlist, who, group); | |
1440 g_free(group); | 1457 g_free(group); |
1441 } | 1458 } |
1442 | 1459 |
1443 static void | 1460 static void |
1444 msn_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) | 1461 finish_auth_request(MsnAddReqData *data, char *msg) |
1445 { | 1462 { |
1463 PurpleConnection *pc; | |
1464 PurpleBuddy *buddy; | |
1465 PurpleGroup *group; | |
1466 PurpleAccount *account; | |
1446 MsnSession *session; | 1467 MsnSession *session; |
1447 MsnUserList *userlist; | 1468 MsnUserList *userlist; |
1448 const char *who, *gname; | 1469 const char *who, *gname; |
1449 MsnUser *user; | 1470 MsnUser *user; |
1450 | 1471 |
1451 session = gc->proto_data; | 1472 pc = data->pc; |
1473 buddy = data->buddy; | |
1474 group = data->group; | |
1475 g_free(data); | |
1476 | |
1477 account = purple_connection_get_account(pc); | |
1478 session = pc->proto_data; | |
1452 userlist = session->userlist; | 1479 userlist = session->userlist; |
1453 who = msn_normalize(purple_connection_get_account(gc), purple_buddy_get_name(buddy)); | 1480 |
1454 | 1481 who = msn_normalize(account, purple_buddy_get_name(buddy)); |
1455 gname = group ? purple_group_get_name(group) : NULL; | 1482 gname = group ? purple_group_get_name(group) : NULL; |
1456 purple_debug_info("msn", "Add user:%s to group:%s\n", who, gname ? gname : "(null)"); | 1483 purple_debug_info("msn", "Add user:%s to group:%s\n", who, gname ? gname : "(null)"); |
1457 if (!session->logged_in) | 1484 if (!session->logged_in) |
1458 { | 1485 { |
1459 purple_debug_error("msn", "msn_add_buddy called before connected\n"); | 1486 purple_debug_error("msn", "msn_add_buddy called before connected\n"); |
1466 * internal. */ | 1493 * internal. */ |
1467 user = msn_userlist_find_user(userlist, who); | 1494 user = msn_userlist_find_user(userlist, who); |
1468 if ((user != NULL) && (user->networkid != MSN_NETWORK_UNKNOWN)) { | 1495 if ((user != NULL) && (user->networkid != MSN_NETWORK_UNKNOWN)) { |
1469 /* We already know this buddy and their network. This function knows | 1496 /* We already know this buddy and their network. This function knows |
1470 what to do with users already in the list and stuff... */ | 1497 what to do with users already in the list and stuff... */ |
1498 msn_user_set_invite_message(user, msg); | |
1471 msn_userlist_add_buddy(userlist, who, gname); | 1499 msn_userlist_add_buddy(userlist, who, gname); |
1472 } else { | 1500 } else { |
1473 char **tokens; | 1501 char **tokens; |
1474 char *fqy; | 1502 char *fqy; |
1475 /* We need to check the network for this buddy first */ | 1503 /* We need to check the network for this buddy first */ |
1476 user = msn_user_new(userlist, who, NULL); | 1504 user = msn_user_new(userlist, who, NULL); |
1505 msn_user_set_invite_message(user, msg); | |
1477 msn_user_set_pending_group(user, gname); | 1506 msn_user_set_pending_group(user, gname); |
1478 msn_user_set_network(user, MSN_NETWORK_UNKNOWN); | 1507 msn_user_set_network(user, MSN_NETWORK_UNKNOWN); |
1479 tokens = g_strsplit(who, "@", 2); | 1508 tokens = g_strsplit(who, "@", 2); |
1480 fqy = g_strdup_printf("<ml><d n=\"%s\"><c n=\"%s\"/></d></ml>", | 1509 fqy = g_strdup_printf("<ml><d n=\"%s\"><c n=\"%s\"/></d></ml>", |
1481 tokens[1], | 1510 tokens[1], |
1483 msn_notification_send_fqy(session, fqy, strlen(fqy), | 1512 msn_notification_send_fqy(session, fqy, strlen(fqy), |
1484 (MsnFqyCb)add_pending_buddy, user); | 1513 (MsnFqyCb)add_pending_buddy, user); |
1485 g_free(fqy); | 1514 g_free(fqy); |
1486 g_strfreev(tokens); | 1515 g_strfreev(tokens); |
1487 } | 1516 } |
1517 } | |
1518 | |
1519 static void | |
1520 cancel_auth_request(MsnAddReqData *data, char *msg) | |
1521 { | |
1522 /* Remove from local list */ | |
1523 purple_blist_remove_buddy(data->buddy); | |
1524 | |
1525 g_free(data); | |
1526 } | |
1527 | |
1528 static void | |
1529 msn_add_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) | |
1530 { | |
1531 const char *bname; | |
1532 MsnAddReqData *data; | |
1533 | |
1534 bname = purple_buddy_get_name(buddy); | |
1535 | |
1536 if (!purple_email_is_valid(bname)) { | |
1537 gchar *buf; | |
1538 buf = g_strdup_printf(_("Unable to add the buddy %s because the username is invalid. Usernames must be a valid email address."), bname); | |
1539 if (!purple_conv_present_error(bname, purple_connection_get_account(gc), buf)) | |
1540 purple_notify_error(gc, NULL, _("Unable to Add"), buf); | |
1541 g_free(buf); | |
1542 | |
1543 /* Remove from local list */ | |
1544 purple_blist_remove_buddy(buddy); | |
1545 | |
1546 return; | |
1547 } | |
1548 | |
1549 data = g_new0(MsnAddReqData, 1); | |
1550 data->pc = gc; | |
1551 data->buddy = buddy; | |
1552 data->group = group; | |
1553 | |
1554 purple_request_input(gc, NULL, _("Authorization Request Message:"), | |
1555 NULL, _("Please authorize me!"), TRUE, FALSE, NULL, | |
1556 _("_OK"), G_CALLBACK(finish_auth_request), | |
1557 _("_Cancel"), G_CALLBACK(cancel_auth_request), | |
1558 purple_connection_get_account(gc), bname, NULL, | |
1559 data); | |
1488 } | 1560 } |
1489 | 1561 |
1490 static void | 1562 static void |
1491 msn_rem_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) | 1563 msn_rem_buddy(PurpleConnection *gc, PurpleBuddy *buddy, PurpleGroup *group) |
1492 { | 1564 { |