turned pager into a single type

This commit is contained in:
2021-10-13 17:23:50 +01:00
parent a362a24cfc
commit 4490f19c04
4 changed files with 105 additions and 324 deletions

View File

@ -1,4 +1,4 @@
pub(crate) mod pager;
pub mod pager;
use std::io::Cursor;
@ -21,7 +21,7 @@ use crate::{
reminder_cmds::{max_delete_page, show_delete_page},
todo_cmds::{max_todo_page, show_todo_page},
},
component_models::pager::{DelPager, LookPager, Pager, TodoPager},
component_models::pager::{DelData, LookData, Pager, TodoData},
consts::{EMBED_DESCRIPTION_MAX_LENGTH, THEME_COLOR},
framework::CommandInvoke,
models::reminder::Reminder,
@ -29,15 +29,14 @@ use crate::{
};
#[derive(Deserialize, Serialize)]
#[serde(tag = "type")]
#[repr(u8)]
#[serde(untagged)]
pub enum ComponentDataModel {
Restrict(Restrict),
LookPager(LookPager),
DelPager(DelPager),
TodoPager(TodoPager),
DelSelector(DelSelector),
TodoSelector(TodoSelector),
LookPager(Pager<LookData>),
DelPager(Pager<DelData>),
TodoPager(Pager<TodoData>),
}
impl ComponentDataModel {
@ -94,7 +93,7 @@ INSERT IGNORE INTO roles (role, name, guild_id) VALUES (?, \"Role\", (SELECT id
}
}
ComponentDataModel::LookPager(pager) => {
let flags = pager.flags;
let flags = pager.data.flags;
let channel_opt = component.channel_id.to_channel_cached(&ctx);
@ -112,7 +111,7 @@ INSERT IGNORE INTO roles (role, name, guild_id) VALUES (?, \"Role\", (SELECT id
let pages = reminders
.iter()
.map(|reminder| reminder.display(&flags, &pager.timezone))
.map(|reminder| reminder.display(&flags, &pager.data.timezone))
.fold(0, |t, r| t + r.len())
.div_ceil(EMBED_DESCRIPTION_MAX_LENGTH);
@ -130,7 +129,7 @@ INSERT IGNORE INTO roles (role, name, guild_id) VALUES (?, \"Role\", (SELECT id
let display = reminders
.iter()
.map(|reminder| reminder.display(&flags, &pager.timezone))
.map(|reminder| reminder.display(&flags, &pager.data.timezone))
.skip_while(|p| {
skip_char_count += p.len();
@ -172,9 +171,10 @@ INSERT IGNORE INTO roles (role, name, guild_id) VALUES (?, \"Role\", (SELECT id
let reminders =
Reminder::from_guild(ctx, component.guild_id, component.user.id).await;
let max_pages = max_delete_page(&reminders, &pager.timezone);
let max_pages = max_delete_page(&reminders, &pager.data.timezone);
let resp = show_delete_page(&reminders, pager.next_page(max_pages), pager.timezone);
let resp =
show_delete_page(&reminders, pager.next_page(max_pages), pager.data.timezone);
let mut invoke = CommandInvoke::component(component);
let _ = invoke.respond(&ctx, resp).await;
@ -202,9 +202,9 @@ INSERT IGNORE INTO roles (role, name, guild_id) VALUES (?, \"Role\", (SELECT id
let values = sqlx::query!(
// fucking braindead mysql use <=> instead of = for null comparison
"SELECT id, value FROM todos WHERE user_id <=> ? AND channel_id <=> ? AND guild_id <=> ?",
pager.user_id,
pager.channel_id,
pager.guild_id,
pager.data.user_id,
pager.data.channel_id,
pager.data.guild_id,
)
.fetch_all(&pool)
.await
@ -218,9 +218,9 @@ INSERT IGNORE INTO roles (role, name, guild_id) VALUES (?, \"Role\", (SELECT id
let resp = show_todo_page(
&values,
pager.next_page(max_pages),
pager.user_id,
pager.channel_id,
pager.guild_id,
pager.data.user_id,
pager.data.channel_id,
pager.data.guild_id,
);
let mut invoke = CommandInvoke::component(component);