mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2024-12-25 10:39:22 -05:00
fix thinkos galore
This commit is contained in:
parent
cd3697e8b7
commit
a4bb133b68
@ -20,6 +20,7 @@ from synapse.api.constants import EventTypes, JoinRules, Membership
|
|||||||
from synapse.storage.roommember import ProfileInfo
|
from synapse.storage.roommember import ProfileInfo
|
||||||
from synapse.util.metrics import Measure
|
from synapse.util.metrics import Measure
|
||||||
from synapse.util.async import sleep
|
from synapse.util.async import sleep
|
||||||
|
from synapse.types import get_localpart_from_id
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
@ -53,6 +54,7 @@ class UserDirectoryHandler(object):
|
|||||||
self.notifier = hs.get_notifier()
|
self.notifier = hs.get_notifier()
|
||||||
self.is_mine_id = hs.is_mine_id
|
self.is_mine_id = hs.is_mine_id
|
||||||
self.update_user_directory = hs.config.update_user_directory
|
self.update_user_directory = hs.config.update_user_directory
|
||||||
|
self.include_pattern = hs.config.user_directory_include_pattern
|
||||||
|
|
||||||
# When start up for the first time we need to populate the user_directory.
|
# When start up for the first time we need to populate the user_directory.
|
||||||
# This is a set of user_id's we've inserted already
|
# This is a set of user_id's we've inserted already
|
||||||
@ -116,7 +118,7 @@ class UserDirectoryHandler(object):
|
|||||||
irrespective of any rooms the user may be in.
|
irrespective of any rooms the user may be in.
|
||||||
"""
|
"""
|
||||||
yield self.store.update_profile_in_user_dir(
|
yield self.store.update_profile_in_user_dir(
|
||||||
user_id, profile.display_name, profile.avatar_url,
|
user_id, profile.display_name, profile.avatar_url, None,
|
||||||
)
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
@ -167,10 +169,10 @@ class UserDirectoryHandler(object):
|
|||||||
|
|
||||||
logger.info("Processed all rooms.")
|
logger.info("Processed all rooms.")
|
||||||
|
|
||||||
if self.hs.config.user_directory_include_pattern:
|
if self.include_pattern:
|
||||||
logger.info("Doing initial update of user directory. %d users", len(user_ids))
|
|
||||||
num_processed_users = 0
|
num_processed_users = 0
|
||||||
user_ids = yield self.store.get_all_local_users()
|
user_ids = yield self.store.get_all_local_users()
|
||||||
|
logger.info("Doing initial update of user directory. %d users", len(user_ids))
|
||||||
for user_id in user_ids:
|
for user_id in user_ids:
|
||||||
# We add profiles for all users even if they don't match the
|
# We add profiles for all users even if they don't match the
|
||||||
# include pattern, just in case we want to change it in future
|
# include pattern, just in case we want to change it in future
|
||||||
@ -415,7 +417,7 @@ class UserDirectoryHandler(object):
|
|||||||
"""
|
"""
|
||||||
logger.debug("Adding new local user to dir, %r", user_id)
|
logger.debug("Adding new local user to dir, %r", user_id)
|
||||||
|
|
||||||
profile = yield self.store.get_profileinfo(user_id)
|
profile = yield self.store.get_profileinfo(get_localpart_from_id(user_id))
|
||||||
|
|
||||||
row = yield self.store.get_user_in_directory(user_id)
|
row = yield self.store.get_user_in_directory(user_id)
|
||||||
if not row:
|
if not row:
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
from twisted.internet import defer
|
from twisted.internet import defer
|
||||||
|
|
||||||
from synapse.storage.roommember import ProfileInfo
|
from synapse.storage.roommember import ProfileInfo
|
||||||
|
from synapse.api.errors import StoreError
|
||||||
|
|
||||||
from ._base import SQLBaseStore
|
from ._base import SQLBaseStore
|
||||||
|
|
||||||
@ -28,16 +29,28 @@ class ProfileStore(SQLBaseStore):
|
|||||||
desc="create_profile",
|
desc="create_profile",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@defer.inlineCallbacks
|
||||||
def get_profileinfo(self, user_localpart):
|
def get_profileinfo(self, user_localpart):
|
||||||
profile = self._simple_select_one(
|
try:
|
||||||
table="profiles",
|
profile = yield self._simple_select_one(
|
||||||
keyvalues={"user_id": user_localpart},
|
table="profiles",
|
||||||
retcols=("displayname", "avatar_url"),
|
keyvalues={"user_id": user_localpart},
|
||||||
desc="get_profileinfo",
|
retcols=("displayname", "avatar_url"),
|
||||||
)
|
desc="get_profileinfo",
|
||||||
return ProfileInfo(
|
)
|
||||||
avatar_url=profile.avatar_url,
|
except StoreError, e:
|
||||||
displayname=profile.displayname,
|
if e.code == 404:
|
||||||
|
# no match
|
||||||
|
defer.returnValue(ProfileInfo(None, None))
|
||||||
|
return
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
defer.returnValue(
|
||||||
|
ProfileInfo(
|
||||||
|
avatar_url=profile['avatar_url'],
|
||||||
|
display_name=profile['displayname'],
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_profile_displayname(self, user_localpart):
|
def get_profile_displayname(self, user_localpart):
|
||||||
|
@ -640,13 +640,17 @@ class UserDirectoryStore(SQLBaseStore):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
include_pattern_clause = ""
|
include_pattern_join = ""
|
||||||
|
include_pattern_where_clause = ""
|
||||||
if self.hs.config.user_directory_include_pattern:
|
if self.hs.config.user_directory_include_pattern:
|
||||||
include_pattern_clause = "OR d.user_id LIKE '%s'" % (
|
include_pattern_join = """
|
||||||
self.hs.config.user_directory_include_pattern
|
LEFT JOIN (
|
||||||
)
|
SELECT user_id FROM user_directory
|
||||||
|
WHERE user_id LIKE '%s'
|
||||||
|
) AS ld USING (user_id)
|
||||||
|
""" % ( self.hs.config.user_directory_include_pattern )
|
||||||
|
|
||||||
logger.error("include pattern is %s" % (include_pattern))
|
include_pattern_where_clause = "OR ld.user_id IS NOT NULL"
|
||||||
|
|
||||||
if isinstance(self.database_engine, PostgresEngine):
|
if isinstance(self.database_engine, PostgresEngine):
|
||||||
full_query, exact_query, prefix_query = _parse_query_postgres(search_term)
|
full_query, exact_query, prefix_query = _parse_query_postgres(search_term)
|
||||||
@ -665,6 +669,7 @@ class UserDirectoryStore(SQLBaseStore):
|
|||||||
SELECT other_user_id AS user_id FROM users_who_share_rooms
|
SELECT other_user_id AS user_id FROM users_who_share_rooms
|
||||||
WHERE user_id = ? AND share_private
|
WHERE user_id = ? AND share_private
|
||||||
) AS s USING (user_id)
|
) AS s USING (user_id)
|
||||||
|
%s
|
||||||
WHERE
|
WHERE
|
||||||
(s.user_id IS NOT NULL OR p.user_id IS NOT NULL %s)
|
(s.user_id IS NOT NULL OR p.user_id IS NOT NULL %s)
|
||||||
AND vector @@ to_tsquery('english', ?)
|
AND vector @@ to_tsquery('english', ?)
|
||||||
@ -690,7 +695,7 @@ class UserDirectoryStore(SQLBaseStore):
|
|||||||
display_name IS NULL,
|
display_name IS NULL,
|
||||||
avatar_url IS NULL
|
avatar_url IS NULL
|
||||||
LIMIT ?
|
LIMIT ?
|
||||||
""" % ( include_pattern_clause )
|
""" % ( include_pattern_join, include_pattern_where_clause )
|
||||||
args = (user_id, full_query, exact_query, prefix_query, limit + 1,)
|
args = (user_id, full_query, exact_query, prefix_query, limit + 1,)
|
||||||
elif isinstance(self.database_engine, Sqlite3Engine):
|
elif isinstance(self.database_engine, Sqlite3Engine):
|
||||||
search_query = _parse_query_sqlite(search_term)
|
search_query = _parse_query_sqlite(search_term)
|
||||||
@ -704,6 +709,7 @@ class UserDirectoryStore(SQLBaseStore):
|
|||||||
SELECT other_user_id AS user_id FROM users_who_share_rooms
|
SELECT other_user_id AS user_id FROM users_who_share_rooms
|
||||||
WHERE user_id = ? AND share_private
|
WHERE user_id = ? AND share_private
|
||||||
) AS s USING (user_id)
|
) AS s USING (user_id)
|
||||||
|
%s
|
||||||
WHERE
|
WHERE
|
||||||
(s.user_id IS NOT NULL OR p.user_id IS NOT NULL %s)
|
(s.user_id IS NOT NULL OR p.user_id IS NOT NULL %s)
|
||||||
AND value MATCH ?
|
AND value MATCH ?
|
||||||
@ -712,7 +718,7 @@ class UserDirectoryStore(SQLBaseStore):
|
|||||||
display_name IS NULL,
|
display_name IS NULL,
|
||||||
avatar_url IS NULL
|
avatar_url IS NULL
|
||||||
LIMIT ?
|
LIMIT ?
|
||||||
""" % ( include_pattern_clause )
|
""" % ( include_pattern_join, include_pattern_where_clause )
|
||||||
args = (user_id, search_query, limit + 1)
|
args = (user_id, search_query, limit + 1)
|
||||||
else:
|
else:
|
||||||
# This should be unreachable.
|
# This should be unreachable.
|
||||||
|
Loading…
Reference in New Issue
Block a user