michal/tit

Browse tree · Show commit · Download archive

Diff

c8914a8b9b65511290b3ecd4

src/http/mod.rs

Mode 100644100644; object e763efffaaf76e67ff28a89e

@@ -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 100644100644; object 3119705c835c6805c686f933

@@ -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 100644100644; object 32f07c38886e74ed3604d91d

@@ -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>"));