slidge 0.2.1__tar.gz → 0.2.2__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (130) hide show
  1. {slidge-0.2.1 → slidge-0.2.2}/PKG-INFO +1 -1
  2. {slidge-0.2.1 → slidge-0.2.2}/pyproject.toml +1 -1
  3. {slidge-0.2.1 → slidge-0.2.2}/slidge/__version__.py +1 -1
  4. {slidge-0.2.1 → slidge-0.2.2}/slidge/command/base.py +1 -1
  5. {slidge-0.2.1 → slidge-0.2.2}/slidge/command/chat_command.py +5 -2
  6. {slidge-0.2.1 → slidge-0.2.2}/slidge/command/register.py +1 -1
  7. {slidge-0.2.1 → slidge-0.2.2}/slidge/command/user.py +1 -1
  8. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/gateway.py +3 -0
  9. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/attachment.py +12 -1
  10. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/models.py +4 -0
  11. {slidge-0.2.1 → slidge-0.2.2}/LICENSE +0 -0
  12. {slidge-0.2.1 → slidge-0.2.2}/README.md +0 -0
  13. {slidge-0.2.1 → slidge-0.2.2}/slidge/__init__.py +0 -0
  14. {slidge-0.2.1 → slidge-0.2.2}/slidge/__main__.py +0 -0
  15. {slidge-0.2.1 → slidge-0.2.2}/slidge/command/__init__.py +0 -0
  16. {slidge-0.2.1 → slidge-0.2.2}/slidge/command/adhoc.py +0 -0
  17. {slidge-0.2.1 → slidge-0.2.2}/slidge/command/admin.py +0 -0
  18. {slidge-0.2.1 → slidge-0.2.2}/slidge/command/categories.py +0 -0
  19. {slidge-0.2.1 → slidge-0.2.2}/slidge/contact/__init__.py +0 -0
  20. {slidge-0.2.1 → slidge-0.2.2}/slidge/contact/contact.py +0 -0
  21. {slidge-0.2.1 → slidge-0.2.2}/slidge/contact/roster.py +0 -0
  22. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/__init__.py +0 -0
  23. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/config.py +0 -0
  24. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/__init__.py +0 -0
  25. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/caps.py +0 -0
  26. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/disco.py +0 -0
  27. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/message/__init__.py +0 -0
  28. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/message/chat_state.py +0 -0
  29. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/message/marker.py +0 -0
  30. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/message/message.py +0 -0
  31. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/muc/__init__.py +0 -0
  32. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/muc/admin.py +0 -0
  33. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/muc/mam.py +0 -0
  34. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/muc/misc.py +0 -0
  35. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/muc/owner.py +0 -0
  36. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/muc/ping.py +0 -0
  37. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/presence.py +0 -0
  38. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/registration.py +0 -0
  39. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/search.py +0 -0
  40. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/session_dispatcher.py +0 -0
  41. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/util.py +0 -0
  42. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/dispatcher/vcard.py +0 -0
  43. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/__init__.py +0 -0
  44. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/avatar.py +0 -0
  45. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/base.py +0 -0
  46. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/db.py +0 -0
  47. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/disco.py +0 -0
  48. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/lock.py +0 -0
  49. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/message.py +0 -0
  50. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/message_maker.py +0 -0
  51. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/message_text.py +0 -0
  52. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/presence.py +0 -0
  53. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/mixins/recipient.py +0 -0
  54. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/pubsub.py +0 -0
  55. {slidge-0.2.1 → slidge-0.2.2}/slidge/core/session.py +0 -0
  56. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/__init__.py +0 -0
  57. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/__init__.py +0 -0
  58. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/env.py +0 -0
  59. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/old_user_store.py +0 -0
  60. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/script.py.mako +0 -0
  61. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/09f27f098baa_add_missing_attributes_in_room.py +0 -0
  62. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/15b0bd83407a_remove_bogus_unique_constraints_on_room_.py +0 -0
  63. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/2461390c0af2_store_contacts_caps_verstring_in_db.py +0 -0
  64. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/29f5280c61aa_store_subject_setter_in_room.py +0 -0
  65. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/2b1f45ab7379_store_room_subject_setter_by_nickname.py +0 -0
  66. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/3071e0fa69d4_add_contact_client_type.py +0 -0
  67. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/45c24cc73c91_add_bob.py +0 -0
  68. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/5bd48bfdffa2_lift_room_legacy_id_constraint.py +0 -0
  69. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/82a4af84b679_add_muc_history_filled.py +0 -0
  70. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/8b993243a536_add_vcard_content_to_contact_table.py +0 -0
  71. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/8d2ced764698_rely_on_db_to_store_contacts_rooms_and_.py +0 -0
  72. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/aa9d82a7f6ef_db_creation.py +0 -0
  73. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/abba1ae0edb3_store_avatar_legacy_id_in_the_contact_.py +0 -0
  74. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/b33993e87db3_move_everything_to_persistent_db.py +0 -0
  75. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/b64b1a793483_add_source_and_legacy_id_for_archived_.py +0 -0
  76. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/c4a8ec35a0e8_per_room_user_nick.py +0 -0
  77. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/alembic/versions/e91195719c2c_store_users_avatars_persistently.py +0 -0
  78. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/avatar.py +0 -0
  79. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/meta.py +0 -0
  80. {slidge-0.2.1 → slidge-0.2.2}/slidge/db/store.py +0 -0
  81. {slidge-0.2.1 → slidge-0.2.2}/slidge/group/__init__.py +0 -0
  82. {slidge-0.2.1 → slidge-0.2.2}/slidge/group/archive.py +0 -0
  83. {slidge-0.2.1 → slidge-0.2.2}/slidge/group/bookmarks.py +0 -0
  84. {slidge-0.2.1 → slidge-0.2.2}/slidge/group/participant.py +0 -0
  85. {slidge-0.2.1 → slidge-0.2.2}/slidge/group/room.py +0 -0
  86. {slidge-0.2.1 → slidge-0.2.2}/slidge/main.py +0 -0
  87. {slidge-0.2.1 → slidge-0.2.2}/slidge/migration.py +0 -0
  88. {slidge-0.2.1 → slidge-0.2.2}/slidge/py.typed +0 -0
  89. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/__init__.py +0 -0
  90. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/delivery_receipt.py +0 -0
  91. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/link_preview/__init__.py +0 -0
  92. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/link_preview/link_preview.py +0 -0
  93. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/link_preview/stanza.py +0 -0
  94. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/roster.py +0 -0
  95. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0077/__init__.py +0 -0
  96. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0077/register.py +0 -0
  97. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0077/stanza.py +0 -0
  98. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0100/__init__.py +0 -0
  99. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0100/gateway.py +0 -0
  100. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0100/stanza.py +0 -0
  101. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0153/__init__.py +0 -0
  102. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0153/stanza.py +0 -0
  103. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0153/vcard_avatar.py +0 -0
  104. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0264/__init__.py +0 -0
  105. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0264/stanza.py +0 -0
  106. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0264/thumbnail.py +0 -0
  107. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0292/__init__.py +0 -0
  108. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0292/vcard4.py +0 -0
  109. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0313/__init__.py +0 -0
  110. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0313/mam.py +0 -0
  111. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0313/stanza.py +0 -0
  112. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0317/__init__.py +0 -0
  113. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0317/hats.py +0 -0
  114. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0317/stanza.py +0 -0
  115. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0356_old/__init__.py +0 -0
  116. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0356_old/privilege.py +0 -0
  117. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0356_old/stanza.py +0 -0
  118. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0424/__init__.py +0 -0
  119. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0424/retraction.py +0 -0
  120. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0424/stanza.py +0 -0
  121. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0490/__init__.py +0 -0
  122. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0490/mds.py +0 -0
  123. {slidge-0.2.1 → slidge-0.2.2}/slidge/slixfix/xep_0490/stanza.py +0 -0
  124. {slidge-0.2.1 → slidge-0.2.2}/slidge/util/__init__.py +0 -0
  125. {slidge-0.2.1 → slidge-0.2.2}/slidge/util/archive_msg.py +0 -0
  126. {slidge-0.2.1 → slidge-0.2.2}/slidge/util/conf.py +0 -0
  127. {slidge-0.2.1 → slidge-0.2.2}/slidge/util/db.py +0 -0
  128. {slidge-0.2.1 → slidge-0.2.2}/slidge/util/test.py +0 -0
  129. {slidge-0.2.1 → slidge-0.2.2}/slidge/util/types.py +0 -0
  130. {slidge-0.2.1 → slidge-0.2.2}/slidge/util/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: slidge
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: XMPP bridging framework
5
5
  Home-page: https://sr.ht/~nicoco/slidge/
