summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorandromeda <andromeda@lenovo>2026-04-18 10:08:48 +0200
committerandromeda <andromeda@lenovo>2026-04-18 10:08:48 +0200
commit219930f3c649a3712864c2e00ebf630279beda72 (patch)
treef5ac37478b8b7c19f012db45745e30b8c5521675 /src/main.rs
parentda9318338933e903fdf1b417768287df909e62a3 (diff)
use xvfb-run to create headless anki if no running instance is available
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs31
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 {