[backup] games from server with images
This commit is contained in:
24
crates/lanspread-server/src/assets.rs
Normal file
24
crates/lanspread-server/src/assets.rs
Normal file
@ -0,0 +1,24 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use bytes::Bytes;
|
||||
|
||||
pub(crate) struct Thumbnails {
|
||||
folder: PathBuf,
|
||||
}
|
||||
|
||||
impl Thumbnails {
|
||||
pub(crate) fn new(folder: PathBuf) -> Thumbnails {
|
||||
Thumbnails { folder }
|
||||
}
|
||||
|
||||
pub(crate) fn get(&self, path: &str) -> Option<Bytes> {
|
||||
let asset = self.folder.join(format!("{path}.jpg"));
|
||||
|
||||
if let Ok(data) = std::fs::read(asset) {
|
||||
return Some(Bytes::from(data));
|
||||
}
|
||||
|
||||
tracing::warn!("Thumbnail not found: {path}");
|
||||
None
|
||||
}
|
||||
}
|
@ -6,6 +6,7 @@ use std::{
|
||||
sync::Arc,
|
||||
};
|
||||
|
||||
use assets::Thumbnails;
|
||||
use clap::Parser;
|
||||
use lanspread_compat::eti::{self, EtiGame};
|
||||
use lanspread_db::db::{Game, GameDB};
|
||||
@ -21,10 +22,12 @@ use s2n_quic::Server as QuicServer;
|
||||
use tokio::{io::AsyncWriteExt, sync::Mutex};
|
||||
use tracing_subscriber::EnvFilter;
|
||||
|
||||
mod assets;
|
||||
|
||||
static KEY_PEM: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/../../key.pem"));
|
||||
static CERT_PEM: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/../../cert.pem"));
|
||||
|
||||
pub(crate) struct Server;
|
||||
struct Server;
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
struct ServerCtx {
|
||||
@ -73,7 +76,7 @@ impl Server {
|
||||
String::from_utf8_lossy(&data)
|
||||
);
|
||||
|
||||
let request = Request::decode(&data);
|
||||
let request = Request::decode(data);
|
||||
tracing::debug!(
|
||||
"{} client request (decoded): {:?}",
|
||||
conn_ctx.remote_addr,
|
||||
@ -160,6 +163,12 @@ struct Cli {
|
||||
/// Game database path (SQLite).
|
||||
#[clap(long)]
|
||||
db: PathBuf,
|
||||
/// Games folder.
|
||||
#[clap(long)]
|
||||
folder: PathBuf,
|
||||
/// Thumbnails folder.
|
||||
#[clap(long)]
|
||||
thumbnails: PathBuf,
|
||||
}
|
||||
|
||||
fn eti_game_to_game(eti_game: EtiGame) -> Game {
|
||||
@ -175,6 +184,7 @@ fn eti_game_to_game(eti_game: EtiGame) -> Game {
|
||||
version: eti_game.game_version,
|
||||
genre: eti_game.genre_de,
|
||||
size: (eti_game.game_size * 1024.0 * 1024.0 * 1024.0) as u64,
|
||||
thumbnail: None,
|
||||
}
|
||||
}
|
||||
|
||||
@ -187,7 +197,18 @@ async fn main() -> eyre::Result<()> {
|
||||
let cli = Cli::parse();
|
||||
|
||||
let eti_games = eti::get_games(&cli.db).await?;
|
||||
let games: Vec<Game> = eti_games.into_iter().map(eti_game_to_game).collect();
|
||||
let mut games: Vec<Game> = eti_games.into_iter().map(eti_game_to_game).collect();
|
||||
let thumbnails = Thumbnails::new(cli.thumbnails);
|
||||
|
||||
// add thumbnails to games
|
||||
for game in &mut games {
|
||||
if let Some(thumbnail) = thumbnails.get(&game.id) {
|
||||
game.thumbnail = Some(thumbnail);
|
||||
} else {
|
||||
tracing::warn!("No thumbnail found: {}", game.id);
|
||||
}
|
||||
}
|
||||
|
||||
let game_db = GameDB::from(games);
|
||||
|
||||
let mdns = MdnsAdvertiser::new(
|
||||
|
Reference in New Issue
Block a user