mirror of
https://github.com/youwen5/iamb.git
synced 2025-06-20 13:49:52 -07:00
Append suffix to download filenames to avoid overwrites (#35)
This commit is contained in:
parent
b6a318dfe3
commit
50023bad40
1 changed files with 29 additions and 31 deletions
|
@ -178,44 +178,42 @@ impl ChatState {
|
||||||
None => settings.dirs.downloads.clone(),
|
None => settings.dirs.downloads.clone(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let source = match &ev.content.msgtype {
|
let (source, msg_filename) = match &ev.content.msgtype {
|
||||||
MessageType::Audio(c) => {
|
MessageType::Audio(c) => (c.source.clone(), c.body.as_str()),
|
||||||
if filename.is_dir() {
|
|
||||||
filename.push(c.body.as_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
c.source.clone()
|
|
||||||
},
|
|
||||||
MessageType::File(c) => {
|
MessageType::File(c) => {
|
||||||
if filename.is_dir() {
|
(c.source.clone(), c.filename.as_deref().unwrap_or(c.body.as_str()))
|
||||||
if let Some(name) = &c.filename {
|
|
||||||
filename.push(name);
|
|
||||||
} else {
|
|
||||||
filename.push(c.body.as_str());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
c.source.clone()
|
|
||||||
},
|
|
||||||
MessageType::Image(c) => {
|
|
||||||
if filename.is_dir() {
|
|
||||||
filename.push(c.body.as_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
c.source.clone()
|
|
||||||
},
|
|
||||||
MessageType::Video(c) => {
|
|
||||||
if filename.is_dir() {
|
|
||||||
filename.push(c.body.as_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
c.source.clone()
|
|
||||||
},
|
},
|
||||||
|
MessageType::Image(c) => (c.source.clone(), c.body.as_str()),
|
||||||
|
MessageType::Video(c) => (c.source.clone(), c.body.as_str()),
|
||||||
_ => {
|
_ => {
|
||||||
return Err(IambError::NoAttachment.into());
|
return Err(IambError::NoAttachment.into());
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if filename.is_dir() {
|
||||||
|
filename.push(msg_filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
if filename.exists() && !flags.contains(DownloadFlags::FORCE) {
|
||||||
|
// Find an incrementally suffixed filename, e.g. image-2.jpg -> image-3.jpg
|
||||||
|
if let Some(stem) = filename.file_stem().and_then(OsStr::to_str) {
|
||||||
|
let ext = filename.extension();
|
||||||
|
let mut filename_incr = filename.clone();
|
||||||
|
for n in 1..=1000 {
|
||||||
|
if let Some(ext) = ext.and_then(OsStr::to_str) {
|
||||||
|
filename_incr.set_file_name(format!("{}-{}.{}", stem, n, ext));
|
||||||
|
} else {
|
||||||
|
filename_incr.set_file_name(format!("{}-{}", stem, n));
|
||||||
|
}
|
||||||
|
|
||||||
|
if !filename_incr.exists() {
|
||||||
|
filename = filename_incr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if !filename.exists() || flags.contains(DownloadFlags::FORCE) {
|
if !filename.exists() || flags.contains(DownloadFlags::FORCE) {
|
||||||
let req = MediaRequest { source, format: MediaFormat::File };
|
let req = MediaRequest { source, format: MediaFormat::File };
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue