From 82997192b35b141136679538fdaf1eadc527b29c Mon Sep 17 00:00:00 2001 From: VikingKong Date: Wed, 30 Nov 2022 18:18:02 +0300 Subject: [PATCH] - Implement fetching all articles and the splashscreen - Move scrolling to the Article class - Implement displaying current page and the number of pages in the article title --- API.py | 1 + App.py | 54 +++++++++++++++++++++++++++--------------------------- Render.py | 19 +++++++++++++++++++ 3 files changed, 47 insertions(+), 27 deletions(-) diff --git a/API.py b/API.py index ec6ea50..af1f3fc 100644 --- a/API.py +++ b/API.py @@ -1,6 +1,7 @@ import requests + class Fetcher: def __init__(self, URL, token): self.URL = URL diff --git a/App.py b/App.py index d95b193..19a6c77 100644 --- a/App.py +++ b/App.py @@ -116,15 +116,16 @@ class RightPane(urwid.ListBox): article = [item for item in tui.fetcher.articles[tui.feedView.currentCategory[13:]] if item["id"] == articleId][0] return article + def setArticleTitle(self): + tui.rightBox.set_title(self.article.title + " (" + str(self.article.currentPageNumber) + "/" + + str(self.article.numberOfPages) + ")") + def keypress(self, size, key): if key in ("j", "down"): if not self.isList: - if self.chunkNumber >= len(self.article.chunks) - 1: - pass - else: - self.chunkNumber += 1 - walker = urwid.SimpleListWalker([urwid.Text(self.article.chunks[self.chunkNumber])]) - self.body = walker + walker = urwid.SimpleListWalker([urwid.Text(self.article.scrollDown())]) + self.body = walker + self.setArticleTitle() item_size = len(self.body) focus_widget, idx = self.get_focus() if idx < item_size - 1: @@ -133,12 +134,9 @@ class RightPane(urwid.ListBox): return elif key in ("k", "up"): if not self.isList: - if self.chunkNumber == 0: - pass - else: - self.chunkNumber -= 1 - walker = urwid.SimpleListWalker([urwid.Text(self.article.chunks[self.chunkNumber])]) - self.body = walker + walker = urwid.SimpleListWalker([urwid.Text(self.article.scrollUp())]) + self.body = walker + self.setArticleTitle() focus_widget, idx = self.get_focus() if idx > 0: idx = idx - 1 @@ -152,9 +150,9 @@ class RightPane(urwid.ListBox): self.articlePosition = idx articleId = focus_widget.attr_map[None] self.article = Article(self.getArticle(articleId)) - walker = urwid.SimpleListWalker([urwid.Text(self.article.chunks[self.chunkNumber])]) + walker = urwid.SimpleListWalker([urwid.Text(self.article.firstPage)]) self.body = walker - tui.rightBox.set_title(self.article.title) + self.setArticleTitle() return elif key in ("h", "left"): if self.isList is False: @@ -173,7 +171,7 @@ class TUI(urwid.Frame): def create(cls): tui = cls() - palette = [('header', 'white', 'black'), ('reveal focus', 'black', 'dark cyan', 'standout')] + palette = [("text", "dark cyan", "dark cyan"), ('header', 'white', 'black'), ('reveal focus', 'black', 'dark cyan', 'standout')] loop = urwid.MainLoop( tui, palette, @@ -210,10 +208,9 @@ class TUI(urwid.Frame): def run(self): focus_widget, idx = self.feedView.get_focus() - itemId = focus_widget.attr_map[None][0] - number = focus_widget.attr_map[None][1] - tui.fetcher.articlesFromCategory(itemId[13:], str(number)) - self.articles = tui.fetcher.articles[itemId[13:]] + item = focus_widget.attr_map[None][0][13:] + self.fetcher.articlesFromCategory(item, str(focus_widget.attr_map[None][1])) + self.articles = tui.fetcher.articles[item] self.articleView.fill(self.articles) self.loop.run() self.executor.shutdown(wait=False) @@ -224,18 +221,21 @@ class TUI(urwid.Frame): self.container.set_focus(int(self.activePane)) elif key == "q": raise urwid.ExitMainLoop() - elif key == "f": - self.olb = urwid.ListBox(urwid.SimpleListWalker([urwid.Text("TEST")])) + elif key == "r": + olb = urwid.ListBox(urwid.SimpleListWalker([urwid.Text("")])) overlay = urwid.Overlay( - urwid.LineBox(self.olb), + urwid.LineBox(olb), self.body, align="center", width=("relative", 50), valign="middle", height=3) self.body = overlay - elif key == "F": articles = tui.fetcher.fetch() - # for text in articles: - # print(text) - # self.olb.body = urwid.SimpleListWalker([urwid.Text(text)]) - # self.body = overlay.bottom_w + for text in articles: + olb.body = urwid.SimpleListWalker([urwid.Text(text)]) + tui.loop.entering_idle() + self.body = overlay.bottom_w + focus_widget, idx = self.feedView.get_focus() + itemId = focus_widget.attr_map[None][0] + self.articles = tui.fetcher.articles[itemId[13:]] + self.articleView.fill(self.articles) tui = TUI.create() diff --git a/Render.py b/Render.py index 6ccb8ca..bf5ed3c 100644 --- a/Render.py +++ b/Render.py @@ -6,6 +6,7 @@ class Article: def __init__(self, articleObj): self.text = get_text(articleObj["summary"]["content"]) self.title = articleObj["title"] + self.currentPageNumber = 1 terminal_width, terminal_height = os.get_terminal_size() terminal_width -= 60 start_of_chunk = 0 @@ -27,3 +28,21 @@ class Article: rows_passed = 0 if end_of_chunk <= i: self.chunks.append(self.text[start_of_chunk:i]) + self.firstPage = self.chunks[0] + self.numberOfPages = len(self.chunks) + + def scrollDown(self): + if self.currentPageNumber == self.numberOfPages: + pass + else: + self.currentPageNumber += 1 + print(self.currentPageNumber) + return self.chunks[self.currentPageNumber - 1] + + def scrollUp(self): + if self.currentPageNumber == 1: + pass + else: + self.currentPageNumber -= 1 + print(self.currentPageNumber) + return self.chunks[self.currentPageNumber - 1]