@@ -360,6 +360,18 @@ static void prompt_onDraw(ToxWindow *self, Tox *m)
360360static void prompt_onInit (ToxWindow * self , Tox * m )
361361{
362362 scrollok (self -> window , true);
363+ PromptBuf * prt = self -> promptbuf ;
364+
365+ prt -> log = malloc (sizeof (struct chatlog ));
366+
367+ if (prt -> log == NULL ) {
368+ endwin ();
369+ fprintf (stderr , "malloc() failed. Aborting...\n" );
370+ exit (EXIT_FAILURE );
371+ }
372+
373+ memset (prt -> log , 0 , sizeof (struct chatlog ));
374+
363375 execute (self -> window , self , m , "/help" , GLOBAL_COMMAND_MODE );
364376 wclrtoeol (self -> window );
365377}
@@ -369,6 +381,7 @@ static void prompt_onConnectionChange(ToxWindow *self, Tox *m, int friendnum , u
369381 if (friendnum < 0 )
370382 return ;
371383
384+ PromptBuf * prt = self -> promptbuf ;
372385 prep_prompt_win ();
373386
374387 uint8_t nick [TOX_MAX_NAME_LENGTH ] = {'\0' };
@@ -382,39 +395,53 @@ static void prompt_onConnectionChange(ToxWindow *self, Tox *m, int friendnum , u
382395 wprintw (self -> window , "\n" );
383396 print_time (self -> window );
384397
398+ uint8_t * msg ;
399+
385400 if (status == 1 ) {
401+ msg = "has come online\n" ;
386402 wattron (self -> window , COLOR_PAIR (GREEN ));
387403 wattron (self -> window , A_BOLD );
388404 wprintw (self -> window , "* %s " , nick );
389405 wattroff (self -> window , A_BOLD );
390- wprintw (self -> window , "has come online\n" );
406+ wprintw (self -> window , "%s" , msg );
391407 wattroff (self -> window , COLOR_PAIR (GREEN ));
392408
409+ add_to_log_buf (msg , nick , prt -> log , true);
393410 alert_window (self , WINDOW_ALERT_2 , false);
394411 } else {
412+ msg = "has gone offline\n" ;
395413 wattron (self -> window , COLOR_PAIR (RED ));
396414 wattron (self -> window , A_BOLD );
397415 wprintw (self -> window , "* %s " , nick );
398416 wattroff (self -> window , A_BOLD );
399- wprintw (self -> window , "has gone offline\n" );
417+ wprintw (self -> window , "%s" , msg );
400418 wattroff (self -> window , COLOR_PAIR (RED ));
419+
420+ add_to_log_buf (msg , nick , prt -> log , true);
401421 }
402422}
403423
404424static void prompt_onFriendRequest (ToxWindow * self , uint8_t * key , uint8_t * data , uint16_t length )
405425{
406426 // make sure message data is null-terminated
407427 data [length - 1 ] = 0 ;
408-
428+ PromptBuf * prt = self -> promptbuf ;
409429 prep_prompt_win ();
430+
410431 wprintw (self -> window , "\n" );
411432 print_time (self -> window );
412- wprintw (self -> window , "Friend request with the message: '%s'\n" , data );
433+
434+ uint8_t msg [MAX_STR_SIZE ];
435+ snprintf (msg , sizeof (msg ), "Friend request with the message '%s'\n" , data );
436+ wprintw (self -> window , "%s" , msg );
437+ add_to_log_buf (msg , "" , prt -> log , true);
413438
414439 int n = add_friend_request (key );
415440
416441 if (n == -1 ) {
417- wprintw (self -> window , "Friend request queue is full. Discarding request.\n" );
442+ uint8_t * errmsg = "Friend request queue is full. Discarding request.\n" ;
443+ wprintw (self -> window , "%s" , errmsg );
444+ add_to_log_buf (errmsg , "" , prt -> log , true);
418445 return ;
419446 }
420447
@@ -460,6 +487,7 @@ ToxWindow new_prompt(void)
460487 memset (& ret , 0 , sizeof (ret ));
461488
462489 ret .active = true;
490+ ret .is_prompt = true;
463491
464492 ret .onKey = & prompt_onKey ;
465493 ret .onDraw = & prompt_onDraw ;
0 commit comments