tangled
alpha
login
or
join now
ericwood.org
/
photos-site
1
fork
atom
A little app to serve my photography from my personal website
1
fork
atom
overview
issues
pulls
pipelines
order blog posts by date vs. random hash ordering
ericwood.org
2 months ago
c7686b55
8c2e212f
0/0
Waiting for spindle ...
+32
-4
2 changed files
expand all
collapse all
unified
split
src
blog.rs
date_time.rs
+16
-3
src/blog.rs
reviewed
···
78
78
}
79
79
80
80
pub fn all(&self) -> Vec<Arc<BlogPost>> {
81
81
-
self.by_slug.values().cloned().collect()
81
81
+
let mut posts: Vec<Arc<BlogPost>> = self.by_slug.values().cloned().collect();
82
82
+
sort_posts(&mut posts);
83
83
+
posts
82
84
}
83
85
84
86
pub fn all_tags(&self) -> Vec<(String, usize)> {
···
97
99
}
98
100
99
101
pub fn get_by_tag(&self, tag: &str) -> Vec<Arc<BlogPost>> {
100
100
-
self.by_tag
102
102
+
let mut posts = self
103
103
+
.by_tag
101
104
.get(tag)
102
105
.unwrap_or(&Vec::<Arc<BlogPost>>::new())
103
103
-
.to_vec()
106
106
+
.to_vec();
107
107
+
sort_posts(&mut posts);
108
108
+
posts
104
109
}
110
110
+
}
111
111
+
112
112
+
fn sort_posts(posts: &mut [Arc<BlogPost>]) {
113
113
+
posts.sort_by(|a, b| {
114
114
+
let a = a.published_at.clone().unwrap_or(DateTime::min_date());
115
115
+
let b = b.published_at.clone().unwrap_or(DateTime::min_date());
116
116
+
b.cmp(&a)
117
117
+
});
105
118
}
106
119
107
120
#[derive(serde::Deserialize, serde::Serialize, Clone)]
+16
-1
src/date_time.rs
reviewed
···
1
1
+
use core::cmp::Ord;
1
2
use std::{convert, fmt, str};
2
3
3
4
use chrono::{self, FixedOffset, ParseError};
···
6
7
de::{self, Visitor},
7
8
};
8
9
9
9
-
#[derive(Clone)]
10
10
+
#[derive(Clone, PartialOrd, Ord)]
10
11
pub struct DateTime(chrono::DateTime<FixedOffset>);
12
12
+
13
13
+
impl DateTime {
14
14
+
pub fn min_date() -> Self {
15
15
+
Self(chrono::DateTime::<FixedOffset>::MIN_UTC.fixed_offset())
16
16
+
}
17
17
+
}
11
18
12
19
impl convert::TryFrom<String> for DateTime {
13
20
type Error = ParseError;
···
29
36
value.0.to_rfc3339()
30
37
}
31
38
}
39
39
+
40
40
+
impl PartialEq for DateTime {
41
41
+
fn eq(&self, other: &Self) -> bool {
42
42
+
self.0 == other.0
43
43
+
}
44
44
+
}
45
45
+
46
46
+
impl Eq for DateTime {}
32
47
33
48
struct DateTimeVisitor;
34
49