Philipp Hörist pushed to branch storage at gajim / gajim
Commits:
b466d4be by Philipp Hörist at 2024-04-07T15:07:10+02:00
imprv: Migration dont fail on duplicated error message
- - - - -
e1b43441 by Philipp Hörist at 2024-04-07T15:07:10+02:00
imprv: Remove unique index on message table
- - - - -
4 changed files:
- gajim/common/modules/message.py
- gajim/common/storage/archive/migration.py
- gajim/common/storage/archive/models.py
- gajim/common/storage/archive/storage.py
Changes:
=====================================
gajim/common/modules/message.py
=====================================
@@ -32,7 +32,6 @@
from gajim.common.storage.archive.const import ChatDirection
from gajim.common.storage.archive.const import MessageState
from gajim.common.storage.archive.const import MessageType
-from gajim.common.storage.base import is_unique_constraint_error
from gajim.common.storage.base import VALUE_MISSING
from gajim.common.structs import OutgoingMessage
@@ -140,6 +139,13 @@ def _message_received(self,
stanza_id = self._get_stanza_id(properties)
+ if (m_type != MessageType.GROUPCHAT and
+ direction == ChatDirection.OUTGOING):
+ if app.storage.archive.check_if_duplicate(
+ self._account, remote_jid, message_id):
+ self._log.info('Duplicated message received: %s', message_id)
+ return
+
occupant = None
if m_type == MessageType.GROUPCHAT:
if direction == ChatDirection.OUTGOING:
@@ -216,12 +222,7 @@ def _message_received(self,
try:
pk = app.storage.archive.insert_object(
message_data, ignore_on_conflict=False)
- except sqlalchemy.exc.IntegrityError as error:
- if is_unique_constraint_error(error):
- self._log.warning('Duplicate found with message id: %s',
- message_id)
- return
-
+ except sqlalchemy.exc.IntegrityError:
self._log.exception('Insertion Error')
return
=====================================
gajim/common/storage/archive/migration.py
=====================================
@@ -32,6 +32,7 @@
from gajim.common.storage.archive.const import MessageState
from gajim.common.storage.archive.const import MessageType
from gajim.common.storage.base import AlchemyStorage
+from gajim.common.storage.base import is_unique_constraint_error
log = logging.getLogger('gajim.c.storage.archive.migration')
@@ -411,7 +412,11 @@ def _insert_error_data(
'timestamp': timestamp + timedelta(seconds=1),
}
- conn.execute(sa.insert(mod.MessageError), [error_data]) # pyright:
ignore
+ try:
+ conn.execute(sa.insert(mod.MessageError), [error_data]) #
pyright: ignore
+ except IntegrityError as error:
+ if is_unique_constraint_error(error):
+ return
def _insert_encryption_data(
self, conn: sa.Connection, additional_data: dict[str, Any]
=====================================
gajim/common/storage/archive/models.py
=====================================
@@ -655,15 +655,7 @@ class Message(MappedAsDataclass, Base, UtilMixin,
kw_only=True):
__table_args__ = (
Index(
- 'idx_message', 'fk_remote_pk', 'fk_account_pk', sa.text('timestamp
DESC')
- ),
- Index(
- 'idx_message_id_outgoing_unique',
- 'id',
- 'fk_remote_pk',
- 'fk_account_pk',
- unique=True,
- sqlite_where=direction == 2,
+ 'idx_message', 'id', 'fk_remote_pk', 'fk_account_pk',
sa.text('timestamp DESC')
),
Index(
'idx_stanza_id_unique',
=====================================
gajim/common/storage/archive/storage.py
=====================================
@@ -311,6 +311,20 @@ def _delete_message(self, session: Session, message:
Message) -> None:
session.delete(message)
+ @with_session
+ def check_if_duplicate(self, session: Session, account: str, jid: JID,
message_id: str) -> bool:
+ fk_account_pk = self._get_account_pk(session, account)
+ fk_remote_pk = self._get_jid_ek(session, jid)
+
+ stmt = (
+ select(Message.id)
+ .where(Message.id == message_id,
+ Message.fk_remote_pk == fk_remote_pk,
+ Message.fk_account_pk == fk_account_pk)
+ )
+ res = session.scalars(stmt).first()
+ return res is not None
+
@with_session
def get_conversation_jids(self, session: Session, account: str) ->
Sequence[JID]:
fk_account_pk = self._get_account_pk(session, account)
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/compare/39136ed297665fc16b2e054d20deb9d9c29e657c...e1b434416dd685f0f098d69c18a63993e5d0a016
--
View it on GitLab:
https://dev.gajim.org/gajim/gajim/-/compare/39136ed297665fc16b2e054d20deb9d9c29e657c...e1b434416dd685f0f098d69c18a63993e5d0a016
You're receiving this email because of your account on dev.gajim.org.
_______________________________________________
Commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]