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 nameday: String,
|
||||
pub guardian: String,
|
||||
pub currencies: Currencies,
|
||||
pub playtime: String,
|
||||
pub appearance: Appearance,
|
||||
pub is_battle_mentor: bool,
|
||||
pub is_trade_mentor: bool,
|
||||
pub is_novice: bool,
|
||||
pub is_returner: bool,
|
||||
pub player_commendations: i32,
|
||||
pub plate_title: String,
|
||||
pub plate_classjob: String,
|
||||
pub plate_classjob_level: i32,
|
||||
pub search_comment: String,
|
||||
pub race: String,
|
||||
pub gender: String,
|
||||
pub tribe: String,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub currencies: Option<Currencies>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub playtime: Option<String>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub appearance: Option<Appearance>,
|
||||
#[serde(skip_serializing_if = "Option::is_none")]
|
||||
pub is_battle_mentor: Option<bool>,
|
||||
#[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)]
|
||||
pub face_url: String,
|
||||
|
|
|
@ -16,9 +16,9 @@ pub fn create_character_html(char_data: &CharacterData) -> String {
|
|||
name => char_data.name,
|
||||
world => char_data.world,
|
||||
data_center => char_data.data_center,
|
||||
race => char_data.appearance.race,
|
||||
subrace => char_data.appearance.tribe,
|
||||
gender => char_data.appearance.gender,
|
||||
race => char_data.race,
|
||||
subrace => char_data.tribe,
|
||||
gender => char_data.gender,
|
||||
nameday => char_data.nameday,
|
||||
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::parser::parse_search;
|
||||
use base64::prelude::*;
|
||||
use data::{Appearance, Currencies};
|
||||
use package::Package;
|
||||
use physis::race::{Gender, Race, Tribe};
|
||||
use reqwest::Url;
|
||||
|
@ -166,41 +167,48 @@ pub async fn archive_character(
|
|||
let package: Package = serde_json::from_str(&package.trim_start()).unwrap();
|
||||
|
||||
// appearance data
|
||||
char_data.appearance.model_type = package.model_type;
|
||||
char_data.appearance.height = package.height;
|
||||
char_data.appearance.face_type = package.face_type;
|
||||
char_data.appearance.hair_style = package.hair_style;
|
||||
char_data.appearance.has_highlights = package.has_highlights;
|
||||
char_data.appearance.skin_color = package.skin_color;
|
||||
char_data.appearance.eye_color = package.eye_color;
|
||||
char_data.appearance.hair_color = package.hair_color;
|
||||
char_data.appearance.hair_color2 = package.hair_color2;
|
||||
char_data.appearance.face_features = package.face_features;
|
||||
char_data.appearance.face_features_color = package.face_features_color;
|
||||
char_data.appearance.eyebrows = package.eyebrows;
|
||||
char_data.appearance.eye_color2 = package.eye_color2;
|
||||
char_data.appearance.eye_shape = package.eye_color2;
|
||||
char_data.appearance.nose_shape = package.nose_shape;
|
||||
char_data.appearance.jaw_shape = package.jaw_shape;
|
||||
char_data.appearance.lip_style = package.lip_style;
|
||||
char_data.appearance.lip_color = package.lip_color;
|
||||
char_data.appearance.race_feature_size = package.race_feature_size;
|
||||
char_data.appearance.race_feature_type = package.race_feature_type;
|
||||
char_data.appearance.bust_size = package.bust_size;
|
||||
char_data.appearance.facepaint = package.facepaint;
|
||||
char_data.appearance.facepaint_color = package.facepaint_color;
|
||||
char_data.appearance = Some(Appearance {
|
||||
race: char_data.race.clone(),
|
||||
tribe: char_data.tribe.clone(),
|
||||
gender: char_data.gender.clone(),
|
||||
model_type: package.model_type,
|
||||
height: package.height,
|
||||
face_type: package.face_type,
|
||||
hair_style: package.hair_style,
|
||||
has_highlights: package.has_highlights,
|
||||
skin_color: package.skin_color,
|
||||
eye_color: package.eye_color,
|
||||
hair_color: package.hair_color,
|
||||
hair_color2: package.hair_color2,
|
||||
face_features: package.face_features,
|
||||
face_features_color: package.face_features_color,
|
||||
eyebrows: package.eyebrows,
|
||||
eye_color2: package.eye_color2,
|
||||
eye_shape: package.eye_color2,
|
||||
nose_shape: package.nose_shape,
|
||||
jaw_shape: package.jaw_shape,
|
||||
lip_style: package.lip_style,
|
||||
lip_color: package.lip_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.currencies.gil = package.gil; // TODO: also fetch from the lodestone
|
||||
char_data.is_battle_mentor = package.is_battle_mentor;
|
||||
char_data.is_trade_mentor = package.is_trade_mentor;
|
||||
char_data.is_novice = package.is_novice;
|
||||
char_data.is_returner = package.is_returner;
|
||||
char_data.player_commendations = package.player_commendations; // TODO: fetch from the lodestone?
|
||||
char_data.plate_title = package.plate_title;
|
||||
char_data.plate_classjob = package.plate_class_job;
|
||||
char_data.plate_classjob_level = package.plate_class_job_level;
|
||||
char_data.search_comment = package.search_comment;
|
||||
char_data.playtime = Some(package.playtime.parse().unwrap());
|
||||
char_data.currencies = Some(Currencies {
|
||||
gil: package.gil, // TODO: also fetch from the lodestone
|
||||
});
|
||||
char_data.is_battle_mentor = Some(package.is_battle_mentor);
|
||||
char_data.is_trade_mentor = Some(package.is_trade_mentor);
|
||||
char_data.is_novice = Some(package.is_novice);
|
||||
char_data.is_returner = Some(package.is_returner);
|
||||
char_data.player_commendations = Some(package.player_commendations); // TODO: fetch from the lodestone?
|
||||
char_data.plate_title = Some(package.plate_title);
|
||||
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.write_all(
|
||||
|
|
|
@ -69,12 +69,12 @@ pub fn parse_lodestone(data: &str) -> CharacterData {
|
|||
let inner_html = block_name.inner_html();
|
||||
let captures = re.captures(&inner_html).unwrap();
|
||||
|
||||
char_data.appearance.race = captures.get(1).unwrap().as_str().to_owned();
|
||||
char_data.appearance.tribe = captures.get(2).unwrap().as_str().to_owned();
|
||||
char_data.race = captures.get(1).unwrap().as_str().to_owned();
|
||||
char_data.tribe = captures.get(2).unwrap().as_str().to_owned();
|
||||
if captures.get(3).unwrap().as_str() == "♀" {
|
||||
char_data.appearance.gender = "Female".parse().unwrap();
|
||||
char_data.gender = "Female".parse().unwrap();
|
||||
} else {
|
||||
char_data.appearance.gender = "Male".parse().unwrap();
|
||||
char_data.gender = "Male".parse().unwrap();
|
||||
}
|
||||
}
|
||||
} else if name == "City-state" {
|
||||
|
|
Loading…
Add table
Reference in a new issue