diff options
| author | andromeda <andromeda@lenovo> | 2026-04-18 10:08:48 +0200 |
|---|---|---|
| committer | andromeda <andromeda@lenovo> | 2026-04-18 10:08:48 +0200 |
| commit | 219930f3c649a3712864c2e00ebf630279beda72 (patch) | |
| tree | f5ac37478b8b7c19f012db45745e30b8c5521675 /src | |
| parent | da9318338933e903fdf1b417768287df909e62a3 (diff) | |
use xvfb-run to create headless anki if no running instance is available
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 31 |
1 files changed, 29 insertions, 2 deletions
diff --git a/src/main.rs b/src/main.rs index 5eb84b4..15e12dc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,12 @@ use crossterm::{ terminal::*, }; use nanohtml2text::html2text; -use std::io::stdout; +use std::{ + io::stdout, + process::{Command, Stdio}, + thread, + time::Duration, +}; const GOOD: char = '3'; const AGAIN: char = '1'; @@ -22,7 +27,29 @@ fn main() { fn init(anki: &AnkiClient) { clear_screen(); - let decks = anki.request(DeckNamesRequest {}).unwrap(); + let mut decks = anki.request(DeckNamesRequest {}); + if let Err(_) = decks { + clear_screen(); + display_text("initializing headless anki..."); + Command::new("bash") + .arg("-c") + .arg("QT_QPA_PLATFORM=xcb xvfb-run -a anki") + .stdin(Stdio::null()) + .stdout(Stdio::null()) + .stderr(Stdio::null()) + .spawn() + .unwrap(); + loop { + thread::sleep(Duration::from_secs(1)); + display_text("."); + decks = anki.request(DeckNamesRequest {}); + if let Ok(_) = decks { + clear_screen(); + break; + } + } + } + let decks = decks.unwrap(); for (index, title) in decks.clone().into_iter().enumerate() { // 0th index is Default, which is not predictable if index > 0 { |
