| 204 | |
| 205 | #[args(py_kwargs = "**")] |
| 206 | pub fn parse_ticks( |
| 207 | &self, |
| 208 | py: Python, |
| 209 | mut wanted_props: Vec<String>, |
| 210 | py_kwargs: Option<&PyDict>, |
| 211 | ) -> PyResult<PyObject> { |
| 212 | let mut real_props = rm_user_friendly_names(&wanted_props); |
| 213 | let unk_props = check_validity_props(&real_props); |
| 214 | if !unk_props.is_empty() { |
| 215 | return Err(PyKeyError::new_err(format!( |
| 216 | "Unknown fields: {:?}", |
| 217 | unk_props |
| 218 | ))); |
| 219 | } |
| 220 | let (wanted_players, wanted_ticks) = parse_kwargs_ticks(py_kwargs); |
| 221 | let wanted_ticks_len = wanted_ticks.len(); |
| 222 | let biggest_wanted_tick = if wanted_ticks_len > 0 { |
| 223 | wanted_ticks.iter().max().unwrap() |
| 224 | } else { |
| 225 | &99999999 |
| 226 | }; |
| 227 | |
| 228 | let parser = Demo::new( |
| 229 | self.path.clone(), |
| 230 | true, |
| 231 | wanted_ticks.clone(), |
| 232 | wanted_players, |
| 233 | real_props.clone(), |
| 234 | "".to_string(), |
| 235 | false, |
| 236 | false, |
| 237 | true, |
| 238 | *biggest_wanted_tick, |
| 239 | wanted_props.clone(), |
| 240 | ); |
| 241 | |
| 242 | match parser { |
| 243 | Err(e) => Err(PyFileNotFoundError::new_err(format!( |
| 244 | "Couldnt read demo file. Error: {}", |
| 245 | e |
| 246 | ))), |
| 247 | Ok(mut parser) => { |
| 248 | let h: Header = parser.parse_demo_header(); |
| 249 | |
| 250 | parser.playback_frames = if wanted_ticks_len == 0 { |
| 251 | h.playback_frames as usize |
| 252 | } else { |
| 253 | wanted_ticks_len |
| 254 | }; |
| 255 | let data = parser.start_parsing(&real_props); |
| 256 | |
| 257 | real_props.push("tick".to_string()); |
| 258 | real_props.push("steamid".to_string()); |
| 259 | real_props.push("name".to_string()); |
| 260 | wanted_props.push("tick".to_string()); |
| 261 | wanted_props.push("steamid".to_string()); |
| 262 | wanted_props.push("name".to_string()); |
| 263 | |