6
6
  License: AGPL-3.0-or-later
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "slidge"
3
- version = "0.2.1"
3
+ version = "0.2.2"
4
4
  description = "XMPP bridging framework"
5
5
  authors = ["Nicolas Cedilnik <nicoco@nicoco.fr>"]
6
6
  readme = "README.md"
@@ -2,4 +2,4 @@ from slidge.util.util import get_version # noqa: F401
2
2
 
3
3
  # this is modified before publish, but if someone cloned from the repo,
4
4
  # it can help
5
- __version__ = "0.2.1"
5
+ __version__ = "0.2.2"
@@ -245,7 +245,7 @@ class FormField:
245
245
  self.type = "text-private"
246
246
 
247
247
  def __acceptable_options(self) -> list[str]:
248
- if not self.options:
248
+ if self.options is None:
249
249
  raise RuntimeError
250
250
  return [x["value"] for x in self.options]
251
251
 
@@ -175,7 +175,9 @@ class ChatCommandProvider:
175
175
  else:
176
176
  if f.type == "list-multi":
177
177
  msg.reply(
178
- "Multiple selection allowed, use a single space as a separator"
178
+ "Multiple selection allowed, use new lines as a separator, ie, "
179
+ "one selected item per line. To select no item, reply with a space "
180
+ "(the punctuation)."
179
181
  ).send()
