keys.c (2032B)
1 2 #include "config.h" 3 #include "db.h" 4 #include "readr.h" 5 #include "tui.h" 6 #include "utils.h" 7 8 #define MAX_PANEL 1 9 10 void 11 handle_key(app_t* app, struct tb_event ev) 12 { 13 switch (ev.key) { 14 case TB_KEY_ARROW_UP: 15 if (app->selected_panel == 0) { // change feed 16 app->selected_feed = MAX(app->selected_feed - 1, 0); 17 app->selected_post = 0; 18 } else if (app->selected_panel == 1) { // change post 19 app->selected_post = MAX(app->selected_post - 1, 0); 20 } 21 break; 22 23 case TB_KEY_ARROW_DOWN: 24 if (app->selected_panel == 0) { // change feed 25 app->selected_feed = MIN(app->selected_feed + 1, app->feeds_len - 1); 26 app->selected_post = 0; 27 } else if (app->selected_panel == 1) { // change post 28 app->selected_post 29 = MIN(app->selected_post + 1, app->feeds[app->selected_feed]->posts_len - 1); 30 } 31 break; 32 33 case TB_KEY_ARROW_LEFT: // change panel 34 app->selected_panel = MAX(app->selected_panel - 1, 0); 35 break; 36 37 case TB_KEY_ARROW_RIGHT: // change panel 38 app->selected_panel = MIN(app->selected_panel + 1, MAX_PANEL); 39 break; 40 case TB_KEY_ENTER: { 41 if (app->selected_panel == 1) { 42 char url[URL_CAP] = { 0 }; 43 db_post_t* post = app->feeds[app->selected_feed]->posts[app->selected_post]; 44 size_t len = MIN(URL_CAP, strlen(post->link)); 45 if (len == 0) return; 46 strncpy(url, post->link, len); 47 url[len] = '\0'; 48 if (db_mark_as_seen(post->id)) { 49 fprintf(stderr, "could not mark post as seen, id %d\n", post->id); 50 }; 51 post->seen = 1; 52 open_url(url); 53 } 54 break; 55 } 56 default: 57 break; 58 } 59 60 if (ev.ch == ' ') { // TB_KEY_SPACE for some reason doesn't work /shrug 61 if (app->selected_panel == 1) { 62 char url[URL_CAP] = { 0 }; 63 db_post_t* post = app->feeds[app->selected_feed]->posts[app->selected_post]; 64 size_t len = MIN(URL_CAP, strlen(post->comments)); 65 if (len == 0) return; 66 strncpy(url, post->comments, len); 67 url[len] = '\0'; 68 if (db_mark_as_seen(post->id)) { 69 fprintf(stderr, "could not mark post as seen, id %d\n", post->id); 70 } 71 post->seen = 1; 72 open_url(url); 73 } 74 } 75 }