shared address book (#7229)

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages
2024-03-20 15:05:54 +08:00
committed by GitHub
parent ecb70b43df
commit 41da6d552f
73 changed files with 4714 additions and 866 deletions

View File

@@ -1678,13 +1678,19 @@ pub struct AbPeer {
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct Ab {
pub struct AbEntry {
#[serde(
default,
deserialize_with = "deserialize_string",
skip_serializing_if = "String::is_empty"
)]
pub access_token: String,
pub guid: String,
#[serde(
default,
deserialize_with = "deserialize_string",
skip_serializing_if = "String::is_empty"
)]
pub name: String,
#[serde(default, deserialize_with = "deserialize_vec_abpeer")]
pub peers: Vec<AbPeer>,
#[serde(default, deserialize_with = "deserialize_vec_string")]
@@ -1697,6 +1703,24 @@ pub struct Ab {
pub tag_colors: String,
}
impl AbEntry {
pub fn personal(&self) -> bool {
self.name == "My address book" || self.name == "Legacy address book"
}
}
#[derive(Debug, Default, Serialize, Deserialize, Clone)]
pub struct Ab {
#[serde(
default,
deserialize_with = "deserialize_string",
skip_serializing_if = "String::is_empty"
)]
pub access_token: String,
#[serde(default, deserialize_with = "deserialize_vec_abentry")]
pub ab_entries: Vec<AbEntry>,
}
impl Ab {
fn path() -> PathBuf {
let filename = format!("{}_ab", APP_NAME.read().unwrap().clone());
@@ -1709,6 +1733,7 @@ impl Ab {
let max_len = 64 * 1024 * 1024;
if data.len() > max_len {
// maxlen of function decompress
log::error!("ab data too large, {} > {}", data.len(), max_len);
return;
}
if let Ok(data) = symmetric_crypt(&data, true) {
@@ -1858,6 +1883,7 @@ deserialize_default!(deserialize_vec_string, Vec<String>);
deserialize_default!(deserialize_vec_i32_string_i32, Vec<(i32, String, i32)>);
deserialize_default!(deserialize_vec_discoverypeer, Vec<DiscoveryPeer>);
deserialize_default!(deserialize_vec_abpeer, Vec<AbPeer>);
deserialize_default!(deserialize_vec_abentry, Vec<AbEntry>);
deserialize_default!(deserialize_vec_groupuser, Vec<GroupUser>);
deserialize_default!(deserialize_vec_grouppeer, Vec<GroupPeer>);
deserialize_default!(deserialize_keypair, KeyPair);