mirror of
				https://github.com/Tha14/toxic.git
				synced 2025-10-31 05:26:52 +01:00 
			
		
		
		
	alert user when name is mentioned in groupchat
This commit is contained in:
		| @@ -97,6 +97,24 @@ static void groupchat_onGroupMessage(ToxWindow *self, Tox *m, int groupnum, int | ||||
|  | ||||
|     ChatContext *ctx = self->chatwin; | ||||
|  | ||||
|     /* check if message contains own name and alert appropriately */ | ||||
|     int alert_type = WINDOW_ALERT_1; | ||||
|     bool beep = false; | ||||
|     int msg_clr = WHITE; | ||||
|  | ||||
|     uint8_t selfnick[TOX_MAX_NAME_LENGTH] = {'\0'}; | ||||
|     tox_get_self_name(m, selfnick, TOX_MAX_NAME_LENGTH); | ||||
|  | ||||
|     bool nick_match = strcasestr(msg, selfnick);; | ||||
|  | ||||
|     if (nick_match) { | ||||
|         alert_type = WINDOW_ALERT_0; | ||||
|         beep = true; | ||||
|         msg_clr = RED; | ||||
|     } | ||||
|  | ||||
|     alert_window(self, alert_type, beep); | ||||
|  | ||||
|     uint8_t nick[TOX_MAX_NAME_LENGTH] = {'\0'}; | ||||
|     tox_group_peername(m, groupnum, peernum, nick); | ||||
|     nick[TOXIC_MAX_NAME_LENGTH] = '\0';    /* enforce client max name length */ | ||||
| @@ -106,14 +124,15 @@ static void groupchat_onGroupMessage(ToxWindow *self, Tox *m, int groupnum, int | ||||
|     wprintw(ctx->history, "%s: ", nick); | ||||
|     wattroff(ctx->history, COLOR_PAIR(CYAN)); | ||||
|      | ||||
|     if (msg[0] == '>') { | ||||
|     if (msg[0] == '>' && !nick_match) { | ||||
|         wattron(ctx->history, COLOR_PAIR(GREEN)); | ||||
|         wprintw(ctx->history, "%s\n", msg); | ||||
|         wattroff(ctx->history, COLOR_PAIR(GREEN)); | ||||
|     } else | ||||
|     } else { | ||||
|         wattron(ctx->history, COLOR_PAIR(msg_clr)); | ||||
|         wprintw(ctx->history, "%s\n", msg); | ||||
|  | ||||
|     alert_window(self, WINDOW_ALERT_1, false); | ||||
|         wattroff(ctx->history, COLOR_PAIR(msg_clr)); | ||||
|     } | ||||
| } | ||||
|  | ||||
| /* Puts two copies of peerlist in chat instance */ | ||||
|   | ||||
| @@ -527,7 +527,6 @@ int main(int argc, char *argv[]) | ||||
|         load_data(m, DATA_FILE); | ||||
|  | ||||
|     if (f_flag == -1) { | ||||
|         prep_prompt_win(); | ||||
|         attron(COLOR_PAIR(RED) | A_BOLD); | ||||
|         wprintw(prompt->window, "You passed '-f' without giving an argument.\n" | ||||
|                 "defaulting to 'data' for a keyfile...\n"); | ||||
| @@ -535,7 +534,6 @@ int main(int argc, char *argv[]) | ||||
|     } | ||||
|  | ||||
|     if (config_err) { | ||||
|         prep_prompt_win(); | ||||
|         attron(COLOR_PAIR(RED) | A_BOLD); | ||||
|         wprintw(prompt->window, "Unable to determine configuration directory.\n" | ||||
|                 "defaulting to 'data' for a keyfile...\n"); | ||||
|   | ||||
| @@ -111,10 +111,17 @@ bool timed_out(uint64_t timestamp, uint64_t curtime, uint64_t timeout) | ||||
| /* Colours the window tab according to type. Beeps if is_beep is true */ | ||||
| void alert_window(ToxWindow *self, int type, bool is_beep) | ||||
| { | ||||
|     if (type == WINDOW_ALERT_1) | ||||
|     switch (type) { | ||||
|     case WINDOW_ALERT_0: | ||||
|         self->alert0 = true; | ||||
|         break; | ||||
|     case WINDOW_ALERT_1: | ||||
|         self->alert1 = true; | ||||
|     else if(type == WINDOW_ALERT_2) | ||||
|         break; | ||||
|     case WINDOW_ALERT_2: | ||||
|         self->alert2 = true; | ||||
|         break; | ||||
|     } | ||||
|      | ||||
|     if (is_beep) | ||||
|         beep(); | ||||
|   | ||||
| @@ -44,7 +44,9 @@ enum { | ||||
|     BLACK, | ||||
| }; | ||||
|  | ||||
| /* tab alert types: lower types take priority */ | ||||
| enum { | ||||
|     WINDOW_ALERT_0, | ||||
|     WINDOW_ALERT_1, | ||||
|     WINDOW_ALERT_2, | ||||
| }; | ||||
| @@ -79,6 +81,7 @@ struct ToxWindow { | ||||
|  | ||||
|     char name[TOX_MAX_NAME_LENGTH]; | ||||
|     bool active; | ||||
|     bool alert0; | ||||
|     bool alert1; | ||||
|     bool alert2; | ||||
|     int num; | ||||
|   | ||||
| @@ -264,19 +264,23 @@ ToxWindow *init_windows(Tox *m) | ||||
|  | ||||
| static void draw_window_tab(ToxWindow toxwin) | ||||
| { | ||||
|     /* alert1 takes priority */ | ||||
|     if (toxwin.alert1) | ||||
|     /* alert0 takes priority */ | ||||
|     if (toxwin.alert0) | ||||
|         attron(COLOR_PAIR(GREEN)); | ||||
|     else if (toxwin.alert1) | ||||
|         attron(COLOR_PAIR(RED)); | ||||
|     else if (toxwin.alert2) | ||||
|         attron(COLOR_PAIR(BLUE)); | ||||
|         attron(COLOR_PAIR(MAGENTA)); | ||||
|  | ||||
|     clrtoeol(); | ||||
|     printw(" [%s]", toxwin.name); | ||||
|  | ||||
|     if (toxwin.alert1) | ||||
|     if (toxwin.alert0) | ||||
|         attroff(COLOR_PAIR(GREEN)); | ||||
|     else if (toxwin.alert1) | ||||
|         attroff(COLOR_PAIR(RED)); | ||||
|     else if (toxwin.alert2) | ||||
|         attroff(COLOR_PAIR(BLUE)); | ||||
|         attroff(COLOR_PAIR(MAGENTA)); | ||||
| } | ||||
|  | ||||
| static void draw_bar(void) | ||||
| @@ -321,6 +325,7 @@ static void draw_bar(void) | ||||
| void draw_active_window(Tox *m) | ||||
| { | ||||
|     ToxWindow *a = active_window; | ||||
|     a->alert0 = false; | ||||
|     a->alert1 = false; | ||||
|     a->alert2 = false; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user