|
|
|
|
@ -1,15 +1,19 @@
|
|
|
|
|
import urwid
|
|
|
|
|
import yaml
|
|
|
|
|
import asyncio
|
|
|
|
|
import warnings
|
|
|
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
|
from API import Fetcher
|
|
|
|
|
from Render import Article
|
|
|
|
|
import asyncio
|
|
|
|
|
import Utils
|
|
|
|
|
warnings.filterwarnings("ignore")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LeftPane(urwid.ListBox):
|
|
|
|
|
def __init__(self, categories):
|
|
|
|
|
super().__init__(self)
|
|
|
|
|
items = [urwid.AttrMap(urwid.Columns([(5, urwid.Text(str(category["count"]))), urwid.Text(category["name"])]),
|
|
|
|
|
items = [urwid.AttrMap(urwid.Columns([
|
|
|
|
|
(16, urwid.Text(category["date"])), urwid.Text(category["name"]), (5, urwid.Text(str(category["count"])))]),
|
|
|
|
|
(category["id"], category["count"]), "reveal focus") for category in categories]
|
|
|
|
|
walker = urwid.SimpleListWalker(items)
|
|
|
|
|
self.body = walker
|
|
|
|
|
@ -77,8 +81,10 @@ class LeftPane(urwid.ListBox):
|
|
|
|
|
self.categoryPosition = idx
|
|
|
|
|
categoryId = focus_widget.attr_map[None][0]
|
|
|
|
|
feeds = tui.fetcher.feedsFromCategory(categoryId)
|
|
|
|
|
feedItems = [urwid.AttrMap(urwid.Columns([(5, urwid.Text(str(tui.fetcher.unreadCounts[feed["id"]][0]))),
|
|
|
|
|
urwid.Text(feed["title"])]), feed["id"], "reveal focus") for feed in feeds]
|
|
|
|
|
feedItems = [urwid.AttrMap(urwid.Columns([(16, urwid.Text(tui.fetcher.unreadCounts[feed["id"]][2])),
|
|
|
|
|
urwid.Text(feed["title"]),
|
|
|
|
|
(5, urwid.Text(str(tui.fetcher.unreadCounts[feed["id"]][0])))]),
|
|
|
|
|
feed["id"], "reveal focus") for feed in feeds]
|
|
|
|
|
walker = urwid.SimpleListWalker(feedItems)
|
|
|
|
|
self.body = walker
|
|
|
|
|
tui.leftBox.set_title(categoryId[13:])
|
|
|
|
|
@ -90,7 +96,8 @@ class LeftPane(urwid.ListBox):
|
|
|
|
|
elif key in ("h", "left"):
|
|
|
|
|
if not self.isCategoryView:
|
|
|
|
|
self.isCategoryView = True
|
|
|
|
|
items = [urwid.AttrMap(urwid.Columns([(5, urwid.Text(str(category["count"]))), urwid.Text(category["name"])]),
|
|
|
|
|
items = [urwid.AttrMap(urwid.Columns([
|
|
|
|
|
(16, urwid.Text(category["date"])), urwid.Text(category["name"]), (5, urwid.Text(str(category["count"])))]),
|
|
|
|
|
(category["id"], category["count"]), "reveal focus") for category in tui.fetcher.categories]
|
|
|
|
|
walker = urwid.SimpleFocusListWalker(items)
|
|
|
|
|
self.body = walker
|
|
|
|
|
@ -114,8 +121,14 @@ class RightPane(urwid.ListBox):
|
|
|
|
|
self.chunkNumber = 0
|
|
|
|
|
|
|
|
|
|
def fill(self, articles):
|
|
|
|
|
items = [urwid.AttrMap(urwid.Columns([(2, urwid.Text("N")), urwid.Text(article["title"])]),
|
|
|
|
|
article["id"], "reveal focus") for article in articles]
|
|
|
|
|
items = [
|
|
|
|
|
urwid.AttrMap(
|
|
|
|
|
urwid.Columns(
|
|
|
|
|
[(2, urwid.Text("")),
|
|
|
|
|
(16, urwid.Text(Utils.timestampToDate(article["timestampUsec"]))),
|
|
|
|
|
urwid.Text(article["title"])]),
|
|
|
|
|
article["id"],
|
|
|
|
|
"reveal focus") for article in articles]
|
|
|
|
|
walker = urwid.SimpleListWalker(items)
|
|
|
|
|
self.body = walker
|
|
|
|
|
|
|
|
|
|
@ -208,7 +221,7 @@ class TUI(urwid.Frame):
|
|
|
|
|
self.leftBox = urwid.LineBox(self.feedView, title="Categories")
|
|
|
|
|
self.rightBox = urwid.LineBox(self.articleView, title="Articles")
|
|
|
|
|
self.views = urwid.Columns(
|
|
|
|
|
[(40, self.leftBox), self.rightBox])
|
|
|
|
|
[(56, self.leftBox), self.rightBox])
|
|
|
|
|
self.status = urwid.Text("")
|
|
|
|
|
self.footer = urwid.ListBox([self.status])
|
|
|
|
|
self.container = urwid.Pile([self.views, (1, self.footer)])
|
|
|
|
|
@ -238,6 +251,8 @@ class TUI(urwid.Frame):
|
|
|
|
|
if key == "tab":
|
|
|
|
|
self.activePane = not self.activePane
|
|
|
|
|
self.views.set_focus(int(self.activePane))
|
|
|
|
|
if self.activePane:
|
|
|
|
|
tui.articleView.isList = True
|
|
|
|
|
elif key == "q":
|
|
|
|
|
raise urwid.ExitMainLoop()
|
|
|
|
|
elif key == "r":
|
|
|
|
|
|