Allow to hide shares from actors
parent
22410862f3
commit
15dd7e184b
|
@ -0,0 +1,32 @@
|
||||||
|
"""Add option to hide announces from actor
|
||||||
|
|
||||||
|
Revision ID: 9b404c47970a
|
||||||
|
Revises: fadfd359ce78
|
||||||
|
Create Date: 2022-12-12 19:26:36.912763+00:00
|
||||||
|
|
||||||
|
"""
|
||||||
|
import sqlalchemy as sa
|
||||||
|
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = '9b404c47970a'
|
||||||
|
down_revision = 'fadfd359ce78'
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table('actor', schema=None) as batch_op:
|
||||||
|
batch_op.add_column(sa.Column('are_announces_hidden_from_stream', sa.Boolean(), server_default='0', nullable=False))
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
with op.batch_alter_table('actor', schema=None) as batch_op:
|
||||||
|
batch_op.drop_column('are_announces_hidden_from_stream')
|
||||||
|
|
||||||
|
# ### end Alembic commands ###
|
28
app/admin.py
28
app/admin.py
|
@ -959,6 +959,34 @@ async def admin_actions_unblock(
|
||||||
return RedirectResponse(redirect_url, status_code=302)
|
return RedirectResponse(redirect_url, status_code=302)
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/actions/hide_announces")
|
||||||
|
async def admin_actions_hide_announces(
|
||||||
|
request: Request,
|
||||||
|
ap_actor_id: str = Form(),
|
||||||
|
redirect_url: str = Form(),
|
||||||
|
csrf_check: None = Depends(verify_csrf_token),
|
||||||
|
db_session: AsyncSession = Depends(get_db_session),
|
||||||
|
) -> RedirectResponse:
|
||||||
|
actor = await fetch_actor(db_session, ap_actor_id)
|
||||||
|
actor.are_announces_hidden_from_stream = True
|
||||||
|
await db_session.commit()
|
||||||
|
return RedirectResponse(redirect_url, status_code=302)
|
||||||
|
|
||||||
|
|
||||||
|
@router.post("/actions/show_announces")
|
||||||
|
async def admin_actions_show_announces(
|
||||||
|
request: Request,
|
||||||
|
ap_actor_id: str = Form(),
|
||||||
|
redirect_url: str = Form(),
|
||||||
|
csrf_check: None = Depends(verify_csrf_token),
|
||||||
|
db_session: AsyncSession = Depends(get_db_session),
|
||||||
|
) -> RedirectResponse:
|
||||||
|
actor = await fetch_actor(db_session, ap_actor_id)
|
||||||
|
actor.are_announces_hidden_from_stream = False
|
||||||
|
await db_session.commit()
|
||||||
|
return RedirectResponse(redirect_url, status_code=302)
|
||||||
|
|
||||||
|
|
||||||
@router.post("/actions/delete")
|
@router.post("/actions/delete")
|
||||||
async def admin_actions_delete(
|
async def admin_actions_delete(
|
||||||
request: Request,
|
request: Request,
|
||||||
|
|
|
@ -2205,7 +2205,10 @@ async def _handle_announce_activity(
|
||||||
db_session.add(announced_inbox_object)
|
db_session.add(announced_inbox_object)
|
||||||
await db_session.flush()
|
await db_session.flush()
|
||||||
announce_activity.relates_to_inbox_object_id = announced_inbox_object.id
|
announce_activity.relates_to_inbox_object_id = announced_inbox_object.id
|
||||||
announce_activity.is_hidden_from_stream = not is_from_following
|
announce_activity.is_hidden_from_stream = (
|
||||||
|
not is_from_following
|
||||||
|
or announce_activity.actor.are_announces_hidden_from_stream
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
async def _handle_like_activity(
|
async def _handle_like_activity(
|
||||||
|
|
|
@ -54,6 +54,10 @@ class Actor(Base, BaseActor):
|
||||||
is_blocked = Column(Boolean, nullable=False, default=False, server_default="0")
|
is_blocked = Column(Boolean, nullable=False, default=False, server_default="0")
|
||||||
is_deleted = Column(Boolean, nullable=False, default=False, server_default="0")
|
is_deleted = Column(Boolean, nullable=False, default=False, server_default="0")
|
||||||
|
|
||||||
|
are_announces_hidden_from_stream = Column(
|
||||||
|
Boolean, nullable=False, default=False, server_default="0"
|
||||||
|
)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_from_db(self) -> bool:
|
def is_from_db(self) -> bool:
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -32,6 +32,29 @@
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% endmacro %}
|
{% endmacro %}
|
||||||
|
|
||||||
|
{% macro admin_hide_shares_button(actor) %}
|
||||||
|
{% block admin_hide_shares_button scoped %}
|
||||||
|
<form action="{{ request.url_for("admin_actions_hide_announces") }}" method="POST">
|
||||||
|
{{ embed_csrf_token() }}
|
||||||
|
{{ embed_redirect_url() }}
|
||||||
|
<input type="hidden" name="ap_actor_id" value="{{ actor.ap_id }}">
|
||||||
|
<input type="submit" value="hide shares">
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
|
{% macro admin_show_shares_button(actor) %}
|
||||||
|
{% block admin_show_shares_button scoped %}
|
||||||
|
<form action="{{ request.url_for("admin_actions_show_announces") }}" method="POST">
|
||||||
|
{{ embed_csrf_token() }}
|
||||||
|
{{ embed_redirect_url() }}
|
||||||
|
<input type="hidden" name="ap_actor_id" value="{{ actor.ap_id }}">
|
||||||
|
<input type="submit" value="show shares">
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
{% endmacro %}
|
||||||
|
|
||||||
|
|
||||||
{% macro admin_follow_button(actor) %}
|
{% macro admin_follow_button(actor) %}
|
||||||
{% block admin_follow_button scoped %}
|
{% block admin_follow_button scoped %}
|
||||||
<form action="{{ request.url_for("admin_actions_follow") }}" method="POST">
|
<form action="{{ request.url_for("admin_actions_follow") }}" method="POST">
|
||||||
|
@ -342,6 +365,11 @@
|
||||||
<li>rejected</li>
|
<li>rejected</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if actor.are_announces_hidden_from_stream %}
|
||||||
|
<li>{{ admin_show_shares_button(actor) }}</li>
|
||||||
|
{% else %}
|
||||||
|
<li>{{ admin_hide_shares_button(actor) }}</li>
|
||||||
|
{% endif %}
|
||||||
{% if with_details %}
|
{% if with_details %}
|
||||||
<li><a href="{{ actor.url }}" class="label-btn">remote profile</a></li>
|
<li><a href="{{ actor.url }}" class="label-btn">remote profile</a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
Loading…
Reference in New Issue