Formatting + display Craigslist car price

This commit is contained in:
James S 2023-04-22 13:01:32 -07:00
parent 9b8f568c5b
commit 81b4913e9a
6 changed files with 44 additions and 25 deletions

View File

@ -17,7 +17,7 @@
#define START_ROW 2 #define START_ROW 2
#define START_COL 2 #define START_COL 2
#define TITLE_START_COL 15 #define TITLE_START_COL 19
#define COLORS_SUCCESS 1 #define COLORS_SUCCESS 1
#define COLORS_FAILURE 2 #define COLORS_FAILURE 2
#define COLORS_WARNING 3 #define COLORS_WARNING 3

View File

@ -33,7 +33,7 @@ void company_init(WINDOW* win, int h, int w)
height = h; height = h;
width = w; width = w;
mvwprintw(window, 0, START_COL, " Company "); mvwprintw(window, 0, START_COL, " FemboyFinancial ");
if (curl == NULL) if (curl == NULL)
{ {
wattron(window, COLOR_PAIR(COLORS_FAILURE)); wattron(window, COLOR_PAIR(COLORS_FAILURE));
@ -43,6 +43,7 @@ void company_init(WINDOW* win, int h, int w)
curl_global_cleanup(); curl_global_cleanup();
} }
mvwprintw(window, START_ROW, START_COL, "Pinging...");
wrefresh(window); wrefresh(window);
} }
@ -103,7 +104,7 @@ void* company_refresh(void* arg)
char* tagline = div->children->content; char* tagline = div->children->content;
// clear line // clear line
for (int i = START_COL; i < width - 1; ++i) 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 // say the funny reference
char buf[1024]; char buf[1024];
sprintf(buf, "espeak \"%s\" >/dev/null 2>&1", tagline); sprintf(buf, "espeak \"%s\" >/dev/null 2>&1", tagline);
@ -115,37 +116,36 @@ void* company_refresh(void* arg)
tagline[max_length] = 0; tagline[max_length] = 0;
} }
// print the funny reference // 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}; 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); wattron(window, WA_BOLD);
bool result = parse_meet_time(meet_data.memory, &lastmeeting); bool result = parse_meet_time(meet_data.memory, &lastmeeting);
double diff_min = difftime(time(NULL), timegm(&lastmeeting)) / 60.0; double diff_min = difftime(time(NULL), timegm(&lastmeeting)) / 60.0;
double diff_hr = diff_min / 60.0; double diff_hr = diff_min / 60.0;
if (result && diff_hr < 1000) 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 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); wattroff(window, WA_BOLD);
mvwprintw(window, START_ROW, START_COL, "FemboyFinancial website:");
if (res == CURLE_OK) if (res == CURLE_OK)
{ {
wattron(window, COLOR_PAIR(COLORS_SUCCESS)); 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)); wattroff(window, COLOR_PAIR(COLORS_SUCCESS));
} }
else else
{ {
wattron(window, COLOR_PAIR(COLORS_FAILURE)); 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)); wattroff(window, COLOR_PAIR(COLORS_FAILURE));
} }

View File

@ -53,17 +53,35 @@ bool parse_rand_craigslist(const char* json, char* name, unsigned* price)
int r = rand() % 400; int r = rand() % 400;
int i = 0; int i = 0;
const char* start_price = items;
const char* end_price = items;
const char* start_item = items; const char* start_item = items;
const char* end_item = items; const char* end_item = items;
do do
{ {
end_price = strstr(end_item, ",\"");
for (start_price = end_price - 1; *start_price != ','; --start_price)
;
++start_price;
start_item = strstr(end_item, "],\""); start_item = strstr(end_item, "],\"");
end_item = strstr(start_item, "\"]"); end_item = strstr(start_item, "\"]");
} }
while (i++ < r && strstr(end_item, "],\"")); while (i++ < r && strstr(end_item, "],\""));
strncpy(name, start_item + 3, end_item - start_item - 3);
//*price = atoi(); // omit backslashes when copying string
*price = 0; 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; return TRUE;
} }
@ -76,11 +94,14 @@ void* craigslist_refresh(void* arg)
mvwprintw(window, i, j, " "); mvwprintw(window, i, j, " ");
} }
int max_length = width - 2*START_COL;
char result[256] = {0}; char result[256] = {0};
unsigned price; unsigned price;
if (parse_rand_craigslist(car_data.memory, result, &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, START_COL, "%s", result);
mvwprintw(window, START_ROW+1, START_COL, "$%d", price);
} }
else else
{ {

View File

@ -132,10 +132,8 @@ void* mail_refresh(void* arg)
else else
{ {
wattron(window, COLOR_PAIR(COLORS_FAILURE)); 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"); mvwprintw(window, START_ROW, START_COL, "Couldn't retrieve mail server status");
wattroff(window, COLOR_PAIR(COLORS_FAILURE));
} }
// refresh view // refresh view

View File

@ -67,19 +67,19 @@ int main(int argc, const char* argv[])
// setup various status windows // setup various status windows
// the bottom windows will be one row shorter to fit the status line at the end // 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* topleft = create_newwin((LINES - 11)/2, COLS/2, 0, 0);
WINDOW* topmidleft = create_newwin(LINES/4, COLS/2, LINES/4, 0); WINDOW* topmidleft = create_newwin((LINES - 11)/2, COLS/2, (LINES - 11)/2, 0);
WINDOW* botmidleft = create_newwin(LINES/4, COLS/2, LINES*2/4, 0); WINDOW* botmidleft = create_newwin(5, COLS/2, LINES - 11, 0);
WINDOW* botleft = create_newwin(LINES/4 - 1, COLS/2, LINES*3/4, 0); WINDOW* botleft = create_newwin(5, COLS/2, LINES - 6, 0);
WINDOW* topright = create_newwin(LINES/2, COLS/2, 0, COLS/2); 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* 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); WINDOW* botright = create_newwin(LINES/4 - 1, COLS/2, LINES*3/4, COLS/2);
company_init(topleft, LINES/4, COLS/2); company_init(topleft, LINES/4, COLS/2);
craigslist_init(midright, LINES/4, COLS/2); craigslist_init(midright, LINES/4, COLS/2);
numbers_init(topmidleft, LINES/4, COLS/2); numbers_init(botmidleft, LINES/4, COLS/2);
bool_init(botmidleft, LINES/4, COLS/2); bool_init(botleft, LINES/4, COLS/2);
mail_init(botleft, LINES/4 - 1, COLS/2); mail_init(topmidleft, LINES/4 - 1, COLS/2);
booru_init(botright, LINES/2 - 1, COLS/2); booru_init(botright, LINES/2 - 1, COLS/2);
time_t t; time_t t;

View File

@ -1,5 +1,5 @@
CFLAGS = -std=gnu99 `curl-config --cflags` `xml2-config --cflags` `ncurses6-config --cflags` CFLAGS = -std=gnu99 `curl-config --cflags` `xml2-config --cflags` `ncursesw6-config --cflags`
LDFLAGS = `curl-config --libs` `xml2-config --libs` `ncurses6-config --libs` -lpthread LDFLAGS = `curl-config --libs` `xml2-config --libs` `ncursesw6-config --libs` -lpthread
OUT = fem OUT = fem
all: all: