This commit is contained in:
Lucy 2025-09-30 22:06:44 +02:00
parent 0bff250ecf
commit 941f75470b
5 changed files with 1180 additions and 92 deletions

2
.gitignore vendored
View file

@ -9,6 +9,8 @@ target
# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb
logs/
# Generated by cargo mutants
# Contains mutation testing data
**/mutants.out*/

157
Cargo.lock generated
View file

@ -311,6 +311,21 @@ dependencies = [
"libc",
]
[[package]]
name = "crossbeam-channel"
version = "0.5.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crossterm"
version = "0.25.0"
@ -438,6 +453,15 @@ dependencies = [
"syn 2.0.106",
]
[[package]]
name = "deranged"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071"
dependencies = [
"powerfmt",
]
[[package]]
name = "derive_more"
version = "0.99.20"
@ -1261,6 +1285,15 @@ dependencies = [
"tendril",
]
[[package]]
name = "matchers"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d1525a2a28c7f4fa0fc98bb91ae755d1e2d1505079e05539e35bc876b5d65ae9"
dependencies = [
"regex-automata",
]
[[package]]
name = "md5"
version = "0.8.0"
@ -1335,6 +1368,21 @@ version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086"
[[package]]
name = "nu-ansi-term"
version = "0.50.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399"
dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "num-conv"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
[[package]]
name = "num_cpus"
version = "1.17.0"
@ -1432,6 +1480,9 @@ dependencies = [
"serde",
"serde_json",
"spinners",
"tracing",
"tracing-appender",
"tracing-subscriber",
"tui",
]
@ -1637,6 +1688,12 @@ dependencies = [
"zerovec",
]
[[package]]
name = "powerfmt"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
[[package]]
name = "ppv-lite86"
version = "0.2.21"
@ -2081,6 +2138,15 @@ dependencies = [
"digest",
]
[[package]]
name = "sharded-slab"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6"
dependencies = [
"lazy_static",
]
[[package]]
name = "shlex"
version = "1.3.0"
@ -2392,6 +2458,37 @@ dependencies = [
"cfg-if",
]
[[package]]
name = "time"
version = "0.3.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
dependencies = [
"deranged",
"itoa",
"num-conv",
"powerfmt",
"serde",
"time-core",
"time-macros",
]
[[package]]
name = "time-core"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
[[package]]
name = "time-macros"
version = "0.2.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
dependencies = [
"num-conv",
"time-core",
]
[[package]]
name = "tinystr"
version = "0.8.1"
@ -2504,9 +2601,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0"
dependencies = [
"pin-project-lite",
"tracing-attributes",
"tracing-core",
]
[[package]]
name = "tracing-appender"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf"
dependencies = [
"crossbeam-channel",
"thiserror 1.0.69",
"time",
"tracing-subscriber",
]
[[package]]
name = "tracing-attributes"
version = "0.1.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.106",
]
[[package]]
name = "tracing-core"
version = "0.1.34"
@ -2514,6 +2635,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9d12581f227e93f094d3af2ae690a574abb8a2b9b7a96e7cfe9647b2b617678"
dependencies = [
"once_cell",
"valuable",
]
[[package]]
name = "tracing-log"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3"
dependencies = [
"log",
"once_cell",
"tracing-core",
]
[[package]]
name = "tracing-subscriber"
version = "0.3.20"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5"
dependencies = [
"matchers",
"nu-ansi-term",
"once_cell",
"regex-automata",
"sharded-slab",
"smallvec",
"thread_local",
"tracing",
"tracing-core",
"tracing-log",
]
[[package]]
@ -2624,6 +2775,12 @@ version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
[[package]]
name = "valuable"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65"
[[package]]
name = "vcpkg"
version = "0.2.15"

View file

@ -35,6 +35,9 @@ reqwest = { version = "0.12.23", features = ["blocking", "json"] }
semver = "1.0.27"
inquire = "0.9.1"
tui = "0.19.0"
tracing = "0.1.41"
tracing-appender = "0.2.3"
tracing-subscriber = { version = "0.3.20", features = ["env-filter", "fmt"] }
[features]
# TUI feature flag
@ -42,6 +45,7 @@ tui = ["ratatui", "crossterm"]
# Optional default features
default = []
crossterm = ["dep:crossterm"]
# -----------------------
# Cargo-make tasks

View file

@ -1,23 +1,59 @@
// src/main.rs - Initialize logging
use tracing::{error, info};
use tracing_appender::rolling::{RollingFileAppender, Rotation};
use tracing_subscriber::{EnvFilter, fmt, prelude::*};
mod downloader;
mod html;
mod md5_utils;
mod mirrors;
mod version_check;
mod tui;
mod wget_list;
#[cfg(feature = "tui")]
mod tui;
fn main() -> Result<(), Box<dyn std::error::Error>> {
#[cfg(feature = "tui")]
{
tui::tui_menu()?;
return Ok(());
// Initialize logging
init_logging()?;
info!("Starting lpkg package manager");
info!("Version: 0.1.0");
// Run the TUI
if let Err(e) = tui::tui_menu() {
error!("TUI error: {}", e);
eprintln!("Error: {}", e);
return Err(e);
}
#[cfg(not(feature = "tui"))]
{
println!("TUI feature not enabled. Compile with `--features tui` to run TUI.");
info!("lpkg exiting normally");
Ok(())
}
fn init_logging() -> Result<(), Box<dyn std::error::Error>> {
// Create log directory if it doesn't exist
std::fs::create_dir_all("logs")?;
// File appender - rotates daily
let file_appender = RollingFileAppender::new(Rotation::DAILY, "logs", "lpkg.log");
// Console layer - only shows info and above
let console_layer = fmt::layer()
.with_target(true)
.with_thread_ids(false)
.with_file(true)
.with_line_number(true)
.with_filter(EnvFilter::new("info"));
// File layer - shows debug and above
let file_layer = fmt::layer()
.with_writer(file_appender)
.with_ansi(false)
.with_target(true)
.with_file(true)
.with_line_number(true)
.with_filter(EnvFilter::new("debug"));
// Build the subscriber
tracing_subscriber::registry()
.with(console_layer)
.with(file_layer)
.init();
Ok(())
}
}

1019
src/tui.rs

File diff suppressed because it is too large Load diff