Library sorting: download-date sort + grouped sort options (both UIs)
Add "download date" sorting (file mtime, distinct from upload date) plus a broader set of options. Web select is now grouped via <optgroup>; desktop gains SortMode::DownloadDesc/DownloadAsc/ChannelAsc with matching arms and toolbar entries. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
015d03751c
commit
8b2578783a
2 changed files with 48 additions and 9 deletions
23
src/app.rs
23
src/app.rs
|
|
@ -71,6 +71,9 @@ enum SortMode {
|
|||
SizeDesc,
|
||||
DateDesc,
|
||||
DateAsc,
|
||||
DownloadDesc,
|
||||
DownloadAsc,
|
||||
ChannelAsc,
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq)]
|
||||
|
|
@ -883,6 +886,19 @@ impl App {
|
|||
}
|
||||
});
|
||||
}
|
||||
SortMode::DownloadDesc => {
|
||||
// Most-recently-downloaded first (file mtime); missing → end.
|
||||
cards.sort_by(|a, b| b.mtime_unix.unwrap_or(0).cmp(&a.mtime_unix.unwrap_or(0)));
|
||||
}
|
||||
SortMode::DownloadAsc => {
|
||||
cards.sort_by(|a, b| a.mtime_unix.unwrap_or(u64::MAX).cmp(&b.mtime_unix.unwrap_or(u64::MAX)));
|
||||
}
|
||||
SortMode::ChannelAsc => {
|
||||
cards.sort_by(|a, b| {
|
||||
a.channel_name.to_lowercase().cmp(&b.channel_name.to_lowercase())
|
||||
.then_with(|| a.title.to_lowercase().cmp(&b.title.to_lowercase()))
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
cards
|
||||
|
|
@ -4131,13 +4147,16 @@ impl App {
|
|||
}
|
||||
|
||||
ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::DateDesc, "Newest");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::DateAsc, "Oldest");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::SizeDesc, "Largest");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::SizeAsc, "Smallest");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::DurationDesc, "Longest");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::DurationAsc, "Shortest");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::ChannelAsc, "Channel");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::Title, "Title");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::DateAsc, "Oldest");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::DateDesc, "Newest");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::DownloadAsc, "Oldest DL");
|
||||
ui.selectable_value(&mut self.sort_mode, SortMode::DownloadDesc, "Recent DL");
|
||||
ui.label(egui::RichText::new("Sort:").weak());
|
||||
});
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue