Category details screen now sorted by new activity

This commit is contained in:
asdf 2021-07-22 16:47:50 +10:00
parent dbb63f8332
commit e500167d27
2 changed files with 51 additions and 16 deletions

40
data.py
View File

@ -237,3 +237,43 @@ class LinkData:
search_results.add(tuple(parent_record))
return sorted(search_results, key=lambda x: x[0], reverse=True)
def list_category_details(self, selected_category: str) -> list:
"""returns a sorted list of posts belonging to the specified category"""
links = []
for record in self.link_data:
category = record[4]
if category == selected_category:
postid = record[0]
userid = record[1]
timestamp = record[2]
parent_id = userid + "+" + str(timestamp)
description = record[6]
replies = [i for i in self.link_data if i[3] == parent_id]
new_replies = [i for i in replies if i[2] >= config.USER.lastlogin]
if replies:
last_modified_timestamp = str(
max(float(timestamp), max([float(i[2]) for i in replies if i[2]]))
)
else:
last_modified_timestamp = timestamp
has_new_replies = (
True if new_replies or timestamp >= config.USER.lastlogin else False
)
links.append(
{
"postid": postid,
"link_timestamp": timestamp,
"link_author": userid,
"reply_count": len(replies),
"description": description,
"has_new_replies": has_new_replies,
"last_modified_timestamp": last_modified_timestamp,
}
)
return sorted(links, key=lambda x: x["last_modified_timestamp"], reverse=True)

View File

@ -69,22 +69,17 @@ def print_category_details(view_cat):
out = ""
link_count = 0
thread_index = {}
category_details = LinkData.list_category_details(view_cat["name"])
for line in link_data:
if line[4] == view_cat["name"]:
link_count += 1
thread_index[link_count] = line[0]
parent_id = line[1] + "+" + str(line[2])
replies = [line for line in link_data if line[3] == parent_id]
new_replies = len(
[line for line in replies if line[2] >= config.USER.lastlogin]
)
desc = textwrap.shorten(line[6], width=desclen, placeholder="...")
newmarker = "*" if new_replies or line[2] >= config.USER.lastlogin else ""
_dt = datetime.fromtimestamp(float(line[2])).strftime("%Y-%m-%d")
out += " {:3d} {:>10s} {:<{namelen}s} [{:3d}] {:s}{}\n".format(
link_count, _dt, line[1], len(replies), desc, newmarker, namelen=namelen
)
for link in category_details:
link_count += 1
thread_index[link_count] = link["postid"]
desc = textwrap.shorten(link["description"], width=desclen, placeholder="...")
newmarker = "*" if link["last_modified_timestamp"] >= config.USER.lastlogin else ""
_dt = datetime.fromtimestamp(float(link["link_timestamp"])).strftime("%Y-%m-%d")
out += " {:3d} {:>10s} {:<{namelen}s} [{:3d}] {:s}{}\n".format(
link_count, _dt, link["link_author"], link["reply_count"], desc, newmarker, namelen=namelen
)
if len(out) > 0:
print(header)
@ -274,7 +269,7 @@ def is_valid_input(entry: str) -> bool:
return True
def is_correct_category(entry: str) -> bool:
"""Make sure the user purposefully created a new category and not by
"""Make sure the user purposefully created a new category and not by
accident (mistyped, tried to use category number instead of name)"""
if entry not in [ record["name"] for record in categories ]:
question = "Do you want to create a new category '{}'? Y/[N]".format(entry)