michal/tit
Browse tree · Show commit · Download archive
Diff
c8914a8b9b65 → 511290b3ecd4
src/http/mod.rs
Mode 100644 → 100644; object e763efffaaf7 → 6e67ff28a89e
@@ -603,15 +603,21 @@
username: &username,
csrf: &csrf,
repositories: &[],
+ recent_repositories: &[],
},
);
}
let result = repository_job(state, move |repositories| {
- repositories.home(actor.0.as_deref())
+ let owned = match actor.0.as_deref() {
+ Some(owner) => repositories.home(Some(owner))?,
+ None => Vec::new(),
+ };
+ let recent = repositories.home(None)?;
+ Ok((owned, recent))
})
.await;
match result {
- Ok(repositories) => render_home(
+ Ok((repositories, recent_repositories)) => render_home(
StatusCode::OK,
&request_id.0,
HomePage {
@@ -622,6 +628,7 @@
username: &username,
csrf: &csrf,
repositories: &repositories,
+ recent_repositories: &recent_repositories,
},
),
Err(_) => render_error(
@@ -677,6 +684,7 @@
username: actor.0.as_deref().unwrap_or_default(),
csrf: "",
repositories: &[],
+ recent_repositories: &[],
},
),
}
@@ -2282,6 +2290,18 @@
updated_at: repository.updated_at,
})
.collect(),
+ recent_repositories: page
+ .recent_repositories
+ .iter()
+ .map(|repository| HomeRepositoryView {
+ owner: &repository.owner,
+ slug: &repository.slug,
+ visibility: &repository.visibility,
+ state: &repository.state,
+ description: &repository.description,
+ updated_at: repository.updated_at,
+ })
+ .collect(),
},
)
}
@@ -2294,6 +2314,7 @@
username: &'a str,
csrf: &'a str,
repositories: &'a [crate::store::HomeRepositoryRecord],
+ recent_repositories: &'a [crate::store::HomeRepositoryRecord],
}
fn render_error(status: StatusCode, request_id: &str, heading: &str, message: &str) -> Response {
@@ -2401,6 +2422,7 @@
username: &'a str,
csrf: &'a str,
repositories: Vec<HomeRepositoryView<'a>>,
+ recent_repositories: Vec<HomeRepositoryView<'a>>,
}
struct HomeRepositoryView<'a> {
templates/home.html
Mode 100644 → 100644; object 3119705c835c → 6805c686f933
@@ -7,11 +7,8 @@
<h1>{{ username }}</h1>
<p><a href="/account">Open your account profile</a>.</p>
<h2>Your repositories</h2>
-{% else %}
- <h1>Recently updated public repositories</h1>
-{% endif %}
{% if repositories.is_empty() %}
- <p>No repositories are available.</p>
+ <p>You do not own a repository.</p>
{% else %}
<ul>
{% for item in repositories %}
@@ -27,6 +24,23 @@
{% else %}
<li><a href="/{{ item.owner }}/{{ item.slug }}">{{ item.owner }}/{{ item.slug }}</a> · {{ item.visibility }} · updated <time datetime="{{ item.updated_at }}">{{ item.updated_at|human_time }}</time>{% if item.description.is_empty() %}{% else %}<br>{{ item.description }}{% endif %}</li>
{% endif %}
+ {% endfor %}
+ </ul>
+{% endif %}
+ <h2>Recently updated public repositories</h2>
+{% else %}
+ <h1>Recently updated public repositories</h1>
+{% endif %}
+{% if recent_repositories.is_empty() %}
+{% if signed_in %}
+ <p>No public repositories are available.</p>
+{% else %}
+ <p>No repositories are available.</p>
+{% endif %}
+{% else %}
+ <ul>
+ {% for item in recent_repositories %}
+ <li><a href="/{{ item.owner }}/{{ item.slug }}">{{ item.owner }}/{{ item.slug }}</a> · updated <time datetime="{{ item.updated_at }}">{{ item.updated_at|human_time }}</time>{% if item.description.is_empty() %}{% else %}<br>{{ item.description }}{% endif %}</li>
{% endfor %}
</ul>
{% endif %}
tests/serve.rs
Mode 100644 → 100644; object 32f07c38886e → 74ed3604d91d
@@ -228,7 +228,8 @@
let signed_in_home = http_get_with_headers(http, "/", &[("Cookie", &cookies)]);
assert!(signed_in_home.contains("<h1>alice</h1>"));
assert!(signed_in_home.contains("<h2>Your repositories</h2>"));
- assert!(signed_in_home.contains(">alice/example</a>"));
+ assert!(signed_in_home.contains("<h2>Recently updated public repositories</h2>"));
+ assert_eq!(signed_in_home.matches(">alice/example</a>").count(), 2);
assert!(signed_in_home.contains("<a href=\"/account\">Account</a>"));
assert!(signed_in_home.contains("<a href=\"/logout\">Log out</a>"));
assert!(!signed_in_home.contains("<a href=\"/signup\">Create account</a>"));