Use timestamps in file names to fix caching issue
This commit is contained in:
parent
c10853f5d1
commit
fcb7dda20d
1 changed files with 4 additions and 45 deletions
|
@ -74,6 +74,7 @@ pub async fn submit(ctx: Context<'_>, submission: serenity::Attachment) -> Resul
|
|||
|
||||
let challenge_number = get_challenge_number();
|
||||
let submission_images_dir = get_submission_images_dir();
|
||||
let timestamp = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_millis();
|
||||
|
||||
// Ensure that submission_images_dir exists
|
||||
let path = Path::new(&submission_images_dir);
|
||||
|
@ -115,7 +116,7 @@ pub async fn submit(ctx: Context<'_>, submission: serenity::Attachment) -> Resul
|
|||
i + 1,
|
||||
slugify(&author.name),
|
||||
author.discriminator,
|
||||
images.len() + 1,
|
||||
timestamp,
|
||||
extension
|
||||
);
|
||||
images.push(file_name.clone().into());
|
||||
|
@ -154,15 +155,11 @@ pub async fn submit(ctx: Context<'_>, submission: serenity::Attachment) -> Resul
|
|||
}
|
||||
requires_rebuild = true;
|
||||
let file_name = format!(
|
||||
"{}-{}-{}{}.{}",
|
||||
"{}-{}-{}-{}.{}",
|
||||
submission_data.len() + 1,
|
||||
slugify(&author.name),
|
||||
author.discriminator,
|
||||
if images.len() == 0 {
|
||||
String::from("")
|
||||
} else {
|
||||
format!("-{}", images.len() + 1)
|
||||
},
|
||||
timestamp,
|
||||
extension
|
||||
);
|
||||
images.push(file_name.clone().into());
|
||||
|
@ -204,7 +201,6 @@ pub async fn submit(ctx: Context<'_>, submission: serenity::Attachment) -> Resul
|
|||
Some(data["invite"].as_str().unwrap())
|
||||
} else {
|
||||
None };
|
||||
let timestamp = std::time::SystemTime::now().duration_since(std::time::UNIX_EPOCH).unwrap().as_millis();
|
||||
for image in submitted_images.iter() {
|
||||
for (other_guild_id, data) in guild_data.iter() {
|
||||
let here = other_guild_id.eq(&ctx.guild_id().unwrap().as_u64().to_string());
|
||||
|
@ -374,43 +370,6 @@ pub async fn imagedelete(ctx: Context<'_>, number: i32) -> Result<(), Error> {
|
|||
submission_data.remove(i);
|
||||
} else {
|
||||
images.remove(index);
|
||||
// One must rename all of the submitted images to prevent overwrites.
|
||||
// Consider the following scenario:
|
||||
// The submissions are ["bob-1234.png", "bob-1234-2.png"]
|
||||
// Bob uses the command imageDelete 1
|
||||
// The submissions become ["bob-1234-2.png"]
|
||||
// Bob makes a second submission
|
||||
// The submissions become ["bob-1234-2.png", "bob-1234-2.png"]
|
||||
// The original bob-1234-2.png gets overwriten,
|
||||
// and both submissions end up pointing to the same image.
|
||||
// In order to prevent this, images need to be renamed according to their index.
|
||||
for (j, image) in images.iter_mut().enumerate() {
|
||||
let old = image.as_str().unwrap();
|
||||
let from = format!("{}/{}", submission_images_dir, old);
|
||||
let author = ctx.author();
|
||||
let new = format!(
|
||||
"{}-{}-{}{}.{}",
|
||||
i + 1,
|
||||
slugify(&author.name),
|
||||
author.discriminator,
|
||||
if j == 0 {
|
||||
String::from("")
|
||||
} else {
|
||||
format!("-{}", j + 1)
|
||||
},
|
||||
Path::new(old).extension().unwrap().to_str().unwrap()
|
||||
);
|
||||
let to = format!("{}/{}", submission_images_dir, new);
|
||||
if old.eq(&new) {
|
||||
// TODO: This could be made more efficient by
|
||||
// automatically starting iteration just after deleted image
|
||||
// since only images with later indexes will be affected
|
||||
continue;
|
||||
}
|
||||
fs_extra::file::move_file(from, to, &fs_extra::file::CopyOptions::default())
|
||||
.unwrap();
|
||||
*image = new.into();
|
||||
}
|
||||
submission["images"] = images.into();
|
||||
}
|
||||
set_submission_data(submission_data);
|
||||
|
|
Loading…
Add table
Reference in a new issue