This commit is contained in:
jude 2022-02-11 20:03:53 +00:00
parent 49974b7153
commit 37420b2b1f
5 changed files with 67 additions and 9 deletions

View File

@ -1,12 +1,12 @@
[default] [default]
address = "0.0.0.0" address = "127.0.0.1"
port = 5000 port = 5000
template_dir = "web/templates" template_dir = "web/templates"
[debug] [debug]
secret_key = "tR8krio5FXTnnyIZNiJDXPondz0kI1v6X6BXZcBGIRY=" secret_key = "tR8krio5FXTnnyIZNiJDXPondz0kI1v6X6BXZcBGIRY="
[default.tls] [debug.tls]
certs = "web/private/rsa_sha256_cert.pem" certs = "web/private/rsa_sha256_cert.pem"
key = "web/private/rsa_sha256_key.pem" key = "web/private/rsa_sha256_key.pem"

View File

@ -0,0 +1,31 @@
USE reminders;
CREATE TABLE reminder_template (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(24) NOT NULL DEFAULT 'Reminder',
`guild_id` INT UNSIGNED NOT NULL,
`username` VARCHAR(32) DEFAULT NULL,
`avatar` VARCHAR(512) DEFAULT NULL,
`content` VARCHAR(2048) NOT NULL DEFAULT '',
`tts` BOOL NOT NULL DEFAULT 0,
`attachment` MEDIUMBLOB,
`attachment_name` VARCHAR(260),
`embed_title` VARCHAR(256) NOT NULL DEFAULT '',
`embed_description` VARCHAR(2048) NOT NULL DEFAULT '',
`embed_image_url` VARCHAR(512),
`embed_thumbnail_url` VARCHAR(512),
`embed_footer` VARCHAR(2048) NOT NULL DEFAULT '',
`embed_footer_url` VARCHAR(512),
`embed_author` VARCHAR(256) NOT NULL DEFAULT '',
`embed_author_url` VARCHAR(512),
`embed_color` INT UNSIGNED NOT NULL DEFAULT 0x0,
PRIMARY KEY (id),
FOREIGN KEY (`guild_id`) REFERENCES channels (`id`) ON DELETE CASCADE,
);

View File

@ -17,6 +17,7 @@ pub struct Reminder {
attachment: Option<Vec<u8>>, attachment: Option<Vec<u8>>,
attachment_name: Option<String>, attachment_name: Option<String>,
avatar: Option<String>, avatar: Option<String>,
#[serde(with = "string")]
channel: u64, channel: u64,
content: String, content: String,
embed_author: String, embed_author: String,
@ -43,6 +44,31 @@ pub struct Reminder {
utc_time: NaiveDateTime, utc_time: NaiveDateTime,
} }
// https://github.com/serde-rs/json/issues/329#issuecomment-305608405
mod string {
use std::fmt::Display;
use std::str::FromStr;
use serde::{de, Deserialize, Deserializer, Serializer};
pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, S::Error>
where
T: Display,
S: Serializer,
{
serializer.collect_str(value)
}
pub fn deserialize<'de, T, D>(deserializer: D) -> Result<T, D::Error>
where
T: FromStr,
T::Err: Display,
D: Deserializer<'de>,
{
String::deserialize(deserializer)?.parse().map_err(de::Error::custom)
}
}
#[derive(Deserialize)] #[derive(Deserialize)]
pub struct DeleteReminder { pub struct DeleteReminder {
uid: String, uid: String,

View File

@ -404,11 +404,16 @@
if (data.error) { if (data.error) {
show_error(data.error); show_error(data.error);
} else { } else {
const $template = document.querySelector('template#personalReminder'); console.log(data);
const $template = document.querySelector('template#guildReminder');
for (let reminder of data) { for (let reminder of data) {
let newFrame = $template.content.cloneNode(true); let newFrame = $template.content.cloneNode(true);
// populate channels
newFrame.querySelector('select.channel-selector');
for (let prop in reminder) { for (let prop in reminder) {
if (reminder.hasOwnProperty(prop) && reminder[prop] !== null) { if (reminder.hasOwnProperty(prop) && reminder[prop] !== null) {
let $input = newFrame.querySelector(`*[name="${prop}"]`); let $input = newFrame.querySelector(`*[name="${prop}"]`);
@ -642,11 +647,7 @@
} }
}); });
fetch(`/dashboard/api/guild/${$anchor.dataset['guild']}/reminders`) fetch_reminders($anchor.dataset['guild']);
.then(response => response.json())
.then(data => {
})
document.querySelectorAll('p.pageTitle').forEach((el) => { document.querySelectorAll('p.pageTitle').forEach((el) => {
el.textContent = $anchor.dataset['name'] + ' Reminders'; el.textContent = $anchor.dataset['name'] + ' Reminders';

View File

@ -111,7 +111,7 @@
<div class="field"> <div class="field">
<div class="control"> <div class="control">
<label class="label sr-only">Reminder Name</label> <label class="label sr-only">Reminder Name</label>
<input class="input" type="text" placeholder="Reminder Name"> <input class="input" type="text" name="name" placeholder="Reminder Name">
</div> </div>
</div> </div>