static void purge_inactive_friends(Tox *m) { size_t numfriends = tox_self_get_friend_list_size(m); if (numfriends == 0) return; uint32_t friend_list[numfriends]; tox_self_get_friend_list(m, friend_list); size_t i; for (i = 0; i < numfriends; ++i) { uint32_t friendnum = friend_list[i]; if (!tox_friend_exists(m, friendnum)) continue; TOX_ERR_FRIEND_GET_LAST_ONLINE err; uint64_t last_online = tox_friend_get_last_online(m, friendnum, &err); if (err != TOX_ERR_FRIEND_GET_LAST_ONLINE_OK) continue; if (((uint64_t) time(NULL)) - last_online > Tox_Bot.inactive_limit) tox_friend_delete(m, friendnum, NULL); } }
void Core::checkLastOnline(uint32_t friendId) { const uint64_t lastOnline = tox_friend_get_last_online(tox, friendId, nullptr); if (lastOnline != std::numeric_limits<uint64_t>::max()) { emit friendLastSeenChanged(friendId, QDateTime::fromTime_t(lastOnline)); } }
void friendlist_onFriendAdded(ToxWindow *self, Tox *m, uint32_t num, bool sort) { realloc_friends(Friends.max_idx + 1); memset(&Friends.list[Friends.max_idx], 0, sizeof(ToxicFriend)); uint32_t i; for (i = 0; i <= Friends.max_idx; ++i) { if (Friends.list[i].active) { continue; } ++Friends.num_friends; Friends.list[i].num = num; Friends.list[i].active = true; Friends.list[i].chatwin = -1; Friends.list[i].connection_status = TOX_CONNECTION_NONE; Friends.list[i].status = TOX_USER_STATUS_NONE; Friends.list[i].logging_on = (bool) user_settings->autolog == AUTOLOG_ON; Tox_Err_Friend_Get_Public_Key pkerr; tox_friend_get_public_key(m, num, (uint8_t *) Friends.list[i].pub_key, &pkerr); if (pkerr != TOX_ERR_FRIEND_GET_PUBLIC_KEY_OK) { fprintf(stderr, "tox_friend_get_public_key failed (error %d)\n", pkerr); } Tox_Err_Friend_Get_Last_Online loerr; time_t t = tox_friend_get_last_online(m, num, &loerr); if (loerr != TOX_ERR_FRIEND_GET_LAST_ONLINE_OK) { t = 0; } update_friend_last_online(i, t); char tempname[TOX_MAX_NAME_LENGTH] = {0}; get_nick_truncate(m, tempname, num); snprintf(Friends.list[i].name, sizeof(Friends.list[i].name), "%s", tempname); Friends.list[i].namelength = strlen(Friends.list[i].name); if (i == Friends.max_idx) { ++Friends.max_idx; } if (sort) { sort_friendlist_index(); } #ifdef AUDIO init_friend_AV(i); #endif return; } }