Slidge Design¶
The main slidge entrypoint will automatically detect which classes have been
subclassed and use them automagically.
Just subclass away, and launch your legacy module with
slidge --legacy-module=your.importable.legacy_module
.
At the very minimum, you will need to subclass BaseGateway
and
BaseSession
for a legacy module to be functional.
JID local parts to legacy IDs¶
You probably also want to subclass LegacyRoster
and
LegacyBookmarks
to define how
JID local parts
map to legacy user or contact IDs.
Defining which local parts map to proper valid user legacy IDs is crucial
to discriminate between JIDs that map to a
LegacyContact
and
those that map to a LegacyMUC
.
You should override
jid_username_to_legacy_id()
,
legacy_id_to_jid_username()
,
jid_username_to_legacy_id()
,
and
legacy_id_to_jid_username()
in your custom LegacyRoster
and
LegacyBookmarks
classes, and raise an appropriate XMPPError
when called with an invalid argument.
Fetching info from the legacy service¶
By subclassing LegacyContact
and
LegacyMUC
,
you will be able
to define how XMPP Entities update information about
themselves, such as their user-facing name and the Avatar that
represents them.
This is done by overriding
slidge.contact.LegacyContact.update_info()
and
slidge.group.LegacyMUC.update_info()
,
in which you should raise an XMPPError
in case their legacy_id
attribute is not valid.
Pre-filling contacts and groups¶
The coroutines
slidge.contact.LegacyRoster.fill()
and
slidge.group.LegacyBookmarks.fill()
will be awaited just after login()
and should be used to pre-fill known “friends” and groups.