localsnd 0.5.31

CLI implementation of localsend
Documentation
use std::{collections::HashMap, path::PathBuf};

use crate::localsend_proto::Device;
use thiserror::Error;
use tokio::sync::mpsc::Sender;

use crate::localsend_lib::send::UploadProgress;

use super::ReceivingFile;

#[derive(Error, Debug)]
pub enum ReceiveError {
	#[error("Request must contain at least one file")]
	EmptyFiles,
	#[error("Invalid IP address: {0}")]
	InvalidIp(String),
	#[error("Missing parameters")]
	InvalidParameters,
	#[error("Recipient is in wrong state")]
	InvalidRecipient,
	#[error("Invalid session id")]
	InvalidSessionId,
	#[error("Server is in invalid state")]
	InvalidServerState,
	#[error("Invalid token")]
	InvalidToken,
	#[error("Nothing selected")]
	NothingSelected,
	#[error("Could not save file")]
	SaveFileFailed,
	#[error("Blocked by another session")]
	SessionBlocked,
	#[error("File request declined by recipient")]
	SessionDeclined,
	#[error("No session")]
	SessionNotExists,
	#[error("Cancelled")]
	Cancelled,
}

#[derive(Debug)]
pub struct ReceiveSession {
	pub session_id: String,
	pub status: ReceiveSessionStatus,
	pub sender: Device,
	pub files: HashMap<String, ReceivingFile>,
	pub destination_directory: PathBuf,
	pub progress_tx: Option<Sender<UploadProgress>>,
}

#[derive(Debug, PartialEq)]
pub enum ReceiveSessionStatus {
	Waiting,
	Sending,
}