import time import traceback from notification import process_fediverse_notification from db_utils import get_config, set_config, connect, setup_administrators from fediverse_factory import get_fediverse_service def stream_notifications(): # Initialize database connection connect() # Setup default administrators setup_administrators() # Initialize the Fediverse service fediverse_service = get_fediverse_service() # Get the last seen notification ID from the database last_seen_id = get_config("last_seen_notif_id") print('Listening for notifications...') while True: try: # Get notifications from the fediverse service notifications = fediverse_service.get_notifications(since_id=last_seen_id) if notifications: new_last_seen_id = last_seen_id for notification in notifications: notif_id = notification.id # Skip old or same ID notifications if last_seen_id is not None and notif_id <= last_seen_id: continue # Process the notification using the abstracted processor process_fediverse_notification(notification, fediverse_service) # Update only if this notif_id is greater if new_last_seen_id is None or notif_id > new_last_seen_id: new_last_seen_id = notif_id # Save the latest seen ID if new_last_seen_id and new_last_seen_id != last_seen_id: set_config("last_seen_notif_id", new_last_seen_id) last_seen_id = new_last_seen_id time.sleep(5) except Exception as e: print(f"An exception has occured: {e}\n{traceback.format_exc()}") time.sleep(5) if __name__ == "__main__": stream_notifications()