ffmpeg only accepts -version (single dash); it exits 8 on --version and writes to stderr, so the status panel reported it missing even when installed. Version flags are now per-tool and both streams are read. The player used max-h-full inside a grid, which a 1080x1920 Short overflowed. Switched to absolute fill with object-contain so portrait and landscape both letterbox correctly. Also sized the window to 1180x780 centered, which fits a laptop display.
57 lines
1.9 KiB
Rust
57 lines
1.9 KiB
Rust
//! Populates the installed app's database using the app's own code paths, so
|
|
//! the UI can be verified against real data without driving the file dialog.
|
|
//! Run with: cargo test --test seed_real_db -- --ignored --nocapture
|
|
|
|
use flighttube_lib::{db::Db, feed, models::FeedFilter, thumbs};
|
|
use std::path::PathBuf;
|
|
|
|
fn app_data() -> PathBuf {
|
|
PathBuf::from(std::env::var("HOME").unwrap())
|
|
.join("Library/Application Support/com.vincent.flighttube")
|
|
}
|
|
|
|
#[tokio::test]
|
|
#[ignore]
|
|
async fn seed() {
|
|
let dir = app_data();
|
|
let mut db = Db::open(&dir.join("flighttube.db")).expect("open real db");
|
|
|
|
let channels = db.channel_ids().unwrap();
|
|
println!("channels in db: {}", channels.len());
|
|
assert!(!channels.is_empty(), "seed channels first");
|
|
|
|
let http = reqwest::Client::builder()
|
|
.user_agent("FlightTube/0.1 (+desktop)")
|
|
.timeout(std::time::Duration::from_secs(20))
|
|
.build()
|
|
.unwrap();
|
|
|
|
let mut total = 0;
|
|
for cid in &channels {
|
|
if let Ok(v) = feed::fetch_channel(&http, cid).await {
|
|
total += v.len();
|
|
db.upsert_videos(&v).unwrap();
|
|
}
|
|
}
|
|
println!("videos upserted: {total}");
|
|
|
|
// Cache thumbnails so the feed renders with no network.
|
|
let pending = db.videos_missing_thumbs(400).unwrap();
|
|
println!("thumbnails to cache: {}", pending.len());
|
|
let tdir = thumbs::cache_dir(&dir);
|
|
let mut ok = 0;
|
|
for (id, url) in pending {
|
|
if let Ok(p) = thumbs::cache_one(&http, &id, &url, &tdir).await {
|
|
db.set_thumb_path(&id, &p.to_string_lossy()).unwrap();
|
|
ok += 1;
|
|
}
|
|
}
|
|
println!("thumbnails cached: {ok}");
|
|
|
|
let feed_rows = db.list_feed(&FeedFilter::default()).unwrap();
|
|
println!("feed rows now: {}", feed_rows.len());
|
|
for i in feed_rows.iter().take(3) {
|
|
println!(" [{}] {}", i.channel_title, i.title);
|
|
}
|
|
}
|