static gboolean purple_sound_play_required(const PurpleAccount *account) { gint pref_status = purple_prefs_get_int("/purple/sound/while_status"); if (pref_status == PURPLE_SOUND_STATUS_ALWAYS) { /* Play sounds: Always */ return TRUE; } if (account != NULL) { PurpleStatus *status = purple_account_get_active_status(account); if (purple_status_is_online(status)) { gboolean available = purple_status_is_available(status); return (( available && pref_status == PURPLE_SOUND_STATUS_AVAILABLE) || (!available && pref_status == PURPLE_SOUND_STATUS_AWAY)); } } /* We get here a couple of ways. Either the request has been OK'ed * by purple_sound_play_event() and we're here because the UI has * called purple_sound_play_file(), or we're here for something * not related to an account (like testing a sound). */ return TRUE; }
Data IMInvoker::statusToData(PurpleStatus *status) { Data data; const char* statusName = purple_status_get_name(status); if (statusName) data.compound["name"] = Data(statusName, Data::VERBATIM); PurpleStatusType* statusType = PURPLE_STATUS_GET_TYPE(status); GList *statusAttrElem; PURPLE_STATUS_ATTR* statusAttr; GList *statusAttrList = purple_status_type_get_attrs(statusType); for(statusAttrElem = statusAttrList; statusAttrElem; statusAttrElem = statusAttrElem->next) { statusAttr = (PURPLE_STATUS_ATTR*)statusAttrElem->data; const char* statusAttrId = PURPLE_STATUS_ATTR_GET_ID(statusAttr); PURPLE_VALUE* statusValue = purple_status_get_attr_value(status, statusAttrId); if (statusValue) { data.compound[statusAttrId] = purpleValueToData(statusValue); } } data.compound["active"] = Data((bool)purple_status_is_active(status)); data.compound["available"] = Data((bool)purple_status_is_available(status)); data.compound["exclusive"] = Data((bool)purple_status_is_exclusive(status)); data.compound["active"] = Data((bool)purple_status_is_active(status)); data.compound["independent"] = Data((bool)purple_status_is_independent(status)); data.compound["online"] = Data((bool)purple_status_is_online(status)); return data; }
static void do_prpl_change_account_status(PurpleAccount *account, PurpleStatus *old_status, PurpleStatus *new_status) { PurplePlugin *prpl; PurplePluginProtocolInfo *prpl_info; if (purple_status_is_online(new_status) && purple_account_is_disconnected(account) && purple_network_is_available()) { purple_account_connect(account); return; } if (!purple_status_is_online(new_status)) { if (!purple_account_is_disconnected(account)) purple_account_disconnect(account); /* Clear out the unsaved password if we're already disconnected and we switch to offline status */ else if (!purple_account_get_remember_password(account)) purple_account_set_password(account, NULL); return; } if (purple_account_is_connecting(account)) /* * We don't need to call the set_status PRPL function because * the PRPL will take care of setting its status during the * connection process. */ return; prpl = purple_find_prpl(purple_account_get_protocol_id(account)); if (prpl == NULL) return; prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(prpl); if (!purple_account_is_disconnected(account) && prpl_info->set_status != NULL) { prpl_info->set_status(account, new_status); } }
static gboolean should_notify_unavailable (PurpleAccount *account) { PurpleStatus *status; if (!purple_prefs_get_bool ("/plugins/gtk/libnotify/only_available")) return TRUE; status = purple_account_get_active_status (account); return purple_status_is_online (status) && purple_status_is_available (status); }
QuetzalAccount::QuetzalAccount(const QString &id, QuetzalProtocol *protocol) : Account(id, protocol) { Q_ASSERT(!"Shouldn't use this constructor"); m_isLoading = false; Config cfg = config(); QString purpleId = id; if (protocol->id() == QLatin1String("irc")) { purpleId = cfg.value(QLatin1String("nicks"), QStringList()).value(0); purpleId += QLatin1Char('@'); int size = cfg.beginArray("servers"); if (size == 0) { qCritical("Invalid irc account without server info: \"%s\"", qPrintable(id)); deleteLater(); return; } cfg.setArrayIndex(0); purpleId += cfg.value(QLatin1String("hostName"), QString()); cfg.endArray(); } m_account = purple_account_new(purpleId.toUtf8(), protocol->plugin()->info->id); m_account->ui_data = this; fillStatusActions(); setContactsFactory(new QuetzalContactsFactory(this)); // if (PURPLE_PLUGIN_PROTOCOL_INFO(m_account->gc->prpl)->chat_info != NULL) { // addAction((new ActionGenerator(QIcon(), QT_TRANSLATE_NOOP("Quetzal", "Join groupchat"), this, SLOT(showJoinGroupChat())))->setType(1)); // } debug() << "created!" << this << m_account->protocol_id; // Hack for anti-auto-connect for (GList *it = purple_presence_get_statuses(m_account->presence); it; it = it->next) { PurpleStatus *status = reinterpret_cast<PurpleStatus *>(it->data); // debug() << purple_status_type_get_primitive(purple_status_get_type(status)) // << !!purple_status_is_online(status) // << purple_status_get_id(status) // << purple_status_get_name(status); if (!purple_status_is_online(status)) { purple_presence_set_status_active(m_account->presence, purple_status_get_id(status), TRUE); break; } } m_isLoading = true; load(cfg); m_isLoading = false; // if (protocol->id() == "jabber" && id.contains("qutim.org")) { if (!purple_account_get_enabled(m_account, "qutim")) purple_account_set_enabled(m_account, "qutim", TRUE); // purple_account_connect(m_account); // } else // purple_account_set_enabled(m_account, "qutim", FALSE); }
void purple_prpl_got_user_status(PurpleAccount *account, const char *name, const char *status_id, ...) { GSList *list, *l; PurpleBuddy *buddy; PurplePresence *presence; PurpleStatus *status; PurpleStatus *old_status; va_list args; g_return_if_fail(account != NULL); g_return_if_fail(name != NULL); g_return_if_fail(status_id != NULL); g_return_if_fail(purple_account_is_connected(account) || purple_account_is_connecting(account)); if((list = purple_find_buddies(account, name)) == NULL) return; for(l = list; l != NULL; l = l->next) { buddy = l->data; presence = purple_buddy_get_presence(buddy); status = purple_presence_get_status(presence, status_id); if(NULL == status) /* * TODO: This should never happen, right? We should call * g_warning() or something. */ continue; old_status = purple_presence_get_active_status(presence); va_start(args, status_id); purple_status_set_active_with_attrs(status, TRUE, args); va_end(args); purple_blist_update_buddy_status(buddy, old_status); } g_slist_free(list); /* The buddy is no longer online, they are therefore by definition not * still typing to us. */ if (!purple_status_is_online(status)) { serv_got_typing_stopped(purple_account_get_connection(account), name); purple_prpl_got_media_caps(account, name); } }
void purple_prpl_got_user_status(PurpleAccount *account, const char *name, const char *status_id, ...) { GSList *list, *l; PurpleBuddy *buddy; PurplePresence *presence; PurpleStatus *status; PurpleStatus *old_status; va_list args; g_return_if_fail(account != NULL); g_return_if_fail(name != NULL); g_return_if_fail(status_id != NULL); g_return_if_fail(purple_account_is_connected(account) || purple_account_is_connecting(account)); if((list = purple_find_buddies(account, name)) == NULL) return; for(l = list; l != NULL; l = l->next) { buddy = l->data; presence = purple_buddy_get_presence(buddy); status = purple_presence_get_status(presence, status_id); if(NULL == status) continue; old_status = purple_presence_get_active_status(presence); va_start(args, status_id); purple_status_set_active_with_attrs(status, TRUE, args); va_end(args); purple_blist_update_buddy_status(buddy, old_status); } g_slist_free(list); /* we get to re-use the last status we found */ if (!purple_status_is_online(status)) serv_got_typing_stopped(purple_account_get_connection(account), name); }
static gboolean do_signon(gpointer data) { PurpleAccount *account = data; PidginAutoRecon *info; PurpleStatus *status; purple_debug_info("autorecon", "do_signon called\n"); g_return_val_if_fail(account != NULL, FALSE); info = g_hash_table_lookup(auto_reconns, account); if (info) info->timeout = 0; status = purple_account_get_active_status(account); if (purple_status_is_online(status)) { purple_debug_info("autorecon", "calling purple_account_connect\n"); purple_account_connect(account); purple_debug_info("autorecon", "done calling purple_account_connect\n"); } return FALSE; }