commit 0c62375e3f62420a2e488f2f7ce072ce6d88dd10
parent 7a12e3e6768f1d5aca26f923e34757d8eace20b7
Author: Antoine Amarilli <ant.amarilli@free.fr>
Date:   Thu, 17 Feb 2011 15:37:29 +0100
full name options, fixed bug, todos
Diffstat:
| irctk.c |  |  | 34 | ++++++++++++++++++++++++++-------- | 
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/irctk.c b/irctk.c
@@ -45,7 +45,7 @@
 
 // TODO pseudo tracking
 
-// TODO customize full name, username...
+// TODO default username is login pruned of bad chars
 
 //TODO const char *argp_program_version = "irctk 0.1";
 //TODO const char *argp_program_bug_address = "<a3nm@a3nm.net>";
@@ -66,6 +66,7 @@ static char args_doc[] = "[NICK@]SERVER[:PORT] [CHANNEL]...";
 #define BOT_OPTIONS 4
 #define DISPLAY_SELECTION 5
 #define PARSING 6
+#define NAME 7
 /* The options we understand. */
 static struct argp_option options[] = {
   
@@ -81,17 +82,17 @@ static struct argp_option options[] = {
     PARSING}, // TODO */
  {"event-to-nothing",  'n', 0,      0,
    "Ignore server events (default).",
-  PARSING}, // TODO
+  PARSING},
  {"event-to-command",  'c', 0,      0,
    "Translate server events to messages with \"/quit\", \"/me\"...",
-  PARSING}, // TODO
+  PARSING},
  {"event-to-message",  'm', 0,      0,
    "Translate server events to a human-readable description",
-  PARSING}, // TODO
+  PARSING},
  {"with-host",  'w', 0,      0,
    "Keep the host info in pseudos" ,
   DISPLAY_SELECTION},
-   /* TODO make compatible with --own */
+   /* TODO test, and make compatible with --own */
  {"own",  'o', 0,      0,
    "Also display messages posted by self",
   DISPLAY_SELECTION},
@@ -99,7 +100,13 @@ static struct argp_option options[] = {
    "Wait delay between posted messages (default: 0 for tty stdin, 1 for file/pipe)",
    /* TODOponey ideally should not delay for bots, only for things piped, is there a
     * better way such as only waiting at the end? */
-  MISC},
+   MISC},
+ {"username", 'U', "name", 0,
+   "Unix username (default: irctk)",
+  NAME},
+ {"realname", 'R', "name", 0,
+   "Full name (default: irctk)",
+  NAME},
  {"default-always-first",  '0', 0,      0,
    "Post messages to the first specified channel by default",
  CHANNEL_SELECTION},
@@ -140,6 +147,8 @@ static struct argp_option options[] = {
 struct arguments
 {
   char *nick;
+  char *username;
+  char *realname;
   char *server;
   int port;
   char **channels;
@@ -188,6 +197,8 @@ void initialize_args()
   args.default_destination = DEFAULT_LAST_IN;
   args.show_prefix = 0;
   args.event_to = NOTHING;
+  args.username = "irctk";
+  args.realname = "irctk";
 }
 
 
@@ -220,6 +231,12 @@ static error_t parse_opt (int key, char *arg, struct argp_state *state)
       case 'i':
         arguments->interval = (int) (atof(arg) * 1000000.);
         break;
+      case 'U':
+        arguments->username = arg; 
+        break;
+      case 'R':
+        arguments->realname = arg; 
+        break;
       case 'o':
         arguments->own = 1;
         break;
@@ -373,6 +390,7 @@ int do_cmd_msg(irc_session_t *s, const char* chan, const char* line)
   irc_cmd_join (s, chan, 0);
 
 
+  // TODO also other commands (/kick, /topic...)
   /* TODO2 provide a means to escape '/' */
   if (line[0] == '/' && args.command_to_event) {
     if ( strstr (line + 1, "nick ") == line + 1 )
@@ -828,7 +846,7 @@ irc_session_t* do_connect()
         args.server, args.port, args.nick);
 
 
-  if (irc_connect (s, args.server, args.port, 0, args.nick, 0, 0))
+  if (irc_connect (s, args.server, args.port, 0, args.nick, args.username, args.realname))
     die(E_CONNECT, "Could not connect: %s\n", irc_strerror (irc_errno(s)));
 
   return s;
@@ -871,7 +889,7 @@ int start ()
   {
     waiting = 0;
     debug("Waiting for the connection to be ready..."); 
-    while (waiting < max_wait)
+    while (waiting < max_wait && !args.ready)
     {
       debug("waiting");
       // TODO manage timeouts, try reconnects, handle errors, etc.