static void delete_friend(Tox *m, int32_t f_num) { if (Friends.list[f_num].chatwin >= 0) { ToxWindow *toxwin = get_window_ptr(Friends.list[f_num].chatwin); if (toxwin != NULL) { kill_chat_window(toxwin, m); set_active_window(1); /* keep friendlist focused */ } } if (Friends.list[f_num].group_invite.key != NULL) free(Friends.list[f_num].group_invite.key); tox_del_friend(m, f_num); memset(&Friends.list[f_num], 0, sizeof(ToxicFriend)); int i; for (i = Friends.max_idx; i > 0; --i) { if (Friends.list[i - 1].active) break; } Friends.max_idx = i; Friends.num_friends = tox_count_friendlist(m); realloc_friends(i); /* make sure num_selected stays within Friends.num_friends range */ if (Friends.num_friends && Friends.num_selected == Friends.num_friends) --Friends.num_selected; store_data(m, DATA_FILE); }
static void delete_friend(Tox *m, int32_t f_num) { int i; if (friends[f_num].chatwin >= 0) { ToxWindow *toxwin = get_window_ptr(friends[f_num].chatwin); if (toxwin != NULL) { kill_chat_window(toxwin); set_active_window(1); /* keep friendlist focused */ } } tox_del_friend(m, f_num); memset(&friends[f_num], 0, sizeof(ToxicFriend)); for (i = max_friends_index; i > 0; --i) { if (friends[i - 1].active) break; } max_friends_index = i; num_friends = tox_count_friendlist(m); /* make sure num_selected stays within num_friends range */ if (num_friends && num_selected == num_friends) --num_selected; store_data(m, DATA_FILE); }
static void delete_friend(Tox *m, uint32_t f_num) { Tox_Err_Friend_Delete err; if (tox_friend_delete(m, f_num, &err) != true) { fprintf(stderr, "tox_friend_delete failed with error %d\n", err); return; } --Friends.num_friends; if (Friends.list[f_num].connection_status != TOX_CONNECTION_NONE) { --Friends.num_online; } /* close friend's chatwindow if it's currently open */ if (Friends.list[f_num].chatwin >= 0) { ToxWindow *toxwin = get_window_ptr(Friends.list[f_num].chatwin); if (toxwin != NULL) { kill_chat_window(toxwin, m); set_active_window_index(1); /* keep friendlist focused */ } } if (Friends.list[f_num].group_invite.key != NULL) { free(Friends.list[f_num].group_invite.key); } memset(&Friends.list[f_num], 0, sizeof(ToxicFriend)); int i; for (i = Friends.max_idx; i > 0; --i) { if (Friends.list[i - 1].active) { break; } } Friends.max_idx = i; realloc_friends(i); #ifdef AUDIO del_friend_AV(i); #endif /* make sure num_selected stays within Friends.num_friends range */ if (Friends.num_friends && Friends.num_selected == Friends.num_friends) { --Friends.num_selected; } store_data(m, DATA_FILE); }
/* renames chatlog file replacing src with dest. Returns 0 on success or if no log exists, -1 on failure. */ int rename_logfile(char *src, char *dest, const char *selfkey, const char *otherkey, int winnum) { ToxWindow *toxwin = get_window_ptr(winnum); struct chatlog *log = NULL; bool log_on = false; /* disable log if necessary and save its state */ if (toxwin != NULL) { log = toxwin->chatwin->log; log_on = log->log_on; } if (log_on) log_disable(log); char newpath[MAX_STR_SIZE]; char oldpath[MAX_STR_SIZE]; if (get_log_path(oldpath, sizeof(oldpath), src, selfkey, otherkey, LOG_CHAT) == -1) goto on_error; if (!file_exists(oldpath)) return 0; if (get_log_path(newpath, sizeof(newpath), dest, selfkey, otherkey, LOG_CHAT) == -1) goto on_error; if (rename(oldpath, newpath) != 0) goto on_error; if (log_on) log_enable(dest, selfkey, otherkey, log, LOG_CHAT); return 0; on_error: if (log_on) log_enable(src, selfkey, otherkey, log, LOG_CHAT); return -1; }
void *thread_cqueue(void *data) { Tox *m = (Tox *) data; while (true) { pthread_mutex_lock(&Winthread.lock); size_t i; for (i = 2; i < MAX_WINDOWS_NUM; ++i) { ToxWindow *toxwin = get_window_ptr(i); if (toxwin != NULL && toxwin->is_chat && tox_friend_get_connection_status(m, toxwin->num, NULL) != TOX_CONNECTION_NONE) cqueue_try_send(toxwin, m); } pthread_mutex_unlock(&Winthread.lock); usleep(4000); } }