gnucash: Support directly importing gzipped files

This commit is contained in:
Aaron Lindsay 2017-06-19 21:08:49 -04:00
parent 69bbd3db62
commit cd9ad1d4d7
1 changed files with 24 additions and 1 deletions

View File

@ -1,6 +1,8 @@
package main
import (
"bufio"
"compress/gzip"
"encoding/xml"
"errors"
"fmt"
@ -288,7 +290,28 @@ func GnucashImportHandler(w http.ResponseWriter, r *http.Request) {
return
}
gnucashImport, err := ImportGnucash(part)
bufread := bufio.NewReader(part)
gzHeader, err := bufread.Peek(2)
if err != nil {
WriteError(w, 999 /*Internal Error*/)
log.Print(err)
return
}
// Does this look like a gzipped file?
var gnucashImport *GnucashImport
if gzHeader[0] == 0x1f && gzHeader[1] == 0x8b {
gzr, err := gzip.NewReader(bufread)
if err != nil {
WriteError(w, 999 /*Internal Error*/)
log.Print(err)
return
}
gnucashImport, err = ImportGnucash(gzr)
} else {
gnucashImport, err = ImportGnucash(bufread)
}
if err != nil {
WriteError(w, 3 /*Invalid Request*/)
return