|
|
|
@ -3,6 +3,7 @@ import yaml
|
|
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
from API import Fetcher
|
|
|
|
from API import Fetcher
|
|
|
|
from Render import Article
|
|
|
|
from Render import Article
|
|
|
|
|
|
|
|
import asyncio
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LeftPane(urwid.ListBox):
|
|
|
|
class LeftPane(urwid.ListBox):
|
|
|
|
@ -27,15 +28,21 @@ class LeftPane(urwid.ListBox):
|
|
|
|
def getArticlesFromFeed(self, feed):
|
|
|
|
def getArticlesFromFeed(self, feed):
|
|
|
|
return tui.fetcher.articlesFromFeed(feed, self.currentCategory[13:])
|
|
|
|
return tui.fetcher.articlesFromFeed(feed, self.currentCategory[13:])
|
|
|
|
|
|
|
|
|
|
|
|
def getArticles(self, attrMap):
|
|
|
|
async def setCategoryArticles(self, attrMap):
|
|
|
|
if self.isCategoryView:
|
|
|
|
itemId = attrMap[0]
|
|
|
|
itemId = attrMap[0]
|
|
|
|
number = attrMap[1]
|
|
|
|
number = attrMap[1]
|
|
|
|
await tui.fetcher.articlesFromCategoryAsync(itemId[13:], str(number))
|
|
|
|
tui.fetcher.articlesFromCategory(itemId[13:], str(number))
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
return tui.fetcher.articles[itemId[13:]]
|
|
|
|
currentCategory = focus_widget.attr_map[None][0]
|
|
|
|
else:
|
|
|
|
if itemId == currentCategory:
|
|
|
|
itemId = attrMap
|
|
|
|
tui.articles = tui.fetcher.articles[currentCategory[13:]]
|
|
|
|
return tui.fetcher.articlesFromFeed(itemId, self.currentCategory[13:])
|
|
|
|
tui.articleView.fill(tui.articles)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def setFeedArticles(self, attrMap):
|
|
|
|
|
|
|
|
itemId = attrMap
|
|
|
|
|
|
|
|
tui.articles = tui.fetcher.articlesFromFeed(itemId, self.currentCategory[13:])
|
|
|
|
|
|
|
|
if tui.articles is not None:
|
|
|
|
|
|
|
|
tui.articleView.fill(tui.articles)
|
|
|
|
|
|
|
|
|
|
|
|
def keypress(self, size, key):
|
|
|
|
def keypress(self, size, key):
|
|
|
|
if key in ("j", "down"):
|
|
|
|
if key in ("j", "down"):
|
|
|
|
@ -47,8 +54,9 @@ class LeftPane(urwid.ListBox):
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
if self.isCategoryView:
|
|
|
|
if self.isCategoryView:
|
|
|
|
self.currentCategory = focus_widget.attr_map[None][0]
|
|
|
|
self.currentCategory = focus_widget.attr_map[None][0]
|
|
|
|
tui.articles = self.getArticles(focus_widget.attr_map[None])
|
|
|
|
asyncio.create_task(self.setCategoryArticles(focus_widget.attr_map[None]))
|
|
|
|
tui.articleView.fill(tui.articles)
|
|
|
|
else:
|
|
|
|
|
|
|
|
self.setFeedArticles(focus_widget.attr_map[None])
|
|
|
|
return
|
|
|
|
return
|
|
|
|
elif key in ("k", "up"):
|
|
|
|
elif key in ("k", "up"):
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
@ -58,11 +66,12 @@ class LeftPane(urwid.ListBox):
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
if self.isCategoryView:
|
|
|
|
if self.isCategoryView:
|
|
|
|
self.currentCategory = focus_widget.attr_map[None][0]
|
|
|
|
self.currentCategory = focus_widget.attr_map[None][0]
|
|
|
|
tui.articles = self.getArticles(focus_widget.attr_map[None])
|
|
|
|
asyncio.create_task(self.setCategoryArticles(focus_widget.attr_map[None]))
|
|
|
|
tui.articleView.fill(tui.articles)
|
|
|
|
else:
|
|
|
|
|
|
|
|
self.setFeedArticles(focus_widget.attr_map[None])
|
|
|
|
return
|
|
|
|
return
|
|
|
|
elif key in ("l", "right"):
|
|
|
|
elif key in ("l", "right"):
|
|
|
|
if self.isCategoryView:
|
|
|
|
if self.isCategoryView and tui.fetcher.checkCategory(self.currentCategory[13:]):
|
|
|
|
self.isCategoryView = False
|
|
|
|
self.isCategoryView = False
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
self.categoryPosition = idx
|
|
|
|
self.categoryPosition = idx
|
|
|
|
@ -76,8 +85,7 @@ class LeftPane(urwid.ListBox):
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
if self.isCategoryView:
|
|
|
|
if self.isCategoryView:
|
|
|
|
self.currentCategory = focus_widget.attr_map[None][0]
|
|
|
|
self.currentCategory = focus_widget.attr_map[None][0]
|
|
|
|
tui.articles = self.getArticles(focus_widget.attr_map[None])
|
|
|
|
self.setFeedArticles(focus_widget.attr_map[None])
|
|
|
|
tui.articleView.fill(tui.articles)
|
|
|
|
|
|
|
|
return
|
|
|
|
return
|
|
|
|
elif key in ("h", "left"):
|
|
|
|
elif key in ("h", "left"):
|
|
|
|
if not self.isCategoryView:
|
|
|
|
if not self.isCategoryView:
|
|
|
|
@ -89,8 +97,7 @@ class LeftPane(urwid.ListBox):
|
|
|
|
tui.leftBox.set_title("Categories")
|
|
|
|
tui.leftBox.set_title("Categories")
|
|
|
|
self.set_focus(self.categoryPosition)
|
|
|
|
self.set_focus(self.categoryPosition)
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
focus_widget, idx = self.get_focus()
|
|
|
|
tui.articles = self.getArticles(focus_widget.attr_map[None])
|
|
|
|
tui.articles = self.setCategoryArticles(focus_widget.attr_map[None])
|
|
|
|
tui.articleView.fill(tui.articles)
|
|
|
|
|
|
|
|
return
|
|
|
|
return
|
|
|
|
|
|
|
|
|
|
|
|
return super().keypress(size, key)
|
|
|
|
return super().keypress(size, key)
|
|
|
|
@ -224,9 +231,7 @@ class TUI(urwid.Frame):
|
|
|
|
self.fetcher.articlesFromCategory(item, str(focus_widget.attr_map[None][1]))
|
|
|
|
self.fetcher.articlesFromCategory(item, str(focus_widget.attr_map[None][1]))
|
|
|
|
self.articles = tui.fetcher.articles[item]
|
|
|
|
self.articles = tui.fetcher.articles[item]
|
|
|
|
self.articleView.fill(self.articles)
|
|
|
|
self.articleView.fill(self.articles)
|
|
|
|
self.handle = self.loop.event_loop.alarm(0, self.fetchAll)
|
|
|
|
|
|
|
|
self.loop.run()
|
|
|
|
self.loop.run()
|
|
|
|
tui.loop.event_loop.remove_enter_idle(self.handle)
|
|
|
|
|
|
|
|
self.executor.shutdown(wait=False)
|
|
|
|
self.executor.shutdown(wait=False)
|
|
|
|
|
|
|
|
|
|
|
|
def unhandled_input(self, key):
|
|
|
|
def unhandled_input(self, key):
|
|
|
|
@ -236,7 +241,7 @@ class TUI(urwid.Frame):
|
|
|
|
elif key == "q":
|
|
|
|
elif key == "q":
|
|
|
|
raise urwid.ExitMainLoop()
|
|
|
|
raise urwid.ExitMainLoop()
|
|
|
|
elif key == "r":
|
|
|
|
elif key == "r":
|
|
|
|
self.fetchAll()
|
|
|
|
self.handle = self.loop.event_loop.alarm(0, self.fetchAll)
|
|
|
|
focus_widget, idx = self.feedView.get_focus()
|
|
|
|
focus_widget, idx = self.feedView.get_focus()
|
|
|
|
itemId = focus_widget.attr_map[None][0]
|
|
|
|
itemId = focus_widget.attr_map[None][0]
|
|
|
|
self.articles = tui.fetcher.articles[itemId[13:]]
|
|
|
|
self.articles = tui.fetcher.articles[itemId[13:]]
|
|
|
|
|