Skip to content

Commit

Permalink
Merge pull request #113 from JacksonChen666/room-delete-v2
Browse files Browse the repository at this point in the history
Implement room delete v2 API
  • Loading branch information
JacksonChen666 committed Jul 27, 2023
2 parents 630f31f + d0785a0 commit 4bdcdf7
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 4 deletions.
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""")
@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.
"""
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

0 comments on commit 4bdcdf7

Please sign in to comment.