From 20a87184b1c06f63b2b3d8b9c48a68535b31b4bb Mon Sep 17 00:00:00 2001 From: ache Date: Fri, 17 Nov 2017 11:21:12 +0100 Subject: New mesms --- main.c | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 131 insertions(+), 10 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 965a45b..2cdbb44 100644 --- a/main.c +++ b/main.c @@ -1,12 +1,17 @@ #include "main.h" #include "readline.h" + #include #include #include #include #include + +#include +#include + #include "wind.h" /* @@ -34,12 +39,16 @@ const int color[] = { extern char* msg_win_str; +extern conversation* currentConv; static bool visual_mode = false; WINDOW *cmd_win; WINDOW *sep_win; char status[10]; +extern int firstSMSIndex; +extern int canAugment; + void fail_exit(const char *msg) { @@ -63,7 +72,7 @@ int main(int argc, char* argv[]){ }; - c = getopt_long(argc, argv, "hvc:", optlv, &optIndex); + c = getopt_long(argc, argv, "hvc:n:", optlv, &optIndex); if (c == -1) break; @@ -86,14 +95,26 @@ int main(int argc, char* argv[]){ fprintf(stderr, "Erreur à la lecture de la liste des contacts"); return r; } + if( r = loadConv() ) { + fprintf(stderr, "Erreur à la lecture de la liste des contacts"); + return r; + } contact* contact = NULL; - - if( r = findContact(optarg, &contact) ) { - fprintf(stderr, "Numéro de téléphone inconnue"); + + int nameOrNumber = 0; + if( nameOrNumber = (*optarg == '+' ) ) + r = findContact(optarg, &contact); + else + r = findContactFromName(optarg, &contact); + if( r ) { + fprintf(stderr, "Contact introuvable"); printf("%s",optarg); return r; } - printf("%s", contact->display_name); + if( nameOrNumber ) + printf("%s", contact->display_name); + else + printf("%s", contact->number); return 0; } else { fprintf(stderr, "Numéro de téléphone manquant"); @@ -129,8 +150,8 @@ int main(int argc, char* argv[]){ visual_mode = true; curs_set(0); - cmd_win = newwin(1, COLS, LINES - 20, 0); - sep_win = newwin(1, COLS, LINES - 2, 0); + cmd_win = newwin(1, COLS, LINES - 20, 0); + sep_win = newwin(1, COLS, LINES - 2, 0); init_pair( 12, COLOR_WHITE, COLOR_BLUE); @@ -139,9 +160,15 @@ int main(int argc, char* argv[]){ init_readline(); int r = 0; + if( r = fillContactList(DEFAULT_CONTACT_FILENAME) ) { return r; } + if( r = loadConv() ) { + return r; + } + sortContacts(); + for(int i = 0 ; i < 9 ; i++) { init_pair( i+1, i, COLOR_BLACK); @@ -149,6 +176,7 @@ int main(int argc, char* argv[]){ /* Premier affichage */ resize(); + int tabed = 0; /* Event loop */ while( c = getch() ) { @@ -164,16 +192,109 @@ int main(int argc, char* argv[]){ case KEY_DOWN: case KEY_RIGHT: case 'j': - selectNextContact(); + if( !tabed ) { + selectNextContact(); + showContactListW(); + } else { + if( canAugment ) + firstSMSIndex++; + clearWind(); + showMessageWind(); + } + break; case KEY_UP: case KEY_LEFT: case 'k': - selectPreviousContact(); + if( !tabed ) { + selectPreviousContact(); + showContactListW(); + } else { + if( firstSMSIndex > 0 ) + firstSMSIndex--; + canAugment=1; + clearWind(); + showMessageWind(); + } + + break; + case '\t': + if( currentConv ) + tabed = !tabed; break; + case '\r': { + contact* tmp = getContactSelected(); + currentConv = tmp->conversation; + toTheEnd(); + resize(); + } + break; + case 's': { + char* number = NULL; + + if( ! currentConv ) { + contact* tmp = getContactSelected(); + if( !tmp ) + break; + number = tmp->number; + } + else number = currentConv->number; + + const char* defaultEditor = "vim", + * const envEditor = getenv("EDITOR"), + * const visEditor = getenv("VISUAL"); + if( envEditor && envEditor[0] ) { + defaultEditor = envEditor; + } + if( visEditor && visEditor[0] ) { + defaultEditor = visEditor; + } + FILE* tmp = NULL; + char fileName[] = "todo.cpp_XXXXXX"; + int fd = mkstemp(fileName); + close(fd); + + char* cmd = malloc( 2 + strlen(defaultEditor) + + strlen(fileName) ); + sprintf( cmd, "%s %s", defaultEditor, fileName ); + +edit: + system(cmd); + { + FILE* r = fopen(fileName,"r"); + FILE* t = tmpfile(); + int c = 0; + int nb = 0; + while( (c = fgetc(r)) != EOF ) { + nb++; + fputc(c,t); + } + char* string = malloc( nb+1 ); + fclose(r); + rewind(t); + nb = 0; + while( (c = fgetc(t)) != EOF ) { + string[nb++] = c; + } + string[nb] = 0; + contact* d = NULL; + findContact(number, &d); + int ret = 0; + if( (ret = confirmSend(string, d->display_name)) == 1 ) { + char* cmd = malloc(2048); + sprintf( cmd, "cat %s | gammu-smsd-inject TEXT %s -len 400 -unicode", fileName, + number); + system(cmd); + }else if( ret == 2 ) { + goto edit; + } + } + free(cmd); + unlink( fileName ); + } + } - resize(); } refresh(); -- cgit v1.2.3