Implement sorting by last_opened
This commit is contained in:
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -1,5 +1,4 @@
|
||||
pub mod app;
|
||||
pub mod database_worker;
|
||||
pub mod mcdu;
|
||||
pub mod sheet_listing;
|
||||
pub mod sheet_model;
|
||||
|
@ -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,
|
||||
|
Reference in New Issue
Block a user