From b49a90bc836e31842a7ac0978e41b57ffcf70c52 Mon Sep 17 00:00:00 2001 From: Schimon Jehudah Date: Mon, 11 Jul 2022 16:50:54 +0000 Subject: [PATCH] Update slixfeed.py --- slixfeed.py | 115 +++++++++++++++++++++++++++++++--------------------- 1 file changed, 68 insertions(+), 47 deletions(-) diff --git a/slixfeed.py b/slixfeed.py index 42e5fd2..d1b9a13 100644 --- a/slixfeed.py +++ b/slixfeed.py @@ -23,8 +23,11 @@ import slixmpp import sqlite3 from sqlite3 import Error import sys +import time #import xdg +offline = False + class Slixfeed(slixmpp.ClientXMPP): """ Slixmpp bot that will send updates of feeds it @@ -46,16 +49,15 @@ class Slixfeed(slixmpp.ClientXMPP): # stanza is received. Be aware that that includes # MUC messages and error messages. self.add_event_handler("message", self.message) - self.add_event_handler("disconnected", self.disconnected) - self.add_event_handler("disconnected", self._reconnect) + self.add_event_handler("disconnected", self.reconnect) - async def _reconnect(self, event): + async def reconnect(self, event): await asyncio.sleep(10) + offline = True + print(time.strftime("%H:%M:%S")) + print(offline) self.connect() - - def disconnected(self): - print("disconnected disconnected disconnected") - return True + #return True async def start(self, event): """ @@ -91,34 +93,50 @@ class Slixfeed(slixmpp.ClientXMPP): action = print_help() # NOTE: Might not need it elif message.startswith('feed recent '): + print("COMMAND: feed recent") + print("ACCOUNT: " + str(msg['from'])) action = initdb(msg['from'].bare, message[12:], last_entries) elif message.startswith('feed search '): + print("COMMAND: feed search") + print("ACCOUNT: " + str(msg['from'])) action = initdb(msg['from'].bare, message[12:], search_entries) elif message.startswith('feed list'): + print("COMMAND: feed list") + print("ACCOUNT: " + str(msg['from'])) action = initdb(msg['from'].bare, False, list_subscriptions) elif message.startswith('feed add '): + print("COMMAND: feed add") + print("ACCOUNT: " + str(msg['from'])) action = initdb(msg['from'].bare, message[9:], add_feed) elif message.startswith('feed remove '): + print("COMMAND: feed remove") + print("ACCOUNT: " + str(msg['from'])) action = initdb(msg['from'].bare, message[12:], remove_feed) elif message.startswith('feed status '): + print("COMMAND: feed status") + print("ACCOUNT: " + str(msg['from'])) action = initdb(msg['from'].bare, message[12:], toggle_status) elif message.startswith('feed enable'): + print("COMMAND: feed enable") + print("ACCOUNT: " + str(msg['from'])) action = initdb(msg['from'].bare, message[11:], toggle_state) elif message.startswith('feed disable'): + print("COMMAND: feed disable") + print("ACCOUNT: " + str(msg['from'])) action = initdb(msg['from'].bare, message[12:], toggle_state) @@ -127,7 +145,10 @@ class Slixfeed(slixmpp.ClientXMPP): msg.reply(action).send() async def send_updates(self, event): + #while not offline: while True: + print(time.strftime("%H:%M:%S")) + print(offline) db_dir = get_default_dbdir() if not os.path.isdir(db_dir): msg = ("Slixfeed can not work without a database. \n" @@ -341,9 +362,10 @@ def create_table(conn, create_table_sql): def download_updates(conn): with conn: + cur = conn.cursor() # get current date #today = date.today() - urls = get_subscriptions(conn) + urls = get_subscriptions(cur) for url in urls: #"".join(url) source = url[0] @@ -369,7 +391,7 @@ def download_updates(conn): else: title = feed["feed"]["title"] link = source if not entry.link else entry.link - exist = check_entry(conn, title, link) + exist = check_entry(cur, title, link) if not exist: if entry.has_key("summary"): summary = entry.summary @@ -390,7 +412,7 @@ def download_updates(conn): # print(len(news)) # return news -def check_feed(conn, url): +def check_feed(cur, url): """ Check whether a feed exists Query for feeds by url @@ -398,7 +420,6 @@ def check_feed(conn, url): :param url: :return: row """ - cur = conn.cursor() sql = "SELECT id FROM feeds WHERE address = ?" cur.execute(sql, (url,)) return cur.fetchone() @@ -411,7 +432,8 @@ def add_feed(conn, url): :return: string """ #conn = create_connection(db_file) - exist = check_feed(conn, url) + cur = conn.cursor() + exist = check_feed(cur, url) if not exist: feed = feedparser.parse(url) if feed.bozo: @@ -420,7 +442,6 @@ def add_feed(conn, url): return "Failed to parse URL as feed" title = feedparser.parse(url)["feed"]["title"] feed = (title, url, 1) - cur = conn.cursor() sql = """INSERT INTO feeds(name,address,status) VALUES(?,?,?) """ cur.execute(sql, feed) @@ -462,36 +483,37 @@ def get_unread(conn): :param id: id of the entry :return: string """ - entry = [] - cur = conn.cursor() - sql = "SELECT id FROM entries WHERE read = 0" - #id = cur.execute(sql).fetchone()[0] - id = cur.execute(sql).fetchone() - if id is None: - return False - id = id[0] - sql = "SELECT title FROM entries WHERE id = :id" - cur.execute(sql, (id,)) - title = cur.fetchone()[0] - entry.append(title) - sql = "SELECT summary FROM entries WHERE id = :id" - cur.execute(sql, (id,)) - summary = cur.fetchone()[0] - entry.append(summary) - sql = "SELECT link FROM entries WHERE id = :id" - cur.execute(sql, (id,)) - link = cur.fetchone()[0] - entry.append(link) - # columns = ['title', 'summary', 'link'] - # for column in columns: - # sql = "SELECT :column FROM entries WHERE id = :id" - # cur.execute(sql, {"column": column, "id": id}) - # str = cur.fetchone()[0] - # entry.append(str) - entry = "{}\n\n{}\n\nLink to article:\n{}".format(entry[0], entry[1], entry[2]) - mark_as_read(conn, id) - conn.commit() - return entry + + with conn: + entry = [] + cur = conn.cursor() + sql = "SELECT id FROM entries WHERE read = 0" + #id = cur.execute(sql).fetchone()[0] + id = cur.execute(sql).fetchone() + if id is None: + return False + id = id[0] + sql = "SELECT title FROM entries WHERE id = :id" + cur.execute(sql, (id,)) + title = cur.fetchone()[0] + entry.append(title) + sql = "SELECT summary FROM entries WHERE id = :id" + cur.execute(sql, (id,)) + summary = cur.fetchone()[0] + entry.append(summary) + sql = "SELECT link FROM entries WHERE id = :id" + cur.execute(sql, (id,)) + link = cur.fetchone()[0] + entry.append(link) + # columns = ['title', 'summary', 'link'] + # for column in columns: + # sql = "SELECT :column FROM entries WHERE id = :id" + # cur.execute(sql, {"column": column, "id": id}) + # str = cur.fetchone()[0] + # entry.append(str) + entry = "{}\n\n{}\n\nLink to article:\n{}".format(entry[0], entry[1], entry[2]) + mark_as_read(conn, id) + return entry def mark_as_read(conn, id): """ @@ -503,6 +525,7 @@ def mark_as_read(conn, id): sql = "UPDATE entries SET summary = '', read = 1 WHERE id = ?" cur.execute(sql, (id,)) conn.commit() + #conn.close() return # TODO test @@ -547,13 +570,12 @@ def set_date(conn, url): cur.execute(sql, {"today": today, "url": url}) conn.commit() -def get_subscriptions(conn): +def get_subscriptions(cur): """ Query feeds :param conn: :return: rows (tuple) """ - cur = conn.cursor() sql = "SELECT address FROM feeds WHERE status = 1" result = cur.execute(sql) return result @@ -586,7 +608,7 @@ def list_subscriptions(conn): "feed add https://reclaimthenet.org/feed/") return msg -def check_entry(conn, title, link): +def check_entry(cur, title, link): """ Check whether an entry exists Query entries by title and link @@ -595,7 +617,6 @@ def check_entry(conn, title, link): :param title: :return: row """ - cur = conn.cursor() sql = "SELECT id FROM entries WHERE title = :title and link = :link" cur.execute(sql, {"title": title, "link": link}) return cur.fetchone()