slidge 0.2.0a10__py3-none-any.whl → 0.2.0b1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. slidge/__main__.py +2 -3
  2. slidge/__version__.py +1 -1
  3. slidge/command/adhoc.py +31 -15
  4. slidge/command/admin.py +11 -4
  5. slidge/command/base.py +5 -2
  6. slidge/command/categories.py +13 -3
  7. slidge/command/chat_command.py +14 -1
  8. slidge/command/user.py +22 -10
  9. slidge/contact/roster.py +2 -0
  10. slidge/core/config.py +6 -3
  11. slidge/core/dispatcher/message/marker.py +2 -7
  12. slidge/core/dispatcher/muc/misc.py +3 -0
  13. slidge/core/dispatcher/muc/owner.py +1 -1
  14. slidge/core/dispatcher/util.py +23 -23
  15. slidge/core/mixins/attachment.py +24 -8
  16. slidge/core/mixins/lock.py +10 -8
  17. slidge/core/mixins/message.py +5 -205
  18. slidge/core/mixins/message_text.py +211 -0
  19. slidge/db/alembic/versions/15b0bd83407a_remove_bogus_unique_constraints_on_room_.py +85 -0
  20. slidge/db/alembic/versions/3071e0fa69d4_add_contact_client_type.py +1 -1
  21. slidge/db/alembic/versions/5bd48bfdffa2_lift_room_legacy_id_constraint.py +12 -1
  22. slidge/db/alembic/versions/8d2ced764698_rely_on_db_to_store_contacts_rooms_and_.py +6 -0
  23. slidge/db/alembic/versions/abba1ae0edb3_store_avatar_legacy_id_in_the_contact_.py +7 -6
  24. slidge/db/alembic/versions/b64b1a793483_add_source_and_legacy_id_for_archived_.py +4 -0
  25. slidge/db/models.py +4 -2
  26. slidge/db/store.py +18 -11
  27. slidge/group/bookmarks.py +23 -1
  28. slidge/group/participant.py +5 -5
  29. slidge/group/room.py +10 -1
  30. slidge/util/test.py +4 -4
  31. slidge/util/util.py +18 -0
  32. {slidge-0.2.0a10.dist-info → slidge-0.2.0b1.dist-info}/METADATA +1 -1
  33. {slidge-0.2.0a10.dist-info → slidge-0.2.0b1.dist-info}/RECORD +36 -34
  34. slidge-0.2.0b1.dist-info/entry_points.txt +3 -0
  35. slidge-0.2.0a10.dist-info/entry_points.txt +0 -3
  36. {slidge-0.2.0a10.dist-info → slidge-0.2.0b1.dist-info}/LICENSE +0 -0
  37. {slidge-0.2.0a10.dist-info → slidge-0.2.0b1.dist-info}/WHEEL +0 -0
slidge/db/store.py CHANGED
@@ -251,15 +251,6 @@ class SentStore(EngineMixin):
251
251
  .where(XmppToLegacyIds.type == XmppToLegacyEnum.THREAD)
252
252
  ).scalar()
253
253
 
254
- def get_xmpp_thread(self, user_pk: int, legacy_id: str) -> Optional[str]:
255
- with self.session() as session:
256
- return session.execute(
257
- select(XmppToLegacyIds.xmpp_id)
258
- .where(XmppToLegacyIds.user_account_id == user_pk)
259
- .where(XmppToLegacyIds.legacy_id == legacy_id)
260
- .where(XmppToLegacyIds.type == XmppToLegacyEnum.THREAD)
261
- ).scalar()
262
-
263
254
  def was_sent_by_user(self, user_pk: int, legacy_id: str) -> bool:
264
255
  with self.session() as session:
265
256
  return (
@@ -414,6 +405,16 @@ class ContactStore(UpdatedMixin):
414
405
 
415
406
  def add_to_sent(self, contact_pk: int, msg_id: str) -> None:
416
407
  with self.session() as session:
408
+ if (
409
+ session.query(ContactSent.id)
410
+ .where(ContactSent.contact_id == contact_pk)
411
+ .where(ContactSent.msg_id == msg_id)
412
+ .first()
413
+ ) is not None:
414
+ log.warning(
415
+ "Contact %s has already sent message %s", contact_pk, msg_id
416
+ )
417
+ return
417
418
  new = ContactSent(contact_id=contact_pk, msg_id=msg_id)
418
419
  session.add(new)
419
420
  session.commit()
@@ -504,6 +505,12 @@ class MAMStore(EngineMixin):
504
505
  .where(ArchivedMessage.room_id == room_pk)
505
506
  .where(ArchivedMessage.stanza_id == message.id)
506
507
  ).scalar()
