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"
mime = "0.3.17"
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 {
HttpResponse::Ok()
.insert_header(ContentType(mime::TEXT_CSS))
.body(include_str!("../webui/dist/index.css"))
.body(include_file!("webui/dist/index.css"))
}
#[get("/index.js")]
async fn js(_req: HttpRequest) -> HttpResponse {
HttpResponse::Ok()
.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]
@ -164,3 +164,24 @@ async fn main() -> std::io::Result<()> {
println!("Server started: http://127.0.0.1:{}", 8080);
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 lazy_static::lazy_static;
use crate::include_file;
lazy_static! {
pub static ref LOGIN_REWARDS: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
@ -12,7 +14,7 @@ lazy_static! {
};
pub static ref SHOP_INFO: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
@ -20,7 +22,7 @@ lazy_static! {
};
pub static ref CHATS: JsonValue = {
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() {
if chats[data["masterChatId"].to_string()].is_null() {
chats[data["masterChatId"].to_string()] = object!{};
@ -31,7 +33,7 @@ lazy_static! {
};
pub static ref CHAPTERS: JsonValue = {
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() {
if chats[data["masterChatId"].to_string()].is_null() {
chats[data["masterChatId"].to_string()] = object!{};
@ -42,7 +44,7 @@ lazy_static! {
};
pub static ref EXCHANGE_LIST: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
@ -50,7 +52,7 @@ lazy_static! {
};
pub static ref EXCHANGE_REWARD: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
@ -58,18 +60,18 @@ lazy_static! {
};
pub static ref LIVE_LIST: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
info
};
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 = {
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() {
info[data["masterMusicId"].to_string()] = data.clone();
}
@ -77,7 +79,7 @@ lazy_static! {
};
pub static ref MISSION_REWARD_DATA: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
@ -85,7 +87,7 @@ lazy_static! {
};
pub static ref CARD_LIST: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
@ -93,7 +95,7 @@ lazy_static! {
};
pub static ref LOTTERY_INFO: JsonValue = {
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() {
if info[data["id"].to_string()].is_null() {
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() {
if info[data["masterLoginBonusId"].to_string()].is_null() {
continue;
@ -117,7 +119,7 @@ lazy_static! {
};
pub static ref CARDS: JsonValue = {
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() {
if cardz[data["id"].to_string()].is_null() {
cardz[data["id"].to_string()] = object!{};
@ -128,7 +130,7 @@ lazy_static! {
};
pub static ref POOL: JsonValue = {
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() {
if cardz[data["id"].to_string()].is_null() {
cardz[data["id"].to_string()] = array![];
@ -139,7 +141,7 @@ lazy_static! {
};
pub static ref RARITY: JsonValue = {
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() {
if cardz[data["id"].to_string()].is_null() {
cardz[data["id"].to_string()] = array![];
@ -150,7 +152,7 @@ lazy_static! {
};
pub static ref LOTTERY: JsonValue = {
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() {
cardz[data["id"].to_string()] = data.clone();
}
@ -158,7 +160,7 @@ lazy_static! {
};
pub static ref PRICE: JsonValue = {
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() {
if cardz[data["id"].to_string()].is_null() {
cardz[data["id"].to_string()] = object!{};
@ -169,7 +171,7 @@ lazy_static! {
};
pub static ref MISSION_LIST: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
@ -177,7 +179,7 @@ lazy_static! {
};
pub static ref MISSION_REWARD: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
@ -185,10 +187,13 @@ lazy_static! {
};
pub static ref ITEM_INFO: JsonValue = {
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() {
info[data["id"].to_string()] = data.clone();
}
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 {
let ranks = json::parse(include_str!("userdata/user_rank.json")).unwrap();
for (i, rank) in ranks.members().enumerate() {
for (i, rank) in databases::RANKS.members().enumerate() {
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) {

View file

@ -8,11 +8,12 @@ use base64::{Engine as _, engine::general_purpose};
use crate::router::global;
use crate::router::items;
use crate::sql::SQLite;
use crate::include_file;
lazy_static! {
static ref DATABASE: SQLite = SQLite::new("userdata.db", setup_tables);
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!(
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!(
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!(
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!(
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!(
uid,
@ -248,7 +249,7 @@ pub fn get_acc_chats(auth_key: &str) -> JsonValue {
pub fn get_acc_event(auth_key: &str) -> JsonValue {
let event = get_data(auth_key, "event");
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
}

View file

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