diff --git a/my-blog/content/posts/2025-08-09-9935c5b5.md b/my-blog/content/posts/2025-08-09-9935c5b5.md
new file mode 100644
index 0000000..8fe9f0c
--- /dev/null
+++ b/my-blog/content/posts/2025-08-09-9935c5b5.md
@@ -0,0 +1,1675 @@
+---
+title: "archlinux install by ai"
+slug: "9935c5b5"
+date: "2025-08-09"
+tags: ["ai", "conversation"]
+draft: false
+extra:
+ type: "ai"
+---
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/my-blog/content/posts/2025-08-09-c0a78538.md b/my-blog/content/posts/2025-08-09-c0a78538.md
deleted file mode 100644
index c281432..0000000
--- a/my-blog/content/posts/2025-08-09-c0a78538.md
+++ /dev/null
@@ -1,1411 +0,0 @@
----
-title: "archlinux install"
-slug: "c0a78538"
-date: "2025-08-09"
-tags: ["ai", "conversation"]
-draft: false
-extra:
- type: "ai"
----
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/atproto/profile.rs b/src/atproto/profile.rs
index 5461a00..ee91592 100644
--- a/src/atproto/profile.rs
+++ b/src/atproto/profile.rs
@@ -45,7 +45,10 @@ pub struct ProfileFetcher {
impl ProfileFetcher {
pub fn new() -> Self {
Self {
- client: reqwest::Client::new(),
+ client: reqwest::Client::builder()
+ .timeout(std::time::Duration::from_secs(30))
+ .build()
+ .unwrap_or_else(|_| reqwest::Client::new()),
}
}
@@ -84,11 +87,14 @@ impl ProfileFetcher {
let response = self.client
.get(&url)
.query(&[("repo", handle)])
+ .timeout(std::time::Duration::from_secs(10))
.send()
- .await?;
+ .await
+ .map_err(|e| anyhow::anyhow!("Request failed: {}", e))?;
if !response.status().is_success() {
- return Err(anyhow::anyhow!("Failed to describe repo: {}", response.status()));
+ let error_text = response.text().await.unwrap_or_default();
+ return Err(anyhow::anyhow!("Failed to describe repo: {} - {}", response.status(), error_text));
}
let repo_desc: RepoDescription = response.json().await?;
@@ -117,11 +123,14 @@ impl ProfileFetcher {
let response = self.client
.get(&url)
.query(&[("actor", did)])
+ .timeout(std::time::Duration::from_secs(10))
.send()
- .await?;
+ .await
+ .map_err(|e| anyhow::anyhow!("Request failed: {}", e))?;
if !response.status().is_success() {
- return Err(anyhow::anyhow!("Failed to get profile: {}", response.status()));
+ let error_text = response.text().await.unwrap_or_default();
+ return Err(anyhow::anyhow!("Failed to get profile: {} - {}", response.status(), error_text));
}
let profile_data: Value = response.json().await?;