Implement displaying feeds and articles dates.

master
VikingKong 3 years ago
parent 89e74508e6
commit abf1a5dc0d

@ -1,4 +1,5 @@
import httpx import httpx
import Utils
class Fetcher: class Fetcher:
@ -12,9 +13,10 @@ class Fetcher:
def getUnreadCounts(self): def getUnreadCounts(self):
response = httpx.get(self.URL+"/reader/api/0/unread-count?output=json", headers=self.headers) response = httpx.get(self.URL+"/reader/api/0/unread-count?output=json", headers=self.headers)
result = dict([(item["id"], (item["count"], item["newestItemTimestampUsec"])) for item in response.json()["unreadcounts"]]) result = dict([(item["id"], (item["count"], item["newestItemTimestampUsec"], Utils.timestampToDate(
item["newestItemTimestampUsec"]))) for item in response.json()["unreadcounts"]])
self.unreadCounts = result self.unreadCounts = result
self.categories = [{"id": item, "name": item[13:], "count": self.unreadCounts[item][0]} self.categories = [{"id": item, "name": item[13:], "count": self.unreadCounts[item][0], "date": self.unreadCounts[item][2]}
for item in self.unreadCounts.keys() if item[0:13] == "user/-/label/"] for item in self.unreadCounts.keys() if item[0:13] == "user/-/label/"]
def getSubscriptions(self): def getSubscriptions(self):

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

@ -1,14 +1,16 @@
from inscriptis import get_text from inscriptis import get_text
import os import os
import Utils
class Article: class Article:
def __init__(self, articleObj): def __init__(self, articleObj):
self.text = get_text(articleObj["summary"]["content"]) self.text = get_text(articleObj["summary"]["content"])
self.title = articleObj["title"] self.title = articleObj["title"]
self.date = Utils.timestampToDate(articleObj["timestampUsec"])
self.currentPageNumber = 1 self.currentPageNumber = 1
terminal_width, terminal_height = os.get_terminal_size() terminal_width, terminal_height = os.get_terminal_size()
terminal_width -= 60 terminal_width -= 76
terminal_height -= 1 terminal_height -= 1
start_of_chunk = 0 start_of_chunk = 0
end_of_chunk = 0 end_of_chunk = 0

@ -0,0 +1,5 @@
from datetime import datetime
def timestampToDate(ts):
return datetime.fromtimestamp(int(ts)/1000000).strftime("%y-%m-%d %H:%M")
Loading…
Cancel
Save