messenger-cli

Command-line user interface for GNUnet Messenger
Log | Files | Refs | README | LICENSE

lobby_enter_dialog.c (2604B)


      1 /*
      2    This file is part of GNUnet.
      3    Copyright (C) 2022--2025 GNUnet e.V.
      4 
      5    GNUnet is free software: you can redistribute it and/or modify it
      6    under the terms of the GNU Affero General Public License as published
      7    by the Free Software Foundation, either version 3 of the License,
      8    or (at your option) any later version.
      9 
     10    GNUnet is distributed in the hope that it will be useful, but
     11    WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13    Affero General Public License for more details.
     14 
     15    You should have received a copy of the GNU Affero General Public License
     16    along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18    SPDX-License-Identifier: AGPL3.0-or-later
     19  */
     20 /*
     21  * @author Tobias Frisch
     22  * @file ui/lobby_enter_dialog.c
     23  */
     24 
     25 #include "lobby_enter_dialog.h"
     26 
     27 #include <gnunet/gnunet_chat_lib.h>
     28 #include <gnunet/gnunet_util_lib.h>
     29 
     30 #include "text_input.h"
     31 #include "../application.h"
     32 #include "../util.h"
     33 
     34 void
     35 lobby_enter_dialog_event(UI_LOBBY_ENTER_DIALOG_Handle *enter_dialog,
     36 		         struct MESSENGER_Application *app,
     37 		         int key)
     38 {
     39   struct GNUNET_CHAT_Uri *uri;
     40 
     41   switch (key)
     42   {
     43     case 27:
     44     case KEY_EXIT:
     45       if (enter_dialog->error)
     46 	GNUNET_free(enter_dialog->error);
     47 
     48       enter_dialog->error = NULL;
     49       enter_dialog->window = NULL;
     50       break;
     51     case '\n':
     52     case KEY_ENTER:
     53       if (enter_dialog->uri_len > 0)
     54       {
     55 	if (enter_dialog->error)
     56 	  GNUNET_free(enter_dialog->error);
     57 
     58 	enter_dialog->error = NULL;
     59 	uri = GNUNET_CHAT_uri_parse(enter_dialog->uri, &(enter_dialog->error));
     60 
     61 	if (uri)
     62 	{
     63 	  GNUNET_CHAT_lobby_join(app->chat.handle, uri);
     64 	  GNUNET_CHAT_uri_destroy(uri);
     65 
     66 	  enter_dialog->uri_len = 0;
     67 	  enter_dialog->window = NULL;
     68 	}
     69       }
     70 
     71       break;
     72     default:
     73       break;
     74   }
     75 
     76   text_input_event(enter_dialog->uri, key);
     77 }
     78 
     79 void
     80 lobby_enter_dialog_print(UI_LOBBY_ENTER_DIALOG_Handle *enter_dialog)
     81 {
     82   if (!(enter_dialog->window))
     83     return;
     84 
     85   WINDOW *window = *(enter_dialog->window);
     86 
     87   werase(window);
     88   wmove(window, 0, 0);
     89 
     90   util_print_prompt(window, "Enter the URI of the lobby:");
     91   wmove(window, 1, 0);
     92 
     93   wprintw(window, "> ");
     94   wmove(window, 1, 2);
     95 
     96   wattron(window, A_BOLD);
     97   wprintw(window, "%s", enter_dialog->uri);
     98   wattroff(window, A_BOLD);
     99 
    100   if (enter_dialog->error)
    101   {
    102     wmove(window, 2, 0);
    103     wprintw(window, "ERROR: %s", enter_dialog->error);
    104   }
    105 
    106   wattron(window, A_BOLD);
    107   wmove(window, 1, 2 + enter_dialog->uri_pos);
    108   wattroff(window, A_BOLD);
    109 
    110   wcursyncup(window);
    111   curs_set(1);
    112 }