From 81b4913e9a9c98c31532aff0db014aacaf8d6fac Mon Sep 17 00:00:00 2001 From: James Shiffer Date: Sat, 22 Apr 2023 13:01:32 -0700 Subject: [PATCH] Formatting + display Craigslist car price --- FemMonitor/common.h | 2 +- FemMonitor/company.c | 18 +++++++++--------- FemMonitor/craigslist.c | 27 ++++++++++++++++++++++++--- FemMonitor/mail.c | 4 +--- FemMonitor/main.c | 14 +++++++------- Makefile | 4 ++-- 6 files changed, 44 insertions(+), 25 deletions(-) diff --git a/FemMonitor/common.h b/FemMonitor/common.h index 646352b..95ae525 100644 --- a/FemMonitor/common.h +++ b/FemMonitor/common.h @@ -17,7 +17,7 @@ #define START_ROW 2 #define START_COL 2 -#define TITLE_START_COL 15 +#define TITLE_START_COL 19 #define COLORS_SUCCESS 1 #define COLORS_FAILURE 2 #define COLORS_WARNING 3 diff --git a/FemMonitor/company.c b/FemMonitor/company.c index 6cdaa03..cbf727b 100644 --- a/FemMonitor/company.c +++ b/FemMonitor/company.c @@ -33,7 +33,7 @@ void company_init(WINDOW* win, int h, int w) height = h; width = w; - mvwprintw(window, 0, START_COL, " Company "); + mvwprintw(window, 0, START_COL, " FemboyFinancial "); if (curl == NULL) { wattron(window, COLOR_PAIR(COLORS_FAILURE)); @@ -43,6 +43,7 @@ void company_init(WINDOW* win, int h, int w) curl_global_cleanup(); } + mvwprintw(window, START_ROW, START_COL, "Pinging..."); wrefresh(window); } @@ -103,7 +104,7 @@ void* company_refresh(void* arg) char* tagline = div->children->content; // clear line for (int i = START_COL; i < width - 1; ++i) - mvwprintw(window, START_ROW+3, i, " "); + mvwprintw(window, START_ROW+2, i, " "); // say the funny reference char buf[1024]; sprintf(buf, "espeak \"%s\" >/dev/null 2>&1", tagline); @@ -115,37 +116,36 @@ void* company_refresh(void* arg) tagline[max_length] = 0; } // print the funny reference - mvwprintw(window, START_ROW+3, START_COL, "%s", tagline); + mvwprintw(window, START_ROW+2, START_COL, "%s", tagline); } struct tm lastmeeting = {0}; - mvwprintw(window, START_ROW+1, START_COL, "Last meeting:"); + mvwprintw(window, START_ROW, START_COL, "Last meeting:"); wattron(window, WA_BOLD); bool result = parse_meet_time(meet_data.memory, &lastmeeting); double diff_min = difftime(time(NULL), timegm(&lastmeeting)) / 60.0; double diff_hr = diff_min / 60.0; if (result && diff_hr < 1000) { - mvwprintw(window, START_ROW+1, START_COL+13, " %.0fh %.0fm ago", diff_hr, diff_min); + mvwprintw(window, START_ROW, START_COL+13, " %.0fh %.0fm ago", diff_hr, diff_min); } else { - mvwprintw(window, START_ROW+1, START_COL+13, " a long time ago"); + mvwprintw(window, START_ROW, START_COL+13, " a long time ago"); } wattroff(window, WA_BOLD); - mvwprintw(window, START_ROW, START_COL, "FemboyFinancial website:"); if (res == CURLE_OK) { wattron(window, COLOR_PAIR(COLORS_SUCCESS)); - mvwprintw(window, START_ROW, START_COL+24, " ONLINE"); + mvwprintw(window, 0, TITLE_START_COL, " ONLINE "); wattroff(window, COLOR_PAIR(COLORS_SUCCESS)); } else { wattron(window, COLOR_PAIR(COLORS_FAILURE)); - mvwprintw(window, START_ROW, START_COL+24, " OFFLINE"); + mvwprintw(window, 0, TITLE_START_COL, " OFFLINE "); wattroff(window, COLOR_PAIR(COLORS_FAILURE)); } diff --git a/FemMonitor/craigslist.c b/FemMonitor/craigslist.c index 1be449d..96fc56e 100644 --- a/FemMonitor/craigslist.c +++ b/FemMonitor/craigslist.c @@ -53,17 +53,35 @@ bool parse_rand_craigslist(const char* json, char* name, unsigned* price) int r = rand() % 400; int i = 0; + const char* start_price = items; + const char* end_price = items; const char* start_item = items; const char* end_item = items; do { + end_price = strstr(end_item, ",\""); + for (start_price = end_price - 1; *start_price != ','; --start_price) + ; + ++start_price; + start_item = strstr(end_item, "],\""); end_item = strstr(start_item, "\"]"); } while (i++ < r && strstr(end_item, "],\"")); - strncpy(name, start_item + 3, end_item - start_item - 3); - //*price = atoi(); - *price = 0; + + // omit backslashes when copying string + i = 0; + for (const char* c = start_item + 3; c < end_item; ++c) + { + if (*c != '\\') + { + name[i++] = *c; + } + } + + char price_str[8] = {0}; + strncpy(price_str, start_price, end_price - start_price); + *price = atoi(price_str); return TRUE; } @@ -76,11 +94,14 @@ void* craigslist_refresh(void* arg) mvwprintw(window, i, j, " "); } + int max_length = width - 2*START_COL; char result[256] = {0}; unsigned price; if (parse_rand_craigslist(car_data.memory, result, &price)) { + result[max_length] = 0; mvwprintw(window, START_ROW, START_COL, "%s", result); + mvwprintw(window, START_ROW+1, START_COL, "$%d", price); } else { diff --git a/FemMonitor/mail.c b/FemMonitor/mail.c index 4bef43e..2083ea6 100644 --- a/FemMonitor/mail.c +++ b/FemMonitor/mail.c @@ -132,10 +132,8 @@ void* mail_refresh(void* arg) else { wattron(window, COLOR_PAIR(COLORS_FAILURE)); - mvwprintw(window, 0, TITLE_START_COL, " ONLINE "); - wattroff(window, COLOR_PAIR(COLORS_FAILURE)); - mvwprintw(window, START_ROW, START_COL, "Couldn't retrieve mail server status"); + wattroff(window, COLOR_PAIR(COLORS_FAILURE)); } // refresh view diff --git a/FemMonitor/main.c b/FemMonitor/main.c index 04b963f..f98bd1f 100644 --- a/FemMonitor/main.c +++ b/FemMonitor/main.c @@ -67,19 +67,19 @@ int main(int argc, const char* argv[]) // setup various status windows // the bottom windows will be one row shorter to fit the status line at the end - WINDOW* topleft = create_newwin(LINES/4, COLS/2, 0, 0); - WINDOW* topmidleft = create_newwin(LINES/4, COLS/2, LINES/4, 0); - WINDOW* botmidleft = create_newwin(LINES/4, COLS/2, LINES*2/4, 0); - WINDOW* botleft = create_newwin(LINES/4 - 1, COLS/2, LINES*3/4, 0); + WINDOW* topleft = create_newwin((LINES - 11)/2, COLS/2, 0, 0); + WINDOW* topmidleft = create_newwin((LINES - 11)/2, COLS/2, (LINES - 11)/2, 0); + WINDOW* botmidleft = create_newwin(5, COLS/2, LINES - 11, 0); + WINDOW* botleft = create_newwin(5, COLS/2, LINES - 6, 0); WINDOW* topright = create_newwin(LINES/2, COLS/2, 0, COLS/2); WINDOW* midright = create_newwin(LINES/4, COLS/2, LINES*2/4, COLS/2); WINDOW* botright = create_newwin(LINES/4 - 1, COLS/2, LINES*3/4, COLS/2); company_init(topleft, LINES/4, COLS/2); craigslist_init(midright, LINES/4, COLS/2); - numbers_init(topmidleft, LINES/4, COLS/2); - bool_init(botmidleft, LINES/4, COLS/2); - mail_init(botleft, LINES/4 - 1, COLS/2); + numbers_init(botmidleft, LINES/4, COLS/2); + bool_init(botleft, LINES/4, COLS/2); + mail_init(topmidleft, LINES/4 - 1, COLS/2); booru_init(botright, LINES/2 - 1, COLS/2); time_t t; diff --git a/Makefile b/Makefile index 11ffe73..c99e68b 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -CFLAGS = -std=gnu99 `curl-config --cflags` `xml2-config --cflags` `ncurses6-config --cflags` -LDFLAGS = `curl-config --libs` `xml2-config --libs` `ncurses6-config --libs` -lpthread +CFLAGS = -std=gnu99 `curl-config --cflags` `xml2-config --cflags` `ncursesw6-config --cflags` +LDFLAGS = `curl-config --libs` `xml2-config --libs` `ncursesw6-config --libs` -lpthread OUT = fem all: