aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorache <ache@ache.one>2017-11-17 11:21:12 +0100
committerache <ache@ache.one>2017-11-17 11:21:12 +0100
commit20a87184b1c06f63b2b3d8b9c48a68535b31b4bb (patch)
treee3ad5a41ac00d71ef95bd58fd1c4d4bf3eaa07a7 /main.c
parentNumber to contact option (diff)
New mesms
Diffstat (limited to 'main.c')
-rw-r--r--main.c141
1 files changed, 131 insertions, 10 deletions
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 <dirent.h>
#include <stdnoreturn.h>
#include <wchar.h>
#include <wctype.h>
#include <unistd.h>
+
+#include <unistd.h>
+#include <term.h>
+
#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();