void linkScreenSetup(LinkScreen *screen, const char *subreddit, const RedditListType listType) { screen->list = redditLinkListNew(); screen->list->subreddit = redditCopyString(subreddit); screen->list->type = listType; redditGetListing(screen->list); screen->displayed = LINES - 1; screen->linkOpenSize = (screen->displayed / 5) * 4; screen->offset = 0; screen->selected = 0; /* Assign help-screen text */ screen->helpText = linkScreenHelp; screen->helpLineCount = sizeof(linkScreenHelp)/sizeof(linkScreenHelp[0]); }
void showThread(RedditLink *link) { CommentScreen *screen = NULL; RedditCommentList *list = NULL; RedditErrno err; if (link == NULL) return ; list = redditCommentListNew(); list->permalink = redditCopyString(link->permalink); err = redditGetCommentList(list); if (err != REDDIT_SUCCESS || list->baseComment->replyCount == 0) goto cleanup; /*screen = getCommentScreenFromCommentList(list, COLS); */ screen = commentScreenNew(); screen->offset = 0; screen->selected = 0; screen->displayed = LINES - 1; screen->commentOpenSize = (screen->displayed / 5) * 4; screen->list = list; screen->width = COLS; commentScreenRenderLines(screen); commentScreenDisplay(screen); int c; while((c = wgetch(stdscr))) { switch(c) { case 'j': case KEY_DOWN: commentScreenDown(screen); break; case 'k': case KEY_UP: commentScreenUp(screen); break; case KEY_NPAGE: commentScreenLevelDown(screen); break; case KEY_PPAGE: commentScreenLevelUp(screen); break; case 'J': commentScreenCommentScrollDown(screen); break; case 'K': commentScreenCommentScrollUp(screen); break; case 'l': case '\n': case KEY_ENTER: commentScreenToggleComment(screen); break; case 'm': redditGetCommentChildren(screen->list, screen->lines[screen->selected]->comment); commentScreenRenderLines(screen); break; case 'q': case 'h': if (screen->commentOpen) { commentScreenCloseComment(screen); } else { goto cleanup; } break; } commentScreenDisplay(screen); } cleanup:; redditCommentListFree(list); commentScreenFree(screen); return ; }
int main(int argc, char *argv[]) { RedditUserLogged *user = NULL; char *subreddit = NULL; char *password = NULL, *username = NULL; optParser parser; DEBUG_START(DEBUG_FILE, DEBUG_FILENAME); memset(&parser, 0, sizeof(optParser)); parser.argc = argc; parser.argv = argv; optAddOptions (&parser, mainOptions, MOPT_ARG_COUNT); handleArguments(&parser); if (mainOptions[MOPT_HELP].isSet) { displayHelp(&parser); return 0; } optClearParser(&parser); setlocale(LC_CTYPE, ""); initscr(); raw();//We want character for character input keypad(stdscr,1);//Enable extra keys like arrowkeys noecho(); start_color(); use_default_colors(); init_pair(1, -1, -1); init_pair(2, COLOR_BLACK, COLOR_WHITE); DEBUG_PRINT(L"Starting...\n"); /* Start libreddit */ redditGlobalInit(); globalState = redditStateNew(); globalState->userAgent = redditCopyString("cReddit/0.0.1"); redditStateSet(globalState); if (mainOptions[MOPT_USERNAME].isSet) { username = mainOptions[MOPT_USERNAME].svalue; if (!mainOptions[MOPT_PASSWORD].isSet) password = getPassword(); else password = mainOptions[MOPT_PASSWORD].svalue; user = redditUserLoggedNew(); redditUserLoggedLogin(user, username, password); /* Don't want to leave that important Reddit password in memory */ memset(password, 0, strlen(password)); if (!mainOptions[MOPT_PASSWORD].isSet) free(password); } if (mainOptions[MOPT_SUBREDDIT].isSet) { subreddit = mainOptions[MOPT_SUBREDDIT].svalue; if (!startsWith("/r/", subreddit) && strcmp("/", subreddit) != 0) prepend("/r/", subreddit); } else { subreddit = "/"; } showSubreddit(subreddit); redditUserLoggedFree(user); redditStateFree(globalState); redditGlobalCleanup(); endwin(); DEBUG_END(DEBUG_FILE); return 0; }
void showSubreddit(const char *subreddit) { LinkScreen *screen; DEBUG_PRINT(L"Loading Subreddit %s\n", subreddit); screen = linkScreenNew(); screen->list = redditLinkListNew(); screen->list->subreddit = redditCopyString(subreddit); screen->list->type = REDDIT_HOT; redditGetListing(screen->list); screen->displayed = LINES - 1; screen->linkOpenSize = (screen->displayed / 5) * 4; screen->offset = 0; screen->selected = 0; /* Assign help-screen text */ screen->helpText = linkScreenHelp; screen->helpLineCount = 19; drawScreen(screen); //And print the screen! int c; while((c = wgetch(stdscr))) { switch(c) { case 'k': case KEY_UP: linkScreenUp(screen); drawScreen(screen); break; case 'j': case KEY_DOWN: linkScreenDown(screen); drawScreen(screen); break; case 'q': if (screen->linkOpen) { linkScreenCloseLink(screen); drawScreen(screen); } else { goto cleanup; } break; case 'u': redditLinkListFreeLinks(screen->list); redditGetListing(screen->list); screen->offset = 0; screen->selected = 0; drawScreen(screen); break; case 'l': case '\n': case KEY_ENTER: if (screen->helpOpen) linkScreenCloseHelp(screen); else linkScreenToggleLink(screen); drawScreen(screen); break; case 'L': redditGetListing(screen->list); drawScreen(screen); break; case 'c': showThread(screen->list->links[screen->selected]); drawScreen(screen); break; case '?': linkScreenToggleHelp(screen); if (screen->helpOpen) linkScreenOpenLink(screen); drawScreen(screen); break; } } cleanup:; redditLinkListFree(screen->list); linkScreenFree(screen); }