failback to Content-Type filename when encoded Content-Disposition is used
Hi! This patch will fix missing filename if it is RFC2231 encoded with charset different then ASCII or UTF8. Example how it looks like in mail: Content-Type: application/pdf; name="=?UTF-8?Q?Opis_przedmiotu_zam=c3=b3wienia_-_za=c5=82=c4=85cznik_nr_1?= =?UTF-8?Q?=2epdf?=" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0*=iso-8859-2''%4F%70%69%73%20%70%72%7A%65%64%6D%69%6F%74%75%20; filename*1*=%7A%61%6D%F3%77%69%65%6E%69%61%20%2D%20%7A%61%B3%B1%63%7A%6E; filename*2*=%69%6B%20%6E%72%20%31%2E%70%64%66 Yes, this should be forbidden :-). Anyway, best solotion in such cases is to failback to Content-Type name. I am not sure if it is guaranted to be there, but probably it will. Leszek
This commit is contained in:
parent
e84e402e48
commit
4f2892695e
2 changed files with 5 additions and 0 deletions
|
@ -94,6 +94,8 @@ func (Save) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
save_dir = path
|
save_dir = path
|
||||||
if filename, ok := p.Part.DispositionParams["filename"]; ok {
|
if filename, ok := p.Part.DispositionParams["filename"]; ok {
|
||||||
save_file = filename
|
save_file = filename
|
||||||
|
} else if filename, ok := p.Part.Params["name"]; ok {
|
||||||
|
save_file = filename
|
||||||
} else {
|
} else {
|
||||||
timestamp := time.Now().Format("2006-01-02-150405")
|
timestamp := time.Now().Format("2006-01-02-150405")
|
||||||
save_file = fmt.Sprintf("aerc_%v", timestamp)
|
save_file = fmt.Sprintf("aerc_%v", timestamp)
|
||||||
|
|
|
@ -319,6 +319,9 @@ func (ps *PartSwitcher) Draw(ctx *ui.Context) {
|
||||||
strings.ToLower(part.part.MIMESubType))
|
strings.ToLower(part.part.MIMESubType))
|
||||||
if filename, ok := part.part.DispositionParams["filename"]; ok {
|
if filename, ok := part.part.DispositionParams["filename"]; ok {
|
||||||
name += fmt.Sprintf(" (%s)", filename)
|
name += fmt.Sprintf(" (%s)", filename)
|
||||||
|
} else if filename, ok := part.part.Params["name"]; ok {
|
||||||
|
// workaround golang not supporting RFC2231 besides ASCII and UTF8
|
||||||
|
name += fmt.Sprintf(" (%s)", filename)
|
||||||
}
|
}
|
||||||
ctx.Printf(len(part.index)*2, y+i, style, "%s", name)
|
ctx.Printf(len(part.index)*2, y+i, style, "%s", name)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue