diff --git a/Cargo.lock b/Cargo.lock index 9c51580..1bf8f73 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -623,6 +623,16 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b365fabc795046672053e29c954733ec3b05e4be654ab130fe8f1f94d7051f35" +[[package]] +name = "debugid" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef552e6f588e446098f6ba40d89ac146c8c7b64aade83c051ee00bb5d2bc18d" +dependencies = [ + "serde", + "uuid 1.3.2", +] + [[package]] name = "digest" version = "0.10.5" @@ -721,6 +731,18 @@ dependencies = [ "instant", ] +[[package]] +name = "findshlibs" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40b9e59cd0f7e0806cca4be089683ecb6434e602038df21fe6bf6711b2f07f64" +dependencies = [ + "cc", + "lazy_static", + "libc", + "winapi 0.3.9", +] + [[package]] name = "flate2" version = "1.0.24" @@ -962,6 +984,12 @@ dependencies = [ "libc", ] +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + [[package]] name = "hmac" version = "0.12.1" @@ -980,6 +1008,17 @@ dependencies = [ "winapi 0.3.9", ] +[[package]] +name = "hostname" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c731c3e10504cc8ed35cfe2f1db4c9274c3d35fa486e3b31df46f068ef3e867" +dependencies = [ + "libc", + "match_cfg", + "winapi 0.3.9", +] + [[package]] name = "hound" version = "3.5.0" @@ -1060,7 +1099,7 @@ dependencies = [ "itoa 0.4.8", "log", "net2", - "rustc_version", + "rustc_version 0.2.3", "time 0.1.44", "tokio 0.1.22", "tokio-buf", @@ -1342,6 +1381,12 @@ dependencies = [ "libc", ] +[[package]] +name = "match_cfg" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ffbee8634e0d45d258acb448e7eaab3fce7a0a467395d4d9f228e3c1f01fb2e4" + [[package]] name = "matches" version = "0.1.9" @@ -1783,6 +1828,17 @@ dependencies = [ "vcpkg", ] +[[package]] +name = "os_info" +version = "3.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "006e42d5b888366f1880eda20371fedde764ed2213dc8496f49622fa0c99cd5e" +dependencies = [ + "log", + "serde", + "winapi 0.3.9", +] + [[package]] name = "owo-colors" version = "3.5.0" @@ -1797,7 +1853,7 @@ checksum = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" dependencies = [ "lock_api 0.3.4", "parking_lot_core 0.6.2", - "rustc_version", + "rustc_version 0.2.3", ] [[package]] @@ -1831,7 +1887,7 @@ dependencies = [ "cloudabi", "libc", "redox_syscall 0.1.57", - "rustc_version", + "rustc_version 0.2.3", "smallvec 0.6.14", "winapi 0.3.9", ] @@ -2198,7 +2254,7 @@ dependencies = [ "tokio-threadpool", "tokio-timer", "url 1.7.2", - "uuid", + "uuid 0.7.4", "winreg 0.6.2", ] @@ -2287,7 +2343,16 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" dependencies = [ - "semver", + "semver 0.9.0", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver 1.0.17", ] [[package]] @@ -2382,12 +2447,113 @@ dependencies = [ "semver-parser", ] +[[package]] +name = "semver" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" + [[package]] name = "semver-parser" version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" +[[package]] +name = "sentry" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c3d7f8bf7373e75222452fcdd9347d857452a92d0eec738f941bc4656c5b5df" +dependencies = [ + "httpdate", + "native-tls", + "reqwest 0.11.12", + "sentry-backtrace", + "sentry-contexts", + "sentry-core", + "sentry-debug-images", + "sentry-panic", + "tokio 1.21.2", + "ureq", +] + +[[package]] +name = "sentry-backtrace" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b7cdefbdca51f1146f0f24a3cb4ecb6428951f030ff5c720cfb5c60bd174c0" +dependencies = [ + "backtrace", + "once_cell", + "regex", + "sentry-core", +] + +[[package]] +name = "sentry-contexts" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af4cb29066e0e8df0cc3111211eb93543ccb09e1ccbe71de6d88b4bb459a2b1" +dependencies = [ + "hostname", + "libc", + "os_info", + "rustc_version 0.4.0", + "sentry-core", + "uname", +] + +[[package]] +name = "sentry-core" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e781b55761e47a60d1ff326ae8059de22b0e6b0cee68eab1c5912e4fb199a76" +dependencies = [ + "once_cell", + "rand 0.8.5", + "sentry-types", + "serde", + "serde_json", +] + +[[package]] +name = "sentry-debug-images" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e758030b31ee2cd97424a980dfa34a12dcd8477424861cf81ae3aa1f9f616a8c" +dependencies = [ + "findshlibs", + "once_cell", + "sentry-core", +] + +[[package]] +name = "sentry-panic" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0b877981990d9e84ae6916df61993d188fdf76afb59521f0aeaf9b8e6d26d0" +dependencies = [ + "sentry-backtrace", + "sentry-core", +] + +[[package]] +name = "sentry-types" +version = "0.31.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d642a04657cc77d8de52ae7c6d93a15cb02284eb219344a89c1e2b26bbaf578c" +dependencies = [ + "debugid", + "getrandom", + "hex", + "serde", + "serde_json", + "thiserror", + "time 0.3.14", + "url 2.3.1", + "uuid 1.3.2", +] + [[package]] name = "serde" version = "1.0.139" @@ -2586,6 +2752,7 @@ dependencies = [ "rodio", "rusqlite", "sanitize-filename", + "sentry", "serde", "serde_derive", "serde_json", @@ -3014,6 +3181,15 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987" +[[package]] +name = "uname" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b72f89f0ca32e4db1c04e2a72f5345d59796d4866a1ee0609084569f73683dc8" +dependencies = [ + "libc", +] + [[package]] name = "unicase" version = "2.6.0" @@ -3062,6 +3238,19 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" +[[package]] +name = "ureq" +version = "2.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "338b31dd1314f68f3aabf3ed57ab922df95ffcd902476ca7ba3c4ce7b908c46d" +dependencies = [ + "base64 0.13.0", + "log", + "native-tls", + "once_cell", + "url 2.3.1", +] + [[package]] name = "url" version = "1.7.2" @@ -3082,6 +3271,7 @@ dependencies = [ "form_urlencoded", "idna 0.3.0", "percent-encoding 2.2.0", + "serde", ] [[package]] @@ -3093,6 +3283,16 @@ dependencies = [ "rand 0.6.5", ] +[[package]] +name = "uuid" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dad5567ad0cf5b760e5665964bec1b47dfd077ba8a2544b513f3556d3d239a2" +dependencies = [ + "getrandom", + "serde", +] + [[package]] name = "valuable" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index d9a8c58..133e011 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,6 +39,8 @@ csv = "1.1.6" epub = "1.2.4" minidom = "0.15.0" color-eyre = "0.6.2" +sentry = "0.31.0" + [dependencies.crossterm] version = "0.25.0" diff --git a/src/app.rs b/src/app.rs index 6403de2..d0b1850 100644 --- a/src/app.rs +++ b/src/app.rs @@ -144,10 +144,7 @@ impl TabsState { } fn keyhandler(&mut self, appdata: &AppData, key: MyKey) { - match key { - //MyKey::Nav(dir) => self.tabs[self.index].navigate(dir), - key => self.tabs[self.index].main_keyhandler(appdata, key), - } + self.tabs[self.index].main_keyhandler(appdata, key); } fn render(&mut self, f: &mut Frame, appdata: &AppData, area: Rect) { let mut navbar = vec![]; @@ -364,7 +361,7 @@ pub trait Tab { } return; } - if let MyKey::KeyPress(pos) = key.clone() { + if let MyKey::KeyPress(pos) = key { self.get_view().cursor = pos; } let cursor = self.get_cursor().clone(); diff --git a/src/main.rs b/src/main.rs index 172bc55..8046256 100644 --- a/src/main.rs +++ b/src/main.rs @@ -31,6 +31,11 @@ pub type MyType = CrosstermBackend; fn main() -> Result<()> { env::set_var("RUST_BACKTRACE", "1"); + let _guard = sentry::init(("https://9be966e9a25345528b66889e96ba8e4f@o4505092893573120.ingest.sentry.io/4505125412077568", sentry::ClientOptions { + release: sentry::release_name!(), + ..Default::default() +})); + let paths = SpekiPaths::new(&home::home_dir().unwrap()); let is_new_db = init_db(&paths.database).unwrap(); @@ -165,13 +170,13 @@ impl MyKey { if let Key(key) = event { let modifiers = key.modifiers; - if modifiers == event::KeyModifiers::ALT || modifiers == event::KeyModifiers::META { + if modifiers == event::KeyModifiers::ALT || modifiers == event::KeyModifiers::SHIFT { match key.code { KeyCode::Char('h') | KeyCode::Left => return Some(MyKey::Nav(NavDir::Left)), KeyCode::Char('j') | KeyCode::Down => return Some(MyKey::Nav(NavDir::Down)), KeyCode::Char('k') | KeyCode::Up => return Some(MyKey::Nav(NavDir::Up)), KeyCode::Char('l') | KeyCode::Right => return Some(MyKey::Nav(NavDir::Right)), - KeyCode::Char(c) => return Some(MyKey::Alt(c)), + KeyCode::Char(c) => return Some(MyKey::Alt(c.to_ascii_lowercase())), _ => {} } } diff --git a/src/popups/anki_users.rs b/src/popups/anki_users.rs index 8de13d6..4436c56 100644 --- a/src/popups/anki_users.rs +++ b/src/popups/anki_users.rs @@ -64,7 +64,7 @@ impl<'a> Menu<'a> { let ypad = 3; let mut menu = Menu::new(title, prompt, xpad, ypad, buttons); - if users.len() == 0 { + if users.is_empty() { menu.get_tabdata().state = PopUpState::Switch(Box::new(Splash::new("No anki users found".to_string()))) } diff --git a/src/utils/ankitemplate.rs b/src/utils/ankitemplate.rs index 64cfc98..e106625 100644 --- a/src/utils/ankitemplate.rs +++ b/src/utils/ankitemplate.rs @@ -277,7 +277,7 @@ impl Template { for i in 0..split_by_field.len() { if i != 0 { let replaced = self.note_from_card_index(viewpos).fields[val].clone(); - let right = split_by_field[i].clone(); + let right = split_by_field[i]; tempstring.push_str(&replaced.text); tempstring.push_str(&right); } @@ -301,13 +301,13 @@ impl Template { let frontside = self.fill_front_view(front_template, idx); let backside = self.fill_back_view(back_template, idx); let media = self.get_media(idx); - if idx % 1 == 0 { + if true { let _ = transmitter.try_send(ImportProgress { curr_index: idx, max: cardlen, }); }; - if self.cards[idx].reps.len() == 0 { + if self.cards[idx].reps.is_empty() { card::Card::new(CardTypeData::Pending(PendingInfo::default())) .question(frontside) .answer(backside)