+6
-4
src/fragments/video_grid.rs
+6
-4
src/fragments/video_grid.rs
···
1
1
use maud::{Markup, html};
2
2
use rustypipe::model::VideoItem;
3
3
4
+
type SubId = i32;
5
+
4
6
const MINUTE: u32 = 60;
5
7
const HOUR: u32 = 3600;
6
8
7
-
pub fn video_grid(videos: Vec<VideoItem>) -> Markup {
9
+
pub fn video_grid(videos: Vec<(VideoItem, SubId)>) -> Markup {
8
10
html!(
9
11
10
12
ol .thumb-grid {
11
-
@for vid in videos.into_iter().take(100) {
13
+
@for (vid, sub_id) in videos.into_iter().take(100) {
12
14
@let channel = vid.channel.unwrap();
13
15
@let duration = vid.duration.unwrap_or_default();
14
16
li {
15
17
vid-thumbnail {
16
-
img src=(vid.thumbnail.first().unwrap().url);
18
+
img src=(vid.thumbnail.last().unwrap().url);
17
19
18
20
vid-timestamp {
19
21
@if (duration / HOUR) > 0 {
···
37
39
}
38
40
39
41
vid-details-small {
40
-
vid-channel { (channel.name) }
42
+
vid-channel { a href={"/sub/" (sub_id)} { (channel.name)} }
41
43
upload-date { (vid.publish_date_txt.unwrap_or_default())}
42
44
}
43
45
}
+6
-3
src/routes/index.rs
+6
-3
src/routes/index.rs
···
130
130
}
131
131
}
132
132
133
-
pub async fn get_videos(redis: Arc<Mutex<Redis>>, subscriptions: &[Sub]) -> Vec<VideoItem> {
133
+
pub async fn get_videos(redis: Arc<Mutex<Redis>>, subscriptions: &[Sub]) -> Vec<(VideoItem, i32)> {
134
134
let rp = RustyPipe::new();
135
135
136
136
let mut videos = vec![];
137
137
for subscription in subscriptions {
138
-
let vids = memoized_channel_videos_tab(&subscription.channel_id, &rp, redis.clone()).await;
138
+
let vids = memoized_channel_videos_tab(&subscription.channel_id, &rp, redis.clone())
139
+
.await
140
+
.into_iter()
141
+
.map(|vid| (vid, subscription.db_id));
139
142
videos.extend(vids);
140
143
}
141
144
142
145
videos.sort_by(|a, b| {
143
-
let make_timestamp = |e: &VideoItem| {
146
+
let make_timestamp = |(e, _): &(VideoItem, _)| {
144
147
e.publish_date
145
148
.map(|t| t.unix_timestamp())
146
149
.unwrap_or_default()