Standardize modules client and component

This commit is contained in:
Schimon Jehudah 2024-02-07 01:12:51 +00:00
parent 00a8ed180a
commit 51e48c8389
2 changed files with 52 additions and 31 deletions

View file

@ -64,8 +64,8 @@ import slixfeed.config as config
import slixfeed.sqlite as sqlite import slixfeed.sqlite as sqlite
from slixfeed.xmpp.bookmark import XmppBookmark from slixfeed.xmpp.bookmark import XmppBookmark
from slixfeed.xmpp.connect import XmppConnect from slixfeed.xmpp.connect import XmppConnect
from slixfeed.xmpp.message import XmppMessage
from slixfeed.xmpp.muc import XmppGroupchat from slixfeed.xmpp.muc import XmppGroupchat
from slixfeed.xmpp.message import XmppMessage
import slixfeed.xmpp.process as process import slixfeed.xmpp.process as process
import slixfeed.xmpp.profile as profile import slixfeed.xmpp.profile as profile
from slixfeed.xmpp.roster import XmppRoster from slixfeed.xmpp.roster import XmppRoster
@ -146,8 +146,8 @@ class Slixfeed(slixmpp.ClientXMPP):
self.add_event_handler("reactions", self.add_event_handler("reactions",
self.on_reactions) self.on_reactions)
# self.add_event_handler("presence_error", self.add_event_handler("presence_error",
# self.on_presence_error) self.on_presence_error)
self.add_event_handler("presence_subscribe", self.add_event_handler("presence_subscribe",
self.on_presence_subscribe) self.on_presence_subscribe)
self.add_event_handler("presence_subscribed", self.add_event_handler("presence_subscribed",

View file

@ -63,16 +63,16 @@ from slixmpp.plugins.xep_0048.stanza import Bookmarks
import slixfeed.config as config import slixfeed.config as config
import slixfeed.sqlite as sqlite import slixfeed.sqlite as sqlite
from slixfeed.xmpp.bookmark import XmppBookmark from slixfeed.xmpp.bookmark import XmppBookmark
import slixfeed.xmpp.connect as connect from slixfeed.xmpp.connect import XmppConnect
# NOTE MUC is possible for component # NOTE MUC is possible for component
# import slixfeed.xmpp.muc as muc from slixfeed.xmpp.muc import XmppGroupchat
from slixfeed.xmpp.message import XmppMessage from slixfeed.xmpp.message import XmppMessage
import slixfeed.xmpp.process as process import slixfeed.xmpp.process as process
import slixfeed.xmpp.profile as profile import slixfeed.xmpp.profile as profile
# import slixfeed.xmpp.roster as roster from slixfeed.xmpp.roster import XmppRoster
# import slixfeed.xmpp.service as service # import slixfeed.xmpp.service as service
from slixfeed.xmpp.presence import XmppPresence from slixfeed.xmpp.presence import XmppPresence
from slixfeed.xmpp.utility import XmppUtility from slixfeed.xmpp.utility import get_chat_type
from slixmpp.xmlstream import ET from slixmpp.xmlstream import ET
# from slixmpp.xmlstream.handler import Callback # from slixmpp.xmlstream.handler import Callback
# from slixmpp.xmlstream.matcher import MatchXPath # from slixmpp.xmlstream.matcher import MatchXPath
@ -181,18 +181,18 @@ class SlixfeedComponent(slixmpp.ComponentXMPP):
async def on_session_end(self, event): async def on_session_end(self, event):
message = 'Session has ended.' message = 'Session has ended.'
await connect.recover_connection(self, message) await XmppConnect.recover(self, message)
async def on_connection_failed(self, event): async def on_connection_failed(self, event):
message = 'Connection has failed. Reason: {}'.format(event) message = 'Connection has failed. Reason: {}'.format(event)
await connect.recover_connection(self, message) await XmppConnect.recover(self, message)
async def on_session_start(self, event): async def on_session_start(self, event):
self.send_presence() self.send_presence()
await self['xep_0115'].update_caps() await self['xep_0115'].update_caps()
# await muc.autojoin(self) # await XmppGroupchat.autojoin(self)
profile.set_identity(self, 'service') profile.set_identity(self, 'service')
await profile.update(self) await profile.update(self)
task.ping_task(self) task.ping_task(self)
@ -207,7 +207,7 @@ class SlixfeedComponent(slixmpp.ComponentXMPP):
async def on_session_resumed(self, event): async def on_session_resumed(self, event):
self.send_presence() self.send_presence()
self['xep_0115'].update_caps() self['xep_0115'].update_caps()
# await muc.autojoin(self) # await XmppGroupchat.autojoin(self)
profile.set_identity(self, 'service') profile.set_identity(self, 'service')
# Service.commands(self) # Service.commands(self)
@ -232,8 +232,8 @@ class SlixfeedComponent(slixmpp.ComponentXMPP):
await process.message(self, message) await process.message(self, message)
# chat_type = message['type'] # chat_type = message["type"]
# message_body = message['body'] # message_body = message["body"]
# message_reply = message.reply # message_reply = message.reply
@ -253,16 +253,15 @@ class SlixfeedComponent(slixmpp.ComponentXMPP):
async def on_presence_subscribed(self, presence): async def on_presence_subscribed(self, presence):
jid = presence['from'].bare jid = presence['from'].bare
if await XmppUtility.get_chat_type(self, jid) == 'chat': message_subject = 'RSS News Bot'
message_subject = 'RSS News Bot' message_body = ('Greetings!\n'
message_body = ('Greetings!\n' 'I am {}, the news anchor.\n'
'I am {}, the news anchor.\n' 'My job is to bring you the latest '
'My job is to bring you the latest ' 'news from sources you provide me with.\n'
'news from sources you provide me with.\n' 'You may always reach me via xmpp:{}?message'
'You may always reach me via xmpp:{}?message' .format(self.alias, self.boundjid.bare))
.format(self.alias, self.boundjid.bare)) XmppMessage.send_headline(self, jid, message_subject, message_body,
XmppMessage.send_headline(self, jid, message_subject, message_body, 'chat')
'chat')
async def on_presence_available(self, presence): async def on_presence_available(self, presence):
@ -270,20 +269,23 @@ class SlixfeedComponent(slixmpp.ComponentXMPP):
# await task.start_tasks(self, presence) # await task.start_tasks(self, presence)
# NOTE Already done inside the start-task function # NOTE Already done inside the start-task function
jid = presence['from'].bare jid = presence['from'].bare
# FIXME TODO Find out what is the source responsible for a couple presences with empty message
# NOTE This is a temporary solution
await asyncio.sleep(10)
await task.start_tasks_xmpp(self, jid) await task.start_tasks_xmpp(self, jid)
async def on_presence_unsubscribed(self, presence): async def on_presence_unsubscribed(self, presence):
jid = presence['from'].bare jid = presence['from'].bare
message = 'You have been unsubscribed.' message_body = 'You have been unsubscribed.'
status_message = '🖋️ Subscribe to receive updates' status_message = '🖋️ Subscribe to receive updates'
chat_type = await XmppUtility.get_chat_type(self, jid) XmppMessage.send(self, jid, message_body, 'chat')
XmppMessage.send(self, jid, message, chat_type) XmppPresence.send(self, jid, status_message,
XmppPresence.send(self, jid, status_message, chat_type) presence_type='unsubscribed')
async def on_presence_unavailable(self, presence): async def on_presence_unavailable(self, presence):
jid = presence["from"].bare jid = presence['from'].bare
# await task.stop_tasks(self, jid) # await task.stop_tasks(self, jid)
await task.clean_tasks_xmpp(jid) await task.clean_tasks_xmpp(jid)
@ -317,8 +319,7 @@ class SlixfeedComponent(slixmpp.ComponentXMPP):
jid = message['from'].bare jid = message['from'].bare
# await task.clean_tasks_xmpp(jid, ['status']) # await task.clean_tasks_xmpp(jid, ['status'])
status_message='Press "help" for manual, or "info" for information.' status_message='Press "help" for manual, or "info" for information.'
chat_type = await XmppUtility.get_chat_type(self, jid) XmppPresence.send(self, jid, status_message)
XmppPresence.send(self, jid, status_message, chat_type)
async def on_chatstate_gone(self, message): async def on_chatstate_gone(self, message):
@ -342,6 +343,25 @@ class SlixfeedComponent(slixmpp.ComponentXMPP):
await task.start_tasks_xmpp(self, jid, ['status']) await task.start_tasks_xmpp(self, jid, ['status'])
# NOTE Failed attempt
# Need to use Super or Inheritance or both
# self['xep_0050'].add_command(node='settings',
# name='Settings',
# handler=self._handle_settings)
# self['xep_0050'].add_command(node='subscriptions',
# name='Subscriptions',
# handler=self._handle_subscriptions)
# async def _handle_settings(self, iq, session):
# await XmppCommand._handle_settings(self, iq, session)
# async def _handle_subscriptions(self, iq, session):
# await XmppCommand._handle_subscriptions(self, iq, session)
# TODO Move class Service to a separate file # TODO Move class Service to a separate file
# class Service(Slixfeed): # class Service(Slixfeed):
# def __init__(self): # def __init__(self):
@ -552,7 +572,8 @@ class SlixfeedComponent(slixmpp.ComponentXMPP):
value = True value = True
form.add_field(var='old', form.add_field(var='old',
ftype='boolean', ftype='boolean',
desc='Mark items of newly added subscriptions as read.', desc='Do not mark items of newly added subscriptions '
'as read.',
# label='Send only new items', # label='Send only new items',
label='Include old news', label='Include old news',
value=value) value=value)