首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从libpurple检索另一个用户的状态(支撑Pidgin的IM库)

从libpurple检索另一个用户的状态(支撑Pidgin的IM库)
EN

Stack Overflow用户
提问于 2011-08-05 21:49:49
回答 1查看 760关注 0票数 4

我正在尝试拉取简单网络(Microsoft Office Communicator)上另一个人的当前状态。我使用的是libpurple,围绕libpurple构建了一个c++包装器,我可以在这个简单的网络上与其他用户一起发送/接收‘m。我仍然需要获取其他用户的当前状态

这是我当前尝试检索另一个用户的状态。

之前定义和初始化的:

PurpleAccount *CommonIM::m_account ->我可以使用此帐户发送邮件

代码语言:javascript
复制
// the username of the person I want to get the status of, e.g. 
username = "sip:blah@blah.blah.com";

//TEST instance 1
PurpleBuddy* newbody1 = purple_buddy_new(m_account, username.c_str(), NULL);
sleep(5);
PurplePresence *p1 = purple_buddy_get_presence(newbody1);

PurpleStatus *status1 = purple_presence_get_active_status(p1);
PurpleStatusType *statusType1 = purple_status_get_type(status1);
PurpleStatusPrimitive prim1 = purple_status_type_get_primitive(statusType1);

switch(prim1)
{
case PURPLE_STATUS_UNSET:
{
    status = "unset";
}
break;
case PURPLE_STATUS_OFFLINE:
{
    status = "offline";
}
break;
case PURPLE_STATUS_AVAILABLE:
{
    status = "available";
}
break;
case PURPLE_STATUS_UNAVAILABLE:
{
    status = "unavailable";
}
break;
case PURPLE_STATUS_INVISIBLE:
{
    status = "invisible";
}
break;
case PURPLE_STATUS_AWAY:
{
    status = "away";
}
break;
case PURPLE_STATUS_EXTENDED_AWAY:
{
    status = "extended away";
}
break;
case PURPLE_STATUS_MOBILE:
{
    status = "mobile";
}
break;
case PURPLE_STATUS_TUNE:
{
    status = "tune";
}
break;
case PURPLE_STATUS_NUM_PRIMITIVES:
default:
{
    status = "unknown";
}
break;
}

//TEST instance 1 complete
cout << _TAG << "Test instance 1: Status for " << username << " is reported as " << status << endl;

此代码始终将脱机作为状态返回。这就好像紫色在创建一个新实例后没有刷新好友,它总是保持“离线”状态。在过去的几天里,我潜入libpurple和pidgin中,试图找到它,但是找不到恢复状态的“合适”方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-07 17:15:19

由于某些原因,从signed-on信号调用它不起作用。

buddy-signed-on信号调用它对我来说很有效。当然,在这种情况下,它将为每个已登录的伙伴调用一次...

从“buddy-signal on”信号中调用的示例函数:

代码语言:javascript
复制
static void buddy_signed_on(PurpleBuddy *buddy) {
GSList *buddies = purple_blist_get_buddies();
for(; buddies; buddies = buddies->next) {
    PurpleBuddy *b = (PurpleBuddy *) buddies->data;
    PurplePresence *presence = purple_buddy_get_presence(b);
    PurpleStatus *status = purple_presence_get_active_status(presence);
    printf("%s is now %s\n", b->name, purple_status_get_id(status));
    }
}

连接信号:

代码语言:javascript
复制
purple_signal_connect(purple_blist_get_handle(), "buddy-signed-on", &handle,
          PURPLE_CALLBACK(buddy_signed_on), NULL);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6957368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档