Implement sorting by last_opened

This commit is contained in:
2024-02-07 20:26:34 +01:00
parent bea97b55f3
commit f9c2cfb618
4 changed files with 29 additions and 7 deletions

View File

@ -7,7 +7,7 @@ use sqlx::{prelude::*, sqlite::SqliteRow};
// use sqlx::{FromRow, sqlite::SqliteRow, sqlx::Row};
use chrono::{DateTime, NaiveDateTime, Utc};
#[derive(Debug, Clone)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Sheet {
pub id: i64,
pub name: String,
@ -94,7 +94,7 @@ impl TryFrom<PathBuf> for OrphanFile {
}
}
#[derive(Debug, Clone)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct OrphanFile {
pub id: i64,
pub path: PathBuf,

View File

@ -1,3 +1,5 @@
use std::cmp::Reverse;
use chrono::Utc;
use gtk::prelude::*;
use relm4::{
@ -87,25 +89,27 @@ impl AsyncComponent for AppModel {
McduOutput::SearchStarted(query) => AppInput::SearchStarted(query),
});
let new_files: Vec<SheetModelType> = init_data
let mut new_files: Vec<SheetModelType> = init_data
.orphans
.iter()
.map(|orphan| SheetModelType::Orphan {
orphan: orphan.clone(),
})
.collect();
new_files.sort_by(|a, b| a.cmp(b).reverse());
let new_files_clone_iter = init_data
.orphans
.into_iter()
.map(|orphan| SheetModelType::Orphan { orphan });
let sheets_and_files: Vec<SheetModelType> = init_data
let mut sheets_and_files: Vec<SheetModelType> = init_data
.sheets
.into_iter()
.map(|sheet| SheetModelType::Sheet { sheet })
.chain(new_files_clone_iter)
.collect();
sheets_and_files.sort_by(|a, b| a.cmp(b).reverse());
let sheets_and_files_listing = SheetListingModel::builder()
.launch(sheets_and_files)

View File

@ -1,5 +1,4 @@
pub mod app;
pub mod database_worker;
pub mod mcdu;
pub mod sheet_listing;
pub mod sheet_model;

View File

@ -1,4 +1,4 @@
use std::path::Path;
use std::{cmp::Ordering, path::Path};
use gtk::prelude::*;
use relm4::prelude::*;
@ -7,7 +7,7 @@ use crate::sheet::{OrphanFile, Sheet};
use super::sheet_listing::SheetListingInput;
#[derive(Debug, Clone)]
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum SheetModelType {
Sheet { sheet: Sheet },
Orphan { orphan: OrphanFile },
@ -21,6 +21,25 @@ impl SheetModelType {
}
}
}
impl Ord for SheetModelType {
fn cmp(&self, other: &Self) -> Ordering {
let self_last_opened = match self {
SheetModelType::Sheet { sheet } => sheet.last_opened,
SheetModelType::Orphan { orphan } => orphan.last_opened,
};
let other_last_opened = match other {
SheetModelType::Sheet { sheet } => sheet.last_opened,
SheetModelType::Orphan { orphan } => orphan.last_opened,
};
self_last_opened.cmp(&other_last_opened)
}
}
impl PartialOrd for SheetModelType {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
Some(self.cmp(other))
}
}
pub struct SheetModel {
pub label: String,