mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2026-02-10 11:08:33 +00:00
feat: better handling of multipart messages
This commit is contained in:
@ -23,7 +23,23 @@ func newWalker(root *Part) *Walker {
|
||||
}
|
||||
|
||||
func (w *Walker) Walk() (err error) {
|
||||
return w.root.visit(w)
|
||||
return w.visitPart(w.root)
|
||||
}
|
||||
|
||||
func (w *Walker) visitPart(p *Part) (err error) {
|
||||
hdl := w.getHandler(p)
|
||||
|
||||
if err = hdl.handleEnter(w, p); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
for _, child := range p.children {
|
||||
if err = w.visitPart(child); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
return hdl.handleExit(w, p)
|
||||
}
|
||||
|
||||
func (w *Walker) WithDefaultHandler(handler handler) *Walker {
|
||||
@ -46,6 +62,14 @@ func (w *Walker) RegisterContentDispositionHandler(contDisp string) *DispHandler
|
||||
return hdl
|
||||
}
|
||||
|
||||
func (w *Walker) getHandler(p *Part) handler {
|
||||
if dispHandler := w.getDispHandler(p); dispHandler != nil {
|
||||
return dispHandler
|
||||
}
|
||||
|
||||
return w.getTypeHandler(p)
|
||||
}
|
||||
|
||||
// getTypeHandler returns the appropriate PartHandler to handle the given part.
|
||||
// If no specialised handler exists, it returns the default handler.
|
||||
func (w *Walker) getTypeHandler(p *Part) handler {
|
||||
|
||||
Reference in New Issue
Block a user