diff options
author | ache <ache@ache.one> | 2019-02-08 06:26:44 +0100 |
---|---|---|
committer | ache <ache@ache.one> | 2019-02-08 06:26:44 +0100 |
commit | 0aa697b13d18140defc473b32663a938e00e97f6 (patch) | |
tree | cf1c283522662e56d9ad1eedfa184d805255fc9e | |
parent | Remove unecessary operations (diff) |
Refesh from inotify (fuck yeah !)
-rw-r--r-- | main.c | 73 | ||||
-rw-r--r-- | sms.c | 4 | ||||
-rw-r--r-- | sms.h | 4 |
3 files changed, 67 insertions, 14 deletions
@@ -1,29 +1,27 @@ #include "main.h" #include "readline.h" - #include <dirent.h> #include <stdnoreturn.h> #include <wchar.h> #include <wctype.h> -#include <unistd.h> - - +#include <errno.h> +#include <sys/types.h> +#include <fcntl.h> +#include <sys/inotify.h> #include <unistd.h> #include <term.h> #include <wordexp.h> #include "wind.h" +#include "sms.h" /* * Entry point of mesms and event loop */ - #ifdef DEBUG - #include <assert.h> - #endif const int color[] = { @@ -31,8 +29,9 @@ const int color[] = { COLOR_GREEN, COLOR_YELLOW, COLOR_BLUE, COLOR_MAGENTA, COLOR_CYAN, COLOR_WHITE}; - #define MAX_PATH 1024 +#define EVENT_SIZE ( sizeof (struct inotify_event) ) +#define EVENT_BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) ) extern char* msg_win_str; extern conversation* currentConv; @@ -185,12 +184,61 @@ int main(int argc, char* argv[]){ init_pair( i+1, i, COLOR_BLACK); } + // inotify stuff + int fd = inotify_init(), wd_in = -1, wd_out = -1; + char buffer[EVENT_BUF_LEN]; + char sms_filename[200]; + + /*checking for error*/ +#ifdef DEBUG + if ( fd < 0 ) { + fprintf( stderr, "inotify_init init error"); + } +#endif + + if( fd >= 0 ) { + fcntl (fd, F_SETFL, fcntl (fd, F_GETFL) | O_NONBLOCK); + if( *config.SMS_SENTBOX ) { + wd_out = inotify_add_watch( fd, config.SMS_SENTBOX, IN_MOVED_TO); + } + if( *config.SMS_INBOX ) { + wd_in = inotify_add_watch( fd, config.SMS_INBOX, IN_CREATE ); + // From SMS_OUTBOX to SMS_SENTBOX + } + } + /* Premier affichage */ resize(); int tabed = 0; /* Event loop */ while( c = getch() ) { + + int ret = read( fd, buffer, EVENT_BUF_LEN ); + int i = 0; + while( ret > 0 ) { +#ifdef DEBUG + fprintf(stderr, "%d\n", ret); +#endif + struct inotify_event *event = (struct inotify_event*) (buffer+i); + ret -= EVENT_SIZE + event->len; + i += EVENT_SIZE + event->len; + if ( event->len && (event->mask & IN_CREATE || event->mask & IN_MOVED_TO) && !( event->mask & IN_ISDIR ) ) { +#ifdef DEBUG + fprintf(stderr, "New SMS (%s)\n", event->name); +#endif + if( strncmp(event->name, "IN", 2) == 0 ) { + sprintf(sms_filename, "%s%s", config.SMS_INBOX, event->name); + fprintf(stderr, "%s\n", sms_filename); + readSMS(sms_filename, 0); + } else { + sprintf(sms_filename, "%s%s", config.SMS_SENTBOX, event->name); + fprintf(stderr, "%s\n", sms_filename); + readSMS(sms_filename, 1); + } + } + } + if (c == KEY_RESIZE) { resize(); refresh(); @@ -377,10 +425,15 @@ edit: } - refresh(); + // inotify stuff + if( wd_in >= 0 ) { + inotify_rm_watch( fd, wd_in ); + } + if( wd_out >= 0 ) { + inotify_rm_watch( fd, wd_out ); + } end: endwin(); - return 0; } @@ -157,8 +157,10 @@ int readSMS(char* filename, int inbox_outbox) { getSms.len = sms_len; int r = insertSMS(&getSms); - if( r ) + if( r ) { + fclose(file); return 2; + } fclose(file); }else{ @@ -38,9 +38,7 @@ typedef struct conversation { size_t nbSMS; } conversation; - - - +int readSMS(char*, int); int listSMS(char*,int); int loadConv(void); |