add: meta info

This commit is contained in:
Kingtous
2022-05-08 21:01:03 +08:00
parent 529e5104c7
commit 74a3799b78
5 changed files with 117 additions and 41 deletions

View File

@@ -304,6 +304,14 @@ message FileTransferSendConfirmRequest {
}
}
message FileTransferDirOffsetRequest {
int32 id = 1;
// start from file_num
sint32 file_num = 2;
// current file blk offset
uint32 offset_blk = 3;
}
message FileTransferDone {
int32 id = 1;
sint32 file_num = 2;

View File

@@ -1,8 +1,3 @@
use crate::log;
use directories_next::ProjectDirs;
use rand::Rng;
use serde_derive::{Deserialize, Serialize};
use sodiumoxide::crypto::sign;
use std::{
collections::HashMap,
fs,
@@ -145,6 +140,8 @@ pub struct PeerConfig {
pub options: HashMap<String, String>,
#[serde(default)]
pub info: PeerInfoSerde,
#[serde(default)]
pub transfer: TransferSerde,
}
#[derive(Debug, PartialEq, Default, Serialize, Deserialize, Clone)]
@@ -157,6 +154,16 @@ pub struct PeerInfoSerde {
pub platform: String,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct TransferSerde {
#[serde(default)]
pub write_jobs: Vec<TransferJobMeta>,
#[serde(default)]
pub read_jobs: Vec<TransferJobMeta>,
#[serde(default)]
pub remove_jobs: Vec<RemoveJobMeta>,
}
fn patch(path: PathBuf) -> PathBuf {
if let Some(_tmp) = path.to_str() {
#[cfg(windows)]
@@ -864,6 +871,7 @@ impl LanPeers {
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_serialize() {
let cfg: Config = Default::default();

View File

@@ -1,14 +1,17 @@
use crate::{bail, get_version_number, message_proto::*, ResultType, Stream};
#[cfg(windows)]
use std::os::windows::prelude::*;
use std::path::{Path, PathBuf};
use std::time::{Duration, SystemTime, UNIX_EPOCH};
use serde_derive::{Deserialize, Serialize};
use tokio::{fs::File, io::*};
use crate::{bail, get_version_number, message_proto::*, ResultType, Stream};
// https://doc.rust-lang.org/std/os/windows/fs/trait.MetadataExt.html
use crate::{
compress::{compress, decompress},
config::{Config, COMPRESS_LEVEL},
};
#[cfg(windows)]
use std::os::windows::prelude::*;
use std::time::{Duration, SystemTime, UNIX_EPOCH};
use tokio::{fs::File, io::*};
pub fn read_dir(path: &PathBuf, include_hidden: bool) -> ResultType<FileDirectory> {
let mut dir = FileDirectory {
@@ -211,6 +214,20 @@ pub struct TransferJob {
default_overwrite_strategy: Option<bool>,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct TransferJobMeta {
pub id: i32,
pub path: PathBuf,
pub file_num: i32,
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct RemoveJobMeta {
pub path: String,
pub is_remote: bool,
pub no_confirm: bool,
}
#[inline]
fn get_ext(name: &str) -> &str {
if let Some(i) = name.rfind(".") {
@@ -540,6 +557,14 @@ impl TransferJob {
}
true
}
pub fn gen_meta(&self) -> TransferJobMeta {
TransferJobMeta {
id: self.id,
path: self.path.clone(),
file_num: self.file_num,
}
}
}
#[inline]