summaryrefslogtreecommitdiff
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
parent1d0d37324a8fbdd0a3587698af577fcd39a25b08 (diff)
implement a news system
-rw-r--r--src/backend/__init__.py1
-rw-r--r--src/backend/getfs.py2
-rw-r--r--src/backend/getnews.py116
-rwxr-xr-xsrc/frontend/cli/sisyphus-cli.py51
4 files changed, 168 insertions, 2 deletions
diff --git a/src/backend/__init__.py b/src/backend/__init__.py
index 0e54ce9..21dec83 100644
--- a/src/backend/__init__.py
+++ b/src/backend/__init__.py
@@ -3,6 +3,7 @@ from .dlbinpkg import *
from .getclr import *
from .getenv import *
from .getfs import *
+from .getnews import *
from .killemerge import *
from .pkgadd import *
from .pkgremove import *
diff --git a/src/backend/getfs.py b/src/backend/getfs.py
index 77e0b2d..27da9ba 100644
--- a/src/backend/getfs.py
+++ b/src/backend/getfs.py
@@ -17,6 +17,8 @@ p_cch_dir = '/var/cache/packages'
p_dst_dir = '/var/cache/distfiles'
p_mtd_dir = '/var/cache/edb'
+s_cfg_dir = '/etc/sisyphus'
+
rmt_pcsv = '/var/lib/sisyphus/csv/remotePackagesPre.csv'
rmt_dcsv = '/var/lib/sisyphus/csv/remoteDescriptionsPre.csv'
lcl_pcsv = '/var/lib/sisyphus/csv/localPackagesPre.csv'
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.")
diff --git a/src/frontend/cli/sisyphus-cli.py b/src/frontend/cli/sisyphus-cli.py
index 33c45ff..053f111 100755
--- a/src/frontend/cli/sisyphus-cli.py
+++ b/src/frontend/cli/sisyphus-cli.py
@@ -8,8 +8,11 @@ import sys
app = typer.Typer()
mirrorSetup = typer.Typer()
+getNews = typer.Typer()
app.add_typer(mirrorSetup, name="mirror",
help='List/Set the active binhost (binary repository) mirror.')
+app.add_typer(getNews, name="news",
+ help='Check/List/Mark Read/Mark Unread news articles.')
@app.callback()
@@ -324,7 +327,7 @@ def sysinfo():
@mirrorSetup.command("list")
-def mirrorlist():
+def listmirrors():
"""
List available binary package repository mirrors (the active one is marked with *).\n
\n
@@ -335,7 +338,7 @@ def mirrorlist():
@mirrorSetup.command("set")
-def mirrorset(index: int):
+def setmirror(index: int):
"""
Change the binary package repository to the selected mirror.\n
\n
@@ -346,6 +349,50 @@ def mirrorset(index: int):
sisyphus.setmirror.setActive(index)
+@getNews.command("check")
+def checknews():
+ """
+ Check for unread news articles,\n
+ \n
+ * Example:\n
+ sisyphus news check\n
+ """
+ sisyphus.getnews.start(check=True)
+
+
+@getNews.command("list")
+def listnews():
+ """
+ List all news articles.\n
+ \n
+ * Example:\n
+ sisyphus news list\n
+ """
+ sisyphus.getnews.start(list=True)
+
+
+@getNews.command("read")
+def readnews(index: int):
+ """
+ Mark a news article as read.\n
+ \n
+ * Example:\n
+ sisyphus news read 1\n
+ """
+ sisyphus.getnews.start(read=True, article_nr=index)
+
+
+@getNews.command("unread")
+def unreadnews(index: int):
+ """
+ Mark a news article as unread.\n
+ \n
+ * Example:\n
+ sisyphus news unread 2\n
+ """
+ sisyphus.getnews.start(unread=True, article_nr=index)
+
+
if __name__ == "__main__":
if len(sys.argv) > 1 and not '--help' in sys.argv:
sisyphus.setjobs.start()