Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement room delete v2 API #113

Merged
merged 4 commits into from
Jul 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions synadm/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -853,6 +853,32 @@ def room_delete(self, room_id, new_room_user_id, room_name, message,
return self.query("delete", "v1/rooms/{room_id}", data=data,
room_id=room_id)

def room_delete_v2(self, room_id, new_room_user_id, room_name, message,
block, purge):
""" Delete a room asynchronously and purge it if requested
"""
data = {
"block": block, # data with proper defaults from cli
"purge": purge
}
# everything else is optional and shouldn't even exist in post body
if new_room_user_id:
data.update({"new_room_user_id": new_room_user_id})
if room_name:
data.update({"room_name": room_name})
if message:
data.update({"message": message})
return self.query("delete", "v2/rooms/{room_id}", data=data,
room_id=room_id)

def room_delete_v2_status_by_room_id(self, room_id):
return self.query("get", "v2/rooms/{room_id}/delete_status",
room_id=room_id)

def room_delete_v2_status_by_delete_id(self, delete_id):
return self.query("get", "v2/rooms/delete_status/{delete_id}",
delete_id=delete_id)

def block_room(self, room_id, block):
""" Block or unblock a room.

Expand Down
47 changes: 43 additions & 4 deletions synadm/cli/room.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"""

import click
from click_option_group import RequiredMutuallyExclusiveOptionGroup, optgroup

from synadm import cli

Expand Down Expand Up @@ -245,10 +246,13 @@ def members(helper, room_id):
"--no-purge", is_flag=True, default=False, show_default=True,
help="""Prevent removing of all traces of the room from your
database.""")
@click.option(
"--v1", is_flag=True, default=False, show_default=True,
help="""Use version 1 of the room delete API instead of version 2""")
JacksonChen666 marked this conversation as resolved.
Show resolved Hide resolved
@click.pass_obj
@click.pass_context
def delete(ctx, helper, room_id, new_room_user_id, room_name, message, block,
no_purge):
no_purge, v1):
""" Delete and possibly purge a room.
"""
room_details = helper.api.room_details(room_id)
Expand All @@ -269,9 +273,14 @@ def delete(ctx, helper, room_id, new_room_user_id, room_name, message, block,
)
if sure:
mxid = helper.generate_mxid(new_room_user_id)
room_del = helper.api.room_delete(
room_id, mxid, room_name,
message, block, no_purge)
if v1:
room_del = helper.api.room_delete(
room_id, mxid, room_name,
message, block, no_purge)
else:
room_del = helper.api.room_delete_v2(
room_id, mxid, room_name,
message, block, not bool(no_purge))
if room_del is None:
click.echo("Room not deleted.")
raise SystemExit(1)
Expand All @@ -280,6 +289,36 @@ def delete(ctx, helper, room_id, new_room_user_id, room_name, message, block,
click.echo("Abort.")


@room.command(name="delete-status")
@optgroup.group(
"Query type", cls=RequiredMutuallyExclusiveOptionGroup,
help="Query room deletion status via either Room ID or Deletion ID"
)
@optgroup.option(
"--room-id", "-r", type=str,
help="""The Room ID to query the deletion status for""")
@optgroup.option(
"--delete-id", "-d", type=str,
help="""The Delete ID to query the deletion status for""")
@click.pass_obj
def delete_status(helper, room_id, delete_id):
""" Get room deletion status via either the room ID or the delete ID.

This requires the usage of the Room Delete v2 API. If you used v1 of the
Room Delete API, this is irrelevant.
JacksonChen666 marked this conversation as resolved.
Show resolved Hide resolved
"""
output = None
if room_id:
output = helper.api.room_delete_v2_status_by_room_id(
room_id
)
if delete_id:
output = helper.api.room_delete_v2_status_by_delete_id(
delete_id
)
helper.output(output)


@room.command(name="search")
@click.argument("search-term", type=str)
@click.option(
Expand Down