[backup] games from server with images

This commit is contained in:
2024-11-13 23:51:28 +01:00
parent 5d45c4ce4b
commit a6ed6e04fe
13 changed files with 214 additions and 113 deletions

View 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
}
}

View File

@ -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(