508
+ if existing is None and legacy_msg_id is not None:
509
+ existing = session.execute(
510
+ select(ArchivedMessage)
511
+ .where(ArchivedMessage.room_id == room_pk)
512
+ .where(ArchivedMessage.legacy_id == legacy_msg_id)
513
+ ).scalar()
507
514
  if existing is not None:
508
515
  log.debug("Updating message %s in room %s", message.id, room_pk)
509
516
  existing.timestamp = message.when
@@ -994,9 +1001,9 @@ class ParticipantStore(EngineMixin):
994
1001
  def __init__(self, *a, **kw):
995
1002
  super().__init__(*a, **kw)
996
1003
  with self.session() as session:
997
- session.execute(delete(Participant))
998
- session.execute(delete(Hat))
999
1004
  session.execute(delete(participant_hats))
1005
+ session.execute(delete(Hat))
1006
+ session.execute(delete(Participant))
1000
1007
  session.commit()
1001
1008
 
1002
1009
  def add(self, room_pk: int, nickname: str) -> int:
slidge/group/bookmarks.py CHANGED
@@ -133,6 +133,8 @@ class LegacyBookmarks(
133
133
  try:
134
134
  with muc.updating_info():
135
135
  await muc.avatar_wrap_update_info()
136
+ except XMPPError:
137
+ raise
136
138
  except Exception as e:
137
139
  raise XMPPError("internal-server-error", str(e))
138
140
  if not muc.user_nick:
@@ -160,6 +162,26 @@ class LegacyBookmarks(
160
162
  " LegacyBookmarks.fill() was not overridden."
161
163
  )
162
164
 
163
- def remove(self, muc: LegacyMUC):
165
+ async def remove(
166
+ self,
167
+ muc: LegacyMUC,
168
+ reason="You left this group from the official client.",
169
+ kick=True,
170
+ ) -> None:
171
+ """
172
+ Delete everything about a specific group.
173
+
174
+ This should be called when the user leaves the group from the official
175
+ app.
176
+
177
+ :param muc: The MUC to remove.
178
+ :param reason: Optionally, a reason why this group was removed.
179
+ :param kick: Whether the user should be kicked from this group. Set this
180
+ to False in case you do this somewhere else in your code, eg, on
181
+ receiving the confirmation that the group was deleted.
182
+ """
164
183
  assert muc.pk is not None
184
+ if kick:
185
+ user_participant = await muc.get_user_participant()
186
+ user_participant.kick(reason)
165
187
  self.__store.delete(muc.pk)
@@ -324,7 +324,7 @@ class LegacyParticipant(
324
324
  ) -> MessageOrPresenceTypeVar:
325
325
  stanza["occupant-id"]["id"] = self.__occupant_id
326
326
  self.__add_nick_element(stanza)
327
- if isinstance(stanza, Presence):
327
+ if not self.is_user and isinstance(stanza, Presence):
328
328
  if stanza["type"] == "unavailable" and not self._presence_sent:
329
329
  return stanza # type:ignore
330
330
  self._presence_sent = True
@@ -432,17 +432,17 @@ class LegacyParticipant(
432
432
  """
433
433
  self.muc.remove_participant(self)
434
434
 
435
- def kick(self):
435
+ def kick(self, reason: str | None = None):
436
436
  """
437
437
  Call this when the participant is kicked from the room
438
438
  """
439
- self.muc.remove_participant(self, kick=True)
439
+ self.muc.remove_participant(self, kick=True, reason=reason)
440
440
 
441
- def ban(self):
441
+ def ban(self, reason: str | None = None):
442
442
  """
443
443
  Call this when the participant is banned from the room
444
444
  """
445
- self.muc.remove_participant(self, ban=True)
445
+ self.muc.remove_participant(self, ban=True, reason=reason)
446
446
 
447
447
  def get_disco_info(self, jid: OptJid = None, node: Optional[str] = None):
448
448
  if self.contact is not None:
slidge/group/room.py CHANGED
@@ -814,13 +814,20 @@ class LegacyMUC(
814
814
  return await self.get_user_participant(**kwargs)
815
815
  return await self.get_participant_by_contact(c, **kwargs)
816
816
 
817
- def remove_participant(self, p: "LegacyParticipantType", kick=False, ban=False):
817
+ def remove_participant(
818
+ self,
819
+ p: "LegacyParticipantType",
820
+ kick=False,
821
+ ban=False,
822
+ reason: str | None = None,
823
+ ):
818
824
  """
819
825
  Call this when a participant leaves the room
820
826
 
821
827
  :param p: The participant
822
828
  :param kick: Whether the participant left because they were kicked
823
829
  :param ban: Whether the participant left because they were banned
830
+ :param reason: Optionally, a reason why the participant was removed.
824
831
  """
825
832
  if kick and ban:
826
833
  raise TypeError("Either kick or ban")
@@ -834,6 +841,8 @@ class LegacyMUC(
834
841
  presence = p._make_presence(ptype="unavailable", status_codes=codes)
835
842
  p._affiliation = "outcast" if ban else "none"
836
843
  p._role = "none"
844
+ if reason:
845
+ presence["muc"].set_item_attr("reason", reason)
837
846
  p._send(presence)
838
847
 
839
848
  def rename_participant(self, old_nickname: str, new_nickname: str):
slidge/util/test.py CHANGED
@@ -215,13 +215,13 @@ class SlidgeTest(SlixTestPlus):
215
215
  self.plugin, LegacyBookmarks, base_ok=True
216
216
  )
217
217
 
218
+ # workaround for duplicate output of sql alchemy's log, cf
219
+ # https://stackoverflow.com/a/76498428/5902284
218
220
  from sqlalchemy import log as sqlalchemy_log
219
221
 
220
222
  sqlalchemy_log._add_default_handler = lambda x: None
221
223
 
222
- engine = self.db_engine = create_engine(
223
- "sqlite+pysqlite:///:memory:", echo=True
224
- )
224
+ engine = self.db_engine = create_engine("sqlite+pysqlite:///:memory:")
225
225
  Base.metadata.create_all(engine)
226
226
  BaseGateway.store = SlidgeStore(engine)
227
227
  BaseGateway._test_mode = True
@@ -293,7 +293,7 @@ class SlidgeTest(SlixTestPlus):
293
293
  )
294
294
  )
295
295
  welcome = self.next_sent()
296
- assert welcome["body"]
296
+ assert welcome["body"], welcome
297
297
  stanza = self.next_sent()
298
298
  assert "logging in" in stanza["status"].lower(), stanza
299
299
  stanza = self.next_sent()
slidge/util/util.py CHANGED
@@ -9,6 +9,13 @@ from pathlib import Path
9
9
  from time import time
10
10
  from typing import TYPE_CHECKING, Callable, NamedTuple, Optional, Type, TypeVar
11
11
 
12
+ try:
13
+ import emoji
14
+ except ImportError:
15
+ EMOJI_LIB_AVAILABLE = False
16
+ else:
17
+ EMOJI_LIB_AVAILABLE = True
18
+
12
19
  from .types import Mention, ResourceDict
13
20
 
14
21
  if TYPE_CHECKING:
@@ -318,3 +325,14 @@ def timeit(func):
318
325
  return r
319
326
 
320
327
  return wrapped
328
+
329
+
330
+ def strip_leading_emoji(text: str) -> str:
331
+ if not EMOJI_LIB_AVAILABLE:
332
+ return text
333
+ words = text.split(" ")
334
+ # is_emoji returns False for 🛷️ for obscure reasons,
335
+ # purely_emoji seems better
336
+ if len(words) > 1 and emoji.purely_emoji(words[0]):
337
+ return " ".join(words[1:])
338
+ return text
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: slidge
3
- Version: 0.2.0a10
3
+ Version: 0.2.0b1
4
4
  Summary: XMPP bridging framework
5
5
  Home-page: https://sr.ht/~nicoco/slidge/
6
6
  License: AGPL-3.0-or-later
@@ -1,48 +1,49 @@
1
1
  slidge/__init__.py,sha256=S0tUjqpZlzsr8G4Y_1Xt-KCYB07qaknTB0OwHU8k29U,1587
2
- slidge/__main__.py,sha256=Y12eh1TD_C5MB50KgEAuMffGnRFCvKYFKHD4UYSmHA0,72
3
- slidge/__version__.py,sha256=05G747WHKOvpl1x4M5U-3t3qszlgbNfnUxAxrATG8ck,171
2
+ slidge/__main__.py,sha256=ydjUklOoavS4YlGfjRX_8BQN2DaSbaXPMi47RkOgcFI,37
3
+ slidge/__version__.py,sha256=o9z5MY6bh2r2Gr5POdoOH_xk8Y3xIorqS2ZH6xZtwD4,169
4
4
  slidge/command/__init__.py,sha256=UYf1mjCYbZ5G7PIgaFTWSQRAzEJkQ6dTH8Fu_e_XnO0,613
5
- slidge/command/adhoc.py,sha256=9PsTsGMPKAK_YXQpwdcH9SSDki8YQ49OZ5p65W5HA6k,9412
6
- slidge/command/admin.py,sha256=x_kJ0TJhzf6d3OBIOXFjudZFO8bRYUG919td7OjMCug,6008
7
- slidge/command/base.py,sha256=7NSzPZdBLZElrm3smzvFKgP0GUggxXdkhclxIKCjtT8,13036
8
- slidge/command/categories.py,sha256=BJCfaga2qoAxnHfgHD7I_RKZuBA5nnNOukkWHJwsUFE,99
9
- slidge/command/chat_command.py,sha256=VBs6IuDka1IyyMzz0ZyE9zMImaEzUZLcnffxq_vwb4M,10565
5
+ slidge/command/adhoc.py,sha256=-AO4h1N6owSuuqZon5tDL29O6qmEeAd1pcPjGCkzKRs,10065
6
+ slidge/command/admin.py,sha256=TYrzgCIhjcTIwl1IUaFlUd3D98SPyao10gB20zo8b3Q,6187
7
+ slidge/command/base.py,sha256=S_bKUJB0fnKs58PvjgFf15_6cw-8k2bMeSECTmFxQGQ,13155
8
+ slidge/command/categories.py,sha256=vF0KGDV9sEn8TNkcMoDRw-u3gEyNHSXghOU2JRHQtKs,351
9
+ slidge/command/chat_command.py,sha256=8_1mqXNLlcwzozbNhZAAYwxavG09rNR_o9G3TwY-lO8,10941
10
10
  slidge/command/register.py,sha256=fzPcGUoJtainnDOiC13gWV-uYLuJcsmdKGJ-jXT1qIo,6697
11
- slidge/command/user.py,sha256=uFheYOprhypkHEEl6qSTEM7T2N28xXaDi7v1he-AET8,11512
11
+ slidge/command/user.py,sha256=0pt9k41npv7MRI_0vauuR1JPb7Gf7UE2lOQeL2XNd7U,12065
12
12
  slidge/contact/__init__.py,sha256=WMMaHk7UW7YT9EH2LtPdkU0bHQaOp4ikBhbBQskmoc8,191
13
13
  slidge/contact/contact.py,sha256=kKtJ9NPLS9DPVyyahx_K-Mtp5k5UQdQJZavC1XCmWlc,23104
14
- slidge/contact/roster.py,sha256=AQTfmM4hrlxkXSM7ZX-C8P9NDN5RqNMNuPrSjt_3MJM,10223
14
+ slidge/contact/roster.py,sha256=-Ei0f0cXX1LFpY29u4Ik68ikno3m2WRA5n5l8Nbjd_E,10267
15
15
  slidge/core/__init__.py,sha256=RG7Jj5JCJERjhqJ31lOLYV-7bH_oblClQD1KF9LsTXo,68
16
- slidge/core/config.py,sha256=leNcN_TI0Ka1hhzOHx7cBW3fNj5xZwsiv9l8AfRY_vU,7630
16
+ slidge/core/config.py,sha256=WP3-ScXqdAhJBX7IRB5pBi_tAV_vE6G5W3Z-LGGULQw,7691
17
17
  slidge/core/dispatcher/__init__.py,sha256=1EXcjXietUKlxEqdrCWCV3xZ3q_DSsjHoqWrPMbtYao,84
18
18
  slidge/core/dispatcher/caps.py,sha256=vzCAXo_bhALuLEpJWtyJTzVfWx96g1AsWD8_wkoDl0Y,2028
19
19
  slidge/core/dispatcher/disco.py,sha256=j56VY9NIFzwPEWFKQQZ7YIqS9GdD-ZaF_K8a2L-JvRk,2006
20
20
  slidge/core/dispatcher/message/__init__.py,sha256=vpDGOc_U9XvkUU_ws9n9-5M2NPJ87XGTVpuIxM7Z99k,223
21
21
  slidge/core/dispatcher/message/chat_state.py,sha256=sCdEpzbgmvBmTovNOCv9uY6v0eJZcWVvDYAGlAV3FJ4,1735
22
- slidge/core/dispatcher/message/marker.py,sha256=VbD1-2QeOCC4EbrS-wpJxHwIcmvPF4Q4qd0eiv95c7I,2451
22
+ slidge/core/dispatcher/message/marker.py,sha256=f1ezaMoHupBFZY7aUMsWLAQG7G1J9b3ihxICCkpGtis,2411
23
23
  slidge/core/dispatcher/message/message.py,sha256=HwauW2kGionLyDWG01OSa9a14gYzoovJuJvGbfB4nt4,15296
24
24
  slidge/core/dispatcher/muc/__init__.py,sha256=V8URHLJ_y7mk-7Id6FzRuczb1Uq_Z69fhxvzHuVLH1w,269
25
25
  slidge/core/dispatcher/muc/admin.py,sha256=s21V2LEqc0e_DIpipEhhQdpae762lW1lVqj4wjFhX8M,3364
26
26
  slidge/core/dispatcher/muc/mam.py,sha256=1ROVP4ZPEVEH-HR5qRV4YwHz-V15uu5gyhv1ZwwKhk8,2821
27
- slidge/core/dispatcher/muc/misc.py,sha256=L5I2nt23qvQ-2qS5qgW3hSg6Z7DKnGvwxgXqn_WLvpQ,3943
28
- slidge/core/dispatcher/muc/owner.py,sha256=Vwwz15fdLq40XTnyDcMmRtMOXdY3T3_BwpSV3Nr8FNw,3290
27
+ slidge/core/dispatcher/muc/misc.py,sha256=bHBjMC-Pu3jR5hAPGMzXf-C05UbACIwg38YbJUxHIxk,4068
28
+ slidge/core/dispatcher/muc/owner.py,sha256=1a6YV7b_mmi1jC6q1ko8weeL8imQA-s-hYGPLIHd10I,3308
29
29
  slidge/core/dispatcher/muc/ping.py,sha256=lb1VQPhiUPZ19KhbofRXMVCcY6wwQ2w-asnqtANaAwA,1660
30
30
  slidge/core/dispatcher/presence.py,sha256=ZxAmC34yxKxbk_-h6g_S8pTssL7ovULm3q2ishpYaB4,6393
31
31
  slidge/core/dispatcher/registration.py,sha256=Xmbw9NF3LUppCOa3XzreopdKDitZnwl_5HE-kds74n8,3155
32
32
  slidge/core/dispatcher/search.py,sha256=9cGj0wwvyYlP_Yk440Y12sgo4Y1p-JWUDSJP5Zxch0M,3296
33
33
  slidge/core/dispatcher/session_dispatcher.py,sha256=_njTftgpUKKMP-hgAo99Hu0YrIa6E9OTzSYdiMW000w,2844
34
- slidge/core/dispatcher/util.py,sha256=x_vC7OXcaDaSz3RPPGnK9fOvimmMaKPM3RkgmHvU0Qw,5676
34
+ slidge/core/dispatcher/util.py,sha256=YtXyVxM3orE7aYWs-GbJumtLTI63OpaQY_t4FMTjoZo,5754
35
35
  slidge/core/dispatcher/vcard.py,sha256=Rmx-wCz6Lps0mXCO48HppNQlS3GOgMuzuw9hZYBdlVU,5130
36
36
  slidge/core/gateway.py,sha256=NhIgxZKPnOpwsx50OKgyZyk9nfU8ZlUSMddwIDIhFcw,36351
37
37
  slidge/core/mixins/__init__.py,sha256=muReAzgvENgMvlfm0Fpe6BQFfm2EMjoDe9ZhGgo6Vig,627
38
- slidge/core/mixins/attachment.py,sha256=5Xa_GkSL_rRTC45TRjW98jztk__4M5P-3EG4IF91K0c,19022
38
+ slidge/core/mixins/attachment.py,sha256=qHtv2I1buTmPO1jwRIpq2rixq5XTAljeWYj2eMWSw2k,19623
39
39
  slidge/core/mixins/avatar.py,sha256=kGIIZzLSNuxF9bIvt5Bv03_uT_pU5QV1kS7cRu6-GUA,7874
40
40
  slidge/core/mixins/base.py,sha256=MOd-pas38_52VawQVlxWtBtmTKC6My9G0ZaCeQxOJbs,748
41
41
  slidge/core/mixins/db.py,sha256=5Qpegd7D8e5TLXLLINYcf_DuVdN-7wNmsfztUuFYPcU,442
42
42
  slidge/core/mixins/disco.py,sha256=jk3Z1B6zTuisHv8VKNRJodIo0ee5btYHh2ZrlflPj_Q,3670
43
- slidge/core/mixins/lock.py,sha256=mVzwVVEoq1hrAMgGLh4K84BTLt7JTJ33B8HSGSorTdY,913
44
- slidge/core/mixins/message.py,sha256=6X0MskF1fC9Ih8aLRfdqNe7H3jpnFGEJb0EykRKze0c,15384
43
+ slidge/core/mixins/lock.py,sha256=Vf1rrkbyNbSprr38WGfZiMgTB7AdbqH8ppFHY8N2yXE,975
44
+ slidge/core/mixins/message.py,sha256=FB3VoaT81xUNVnaBMSwNJoHfrVv4Iv2678yDQH-23Rw,7551
45
45
  slidge/core/mixins/message_maker.py,sha256=TcCutHi0sIwL6beJNkN7XyR0aDIbA0xZyxd2Gc9ulG4,6022
46
+ slidge/core/mixins/message_text.py,sha256=pCY4tezEuwB2ZuUyUi72i4v9AJkxp_SWF1jrFsn94Ns,8096
46
47
  slidge/core/mixins/presence.py,sha256=yywo6KAw8C7GaZSMrSMuioNfhW08MrnobHt8XbHd0q8,7891
47
48
  slidge/core/mixins/recipient.py,sha256=U-YppozUO8pA94jmD3-qmhkykTebPNaOVWc3JDPC9w8,1302
48
49
  slidge/core/pubsub.py,sha256=oTiS5KFQJAmsgkhOsvfvthT-LkuZGQSCrrUG0JskNkI,11907
@@ -53,30 +54,31 @@ slidge/db/alembic/env.py,sha256=hsBlRNs0zF5diSHGRSa8Fi3qRVQDA2rJdR41AEIdvxc,1642
53
54
  slidge/db/alembic/old_user_store.py,sha256=zFOv0JEWQQK0_TMRlU4Z0G5Mc9pxvEErLyOzXmRAe5Q,5209
54
55
  slidge/db/alembic/script.py.mako,sha256=MEqL-2qATlST9TAOeYgscMn1uy6HUS9NFvDgl93dMj8,635
55
56
  slidge/db/alembic/versions/09f27f098baa_add_missing_attributes_in_room.py,sha256=mUL-0Io6ZPd_QbnKfwGYyjdMcM2uxQ0Wg72H23-2t_E,1033
57
+ slidge/db/alembic/versions/15b0bd83407a_remove_bogus_unique_constraints_on_room_.py,sha256=kzHuHGhzey5CY0p_OsKf5a-3zSk2649wqg2ToLiSD1I,2927
56
58
  slidge/db/alembic/versions/2461390c0af2_store_contacts_caps_verstring_in_db.py,sha256=CLB-kOP9Rc0FJIKDLef912L5sYkjpTIPC8fhrIdrC7k,1084
57
59
  slidge/db/alembic/versions/29f5280c61aa_store_subject_setter_in_room.py,sha256=f8TFS28CXjGhvIn41UYMoHYeODfqhKfo4O7gk-JwA1E,1134
58
60
  slidge/db/alembic/versions/2b1f45ab7379_store_room_subject_setter_by_nickname.py,sha256=CMVP2wFz6s7t57eWdSaGtck8BXzfVPJhHE5AoWi34tI,1359
59
- slidge/db/alembic/versions/3071e0fa69d4_add_contact_client_type.py,sha256=O5BY1vpbtuYT5j6i3EMuuJAf6loIYT1kco8c-c6TF5g,1391
61
+ slidge/db/alembic/versions/3071e0fa69d4_add_contact_client_type.py,sha256=jCdwCOnX9VDgnqIFFHGKaPA7w87Hm9nvR1rMY0LrA30,1394
60
62
  slidge/db/alembic/versions/45c24cc73c91_add_bob.py,sha256=UjMySZ5LaInyPt0KbAxx0rF4GQhZh8CwBeqHtNPdG1c,1249
61
- slidge/db/alembic/versions/5bd48bfdffa2_lift_room_legacy_id_constraint.py,sha256=cObfqUzqdNezIeJdHe7YKFwRwtelXk8y1PwZ75chXDc,1629
63
+ slidge/db/alembic/versions/5bd48bfdffa2_lift_room_legacy_id_constraint.py,sha256=m3USa76h0O2Xut-NePXIOZfkXl0bx0d5FyjOYpd34Jo,1977
62
64
  slidge/db/alembic/versions/82a4af84b679_add_muc_history_filled.py,sha256=g37po0ydp8ZmzJrE5oFV7GscnploxjCtPDpw28SqVGk,1429
63
65
  slidge/db/alembic/versions/8b993243a536_add_vcard_content_to_contact_table.py,sha256=18tG8B03Kq8Qz_-mMd28Beed6jow8XNTtrz7gT5QY3g,1210
64
- slidge/db/alembic/versions/8d2ced764698_rely_on_db_to_store_contacts_rooms_and_.py,sha256=olXaOEEsUSasqaaKdlP1cBODsMhmV1i90qbpDM2vTm4,4696
66
+ slidge/db/alembic/versions/8d2ced764698_rely_on_db_to_store_contacts_rooms_and_.py,sha256=ikoAlRV3_BJcDcFRANF-9HTB--0xpY0C5XdGuMuW9c0,4866
65
67
  slidge/db/alembic/versions/aa9d82a7f6ef_db_creation.py,sha256=XFHaHjPMoxKxKRjNBnYHBzMtS6K38ENcsGzgzlyp60g,2649
66
- slidge/db/alembic/versions/abba1ae0edb3_store_avatar_legacy_id_in_the_contact_.py,sha256=tLnVrbtWzxSPXACIhWPeLxxCIFdnVxK-izoNZxbvA3A,2701
68
+ slidge/db/alembic/versions/abba1ae0edb3_store_avatar_legacy_id_in_the_contact_.py,sha256=VprqEVHipYuM-ea-CIM4_ubOD5zJ9inLTbhXc869n3A,2779
67
69
  slidge/db/alembic/versions/b33993e87db3_move_everything_to_persistent_db.py,sha256=2tiRxoC9PYOQn6XQrwK0JTEsb45Pzp2PsKoZSS4rcIA,7564
68
- slidge/db/alembic/versions/b64b1a793483_add_source_and_legacy_id_for_archived_.py,sha256=N6HYpFBhMckAFLZFW8PY8Us1qzXlauEQiDwEYwd9_K8,1422
70
+ slidge/db/alembic/versions/b64b1a793483_add_source_and_legacy_id_for_archived_.py,sha256=r2sOgR5HcfueJyc3cWNDRmlZzdHOSX6nl2gef54wDbk,1559
69
71
  slidge/db/alembic/versions/c4a8ec35a0e8_per_room_user_nick.py,sha256=jjQmlRv6nqdm5q6LbwVpSUSkTBj1c76Hiq8e8q77q3g,933
70
72
  slidge/db/alembic/versions/e91195719c2c_store_users_avatars_persistently.py,sha256=8Ga3VFgKrzMs_-B8OPtfP-0rey_MFaDg-QGtSbaft3o,640
71
73
  slidge/db/avatar.py,sha256=FfRt2Vu11ZKD9F3x1_drawvUd-TDE3mp7SE3BZ9hOOg,6467
72
74
  slidge/db/meta.py,sha256=v1Jf-npZ28QwdGpsLQWLBHEbEP3-jnPrygRg05tJ_Iw,1831
73
- slidge/db/models.py,sha256=bsZCEtBDkvwiZiJNyp0cqxLHphtCUBIGnOPIaaG9opc,13738
74
- slidge/db/store.py,sha256=1p-wAgG4K_QUehnmqRz-zvmW_PbXYYVq5qYMViF0cNY,46432
75
+ slidge/db/models.py,sha256=ZbnoUK2yajUJXzyCAWlkTQtkuJAaH1gc9G0ilRpfADg,13812
76
+ slidge/db/store.py,sha256=KDQ0rp7h6FHgONTYBvucytE7n6Fhsgxgo0pgX18dsTA,46696
75
77
  slidge/group/__init__.py,sha256=yFt7cHqeaKIMN6f9ZyhhspOcJJvBtLedGv-iICG7lto,258
76
78
  slidge/group/archive.py,sha256=xGPkdSk8-BT6t6lNVo1FEwiFVAttoxCma8Tsyk5r8Kg,5279
77
- slidge/group/bookmarks.py,sha256=_LDf7A7aWkwPH88v7c-mOp8VJs3gSFM1-uCqSb4ThO8,5825
78
- slidge/group/participant.py,sha256=VNMtqr98QVuYgiTsJ9BaaIG1noz-xe3ewyKhLeDRhBk,17033
79
- slidge/group/room.py,sha256=v5mCV7ZrCdgXtDu_K7oDTdtjNYJV-y9wPmlg_RN_4s4,45789
79
+ slidge/group/bookmarks.py,sha256=AvFL34bEX6n3OP1Np309T5hrLK9GnjkjdyLJ3uiLZyc,6616
80
+ slidge/group/participant.py,sha256=Wtq03Ix55AxlK4pvYVIalLwmKklJiIAsZdeLADJNJgU,17138
81
+ slidge/group/room.py,sha256=IizSwUBoKLvcvLpDseHIW_2KAky38uWsSv-poJuCAF0,46019
80
82
  slidge/main.py,sha256=8oND7xpR3eLw7b62fT61UhYlmNp_9gv3tNz2N3xR7-c,6232
81
83
  slidge/migration.py,sha256=4BJmPIRB56_WIhRTqBFIIBXuvnhhBjjOMl4CE7jY6oc,1541
82
84
  slidge/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -119,11 +121,11 @@ slidge/util/__init__.py,sha256=BELovoTMPcPPGz3D48esBr8A4BRRHXTvavfgnArBgEc,301
119
121
  slidge/util/archive_msg.py,sha256=xXAR0BI5r3d6KKWjae9594izCOv6iI03z2WLuTecNw8,1724
120
122
  slidge/util/conf.py,sha256=1j2OnOsCBar1tOObErhXR5RC3Vl3faliOZ1U8J3My58,6613
121
123
  slidge/util/db.py,sha256=4LxZj8oBYgiSnyBUnF_ALjr0TblkfNQq_p28sCfkHMY,242
122
- slidge/util/test.py,sha256=movqj7rxDPZG4RF46CN1z73PSYAHIc_LuudquGRwLVU,13909
124
+ slidge/util/test.py,sha256=xnGXK0wvua49ncQm4linIfH24Ux6oCkm5A71k2V80zI,14007
123
125
  slidge/util/types.py,sha256=R_xfS5mRL0XUJIoDpnaAkZlTOoLPerduXBFftaVwIAI,5489
124
- slidge/util/util.py,sha256=DyJWO2pmE-RiB9Rsy6TUTcvB-BDlmLZBW4PELx4arFQ,9156
125
- slidge-0.2.0a10.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
126
- slidge-0.2.0a10.dist-info/METADATA,sha256=_sFwLHhxETI7mHO1Hoetd6FVtNVYpyHHnboPxJucnkU,5006
127
- slidge-0.2.0a10.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
128
- slidge-0.2.0a10.dist-info/entry_points.txt,sha256=SNl72KSocF5plsu_67xyH6wVWfGTXQbzkQgXbLtzDrQ,47
129
- slidge-0.2.0a10.dist-info/RECORD,,
126
+ slidge/util/util.py,sha256=An4BRIHktZGXnu4kCwaKYaSye_PlyuxEm_4SC9YvPhc,9594
127
+ slidge-0.2.0b1.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
128
+ slidge-0.2.0b1.dist-info/METADATA,sha256=PnfXeM1xUbngKwoPBAuBeiIJ70jxdX7rUcnr2Lq2f0w,5005
129
+ slidge-0.2.0b1.dist-info/WHEEL,sha256=7Z8_27uaHI_UZAc4Uox4PpBhQ9Y5_modZXWMxtUi4NU,88
130
+ slidge-0.2.0b1.dist-info/entry_points.txt,sha256=btz6mbzx1X6fjFWAS_Bo5qNi8PtxUsDgunt-6r4JDHw,43
131
+ slidge-0.2.0b1.dist-info/RECORD,,
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ slidge=slidge.main:main
3
+
@@ -1,3 +0,0 @@
1
- [console_scripts]
2
- slidge=slidge.__main__:main
3
-