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_COL 2
#define TITLE_START_COL 15
#define TITLE_START_COL 19
#define COLORS_SUCCESS 1
#define COLORS_FAILURE 2
#define COLORS_WARNING 3

View File

@ -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));
}

View File

@ -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
{

View File

@ -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

View File

@ -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;

View File

@ -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: