mirror of
https://github.com/redstrate/Auracite.git
synced 2025-04-21 20:27:46 +00:00
Skip writing unavailable data
If you aren't using the Dalamud plugin, some data is unavailable. Instead of writing empty values to the JSON, don't include it at all.
This commit is contained in:
parent
fbb6cd26d0
commit
236731374a
4 changed files with 76 additions and 53 deletions
39
src/data.rs
39
src/data.rs
|
@ -43,18 +43,33 @@ pub struct CharacterData {
|
||||||
pub city_state: String,
|
pub city_state: String,
|
||||||
pub nameday: String,
|
pub nameday: String,
|
||||||
pub guardian: String,
|
pub guardian: String,
|
||||||
pub currencies: Currencies,
|
pub race: String,
|
||||||
pub playtime: String,
|
pub gender: String,
|
||||||
pub appearance: Appearance,
|
pub tribe: String,
|
||||||
pub is_battle_mentor: bool,
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub is_trade_mentor: bool,
|
pub currencies: Option<Currencies>,
|
||||||
pub is_novice: bool,
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub is_returner: bool,
|
pub playtime: Option<String>,
|
||||||
pub player_commendations: i32,
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub plate_title: String,
|
pub appearance: Option<Appearance>,
|
||||||
pub plate_classjob: String,
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
pub plate_classjob_level: i32,
|
pub is_battle_mentor: Option<bool>,
|
||||||
pub search_comment: String,
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub is_trade_mentor: Option<bool>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub is_novice: Option<bool>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub is_returner: Option<bool>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub player_commendations: Option<i32>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub plate_title: Option<String>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub plate_classjob: Option<String>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub plate_classjob_level: Option<i32>,
|
||||||
|
#[serde(skip_serializing_if = "Option::is_none")]
|
||||||
|
pub search_comment: Option<String>,
|
||||||
|
|
||||||
#[serde(skip)]
|
#[serde(skip)]
|
||||||
pub face_url: String,
|
pub face_url: String,
|
||||||
|
|
|
@ -16,9 +16,9 @@ pub fn create_character_html(char_data: &CharacterData) -> String {
|
||||||
name => char_data.name,
|
name => char_data.name,
|
||||||
world => char_data.world,
|
world => char_data.world,
|
||||||
data_center => char_data.data_center,
|
data_center => char_data.data_center,
|
||||||
race => char_data.appearance.race,
|
race => char_data.race,
|
||||||
subrace => char_data.appearance.tribe,
|
subrace => char_data.tribe,
|
||||||
gender => char_data.appearance.gender,
|
gender => char_data.gender,
|
||||||
nameday => char_data.nameday,
|
nameday => char_data.nameday,
|
||||||
city_state => char_data.city_state
|
city_state => char_data.city_state
|
||||||
})
|
})
|
||||||
|
|
76
src/lib.rs
76
src/lib.rs
|
@ -9,6 +9,7 @@ use crate::downloader::download;
|
||||||
use crate::html::{create_character_html, create_plate_html};
|
use crate::html::{create_character_html, create_plate_html};
|
||||||
use crate::parser::parse_search;
|
use crate::parser::parse_search;
|
||||||
use base64::prelude::*;
|
use base64::prelude::*;
|
||||||
|
use data::{Appearance, Currencies};
|
||||||
use package::Package;
|
use package::Package;
|
||||||
use physis::race::{Gender, Race, Tribe};
|
use physis::race::{Gender, Race, Tribe};
|
||||||
use reqwest::Url;
|
use reqwest::Url;
|
||||||
|
@ -166,41 +167,48 @@ pub async fn archive_character(
|
||||||
let package: Package = serde_json::from_str(&package.trim_start()).unwrap();
|
let package: Package = serde_json::from_str(&package.trim_start()).unwrap();
|
||||||
|
|
||||||
// appearance data
|
// appearance data
|
||||||
char_data.appearance.model_type = package.model_type;
|
char_data.appearance = Some(Appearance {
|
||||||
char_data.appearance.height = package.height;
|
race: char_data.race.clone(),
|
||||||
char_data.appearance.face_type = package.face_type;
|
tribe: char_data.tribe.clone(),
|
||||||
char_data.appearance.hair_style = package.hair_style;
|
gender: char_data.gender.clone(),
|
||||||
char_data.appearance.has_highlights = package.has_highlights;
|
model_type: package.model_type,
|
||||||
char_data.appearance.skin_color = package.skin_color;
|
height: package.height,
|
||||||
char_data.appearance.eye_color = package.eye_color;
|
face_type: package.face_type,
|
||||||
char_data.appearance.hair_color = package.hair_color;
|
hair_style: package.hair_style,
|
||||||
char_data.appearance.hair_color2 = package.hair_color2;
|
has_highlights: package.has_highlights,
|
||||||
char_data.appearance.face_features = package.face_features;
|
skin_color: package.skin_color,
|
||||||
char_data.appearance.face_features_color = package.face_features_color;
|
eye_color: package.eye_color,
|
||||||
char_data.appearance.eyebrows = package.eyebrows;
|
hair_color: package.hair_color,
|
||||||
char_data.appearance.eye_color2 = package.eye_color2;
|
hair_color2: package.hair_color2,
|
||||||
char_data.appearance.eye_shape = package.eye_color2;
|
face_features: package.face_features,
|
||||||
char_data.appearance.nose_shape = package.nose_shape;
|
face_features_color: package.face_features_color,
|
||||||
char_data.appearance.jaw_shape = package.jaw_shape;
|
eyebrows: package.eyebrows,
|
||||||
char_data.appearance.lip_style = package.lip_style;
|
eye_color2: package.eye_color2,
|
||||||
char_data.appearance.lip_color = package.lip_color;
|
eye_shape: package.eye_color2,
|
||||||
char_data.appearance.race_feature_size = package.race_feature_size;
|
nose_shape: package.nose_shape,
|
||||||
char_data.appearance.race_feature_type = package.race_feature_type;
|
jaw_shape: package.jaw_shape,
|
||||||
char_data.appearance.bust_size = package.bust_size;
|
lip_style: package.lip_style,
|
||||||
char_data.appearance.facepaint = package.facepaint;
|
lip_color: package.lip_color,
|
||||||
char_data.appearance.facepaint_color = package.facepaint_color;
|
race_feature_size: package.race_feature_size,
|
||||||
|
race_feature_type: package.race_feature_type,
|
||||||
|
bust_size: package.bust_size,
|
||||||
|
facepaint: package.facepaint,
|
||||||
|
facepaint_color: package.facepaint_color,
|
||||||
|
});
|
||||||
|
|
||||||
char_data.playtime = package.playtime.parse().unwrap();
|
char_data.playtime = Some(package.playtime.parse().unwrap());
|
||||||
char_data.currencies.gil = package.gil; // TODO: also fetch from the lodestone
|
char_data.currencies = Some(Currencies {
|
||||||
char_data.is_battle_mentor = package.is_battle_mentor;
|
gil: package.gil, // TODO: also fetch from the lodestone
|
||||||
char_data.is_trade_mentor = package.is_trade_mentor;
|
});
|
||||||
char_data.is_novice = package.is_novice;
|
char_data.is_battle_mentor = Some(package.is_battle_mentor);
|
||||||
char_data.is_returner = package.is_returner;
|
char_data.is_trade_mentor = Some(package.is_trade_mentor);
|
||||||
char_data.player_commendations = package.player_commendations; // TODO: fetch from the lodestone?
|
char_data.is_novice = Some(package.is_novice);
|
||||||
char_data.plate_title = package.plate_title;
|
char_data.is_returner = Some(package.is_returner);
|
||||||
char_data.plate_classjob = package.plate_class_job;
|
char_data.player_commendations = Some(package.player_commendations); // TODO: fetch from the lodestone?
|
||||||
char_data.plate_classjob_level = package.plate_class_job_level;
|
char_data.plate_title = Some(package.plate_title);
|
||||||
char_data.search_comment = package.search_comment;
|
char_data.plate_classjob = Some(package.plate_class_job);
|
||||||
|
char_data.plate_classjob_level = Some(package.plate_class_job_level);
|
||||||
|
char_data.search_comment = Some(package.search_comment);
|
||||||
|
|
||||||
zip.start_file("plate-portrait.png", options)?;
|
zip.start_file("plate-portrait.png", options)?;
|
||||||
zip.write_all(
|
zip.write_all(
|
||||||
|
|
|
@ -69,12 +69,12 @@ pub fn parse_lodestone(data: &str) -> CharacterData {
|
||||||
let inner_html = block_name.inner_html();
|
let inner_html = block_name.inner_html();
|
||||||
let captures = re.captures(&inner_html).unwrap();
|
let captures = re.captures(&inner_html).unwrap();
|
||||||
|
|
||||||
char_data.appearance.race = captures.get(1).unwrap().as_str().to_owned();
|
char_data.race = captures.get(1).unwrap().as_str().to_owned();
|
||||||
char_data.appearance.tribe = captures.get(2).unwrap().as_str().to_owned();
|
char_data.tribe = captures.get(2).unwrap().as_str().to_owned();
|
||||||
if captures.get(3).unwrap().as_str() == "♀" {
|
if captures.get(3).unwrap().as_str() == "♀" {
|
||||||
char_data.appearance.gender = "Female".parse().unwrap();
|
char_data.gender = "Female".parse().unwrap();
|
||||||
} else {
|
} else {
|
||||||
char_data.appearance.gender = "Male".parse().unwrap();
|
char_data.gender = "Male".parse().unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if name == "City-state" {
|
} else if name == "City-state" {
|
||||||
|
|
Loading…
Add table
Reference in a new issue