mirror of
https://github.com/simple-login/app.git
synced 2024-09-20 23:16:00 +08:00
add filter by mailbox
This commit is contained in:
parent
00b3d716b7
commit
51578ce934
|
@ -129,7 +129,7 @@ def get_alias_infos_with_pagination(user, page_id=0, query=None) -> [AliasInfo]:
|
|||
|
||||
|
||||
def get_alias_infos_with_pagination_v3(
|
||||
user, page_id=0, query=None, sort=None, alias_filter=None
|
||||
user, page_id=0, query=None, sort=None, alias_filter=None, mailbox_id=None
|
||||
) -> [AliasInfo]:
|
||||
# subquery on alias annotated with nb_reply, nb_blocked, nb_forward, max_created_at, latest_email_log_created_at
|
||||
alias_activity_subquery = (
|
||||
|
@ -214,17 +214,7 @@ def get_alias_infos_with_pagination_v3(
|
|||
)
|
||||
|
||||
if query:
|
||||
q = (
|
||||
# to find mailbox whose email match the query
|
||||
q.join(AliasMailbox, Alias.id == AliasMailbox.alias_id, isouter=True)
|
||||
.join(
|
||||
Mailbox,
|
||||
or_(
|
||||
Mailbox.id == Alias.mailbox_id,
|
||||
Mailbox.id == AliasMailbox.mailbox_id,
|
||||
),
|
||||
)
|
||||
.filter(
|
||||
q = q.filter(
|
||||
or_(
|
||||
Alias.email.ilike(f"%{query}%"),
|
||||
Alias.note.ilike(f"%{query}%"),
|
||||
|
@ -232,9 +222,14 @@ def get_alias_infos_with_pagination_v3(
|
|||
# Alias.ts_vector.match(query),
|
||||
Alias.ts_vector.op("@@")(func.plainto_tsquery("english", query)),
|
||||
Alias.name.ilike(f"%{query}%"),
|
||||
Mailbox.email.ilike(f"%{query}%"),
|
||||
)
|
||||
)
|
||||
|
||||
if mailbox_id:
|
||||
q = q.join(
|
||||
AliasMailbox, Alias.id == AliasMailbox.alias_id, isouter=True
|
||||
).filter(
|
||||
or_(Alias.mailbox_id == mailbox_id, AliasMailbox.mailbox_id == mailbox_id)
|
||||
)
|
||||
|
||||
if alias_filter == "enabled":
|
||||
|
|
|
@ -177,6 +177,12 @@
|
|||
<option value="hibp" {% if filter == "hibp" %} selected {% endif %}>
|
||||
Only Aliases Found In Data Breaches
|
||||
</option>
|
||||
{% for mailbox in current_user.mailboxes() %}
|
||||
<option value="mailbox:{{ mailbox.id }}" {% if filter == "mailbox:" ~ mailbox.id %}
|
||||
selected {% endif %}>
|
||||
{{ mailbox.email }}'s aliases
|
||||
</option>
|
||||
{% endfor %}
|
||||
</select>
|
||||
|
||||
<input type="search" name="query" placeholder="Enter to search for alias"
|
||||
|
|
|
@ -150,8 +150,12 @@ def index():
|
|||
|
||||
stats = get_stats(current_user)
|
||||
|
||||
mailbox_id = None
|
||||
if alias_filter and alias_filter.startswith("mailbox:"):
|
||||
mailbox_id = int(alias_filter[len("mailbox:") :])
|
||||
|
||||
alias_infos = get_alias_infos_with_pagination_v3(
|
||||
current_user, page, query, sort, alias_filter
|
||||
current_user, page, query, sort, alias_filter, mailbox_id
|
||||
)
|
||||
last_page = len(alias_infos) < PAGE_LIMIT
|
||||
|
||||
|
|
|
@ -1137,9 +1137,12 @@ class Alias(db.Model, ModelMixin):
|
|||
__table_args__ = (
|
||||
Index("ix_video___ts_vector__", ts_vector, postgresql_using="gin"),
|
||||
# index on note column using pg_trgm
|
||||
Index('note_pg_trgm_index', "note",
|
||||
Index(
|
||||
"note_pg_trgm_index",
|
||||
"note",
|
||||
postgresql_ops={"note": "gin_trgm_ops"},
|
||||
postgresql_using='gin'),
|
||||
postgresql_using="gin",
|
||||
),
|
||||
)
|
||||
|
||||
user = db.relationship(User, foreign_keys=[user_id])
|
||||
|
|
|
@ -59,7 +59,7 @@ def test_get_alias_infos_with_pagination_v3_query_alias_mailbox(flask_client):
|
|||
commit=True,
|
||||
)
|
||||
alias = Alias.first()
|
||||
alias_infos = get_alias_infos_with_pagination_v3(user, query=alias.mailbox.email)
|
||||
alias_infos = get_alias_infos_with_pagination_v3(user, mailbox_id=alias.mailbox_id)
|
||||
assert len(alias_infos) == 1
|
||||
|
||||
|
||||
|
@ -77,7 +77,7 @@ def test_get_alias_infos_with_pagination_v3_query_alias_mailboxes(flask_client):
|
|||
alias._mailboxes.append(mb)
|
||||
db.session.commit()
|
||||
|
||||
alias_infos = get_alias_infos_with_pagination_v3(user, query=mb.email)
|
||||
alias_infos = get_alias_infos_with_pagination_v3(user, mailbox_id=mb.id)
|
||||
assert len(alias_infos) == 1
|
||||
|
||||
alias_infos = get_alias_infos_with_pagination_v3(user, query=alias.email)
|
||||
|
|
Loading…
Reference in a new issue