Reconnect upon disconnection event, thus assuring continuation of program action. Thank you magicfelix!
This commit is contained in:
parent
e9dfb60c45
commit
010ca2bf93
1 changed files with 48 additions and 39 deletions
87
slixfeed.py
87
slixfeed.py
|
@ -47,6 +47,15 @@ class Slixfeed(slixmpp.ClientXMPP):
|
||||||
# MUC messages and error messages.
|
# MUC messages and error messages.
|
||||||
self.add_event_handler("message", self.message)
|
self.add_event_handler("message", self.message)
|
||||||
self.add_event_handler("disconnected", self.disconnected)
|
self.add_event_handler("disconnected", self.disconnected)
|
||||||
|
self.add_event_handler("disconnected", self._reconnect)
|
||||||
|
|
||||||
|
async def _reconnect(self, event):
|
||||||
|
await asyncio.sleep(10)
|
||||||
|
self.connect()
|
||||||
|
|
||||||
|
def disconnected(self):
|
||||||
|
print("disconnected disconnected disconnected")
|
||||||
|
return True
|
||||||
|
|
||||||
async def start(self, event):
|
async def start(self, event):
|
||||||
"""
|
"""
|
||||||
|
@ -64,10 +73,6 @@ class Slixfeed(slixmpp.ClientXMPP):
|
||||||
self.send_presence()
|
self.send_presence()
|
||||||
await self.get_roster()
|
await self.get_roster()
|
||||||
|
|
||||||
def disconnected(self):
|
|
||||||
print("disconnected disconnected disconnected")
|
|
||||||
return True
|
|
||||||
|
|
||||||
def message(self, msg):
|
def message(self, msg):
|
||||||
"""
|
"""
|
||||||
Process incoming message stanzas. Be aware that this also
|
Process incoming message stanzas. Be aware that this also
|
||||||
|
@ -121,27 +126,6 @@ class Slixfeed(slixmpp.ClientXMPP):
|
||||||
action = "Unknown command. Press \"help\" for list of commands"
|
action = "Unknown command. Press \"help\" for list of commands"
|
||||||
msg.reply(action).send()
|
msg.reply(action).send()
|
||||||
|
|
||||||
async def check_updates():
|
|
||||||
while True:
|
|
||||||
db_dir = get_default_dbdir()
|
|
||||||
if not os.path.isdir(db_dir):
|
|
||||||
# TODO Print the Slixfeed's JID .format(self.jid)
|
|
||||||
msg = ("Slixfeed can not work without a database. \n"
|
|
||||||
"To create a database, follow these steps: \n"
|
|
||||||
"Add Slixfeed contact to your roster \n"
|
|
||||||
"Send a feed to the bot by: \n"
|
|
||||||
"feed add https://reclaimthenet.org/feed/")
|
|
||||||
print(msg)
|
|
||||||
else:
|
|
||||||
os.chdir(db_dir)
|
|
||||||
files = os.listdir()
|
|
||||||
for file in files:
|
|
||||||
jid = file[:-3]
|
|
||||||
initdb(jid,
|
|
||||||
False,
|
|
||||||
download_updates)
|
|
||||||
await asyncio.sleep(60 * 30)
|
|
||||||
|
|
||||||
async def send_updates(self, event):
|
async def send_updates(self, event):
|
||||||
while True:
|
while True:
|
||||||
db_dir = get_default_dbdir()
|
db_dir = get_default_dbdir()
|
||||||
|
@ -182,10 +166,31 @@ class Slixfeed(slixmpp.ClientXMPP):
|
||||||
# mtype='chat')
|
# mtype='chat')
|
||||||
#print(msg)
|
#print(msg)
|
||||||
#msg.send()
|
#msg.send()
|
||||||
await asyncio.sleep(15)
|
await asyncio.sleep(60 * 3)
|
||||||
|
|
||||||
# asyncio.ensure_future(send_updates(self))
|
# asyncio.ensure_future(send_updates(self))
|
||||||
asyncio.ensure_future(check_updates())
|
|
||||||
|
async def check_updates():
|
||||||
|
while True:
|
||||||
|
db_dir = get_default_dbdir()
|
||||||
|
if not os.path.isdir(db_dir):
|
||||||
|
msg = ("Slixfeed can not work without a database. \n"
|
||||||
|
"To create a database, follow these steps: \n"
|
||||||
|
"Add Slixfeed contact to your roster \n"
|
||||||
|
"Send a feed to the bot by: \n"
|
||||||
|
"feed add https://reclaimthenet.org/feed/")
|
||||||
|
print(msg)
|
||||||
|
else:
|
||||||
|
os.chdir(db_dir)
|
||||||
|
files = os.listdir()
|
||||||
|
for file in files:
|
||||||
|
jid = file[:-3]
|
||||||
|
initdb(jid,
|
||||||
|
False,
|
||||||
|
download_updates)
|
||||||
|
await asyncio.sleep(60 * 30)
|
||||||
|
|
||||||
|
asyncio.ensure_future(check_updates())
|
||||||
|
|
||||||
def print_help():
|
def print_help():
|
||||||
msg = ("Slixfeed - News syndication bot for Jabber/XMPP \n"
|
msg = ("Slixfeed - News syndication bot for Jabber/XMPP \n"
|
||||||
|
@ -359,7 +364,10 @@ def download_updates(conn):
|
||||||
length = len(entries)
|
length = len(entries)
|
||||||
remove_entry(conn, source, length)
|
remove_entry(conn, source, length)
|
||||||
for entry in entries:
|
for entry in entries:
|
||||||
title = '*** No title ***' if not entry.title else entry.title
|
if entry.has_key("title"):
|
||||||
|
title = entry.title
|
||||||
|
else:
|
||||||
|
title = feed["feed"]["title"]
|
||||||
link = source if not entry.link else entry.link
|
link = source if not entry.link else entry.link
|
||||||
exist = check_entry(conn, title, link)
|
exist = check_entry(conn, title, link)
|
||||||
if not exist:
|
if not exist:
|
||||||
|
@ -422,7 +430,7 @@ def add_feed(conn, url):
|
||||||
msg = """News source "{}" has been added to subscriptions list
|
msg = """News source "{}" has been added to subscriptions list
|
||||||
""".format(source)
|
""".format(source)
|
||||||
else:
|
else:
|
||||||
msg = "News source already listed in the subscription list"
|
msg = "News source is already listed in the subscription list"
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
def remove_feed(conn, id):
|
def remove_feed(conn, id):
|
||||||
|
@ -560,22 +568,23 @@ def list_subscriptions(conn):
|
||||||
#sql = "SELECT id, address FROM feeds"
|
#sql = "SELECT id, address FROM feeds"
|
||||||
sql = "SELECT name, address, updated, id, status FROM feeds"
|
sql = "SELECT name, address, updated, id, status FROM feeds"
|
||||||
results = cur.execute(sql)
|
results = cur.execute(sql)
|
||||||
if results.fetchone() is None:
|
feeds_list = "List of subscriptions: \n"
|
||||||
# TODO Print the Slixfeed's JID .format(self.jid)
|
counter = 0
|
||||||
|
for result in results:
|
||||||
|
counter += 1
|
||||||
|
#feeds_list = feeds_list + '\n {}. {}'.format(str(result[0]), str(result[1]))
|
||||||
|
feeds_list += """\n{} \n{} \nLast updated: {} \nID: {} [{}]
|
||||||
|
""".format(str(result[0]), str(result[1]), str(result[2]),
|
||||||
|
str(result[3]), str(result[4]))
|
||||||
|
if counter:
|
||||||
|
return feeds_list + "\n Total of {} subscriptions".format(counter)
|
||||||
|
else:
|
||||||
msg = ("List of subscriptions is empty. \n"
|
msg = ("List of subscriptions is empty. \n"
|
||||||
"To add feed, send me a message as follows: \n"
|
"To add feed, send me a message as follows: \n"
|
||||||
"feed add URL \n"
|
"feed add URL \n"
|
||||||
"For example: \n"
|
"For example: \n"
|
||||||
"feed add https://reclaimthenet.org/feed/")
|
"feed add https://reclaimthenet.org/feed/")
|
||||||
return msg
|
return msg
|
||||||
else:
|
|
||||||
feeds_list = "List of subscriptions: \n"
|
|
||||||
for result in results:
|
|
||||||
#feeds_list = feeds_list + '\n {}. {}'.format(str(result[0]), str(result[1]))
|
|
||||||
feeds_list += """\n{} \n{} \nLast updated: {} \nID: {} [{}]
|
|
||||||
""".format(str(result[0]), str(result[1]), str(result[2]),
|
|
||||||
str(result[3]), str(result[4]))
|
|
||||||
return feeds_list
|
|
||||||
|
|
||||||
def check_entry(conn, title, link):
|
def check_entry(conn, title, link):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue