Compress included files to conserve disk space

This commit is contained in:
Ethan O'Brien 2024-05-09 19:07:26 -05:00
parent 98aed96701
commit c2db9c6407
7 changed files with 62 additions and 34 deletions

View file

@ -22,3 +22,5 @@ uuid = { version = "1.8.0", features = ["v7"] }
rsa = "0.9.6" rsa = "0.9.6"
mime = "0.3.17" mime = "0.3.17"
sha2 = "0.10.8" sha2 = "0.10.8"
include-flate-codegen = "0.3.0"
libflate = "2.1.0"

View file

@ -140,13 +140,13 @@ async fn request(req: HttpRequest, body: String) -> HttpResponse {
async fn css(_req: HttpRequest) -> HttpResponse { async fn css(_req: HttpRequest) -> HttpResponse {
HttpResponse::Ok() HttpResponse::Ok()
.insert_header(ContentType(mime::TEXT_CSS)) .insert_header(ContentType(mime::TEXT_CSS))
.body(include_str!("../webui/dist/index.css")) .body(include_file!("webui/dist/index.css"))
} }
#[get("/index.js")] #[get("/index.js")]
async fn js(_req: HttpRequest) -> HttpResponse { async fn js(_req: HttpRequest) -> HttpResponse {
HttpResponse::Ok() HttpResponse::Ok()
.insert_header(ContentType(mime::APPLICATION_JAVASCRIPT_UTF_8)) .insert_header(ContentType(mime::APPLICATION_JAVASCRIPT_UTF_8))
.body(include_str!("../webui/dist/index.js")) .body(include_file!("webui/dist/index.js"))
} }
#[actix_web::main] #[actix_web::main]
@ -164,3 +164,24 @@ async fn main() -> std::io::Result<()> {
println!("Server started: http://127.0.0.1:{}", 8080); println!("Server started: http://127.0.0.1:{}", 8080);
rv.await rv.await
} }
#[macro_export]
macro_rules! include_file {
( $s:expr ) => {
{
let file = include_flate_codegen::deflate_file!($s);
let ret = crate::decode(file);
std::string::String::from_utf8(ret).unwrap()
}
};
}
pub fn decode(bytes: &[u8]) -> Vec<u8> {
use std::io::{Cursor, Read};
let mut dec = libflate::deflate::Decoder::new(Cursor::new(bytes));
let mut ret = Vec::new();
dec.read_to_end(&mut ret).unwrap();
ret
}

View file

@ -1,10 +1,12 @@
use json::{array, object, JsonValue}; use json::{array, object, JsonValue};
use lazy_static::lazy_static; use lazy_static::lazy_static;
use crate::include_file;
lazy_static! { lazy_static! {
pub static ref LOGIN_REWARDS: JsonValue = { pub static ref LOGIN_REWARDS: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/login_bonus_reward.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/login_bonus_reward.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
@ -12,7 +14,7 @@ lazy_static! {
}; };
pub static ref SHOP_INFO: JsonValue = { pub static ref SHOP_INFO: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/shop_item.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/shop_item.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
@ -20,7 +22,7 @@ lazy_static! {
}; };
pub static ref CHATS: JsonValue = { pub static ref CHATS: JsonValue = {
let mut chats = object!{}; let mut chats = object!{};
let items = json::parse(include_str!("json/chat_room.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/chat_room.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
if chats[data["masterChatId"].to_string()].is_null() { if chats[data["masterChatId"].to_string()].is_null() {
chats[data["masterChatId"].to_string()] = object!{}; chats[data["masterChatId"].to_string()] = object!{};
@ -31,7 +33,7 @@ lazy_static! {
}; };
pub static ref CHAPTERS: JsonValue = { pub static ref CHAPTERS: JsonValue = {
let mut chats = object!{}; let mut chats = object!{};
let items = json::parse(include_str!("json/chat_chapter.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/chat_chapter.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
if chats[data["masterChatId"].to_string()].is_null() { if chats[data["masterChatId"].to_string()].is_null() {
chats[data["masterChatId"].to_string()] = object!{}; chats[data["masterChatId"].to_string()] = object!{};
@ -42,7 +44,7 @@ lazy_static! {
}; };
pub static ref EXCHANGE_LIST: JsonValue = { pub static ref EXCHANGE_LIST: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/exchange_item.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/exchange_item.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
@ -50,7 +52,7 @@ lazy_static! {
}; };
pub static ref EXCHANGE_REWARD: JsonValue = { pub static ref EXCHANGE_REWARD: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/exchange_item_reward.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/exchange_item_reward.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
@ -58,18 +60,18 @@ lazy_static! {
}; };
pub static ref LIVE_LIST: JsonValue = { pub static ref LIVE_LIST: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/live.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/live.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
info info
}; };
pub static ref MISSION_DATA: JsonValue = { pub static ref MISSION_DATA: JsonValue = {
json::parse(include_str!("json/live_mission.json")).unwrap() json::parse(&include_file!("src/router/databases/json/live_mission.json")).unwrap()
}; };
pub static ref MISSION_COMBO_DATA: JsonValue = { pub static ref MISSION_COMBO_DATA: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/live_mission_combo.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/live_mission_combo.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["masterMusicId"].to_string()] = data.clone(); info[data["masterMusicId"].to_string()] = data.clone();
} }
@ -77,7 +79,7 @@ lazy_static! {
}; };
pub static ref MISSION_REWARD_DATA: JsonValue = { pub static ref MISSION_REWARD_DATA: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/live_mission_reward.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/live_mission_reward.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
@ -85,7 +87,7 @@ lazy_static! {
}; };
pub static ref CARD_LIST: JsonValue = { pub static ref CARD_LIST: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/card.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/card.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
@ -93,7 +95,7 @@ lazy_static! {
}; };
pub static ref LOTTERY_INFO: JsonValue = { pub static ref LOTTERY_INFO: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/login_bonus.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/login_bonus.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
if info[data["id"].to_string()].is_null() { if info[data["id"].to_string()].is_null() {
info[data["id"].to_string()] = object!{ info[data["id"].to_string()] = object!{
@ -102,7 +104,7 @@ lazy_static! {
}; };
} }
} }
let days = json::parse(include_str!("json/login_bonus_reward_setting.json")).unwrap(); let days = json::parse(&include_file!("src/router/databases/json/login_bonus_reward_setting.json")).unwrap();
for (_i, data) in days.members().enumerate() { for (_i, data) in days.members().enumerate() {
if info[data["masterLoginBonusId"].to_string()].is_null() { if info[data["masterLoginBonusId"].to_string()].is_null() {
continue; continue;
@ -117,7 +119,7 @@ lazy_static! {
}; };
pub static ref CARDS: JsonValue = { pub static ref CARDS: JsonValue = {
let mut cardz = object!{}; let mut cardz = object!{};
let items = json::parse(include_str!("json/lottery_item.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/lottery_item.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
if cardz[data["id"].to_string()].is_null() { if cardz[data["id"].to_string()].is_null() {
cardz[data["id"].to_string()] = object!{}; cardz[data["id"].to_string()] = object!{};
@ -128,7 +130,7 @@ lazy_static! {
}; };
pub static ref POOL: JsonValue = { pub static ref POOL: JsonValue = {
let mut cardz = object!{}; let mut cardz = object!{};
let items = json::parse(include_str!("json/lottery_item.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/lottery_item.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
if cardz[data["id"].to_string()].is_null() { if cardz[data["id"].to_string()].is_null() {
cardz[data["id"].to_string()] = array![]; cardz[data["id"].to_string()] = array![];
@ -139,7 +141,7 @@ lazy_static! {
}; };
pub static ref RARITY: JsonValue = { pub static ref RARITY: JsonValue = {
let mut cardz = object!{}; let mut cardz = object!{};
let items = json::parse(include_str!("json/lottery_rarity.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/lottery_rarity.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
if cardz[data["id"].to_string()].is_null() { if cardz[data["id"].to_string()].is_null() {
cardz[data["id"].to_string()] = array![]; cardz[data["id"].to_string()] = array![];
@ -150,7 +152,7 @@ lazy_static! {
}; };
pub static ref LOTTERY: JsonValue = { pub static ref LOTTERY: JsonValue = {
let mut cardz = object!{}; let mut cardz = object!{};
let items = json::parse(include_str!("json/lottery.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/lottery.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
cardz[data["id"].to_string()] = data.clone(); cardz[data["id"].to_string()] = data.clone();
} }
@ -158,7 +160,7 @@ lazy_static! {
}; };
pub static ref PRICE: JsonValue = { pub static ref PRICE: JsonValue = {
let mut cardz = object!{}; let mut cardz = object!{};
let items = json::parse(include_str!("json/lottery_price.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/lottery_price.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
if cardz[data["id"].to_string()].is_null() { if cardz[data["id"].to_string()].is_null() {
cardz[data["id"].to_string()] = object!{}; cardz[data["id"].to_string()] = object!{};
@ -169,7 +171,7 @@ lazy_static! {
}; };
pub static ref MISSION_LIST: JsonValue = { pub static ref MISSION_LIST: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/mission.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/mission.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
@ -177,7 +179,7 @@ lazy_static! {
}; };
pub static ref MISSION_REWARD: JsonValue = { pub static ref MISSION_REWARD: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/mission_reward.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/mission_reward.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
@ -185,10 +187,13 @@ lazy_static! {
}; };
pub static ref ITEM_INFO: JsonValue = { pub static ref ITEM_INFO: JsonValue = {
let mut info = object!{}; let mut info = object!{};
let items = json::parse(include_str!("json/item.json")).unwrap(); let items = json::parse(&include_file!("src/router/databases/json/item.json")).unwrap();
for (_i, data) in items.members().enumerate() { for (_i, data) in items.members().enumerate() {
info[data["id"].to_string()] = data.clone(); info[data["id"].to_string()] = data.clone();
} }
info info
}; };
pub static ref RANKS: JsonValue = {
json::parse(&include_file!("src/router/databases/json/user_rank.json")).unwrap()
};
} }

View file

@ -259,14 +259,12 @@ pub fn give_character(id: String, user: &mut JsonValue, missions: &mut JsonValue
} }
pub fn get_user_rank_data(exp: i64) -> JsonValue { pub fn get_user_rank_data(exp: i64) -> JsonValue {
let ranks = json::parse(include_str!("userdata/user_rank.json")).unwrap(); for (i, rank) in databases::RANKS.members().enumerate() {
for (i, rank) in ranks.members().enumerate() {
if exp < rank["exp"].as_i64().unwrap() { if exp < rank["exp"].as_i64().unwrap() {
return ranks[i - 1].clone(); return databases::RANKS[i - 1].clone();
} }
} }
return ranks[ranks.len() - 1].clone(); return databases::RANKS[databases::RANKS.len() - 1].clone();
} }
pub fn give_exp(amount: i32, user: &mut JsonValue, mission: &mut JsonValue, rv: &mut JsonValue) { pub fn give_exp(amount: i32, user: &mut JsonValue, mission: &mut JsonValue, rv: &mut JsonValue) {

View file

@ -8,11 +8,12 @@ use base64::{Engine as _, engine::general_purpose};
use crate::router::global; use crate::router::global;
use crate::router::items; use crate::router::items;
use crate::sql::SQLite; use crate::sql::SQLite;
use crate::include_file;
lazy_static! { lazy_static! {
static ref DATABASE: SQLite = SQLite::new("userdata.db", setup_tables); static ref DATABASE: SQLite = SQLite::new("userdata.db", setup_tables);
static ref NEW_USER: JsonValue = { static ref NEW_USER: JsonValue = {
json::parse(include_str!("new_user.json")).unwrap() json::parse(&include_file!("src/router/userdata/new_user.json")).unwrap()
}; };
} }
@ -110,11 +111,11 @@ fn add_user_to_database(uid: i64, user: JsonValue, user_home: JsonValue, user_mi
)); ));
DATABASE.lock_and_exec("INSERT INTO userhome (user_id, userhome) VALUES (?1, ?2)", params!( DATABASE.lock_and_exec("INSERT INTO userhome (user_id, userhome) VALUES (?1, ?2)", params!(
uid, uid,
if user_home.is_empty() {include_str!("new_user_home.json")} else {&home} if user_home.is_empty() {include_file!("src/router/userdata/new_user_home.json")} else {home}
)); ));
DATABASE.lock_and_exec("INSERT INTO missions (user_id, missions) VALUES (?1, ?2)", params!( DATABASE.lock_and_exec("INSERT INTO missions (user_id, missions) VALUES (?1, ?2)", params!(
uid, uid,
if user_missions.is_empty() {include_str!("missions.json")} else {&missions} if user_missions.is_empty() {include_file!("src/router/userdata/missions.json")} else {missions}
)); ));
DATABASE.lock_and_exec("INSERT INTO loginbonus (user_id, loginbonus) VALUES (?1, ?2)", params!( DATABASE.lock_and_exec("INSERT INTO loginbonus (user_id, loginbonus) VALUES (?1, ?2)", params!(
uid, uid,
@ -130,7 +131,7 @@ fn add_user_to_database(uid: i64, user: JsonValue, user_home: JsonValue, user_mi
)); ));
DATABASE.lock_and_exec("INSERT INTO event (user_id, event) VALUES (?1, ?2)", params!( DATABASE.lock_and_exec("INSERT INTO event (user_id, event) VALUES (?1, ?2)", params!(
uid, uid,
include_str!("new_user_event.json") include_file!("src/router/userdata/new_user_event.json")
)); ));
DATABASE.lock_and_exec("INSERT INTO eventloginbonus (user_id, eventloginbonus) VALUES (?1, ?2)", params!( DATABASE.lock_and_exec("INSERT INTO eventloginbonus (user_id, eventloginbonus) VALUES (?1, ?2)", params!(
uid, uid,
@ -248,7 +249,7 @@ pub fn get_acc_chats(auth_key: &str) -> JsonValue {
pub fn get_acc_event(auth_key: &str) -> JsonValue { pub fn get_acc_event(auth_key: &str) -> JsonValue {
let event = get_data(auth_key, "event"); let event = get_data(auth_key, "event");
if event.is_empty() { if event.is_empty() {
return json::parse(include_str!("new_user_event.json")).unwrap(); return json::parse(&include_file!("src/router/userdata/new_user_event.json")).unwrap();
} }
event event
} }

View file

@ -6,6 +6,7 @@ use actix_web::{
}; };
use json::object; use json::object;
use crate::include_file;
use crate::router::{userdata, items}; use crate::router::{userdata, items};
fn get_login_token(req: &HttpRequest) -> Option<String> { fn get_login_token(req: &HttpRequest) -> Option<String> {
@ -148,5 +149,5 @@ pub fn main(req: HttpRequest) -> HttpResponse {
} }
HttpResponse::Ok() HttpResponse::Ok()
.insert_header(ContentType::html()) .insert_header(ContentType::html())
.body(include_str!("../../webui/dist/index.html")) .body(include_file!("webui/dist/index.html"))
} }