.....
This commit is contained in:
parent
49974b7153
commit
37420b2b1f
@ -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"
|
||||||
|
|
||||||
|
31
migration/04-reminder_templates.sql
Normal file
31
migration/04-reminder_templates.sql
Normal 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,
|
||||||
|
);
|
@ -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,
|
||||||
|
@ -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';
|
||||||
|
@ -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>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user