180
182
  if f.options:
181
183
  for o in f.options:
@@ -202,7 +204,8 @@ class ChatCommandProvider:
202
204
  ans = "false"
203
205
 
204
206
  if f.type.endswith("multi"):
205
- form_values[f.var] = f.validate(ans.split(" "))
207
+ choices = [] if ans == " " else ans.split("\n")
208
+ form_values[f.var] = f.validate(choices)
206
209
  else:
207
210
  form_values[f.var] = f.validate(ans)
208
211
  result = await self.__wrap_handler(
@@ -98,7 +98,7 @@ class Register(Command):
98
98
  raise
99
99
 
100
100
  user = GatewayUser(
101
- jid=ifrom.bare,
101
+ jid=JID(ifrom.bare),
102
102
  legacy_module_data=form_values if data is None else data,
103
103
  )
104
104
 
@@ -292,7 +292,7 @@ class Unregister(Command):
292
292
  user = self.xmpp.store.users.get(session.user_jid)
293
293
  assert user is not None
294
294
  await self.xmpp.unregister_user(user)
295
- return "OK"
295
+ return "You are not registered anymore. Bye!"
296
296
 
297
297
 
298
298
  class LeaveGroup(Command):
@@ -797,6 +797,9 @@ class BaseGateway(
797
797
  fut.set_exception(exception)
798
798
 
799
799
  async def unregister_user(self, user: GatewayUser):
800
+ self.send_presence(
801
+ pshow="busy", pstatus="You are not registered to this gateway anymore."
802
+ )
800
803
  await self.xmpp.plugin["xep_0077"].api["user_remove"](None, None, user.jid)
801
804
  await self.xmpp.session_cls.kill_by_jid(user.jid)
802
805
 
@@ -374,9 +374,20 @@ class AttachmentMixin(TextMessageMixin):
374
374
  if xmpp_id == original_xmpp_id:
375
375
  continue
376
376
  self.retract(xmpp_id, thread)
377
+
378
+ if reply_to is not None and reply_to.body:
379
+ # We cannot have a "quote fallback" for attachments since most (all?)
380
+ # XMPP clients will only treat a message as an attachment if the
381
+ # body is the URL and nothing else.
382
+ reply_to_for_attachment: MessageReference | None = MessageReference(
383
+ reply_to.legacy_id, reply_to.author
384
+ )
385
+ else:
386
+ reply_to_for_attachment = reply_to
387
+
377
388
  msg = self._make_message(
378
389
  when=when,
379
- reply_to=reply_to,
390
+ reply_to=reply_to_for_attachment,
380
391
  carbon=carbon,
381
392
  mto=mto,
382
393
  thread=thread,
@@ -242,6 +242,10 @@ class Room(Base):
242
242
 
243
243
  avatar_legacy_id: Mapped[Optional[str]] = mapped_column(nullable=True)
244
244
 
245
+ archive: Mapped[list["ArchivedMessage"]] = relationship(
246
+ cascade="all, delete-orphan"
247
+ )
248
+
245
249
 
246
250
  class ArchivedMessage(Base):
247
251
  """
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes