use xvfb-run to create headless anki if no running instance is available
This commit is contained in:
@@ -20,7 +20,7 @@
|
|||||||
toolchain = fenix.packages.x86_64-linux.minimal.toolchain;
|
toolchain = fenix.packages.x86_64-linux.minimal.toolchain;
|
||||||
in {
|
in {
|
||||||
devShells.x86_64-linux.default = pkgs.mkShell {
|
devShells.x86_64-linux.default = pkgs.mkShell {
|
||||||
buildInputs = [toolchain];
|
buildInputs = [toolchain pkgs.xvfb-run];
|
||||||
shellHook = ''
|
shellHook = ''
|
||||||
export RUSTUP_TOOLCHAIN=${toolchain}
|
export RUSTUP_TOOLCHAIN=${toolchain}
|
||||||
'';
|
'';
|
||||||
@@ -30,7 +30,12 @@
|
|||||||
cargo = toolchain;
|
cargo = toolchain;
|
||||||
rustc = toolchain;
|
rustc = toolchain;
|
||||||
}).buildPackage {
|
}).buildPackage {
|
||||||
|
nativeBuildInputs = [pkgs.makeWrapper];
|
||||||
src = ./.;
|
src = ./.;
|
||||||
|
postInstall = ''
|
||||||
|
wrapProgram $out/bin/anki-cli \
|
||||||
|
--prefix PATH : ${pkgs.xvfb-run}/bin
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
31
src/main.rs
31
src/main.rs
@@ -7,7 +7,12 @@ use crossterm::{
|
|||||||
terminal::*,
|
terminal::*,
|
||||||
};
|
};
|
||||||
use nanohtml2text::html2text;
|
use nanohtml2text::html2text;
|
||||||
use std::io::stdout;
|
use std::{
|
||||||
|
io::stdout,
|
||||||
|
process::{Command, Stdio},
|
||||||
|
thread,
|
||||||
|
time::Duration,
|
||||||
|
};
|
||||||
|
|
||||||
const GOOD: char = '3';
|
const GOOD: char = '3';
|
||||||
const AGAIN: char = '1';
|
const AGAIN: char = '1';
|
||||||
@@ -22,7 +27,29 @@ fn main() {
|
|||||||
|
|
||||||
fn init(anki: &AnkiClient) {
|
fn init(anki: &AnkiClient) {
|
||||||
clear_screen();
|
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() {
|
for (index, title) in decks.clone().into_iter().enumerate() {
|
||||||
// 0th index is Default, which is not predictable
|
// 0th index is Default, which is not predictable
|
||||||
if index > 0 {
|
if index > 0 {
|
||||||
|
|||||||
Reference in New Issue
Block a user