diff options
Diffstat (limited to 'command.c')
-rw-r--r-- | command.c | 32 |
1 files changed, 31 insertions, 1 deletions
@@ -153,6 +153,35 @@ static bool cmd_list_rooms(struct conn_data *data,const char *tag,const char **a return closed; } +static bool cmd_list_members(struct conn_data *data,const char *tag,const char **args){ + if(data->userid==-1){ + send_error(data->fd,tag,"Not logged in"); + return false; + } + i64 roomid=db_find_room(args[0]); + if(roomid==-1){ + send_error(data->fd,tag,"Room not found"); + return false; + } + if(!db_is_member(roomid,data->userid)){ + send_error(data->fd,tag,"Not in that room"); + return false; + } + + struct db_user_list ul=db_list_members(roomid); + if(ul.count<=0){ + db_nullify_user_list(ul); + return send_list(data->fd,tag,0,NULL); + } + const char *names[ul.count]; + for(i64 i=0;i<ul.count;i++){ + names[i]=ul.list[i].name; + } + bool closed=send_list(data->fd,tag,ul.count,names); + db_nullify_user_list(ul); + return closed; +} + static bool cmd_create_room(struct conn_data *data,const char *tag,const char **args){ (void)args; if(data->userid==-1){ @@ -210,7 +239,7 @@ static bool cmd_send(struct conn_data *data,const char *tag,const char **args){ db_create_message(roomid,data->userid,make_timestamp(),args[1]); bool closed=send_ok(data->fd,tag); - struct db_user_list members=db_get_members(roomid); + struct db_user_list members=db_list_members(roomid); for(i64 i=0;i<members.count;i++){ i64 nfds; const int *fds=userdata_online(members.list[i].id,&nfds); @@ -237,6 +266,7 @@ static const struct cmd_info commands[]={ {"register",2,true,cmd_register}, {"login",2,true,cmd_login}, {"list_rooms",0,false,cmd_list_rooms}, + {"list_members",1,false,cmd_list_members}, {"create_room",0,false,cmd_create_room}, {"invite",2,false,cmd_invite}, {"send",2,true,cmd_send}, |