summaryrefslogtreecommitdiff
path: root/src/backend/getnews.py
diff options
context:
space:
mode:
authorV3n3RiX <venerix@koprulu.sector>2024-10-05 07:46:45 +0100
committerV3n3RiX <venerix@koprulu.sector>2024-10-05 07:46:45 +0100
commit3686bbcd8d465fdd79782d3da8285930b679db02 (patch)
tree21dd88e992900d818e279a5e0b90946be6daa7a8 /src/backend/getnews.py
parent1d0d37324a8fbdd0a3587698af577fcd39a25b08 (diff)
implement a news system
Diffstat (limited to 'src/backend/getnews.py')
-rw-r--r--src/backend/getnews.py116
1 files changed, 116 insertions, 0 deletions
diff --git a/src/backend/getnews.py b/src/backend/getnews.py
new file mode 100644
index 0000000..ce56df4
--- /dev/null
+++ b/src/backend/getnews.py
@@ -0,0 +1,116 @@
+#!/usr/bin/python3
+
+import os
+import sisyphus.getclr
+import sisyphus.getfs
+
+NEWS_DIR = "news"
+
+N_NEWS_FILE = os.path.join(sisyphus.getfs.p_cfg_dir,
+ os.path.join(NEWS_DIR, "n_news.txt"))
+R_NEWS_FILE = os.path.join(sisyphus.getfs.s_cfg_dir,
+ os.path.join(NEWS_DIR, "r_news.txt"))
+DELIMITER = "---"
+
+
+def ld_n_news():
+ with open(N_NEWS_FILE, "r") as file:
+ content = file.read()
+ articles = content.split(DELIMITER)
+ return [article.strip() for article in articles if article.strip()]
+
+
+def ld_r_news():
+ try:
+ with open(R_NEWS_FILE, "r") as file:
+ return [int(line.strip()) for line in file.readlines()]
+ except FileNotFoundError:
+ return []
+
+
+def save_r_news(r_news):
+ with open(R_NEWS_FILE, "w") as file:
+ for index in r_news:
+ file.write(f"{index}\n")
+
+
+def mark_read(article_nr):
+ n_news = ld_n_news()
+
+ if 1 <= article_nr <= len(n_news):
+ article_index = article_nr - 1
+ r_news_index = ld_r_news()
+
+ if article_index in r_news_index:
+ print(f"\nArticle {sisyphus.getclr.green}{article_nr}{sisyphus.getclr.reset} is already marked as {sisyphus.getclr.green}read{sisyphus.getclr.reset}.")
+ else:
+ r_news_index.append(article_index)
+ save_r_news(r_news_index)
+ print(
+ f"\nArticle {sisyphus.getclr.green}{article_nr}{sisyphus.getclr.reset} marked as {sisyphus.getclr.green}read{sisyphus.getclr.reset}.")
+ else:
+ print(
+ f"\nArticle {sisyphus.getclr.green}{article_nr}{sisyphus.getclr.reset} doesn't exist.")
+
+
+def mark_unread(article_nr):
+ n_news = ld_n_news()
+
+ if 1 <= article_nr <= len(n_news):
+ article_index = article_nr - 1
+ r_news_index = ld_r_news()
+
+ if article_index not in r_news_index:
+ print(f"\nArticle {sisyphus.getclr.green}{article_nr}{sisyphus.getclr.reset} is already marked as {sisyphus.getclr.green}unread{sisyphus.getclr.reset}.")
+ else:
+ r_news_index.remove(article_index)
+ save_r_news(r_news_index)
+ print(
+ f"\nArticle {sisyphus.getclr.green}{article_nr}{sisyphus.getclr.reset} marked as {sisyphus.getclr.green}unread{sisyphus.getclr.reset}.")
+ else:
+ print(
+ f"\nArticle {sisyphus.getclr.green}{article_nr}{sisyphus.getclr.reset} doesn't exist.")
+
+
+def list_all_news():
+ n_news = ld_n_news()
+ r_news_index = ld_r_news()
+
+ for index, news in enumerate(n_news):
+ status = "Read" if index in r_news_index else "Unread"
+ print(
+ f"\nArticle {sisyphus.getclr.green}{index + 1}{sisyphus.getclr.reset} ({status}):\n{news}")
+
+
+def check_n_news():
+ n_news = ld_n_news()
+ r_news_index = ld_r_news()
+
+ unread_count = len(n_news) - len(r_news_index)
+
+ if unread_count > 0:
+ print(
+ f"\nThere are {sisyphus.getclr.bright_red}{unread_count}{sisyphus.getclr.reset} unread news article(s).")
+ else:
+ print(
+ f"\nThere are {sisyphus.getclr.green}{unread_count}{sisyphus.getclr.reset} unread news article(s).")
+
+
+def start(check=False, list=False, read=False, unread=False, article_nr=None):
+ if check:
+ check_n_news()
+
+ if list:
+ list_all_news()
+
+ if read:
+ if article_nr is not None:
+ mark_read(article_nr)
+ else:
+ print("\nError: No article number provided to mark as read.")
+
+ if unread:
+ if article_nr is not None:
+ mark_unread(article_nr)
+ else:
+ print("\nError: No article number provided to mark as unread.")