Refactor naming
This commit is contained in:
parent
a9fd240bd3
commit
ad58ab9bdd
10 changed files with 66 additions and 62 deletions
14
src/cli.rs
14
src/cli.rs
|
@ -2,8 +2,8 @@ use clap::{Args, Parser, Subcommand};
|
|||
use telnet::Telnet;
|
||||
|
||||
use crate::parameter::{Parameter, ParameterList};
|
||||
use crate::response::channel::ResponseChannel;
|
||||
use crate::response::client::ResponseClient;
|
||||
use crate::models::Channel;
|
||||
use crate::models::Client;
|
||||
use crate::utils::SendTextMessageTarget;
|
||||
use crate::wrappers;
|
||||
|
||||
|
@ -87,14 +87,14 @@ impl FetchArgs {
|
|||
self.client.is_some()
|
||||
}
|
||||
|
||||
pub fn channel(&self, connection: &mut Telnet) -> Result<Option<ResponseChannel>, String> {
|
||||
pub fn channel(&self, connection: &mut Telnet) -> Result<Option<Channel>, String> {
|
||||
if let Some(channel) = &self.channel {
|
||||
wrappers::find_channel(connection, channel, self.strict_channel)
|
||||
} else {
|
||||
Err("No channel specified.".to_string())
|
||||
}
|
||||
}
|
||||
pub fn client(&self, connection: &mut Telnet) -> Result<Option<ResponseClient>, String> {
|
||||
pub fn client(&self, connection: &mut Telnet) -> Result<Option<Client>, String> {
|
||||
if let Some(client) = &self.client {
|
||||
wrappers::find_client(connection, client, self.strict_client)
|
||||
} else {
|
||||
|
@ -109,7 +109,7 @@ impl MessageArgs {
|
|||
Ok(SendTextMessageTarget::Server)
|
||||
} else if let Some(client) = &self.client {
|
||||
if let Some(client) = wrappers::find_client(connection, client, self.strict_client)? {
|
||||
return Ok(SendTextMessageTarget::Client(client.clid));
|
||||
return Ok(SendTextMessageTarget::Client(client));
|
||||
}
|
||||
return Err("Could not find client.".to_string());
|
||||
} else {
|
||||
|
@ -119,10 +119,10 @@ impl MessageArgs {
|
|||
}
|
||||
|
||||
impl MoveArgs {
|
||||
pub fn channel(&self, connection: &mut Telnet) -> Result<Option<ResponseChannel>, String> {
|
||||
pub fn channel(&self, connection: &mut Telnet) -> Result<Option<Channel>, String> {
|
||||
wrappers::find_channel(connection, &self.channel, self.strict_channel)
|
||||
}
|
||||
pub fn client(&self, connection: &mut Telnet) -> Result<Option<ResponseClient>, String> {
|
||||
pub fn client(&self, connection: &mut Telnet) -> Result<Option<Client>, String> {
|
||||
match &self.client {
|
||||
Some(client) => {
|
||||
wrappers::find_client(connection, client, self.strict_client)
|
||||
|
|
|
@ -17,7 +17,7 @@ fn read_part(connection: &mut Telnet) -> Result<String, String> {
|
|||
Ok(event) => {
|
||||
match event {
|
||||
Data(bytes) => Ok(String::from_utf8(bytes.to_vec())
|
||||
.map_err(|_| "Teamspeak returned a badly formatted response.")?),
|
||||
.map_err(|_| "Teamspeak returned a badly formatted models.")?),
|
||||
_ => {
|
||||
Err(String::from("Received unknown event from Teamspeak."))
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ fn read_response(connection: &mut Telnet, skip_ok: bool, mut buffer: String) ->
|
|||
Ok(Response::Ok)
|
||||
}
|
||||
} else {
|
||||
Err(format!("Received error response from Teamspeak: {} ({})", err.msg, err.id))
|
||||
Err(format!("Received error models from Teamspeak: {} ({})", err.msg, err.id))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
11
src/main.rs
11
src/main.rs
|
@ -3,17 +3,18 @@ use std::process::exit;
|
|||
use telnet::Telnet;
|
||||
|
||||
use crate::cli::Commands;
|
||||
use crate::response::channel::ResponseChannel;
|
||||
use crate::response::client::ResponseClient;
|
||||
use crate::models::Channel;
|
||||
use crate::models::Client;
|
||||
|
||||
mod response;
|
||||
mod wrappers;
|
||||
mod commands;
|
||||
mod parameter;
|
||||
mod cli;
|
||||
mod utils;
|
||||
mod models;
|
||||
mod response;
|
||||
|
||||
fn channel_or_exit(channel_res: Result<Option<ResponseChannel>, String>) -> ResponseChannel {
|
||||
fn channel_or_exit(channel_res: Result<Option<Channel>, String>) -> Channel {
|
||||
channel_res.unwrap_or_else(|err| {
|
||||
println!("Failed to find channel: {}", err);
|
||||
exit(1);
|
||||
|
@ -24,7 +25,7 @@ fn channel_or_exit(channel_res: Result<Option<ResponseChannel>, String>) -> Resp
|
|||
})
|
||||
}
|
||||
|
||||
fn client_or_exit(client_res: Result<Option<ResponseClient>, String>) -> ResponseClient {
|
||||
fn client_or_exit(client_res: Result<Option<Client>, String>) -> Client {
|
||||
client_res.unwrap_or_else(|err| {
|
||||
println!("Failed to find client: {}", err);
|
||||
exit(1);
|
||||
|
|
|
@ -3,7 +3,7 @@ use std::fmt::{Display, Formatter};
|
|||
use crate::parameter::{parameter_find, ParameterList};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct ResponseChannel {
|
||||
pub struct Channel {
|
||||
pub cid: i32,
|
||||
pub pid: i32,
|
||||
pub channel_order: i32,
|
||||
|
@ -12,15 +12,15 @@ pub struct ResponseChannel {
|
|||
pub channel_flag_are_subscribed: bool,
|
||||
}
|
||||
|
||||
impl Display for ResponseChannel {
|
||||
impl Display for Channel {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{} ({})", self.channel_name, self.cid)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ParameterList> for ResponseChannel {
|
||||
impl From<ParameterList> for Channel {
|
||||
fn from(value: ParameterList) -> Self {
|
||||
ResponseChannel {
|
||||
Channel {
|
||||
cid: parameter_find(&value, "cid")
|
||||
.unwrap_or_default()
|
||||
.to_i32(-1),
|
||||
|
@ -43,7 +43,7 @@ impl From<ParameterList> for ResponseChannel {
|
|||
}
|
||||
}
|
||||
|
||||
impl ResponseChannel {
|
||||
impl Channel {
|
||||
pub fn is_spacer(&self) -> bool {
|
||||
self.channel_name.starts_with("[spacer")
|
||||
|| self.channel_name.starts_with("[*spacer")
|
||||
|
@ -52,19 +52,19 @@ impl ResponseChannel {
|
|||
|| self.channel_name.starts_with("[rspacer")
|
||||
}
|
||||
|
||||
fn list_find_next(list: &mut Vec<ResponseChannel>, order: i32, pid: i32) -> Option<ResponseChannel> {
|
||||
fn list_find_next(list: &mut Vec<Channel>, order: i32, pid: i32) -> Option<Channel> {
|
||||
let index = list.iter().position(|a| a.channel_order == order && a.pid == pid)?;
|
||||
Some(list.swap_remove(index))
|
||||
}
|
||||
|
||||
pub fn sort_list(mut list: Vec<ResponseChannel>) -> Vec<ResponseChannel> {
|
||||
let mut list_sorted: Vec<ResponseChannel> = Vec::new();
|
||||
pub fn sort_list(mut list: Vec<Channel>) -> Vec<Channel> {
|
||||
let mut list_sorted: Vec<Channel> = Vec::new();
|
||||
let mut pids: Vec<i32> = Vec::new();
|
||||
let mut pid = 0;
|
||||
let mut order = 0;
|
||||
|
||||
while !list.is_empty() {
|
||||
match ResponseChannel::list_find_next(&mut list, order, pid) {
|
||||
match Channel::list_find_next(&mut list, order, pid) {
|
||||
None => {
|
||||
order = pid;
|
||||
pid = pids.pop().unwrap_or(0);
|
|
@ -3,7 +3,7 @@ use std::fmt::{Display, Formatter};
|
|||
use crate::parameter::{parameter_find, ParameterList};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct ResponseClient {
|
||||
pub struct Client {
|
||||
pub cid: i32,
|
||||
pub clid: i32,
|
||||
pub client_database_id: i32,
|
||||
|
@ -11,15 +11,15 @@ pub struct ResponseClient {
|
|||
pub client_type: i32,
|
||||
}
|
||||
|
||||
impl Display for ResponseClient {
|
||||
impl Display for Client {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{} ({})", self.client_nickname, self.clid)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ParameterList> for ResponseClient {
|
||||
impl From<ParameterList> for Client {
|
||||
fn from(value: ParameterList) -> Self {
|
||||
ResponseClient {
|
||||
Client {
|
||||
cid: parameter_find(&value, "cid")
|
||||
.unwrap_or_default()
|
||||
.to_i32(-1),
|
5
src/models/mod.rs
Normal file
5
src/models/mod.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
mod channel;
|
||||
mod client;
|
||||
|
||||
pub use channel::Channel;
|
||||
pub use client::Client;
|
|
@ -2,9 +2,6 @@ use std::fmt::{Debug, Display, Formatter};
|
|||
|
||||
use crate::parameter::*;
|
||||
|
||||
pub mod channel;
|
||||
pub mod client;
|
||||
|
||||
pub enum Response {
|
||||
Ok,
|
||||
Data(ParameterList),
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
use crate::models::Client;
|
||||
use crate::parameter::Parameter;
|
||||
|
||||
pub fn decode_value(value: &str) -> String {
|
||||
|
@ -13,7 +14,7 @@ pub fn encode_value(value: &str) -> String {
|
|||
}
|
||||
|
||||
pub enum SendTextMessageTarget {
|
||||
Client(i32),
|
||||
Client(Client),
|
||||
Channel,
|
||||
Server,
|
||||
}
|
||||
|
@ -27,7 +28,7 @@ impl From<SendTextMessageTarget> for String {
|
|||
};
|
||||
|
||||
let target = match value {
|
||||
SendTextMessageTarget::Client(id) => id.to_string(),
|
||||
SendTextMessageTarget::Client(client) => client.clid.to_string(),
|
||||
_ => String::from("0"),
|
||||
};
|
||||
|
||||
|
|
|
@ -6,8 +6,8 @@ use telnet::Telnet;
|
|||
|
||||
use crate::{commands, parameter};
|
||||
use crate::parameter::{parameter_list_find_all, ParameterList};
|
||||
use crate::response::channel::ResponseChannel;
|
||||
use crate::response::client::ResponseClient;
|
||||
use crate::models::Channel;
|
||||
use crate::models::Client;
|
||||
use crate::response::Response;
|
||||
use crate::utils::SendTextMessageTarget;
|
||||
|
||||
|
@ -41,101 +41,101 @@ pub fn login(connection: &mut Telnet) {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn get_channels(connection: &mut Telnet, spacers: bool) -> Result<Vec<ResponseChannel>, String> {
|
||||
pub fn get_channels(connection: &mut Telnet, spacers: bool) -> Result<Vec<Channel>, String> {
|
||||
match commands::channellist(connection) {
|
||||
Ok(response) => {
|
||||
match response {
|
||||
Response::DataList(parameter_lists) => {
|
||||
let channels: Vec<ResponseChannel> = parameter_lists.iter()
|
||||
.map(|params| ResponseChannel::from(params.clone()))
|
||||
let channels: Vec<Channel> = parameter_lists.iter()
|
||||
.map(|params| Channel::from(params.clone()))
|
||||
.collect();
|
||||
let mut channels = ResponseChannel::sort_list(channels);
|
||||
let mut channels = Channel::sort_list(channels);
|
||||
if !spacers {
|
||||
channels.retain(|c| !c.is_spacer());
|
||||
}
|
||||
Ok(channels)
|
||||
}
|
||||
_ => Err(String::from("Received unexpected response from Teamspeak."))
|
||||
_ => Err(String::from("Received unexpected models from Teamspeak."))
|
||||
}
|
||||
}
|
||||
Err(msg) => Err(msg)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn find_channel(connection: &mut Telnet, name: &str, strict: bool) -> Result<Option<ResponseChannel>, String> {
|
||||
pub fn find_channel(connection: &mut Telnet, name: &str, strict: bool) -> Result<Option<Channel>, String> {
|
||||
match commands::channellist(connection) {
|
||||
Ok(response) => {
|
||||
match response {
|
||||
Response::DataList(parameter_lists) => {
|
||||
match parameter::parameter_list_find(¶meter_lists, "channel_name", name, strict) {
|
||||
Some(params) => {
|
||||
Ok(Some(ResponseChannel::from(params)))
|
||||
Ok(Some(Channel::from(params)))
|
||||
}
|
||||
None => {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => Err(String::from("Received unexpected response from Teamspeak."))
|
||||
_ => Err(String::from("Received unexpected models from Teamspeak."))
|
||||
}
|
||||
}
|
||||
Err(msg) => Err(msg)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_clients(connection: &mut Telnet) -> Result<Vec<ResponseClient>, String> {
|
||||
pub fn get_clients(connection: &mut Telnet) -> Result<Vec<Client>, String> {
|
||||
match commands::clientlist(connection) {
|
||||
Ok(response) => {
|
||||
match response {
|
||||
Response::DataList(parameter_lists) => {
|
||||
let mut clients: Vec<ResponseClient> = parameter_lists.iter()
|
||||
.map(|params| ResponseClient::from(params.clone()))
|
||||
let mut clients: Vec<Client> = parameter_lists.iter()
|
||||
.map(|params| Client::from(params.clone()))
|
||||
.collect();
|
||||
|
||||
clients.sort_by(|a, b| a.client_nickname.cmp(&b.client_nickname));
|
||||
|
||||
Ok(clients)
|
||||
}
|
||||
_ => Err(String::from("Received unexpected response from Teamspeak."))
|
||||
_ => Err(String::from("Received unexpected models from Teamspeak."))
|
||||
}
|
||||
}
|
||||
Err(msg) => Err(msg)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn find_client(connection: &mut Telnet, name: &str, strict: bool) -> Result<Option<ResponseClient>, String> {
|
||||
pub fn find_client(connection: &mut Telnet, name: &str, strict: bool) -> Result<Option<Client>, String> {
|
||||
match commands::clientlist(connection) {
|
||||
Ok(response) => {
|
||||
match response {
|
||||
Response::DataList(parameter_lists) => {
|
||||
match parameter::parameter_list_find(¶meter_lists, "client_nickname", name, strict) {
|
||||
Some(params) => {
|
||||
Ok(Some(ResponseClient::from(params)))
|
||||
Ok(Some(Client::from(params)))
|
||||
}
|
||||
None => {
|
||||
Ok(None)
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => Err(String::from("Received unexpected response from Teamspeak."))
|
||||
_ => Err(String::from("Received unexpected models from Teamspeak."))
|
||||
}
|
||||
}
|
||||
Err(msg) => Err(msg)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_channel_clients(connection: &mut Telnet, channel: &ResponseChannel) -> Result<Vec<ResponseClient>, String> {
|
||||
pub fn get_channel_clients(connection: &mut Telnet, channel: &Channel) -> Result<Vec<Client>, String> {
|
||||
match commands::clientlist(connection) {
|
||||
Ok(response) => {
|
||||
match response {
|
||||
Response::DataList(parameter_lists) => {
|
||||
let mut clients: Vec<ResponseClient> = Vec::new();
|
||||
let mut clients: Vec<Client> = Vec::new();
|
||||
for client_params in parameter_list_find_all(¶meter_lists, "cid", &channel.cid.to_string(), true) {
|
||||
clients.push(ResponseClient::from(client_params));
|
||||
clients.push(Client::from(client_params));
|
||||
}
|
||||
Ok(clients)
|
||||
}
|
||||
_ => Err(String::from("Received unexpected response from Teamspeak."))
|
||||
_ => Err(String::from("Received unexpected models from Teamspeak."))
|
||||
}
|
||||
}
|
||||
Err(msg) => Err(msg)
|
||||
|
@ -148,18 +148,18 @@ fn get_self_clid(connection: &mut Telnet) -> Result<String, String> {
|
|||
match response {
|
||||
Response::Data(params) => {
|
||||
match parameter::parameter_find(¶ms, "clid") {
|
||||
None => Err(String::from("Could not find clid in response from Teamspeak.")),
|
||||
None => Err(String::from("Could not find clid in models from Teamspeak.")),
|
||||
Some(param) => Ok(param.value)
|
||||
}
|
||||
}
|
||||
_ => Err(String::from("Received unexpected response from Teamspeak for whoami."))
|
||||
_ => Err(String::from("Received unexpected models from Teamspeak for whoami."))
|
||||
}
|
||||
}
|
||||
Err(msg) => Err(msg)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn find_self(connection: &mut Telnet) -> Result<ResponseClient, String> {
|
||||
pub fn find_self(connection: &mut Telnet) -> Result<Client, String> {
|
||||
let clid = get_self_clid(connection)?;
|
||||
|
||||
match commands::clientlist(connection) {
|
||||
|
@ -168,28 +168,28 @@ pub fn find_self(connection: &mut Telnet) -> Result<ResponseClient, String> {
|
|||
Response::DataList(parameter_lists) => {
|
||||
match parameter::parameter_list_find(¶meter_lists, "clid", &clid, false) {
|
||||
Some(params) => {
|
||||
Ok(ResponseClient::from(params))
|
||||
Ok(Client::from(params))
|
||||
}
|
||||
None => {
|
||||
Err(String::from("Could not find self in response from Teamspeak."))
|
||||
Err(String::from("Could not find self in models from Teamspeak."))
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => Err(String::from("Received unexpected response from Teamspeak for clientlist."))
|
||||
_ => Err(String::from("Received unexpected models from Teamspeak for clientlist."))
|
||||
}
|
||||
}
|
||||
Err(msg) => Err(msg)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn fetch_client(connection: &mut Telnet, clients: &[ResponseClient]) -> Result<Response, String> {
|
||||
pub fn fetch_client(connection: &mut Telnet, clients: &[Client]) -> Result<Response, String> {
|
||||
let cid = find_self(connection)?.cid;
|
||||
let clid_list: Vec<&i32> = clients.iter().map(|c| &c.clid).collect();
|
||||
|
||||
commands::clientmove(connection, &cid, clid_list)
|
||||
}
|
||||
|
||||
pub fn fetch_channel(connection: &mut Telnet, channel: ResponseChannel) -> Result<Response, String> {
|
||||
pub fn fetch_channel(connection: &mut Telnet, channel: Channel) -> Result<Response, String> {
|
||||
let cid = find_self(connection)?.cid;
|
||||
|
||||
let clients = get_channel_clients(connection, &channel)?;
|
||||
|
@ -198,7 +198,7 @@ pub fn fetch_channel(connection: &mut Telnet, channel: ResponseChannel) -> Resul
|
|||
commands::clientmove(connection, &cid, clid_list)
|
||||
}
|
||||
|
||||
pub fn move_client(connection: &mut Telnet, channel: &ResponseChannel, clients: &[ResponseClient]) -> Result<Response, String> {
|
||||
pub fn move_client(connection: &mut Telnet, channel: &Channel, clients: &[Client]) -> Result<Response, String> {
|
||||
let clid_list: Vec<&i32> = clients.iter().map(|c| &c.clid).collect();
|
||||
|
||||
commands::clientmove(connection, &channel.cid, clid_list)
|
||||
|
|
Loading…
Reference in a new issue