diff --git a/src/client/mod.rs b/src/client/mod.rs index de95d09..e78f2ff 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -2057,15 +2057,12 @@ impl RustyPipeQuery { } /// Get PO tokens - async fn get_po_tokens(&self, idents: &[&str]) -> Result, Error> { - let bg = self - .client - .inner - .botguard - .as_ref() - .ok_or(Error::Extraction(ExtractionError::Botguard( - "not enabled".into(), - )))?; + async fn get_po_tokens(&self, idents: &[&str]) -> Result>, Error> { + let bg = match self.client.inner.botguard.as_ref() { + Some(bg) => bg, + None => return Ok(None), + }; + let start = std::time::Instant::now(); let cmd = tokio::process::Command::new(&bg.program) .arg("--snapshot-file") .arg(&bg.snapshot_file) @@ -2092,14 +2089,17 @@ impl RustyPipeQuery { "too few tokens returned".into(), ))); } - tracing::debug!("generated PO token"); - Ok(tokens) + tracing::debug!("generated PO token (took {:?})", start.elapsed()); + Ok(Some(tokens)) } /// Get a PO token pub async fn get_po_token>(self, ident: S) -> Result { self.get_po_tokens(&[ident.as_ref()]) - .await + .await? + .ok_or(Error::Extraction(ExtractionError::Botguard( + "not enabled".into(), + ))) .map(|res| res.into_iter().next().unwrap()) } diff --git a/src/client/player.rs b/src/client/player.rs index ab1cdc1..ef9aaf0 100644 --- a/src/client/player.rs +++ b/src/client/player.rs @@ -128,13 +128,13 @@ impl RustyPipeQuery { } Err(e) => return Err(e), } - last_e = Some(Error::Extraction(e)); } else { return Err(Error::Extraction(e)); } } else if !e.switch_client() { return Err(Error::Extraction(e)); } + last_e = Some(Error::Extraction(e)); } Err(e) => return Err(e), } @@ -163,14 +163,15 @@ impl RustyPipeQuery { }, async { if client_type.needs_po_token() { - let mut po_tokens = self - .get_po_tokens(&[video_id, &visitor_data]) - .await? - .into_iter(); - let po_token = po_tokens.next().unwrap(); - let session_po_token = po_tokens.next().unwrap(); + if let Some(po_tokens) = self.get_po_tokens(&[video_id, &visitor_data]).await? { + let mut po_tokens = po_tokens.into_iter(); + let po_token = po_tokens.next().unwrap(); + let session_po_token = po_tokens.next().unwrap(); - Ok((Some(ServiceIntegrity { po_token }), Some(session_po_token))) + Ok((Some(ServiceIntegrity { po_token }), Some(session_po_token))) + } else { + Ok((None, None)) + } } else { Ok((None, None)) }