about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2012-02-09 21:45:31 +0000
committerJames Booth <boothj5@gmail.com>2012-02-09 21:45:31 +0000
commit4148f0530711dc53e34c6ad6c0c3eefe14cf0090 (patch)
tree4d0d6c275644bb63d03457068f1278a7f5e0b287
parentd77c397b180c337c4215cf3b97d80bd58ecd297a (diff)
downloadprofani-tty-4148f0530711dc53e34c6ad6c0c3eefe14cf0090.tar.gz
Added msg command
-rw-r--r--README2
-rw-r--r--app.c21
-rw-r--r--title_bar.c8
-rw-r--r--windows.c54
-rw-r--r--windows.h3
5 files changed, 78 insertions, 10 deletions
diff --git a/README b/README
index 58c210ec..a20cc8f2 100644
--- a/README
+++ b/README
@@ -15,7 +15,6 @@ WORKLIST:
 Features:
     Show login attempts in console
     Show roster on login
-    Add /msg command
     Handle resize terminal in X windows
     Secure XMPP
     Window buffers for scrolling, with page up and down
@@ -30,3 +29,4 @@ One day:
     Other IM protocols
     Log chat history to file option
     Tab completion on commands
+    Tab completion on users
diff --git a/app.c b/app.c
index c43ce8da..0b2ebe8b 100644
--- a/app.c
+++ b/app.c
@@ -101,6 +101,25 @@ static void main_event_loop(void)
             jabber_roster_request();
             inp_clear();
 
+        // /msg -> send message to a user
+        } else if (strncmp(command, "/msg ", 5) == 0) {
+            char *usr_msg = NULL;
+            char *usr = NULL;
+            char *msg = NULL;
+            
+            usr_msg = strndup(command+5, strlen(command)-5);
+            cons_show(usr_msg);
+            
+            usr = strtok(usr_msg, " ");
+            if (usr != NULL) {
+                msg = strndup(command+5+strlen(usr)+1, strlen(command)-(5+strlen(usr)+1));
+                if (msg != NULL) {
+                    jabber_send(msg, usr);
+                    show_outgoing_msg("me", usr, msg);
+                }
+            }
+            inp_clear();
+
         // /close -> close the current chat window, if in chat
         } else if (strncmp(command, "/close", 6) == 0) {
             if (in_chat()) {
@@ -116,7 +135,7 @@ static void main_event_loop(void)
                 char recipient[100] = "";
                 get_recipient(recipient);
                 jabber_send(command, recipient);
-                show_outgoing_msg("me", command);
+                show_outgoing_msg("me", recipient, command);
             } else {
                 cons_bad_command(command);
             }
diff --git a/title_bar.c b/title_bar.c
index 61e3776e..5cd18672 100644
--- a/title_bar.c
+++ b/title_bar.c
@@ -15,3 +15,11 @@ void create_title_bar(void)
     mvwprintw(title_bar, 0, 0, title);
     wrefresh(title_bar);
 }
+
+void title_bar_show(char *title)
+{
+    wclear(title_bar);
+    mvwprintw(title_bar, 0, 0, title);
+    wrefresh(title_bar);
+}
+
diff --git a/windows.c b/windows.c
index bed8d9cb..ee86c2db 100644
--- a/windows.c
+++ b/windows.c
@@ -44,6 +44,8 @@ void switch_to(int i)
     touchwin(wins[i].win);
     wrefresh(wins[i].win);
     curr_win = i;
+
+    title_bar_show(wins[i].from);
 }
 
 void close_win(void)
@@ -76,7 +78,7 @@ void show_incomming_msg(char *from, char *message)
     strcpy(from_cpy, from);
     
     char line[100];
-    char *short_from = strtok(from_cpy, "@");
+    char *short_from = strtok(from_cpy, "/");
     char tstmp[80];
     get_time(tstmp);
 
@@ -85,7 +87,7 @@ void show_incomming_msg(char *from, char *message)
     // find the chat window for sender
     int i;
     for (i = 1; i < 10; i++)
-        if (strcmp(wins[i].from, from) == 0)
+        if (strcmp(wins[i].from, short_from) == 0)
             break;
 
     // if we didn't find a window
@@ -96,7 +98,7 @@ void show_incomming_msg(char *from, char *message)
                 break;
 
         // set it up and print the message to it
-        strcpy(wins[i].from, from);
+        strcpy(wins[i].from, short_from);
         wclear(wins[i].win);
         wprintw(wins[i].win, line);
         
@@ -125,16 +127,54 @@ void show_incomming_msg(char *from, char *message)
     }
 }
 
-void show_outgoing_msg(char *from, char* message)
+void show_outgoing_msg(char *from, char *to, char *message)
 {
     char line[100];
     char tstmp[80];
     get_time(tstmp);
     sprintf(line, " [%s] %s: %s\n", tstmp, from, message);
 
-    wprintw(wins[curr_win].win, line);
-    touchwin(wins[curr_win].win);
-    wrefresh(wins[curr_win].win);
+    // find the chat window for recipient
+    int i;
+    for (i = 1; i < 10; i++)
+        if (strcmp(wins[i].from, to) == 0)
+            break;
+
+    // if we didn't find a window
+    if (i == 10) {
+        // find the first unused one
+        for (i = 1; i < 10; i++)
+            if (strcmp(wins[i].from, "") == 0)
+                break;
+
+        // set it up and print the message to it
+        strcpy(wins[i].from, to);
+        wclear(wins[i].win);
+        wprintw(wins[i].win, line);
+
+        // signify active window in status bar
+        inp_bar_active(i);
+
+        // if its the current window, draw it
+        if (curr_win == i) {
+            touchwin(wins[i].win);
+            wrefresh(wins[i].win);
+        }
+    }
+    // otherwise 
+    else {
+        // add the line to the senders window
+        wprintw(wins[i].win, line);
+
+        // signify active window in status bar
+        inp_bar_active(i);
+
+        // if its the current window, draw it
+        if (curr_win == i) {
+            touchwin(wins[i].win);
+            wrefresh(wins[i].win);
+        }
+    }
 }
 
 void cons_help(void)
diff --git a/windows.h b/windows.h
index 05333254..a9a20188 100644
--- a/windows.h
+++ b/windows.h
@@ -27,12 +27,13 @@ void inp_bar_print_message(char *msg);
 
 void gui_init(void);
 void gui_close(void);
+void title_bar_show(char *title);
 void switch_to(int i);
 void close_win(void);
 int in_chat(void);
 void get_recipient(char *recipient);
 void show_incomming_msg(char *from, char *message);
-void show_outgoing_msg(char *from, char *message);
+void show_outgoing_msg(char *from, char *to, char *message);
 void cons_help(void);
 void cons_bad_command(char *cmd);
 void cons_show(char *cmd);