From abafe60058aff8ecad50585485d52267624ab9c8 Mon Sep 17 00:00:00 2001 From: Hirad Date: Fri, 18 Jul 2025 11:17:56 +0330 Subject: [PATCH] change user_commands.py to media_commands.py and add new user_commands.py --- src/synclean/cli/commands.py | 6 ++-- src/synclean/cli/media_commands.py | 49 ++++++++++++++++++++++++++++++ src/synclean/cli/user_commands.py | 34 ++++++--------------- 3 files changed, 63 insertions(+), 26 deletions(-) create mode 100644 src/synclean/cli/media_commands.py diff --git a/src/synclean/cli/commands.py b/src/synclean/cli/commands.py index fa813f2..e72c157 100644 --- a/src/synclean/cli/commands.py +++ b/src/synclean/cli/commands.py @@ -1,8 +1,9 @@ import click from synclean.api.synapse import SynapseApiClient +from synclean.cli.user_commands import user from synclean.config.settings import SettingsManager from synclean.cli.room_commands import room -from synclean.cli.user_commands import user +from synclean.cli.media_commands import media from synclean.models.config import SynapseConfig pass_api = click.make_pass_decorator(SynapseApiClient) @@ -41,4 +42,5 @@ def settings(): cli.add_command(room) -cli.add_command(user) +cli.add_command(media) +cli.add_command(user) \ No newline at end of file diff --git a/src/synclean/cli/media_commands.py b/src/synclean/cli/media_commands.py new file mode 100644 index 0000000..6761af1 --- /dev/null +++ b/src/synclean/cli/media_commands.py @@ -0,0 +1,49 @@ +from typing import Optional +import click +from synclean.api.synapse import SynapseApiClient +from synclean.api.users import UserAPI +from synclean.service.user_service import UserService + +pass_api = click.make_pass_decorator(SynapseApiClient) + + +media = click.Group(name="media", help="Media commands.") + + +@media.command("ls") +@click.option("--limit", "-l", default=10, help="Number of users to list.") +@click.option("--offset", "-o", default=0, help="Number of the room to start from.") +@click.option("--search", "-s", help="Search term to filter by.") +@click.option("--order-by", "-O", + type=click.Choice(["user_id", "display_name", "media_length", "media_count"]), + default="media_length", help="Field to order result by.") +@click.option("--direction", "-d", + type=click.Choice(["f", "b"]), + default="b", help="Direction to order result by. (f=forward, b=backward)") +@pass_api +def media_ls( + api: SynapseApiClient, + limit: int, + offset: int, + search: Optional[str], + order_by: str, + direction: str +): + users_api = UserAPI(api) + user_service = UserService(users_api) + + while True: + users = user_service.get_users_list_by_media(limit, offset, order_by, direction, search) + if users: + for u in users.users: + click.echo(f"Display name: {u.display_name}") + click.echo(f"Media count: {u.media_count}") + click.echo(f"Media length: {u.media_length_mb()}MB") + click.echo(f"User ID: {u.user_id}") + click.echo("=" * 40) + else: + click.echo("No users found.") + + offset += limit + if not click.confirm("Show more users?", default=True): + break \ No newline at end of file diff --git a/src/synclean/cli/user_commands.py b/src/synclean/cli/user_commands.py index 781ef7f..9c698ab 100644 --- a/src/synclean/cli/user_commands.py +++ b/src/synclean/cli/user_commands.py @@ -2,22 +2,20 @@ from typing import Optional import click from synclean.api.synapse import SynapseApiClient from synclean.api.users import UserAPI -from synclean.models.enums import UserOrderBy, Direction -from synclean.models.pagination import UserPaginationParams +from synclean.service.user_service import UserService pass_api = click.make_pass_decorator(SynapseApiClient) - user = click.Group(name="user", help="User commands.") @user.command("ls") -@click.option("--limit", "-l", default=10, help="Number of users to list.") -@click.option("--offset", "-o", default=0, help="Number of the room to start from.") -@click.option("--search", "-s", help="Search term to filter by.") +@click.option("--limit", "-l", default=10, help="Number of users to display per page.") +@click.option("--offset", "-o", default=0, help="Number of the users to start from.") +@click.option("--search", "-s", help="Search term to filter users by.") @click.option("--order-by", "-O", - type=click.Choice(["user_id", "display_name", "media_length", "media_count"]), - default="media_length", help="Field to order result by.") + type=click.Choice(["name", "display_name", "media_length", "media_count"]), + default="name", help="Field to order result by.") @click.option("--direction", "-d", type=click.Choice(["f", "b"]), default="b", help="Direction to order result by. (f=forward, b=backward)") @@ -30,26 +28,14 @@ def user_ls( order_by: str, direction: str ): - - order_by_enum = UserOrderBy(order_by) - direction_enum = Direction(direction) - - users_api = UserAPI(api) + user_api = UserAPI(api) + user_service = UserService(user_api) while True: - pagination_params = UserPaginationParams(limit, offset, order_by_enum, direction_enum, search) - - users = users_api.get_users_list_by_media(pagination_params) - + users = user_service.get_users_list(limit, offset, order_by, direction, search) if users: for u in users.users: - click.echo(f"Display name: {u.display_name}") - click.echo(f"Media count: {u.media_count}") - click.echo(f"Media length: {u.media_length_mb()}MB") - click.echo(f"User ID: {u.user_id}") - click.echo("=" * 40) - else: - click.echo("No users found.") + click.echo(u) offset += limit if not click.confirm("Show more users?", default=True):