From 8e59d18cdae531e31b7d957a11fb33731612fc50 Mon Sep 17 00:00:00 2001 From: Hirad Date: Wed, 23 Jul 2025 11:53:54 +0330 Subject: [PATCH] add show_user --- src/synclean/cli/user_commands.py | 69 ++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/src/synclean/cli/user_commands.py b/src/synclean/cli/user_commands.py index 9c698ab..9519d8f 100644 --- a/src/synclean/cli/user_commands.py +++ b/src/synclean/cli/user_commands.py @@ -39,4 +39,71 @@ def user_ls( offset += limit if not click.confirm("Show more users?", default=True): - break \ No newline at end of file + break + + +@user.command("show") +@click.argument("user_id") +@click.option("--media", is_flag=True, help="List all user media") +@click.option("--rm-all", is_flag=True, help="Remove all media of user") +@click.option("--rm", "remove_media_id", help="Remove media by ID") +@click.option("--avatar", is_flag=True, help="Show avatar URI") +@pass_api +def show_user( + api: SynapseApiClient, + user_id: str, + media: bool, + rm_all: bool, + remove_media_id: Optional[str], + avatar: bool +): + if not user_id.startswith("@"): + user_id = f"@{user_id}" + if not ':' in user_id: + user_id = f"{user_id}:{api.config.homeserver}" + + if user_id is None: + click.echo("You must specify a user ID.", err=True) + return + + if rm_all or remove_media_id: + if not media: + click.echo("You must specify --media to remove media.") + return + + user_api = UserAPI(api) + user_service = UserService(user_api) + user_details = user_service.get_user_details_by_id(user_id) + click.echo(f"Display name: {user_details.display_name}") + click.echo(f"Username: {user_details.name}") + click.echo(f"Avatar URL: {user_details.avatar_url}") + click.echo(f"Is Admin: {user_details.is_admin}") + click.echo(f"Creation date: {user_details.creation_datetime}") + click.echo(f"Last active: {user_details.last_seen_datetime}") + + if click.confirm("Show media?", default=True): + user_media_stats = user_service.get_user_media_stats_by_id(user_id) + click.echo(f"Media count: {user_media_stats.media_count}") + click.echo(f"Media size: {user_media_stats.media_length_mb()}MB") + user_media = user_service.get_user_media_by_id(user_id, 10, 0, "media_length", "b") + # if user_media: + # for media in user_media.media: + # click.echo(f"Upload Name: {media.upload_name}") + # click.echo(f"Media Type: {media.media_type}") + # click.echo(f"Created Date: {media.created_datetime}") + # click.echo(f"Last access: {media.last_access_datetime}") + # click.echo(f"Media size: {media.get_size_formatted()}") + # click.echo("=" * 50) + # click.echo(f"Media count: {user_media.total}") + # click.echo(f"Next token: {user_media.next_token}") + video_files = user_service.get_user_media_by_type(user_id, 999, 0, "media_length", "b", "video") + if video_files: + video_size = video_files['total_size'] / (1024 * 1024) + click.echo(f"Total video size: {video_size:.2f}MB") + click.echo(f"Total video count: {video_files['total_count']}") + + + if avatar: + if not user_details.avatar_url: + click.echo("User has no avatar.") + click.echo(f"Avatar URL: {user_details.avatar_url}")