Try to fix displayname changing between contact and non-contact name. Fixes #533

This commit is contained in:
Tulir Asokan
2021-01-01 12:02:21 +02:00
parent efd536357c
commit 697fb06909
3 changed files with 45 additions and 4 deletions
@@ -0,0 +1,32 @@
"""Store displayname contact status in puppet table
Revision ID: 990f4395afc6
Revises: 7de69cf5809e
Create Date: 2021-01-01 11:56:54.610681
"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
# revision identifiers, used by Alembic.
revision = '990f4395afc6'
down_revision = '7de69cf5809e'
branch_labels = None
depends_on = None
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('puppet', schema=None) as batch_op:
batch_op.add_column(sa.Column('displayname_contact', sa.Boolean(), server_default=sa.true(), nullable=False))
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
with op.batch_alter_table('puppet', schema=None) as batch_op:
batch_op.drop_column('displayname_contact')
# ### end Alembic commands ###
+1
View File
@@ -34,6 +34,7 @@ class Puppet(Base):
base_url: str = Column(Text, nullable=True)
displayname: str = Column(String, nullable=True)
displayname_source: TelegramID = Column(Integer, nullable=True)
displayname_contact: bool = Column(Boolean, nullable=False, server_default=expression.true())
username: str = Column(String, nullable=True)
photo_id: str = Column(String, nullable=True)
is_bot: bool = Column(Boolean, nullable=True)
+12 -4
View File
@@ -65,6 +65,7 @@ class Puppet(BasePuppet):
username: Optional[str]
displayname: Optional[str]
displayname_source: Optional[TelegramID]
displayname_contact: bool
photo_id: Optional[str]
is_bot: bool
is_registered: bool
@@ -86,6 +87,7 @@ class Puppet(BasePuppet):
username: Optional[str] = None,
displayname: Optional[str] = None,
displayname_source: Optional[TelegramID] = None,
displayname_contact: bool = False,
photo_id: Optional[str] = None,
is_bot: bool = False,
is_registered: bool = False,
@@ -101,6 +103,7 @@ class Puppet(BasePuppet):
self.username = username
self.displayname = displayname
self.displayname_source = displayname_source
self.displayname_contact = displayname_contact
self.photo_id = photo_id
self.is_bot = is_bot
self.is_registered = is_registered
@@ -165,8 +168,8 @@ class Puppet(BasePuppet):
return dict(access_token=self.access_token, next_batch=self._next_batch,
custom_mxid=self.custom_mxid, username=self.username, is_bot=self.is_bot,
displayname=self.displayname, displayname_source=self.displayname_source,
photo_id=self.photo_id, matrix_registered=self.is_registered,
disable_updates=self.disable_updates,
displayname_contact=self.displayname_contact, photo_id=self.photo_id,
matrix_registered=self.is_registered, disable_updates=self.disable_updates,
base_url=str(self.base_url) if self.base_url else None)
def new_db_instance(self) -> DBPuppet:
@@ -179,8 +182,9 @@ class Puppet(BasePuppet):
def from_db(cls, db_puppet: DBPuppet) -> 'Puppet':
return Puppet(db_puppet.id, db_puppet.access_token, db_puppet.custom_mxid,
db_puppet.next_batch, db_puppet.base_url, db_puppet.username,
db_puppet.displayname, db_puppet.displayname_source, db_puppet.photo_id,
db_puppet.is_bot, db_puppet.matrix_registered, db_puppet.disable_updates,
db_puppet.displayname, db_puppet.displayname_source,
db_puppet.displayname_contact, db_puppet.photo_id, db_puppet.is_bot,
db_puppet.matrix_registered, db_puppet.disable_updates,
db_instance=db_puppet)
# endregion
@@ -273,6 +277,10 @@ class Puppet(BasePuppet):
if isinstance(info, UpdateUserName):
info = await source.client.get_entity(PeerUser(self.tgid))
if not info.contact:
self.displayname_contact = False
elif not self.displayname_contact:
return False
displayname = self.get_displayname(info)
if displayname != self.displayname: