void prompt_init_statusbar(ToxWindow *self, Tox *m) { int x2, y2; getmaxyx(self->window, y2, x2); /* Init statusbar info */ StatusBar *statusbar = self->stb; statusbar->status = TOX_USERSTATUS_NONE; statusbar->is_online = false; uint8_t nick[TOX_MAX_NAME_LENGTH] = {'\0'}; uint8_t statusmsg[MAX_STR_SIZE]; pthread_mutex_lock(&Winthread.lock); tox_get_self_name(m, nick); tox_get_self_status_message(m, statusmsg, MAX_STR_SIZE); uint8_t status = tox_get_self_user_status(m); pthread_mutex_unlock(&Winthread.lock); snprintf(statusbar->nick, sizeof(statusbar->nick), "%s", nick); /* load prev status message or show toxic version if it has never been set */ uint8_t ver[strlen(TOXICVER) + 1]; strcpy(ver, TOXICVER); const uint8_t *toxic_ver = strtok(ver, "_"); if ( (!strcmp("Online", statusmsg) || !strncmp("Toxing on Toxic", statusmsg, 15)) && toxic_ver != NULL) snprintf(statusmsg, MAX_STR_SIZE, "Toxing on Toxic v.%s", toxic_ver); prompt_update_statusmessage(prompt, statusmsg, strlen(statusmsg) + 1); prompt_update_status(prompt, status); /* Init statusbar subwindow */ statusbar->topline = subwin(self->window, 2, x2, 0, 0); }
QString Core::getStatusMessage() { int size = tox_get_self_status_message_size(tox); uint8_t* name = new uint8_t[size]; if (tox_get_self_status_message(tox, name, size) == size) return QString(CString::toString(name, size)); else return QString(); delete[] name; }
void prompt_init_statusbar(ToxWindow *self, Tox *m) { int x2, y2; getmaxyx(self->window, y2, x2); (void) y2; /* Init statusbar info */ StatusBar *statusbar = self->stb; statusbar->status = TOX_USERSTATUS_NONE; statusbar->is_online = false; char nick[TOX_MAX_NAME_LENGTH]; char statusmsg[MAX_STR_SIZE]; uint16_t n_len = tox_get_self_name(m, (uint8_t *) nick); uint16_t s_len = tox_get_self_status_message(m, (uint8_t *) statusmsg, MAX_STR_SIZE); uint8_t status = tox_get_self_user_status(m); nick[n_len] = '\0'; statusmsg[s_len] = '\0'; /* load prev status message or show toxic version if it has never been set */ char ver[strlen(TOXICVER) + 1]; strcpy(ver, TOXICVER); const char *toxic_ver = strtok(ver, "_"); if ( (s_len <= 0 || !strncmp("Toxing on Toxic", statusmsg, strlen("Toxing on Toxic"))) && toxic_ver != NULL) { snprintf(statusmsg, sizeof(statusmsg), "Toxing on Toxic v.%s", toxic_ver); s_len = strlen(statusmsg); statusmsg[s_len] = '\0'; tox_set_status_message(m, (uint8_t *) statusmsg, (uint64_t) s_len); } prompt_update_statusmessage(prompt, statusmsg); prompt_update_status(prompt, status); prompt_update_nick(prompt, nick); /* Init statusbar subwindow */ statusbar->topline = subwin(self->window, 2, x2, 0, 0); }
static void prompt_onDraw(ToxWindow *self, Tox *m) { int x2, y2; getmaxyx(self->window, y2, x2); ChatContext *ctx = self->chatwin; line_info_print(self); wclear(ctx->linewin); curs_set(1); if (ctx->len > 0) mvwprintw(ctx->linewin, 1, 0, "%ls", &ctx->line[ctx->start]); StatusBar *statusbar = self->stb; mvwhline(statusbar->topline, 1, 0, ACS_HLINE, x2); wmove(statusbar->topline, 0, 0); if (statusbar->is_online) { int colour = WHITE; const char *status_text = "Unknown"; switch (statusbar->status) { case TOX_USERSTATUS_NONE: status_text = "Online"; colour = GREEN; break; case TOX_USERSTATUS_AWAY: status_text = "Away"; colour = YELLOW; break; case TOX_USERSTATUS_BUSY: status_text = "Busy"; colour = RED; break; case TOX_USERSTATUS_INVALID: status_text = "ERROR"; colour = MAGENTA; break; } wattron(statusbar->topline, COLOR_PAIR(colour) | A_BOLD); wprintw(statusbar->topline, " [%s]", status_text); wattroff(statusbar->topline, COLOR_PAIR(colour) | A_BOLD); wattron(statusbar->topline, A_BOLD); wprintw(statusbar->topline, " %s", statusbar->nick); wattroff(statusbar->topline, A_BOLD); } else { wprintw(statusbar->topline, " [Offline]"); wattron(statusbar->topline, A_BOLD); wprintw(statusbar->topline, " %s ", statusbar->nick); wattroff(statusbar->topline, A_BOLD); } /* Reset statusbar->statusmsg on window resize */ if (x2 != self->x) { char statusmsg[TOX_MAX_STATUSMESSAGE_LENGTH] = {0}; pthread_mutex_lock(&Winthread.lock); tox_get_self_status_message(m, (uint8_t *) statusmsg, TOX_MAX_STATUSMESSAGE_LENGTH); pthread_mutex_unlock(&Winthread.lock); snprintf(statusbar->statusmsg, sizeof(statusbar->statusmsg), "%s", statusmsg); statusbar->statusmsg_len = strlen(statusbar->statusmsg); } self->x = x2; /* Truncate note if it doesn't fit in statusbar */ uint16_t maxlen = x2 - getcurx(statusbar->topline) - 3; if (statusbar->statusmsg_len > maxlen) { statusbar->statusmsg[maxlen - 3] = '\0'; strcat(statusbar->statusmsg, "..."); statusbar->statusmsg_len = maxlen; } if (statusbar->statusmsg[0]) wprintw(statusbar->topline, " - %s", statusbar->statusmsg); mvwhline(self->window, y2 - CHATBOX_HEIGHT, 0, ACS_HLINE, x2); int y, x; getyx(self->window, y, x); (void) x; int new_x = ctx->start ? x2 - 1 : wcswidth(ctx->line, ctx->pos); wmove(self->window, y + 1, new_x); wrefresh(self->window); if (self->help->active) help_onDraw(self); }
static _Bool load_save(Tox *tox) { { uint8_t path[512], *p; uint32_t size; p = path + datapath(path); strcpy((char*)p, "tox_save"); void *data = file_raw((char*)path, &size); if(!data) { p = path + datapath_old(path); strcpy((char*)p, "tox_save"); data = file_raw((char*)path, &size); if (!data) { data = file_raw("tox_save", &size); if(!data) { return 0; } } } tox_load(tox, data, size); free(data); } friends = tox_count_friendlist(tox); uint32_t i = 0; while(i != friends) { int size; FRIEND *f = &friend[i]; uint8_t name[TOX_MAX_NAME_LENGTH]; f->msg.scroll = 1.0; tox_get_client_id(tox, i, f->cid); size = tox_get_name(tox, i, name); friend_setname(f, name, size); size = tox_get_status_message_size(tox, i); f->status_message = malloc(size); tox_get_status_message(tox, i, f->status_message, size); f->status_length = size; log_read(tox, i); i++; } self.name_length = tox_get_self_name(tox, self.name); self.statusmsg_length = tox_get_self_status_message_size(tox); self.statusmsg = malloc(self.statusmsg_length); tox_get_self_status_message(tox, self.statusmsg, self.statusmsg_length); self.status = tox_get_self_user_status(tox); return 1; }