mirror of
https://github.com/celogeek/go-comic-converter.git
synced 2025-05-24 15:52:38 +02:00
remove pointer from epub zip
This commit is contained in:
parent
a94e67dd06
commit
3d31108aba
@ -17,17 +17,17 @@ type EPUBZip struct {
|
||||
}
|
||||
|
||||
// New create a new EPUB
|
||||
func New(path string) (*EPUBZip, error) {
|
||||
func New(path string) (EPUBZip, error) {
|
||||
w, err := os.Create(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return EPUBZip{}, err
|
||||
}
|
||||
wz := zip.NewWriter(w)
|
||||
return &EPUBZip{w, wz}, nil
|
||||
return EPUBZip{w, wz}, nil
|
||||
}
|
||||
|
||||
// Close compress pipe and file.
|
||||
func (e *EPUBZip) Close() error {
|
||||
func (e EPUBZip) Close() error {
|
||||
if err := e.wz.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
@ -37,10 +37,10 @@ func (e *EPUBZip) Close() error {
|
||||
// WriteMagic Write mimetype, in a very specific way.
|
||||
//
|
||||
// This will be valid with epubcheck tools.
|
||||
func (e *EPUBZip) WriteMagic() error {
|
||||
func (e EPUBZip) WriteMagic() error {
|
||||
t := time.Now().UTC()
|
||||
//goland:noinspection GoDeprecation
|
||||
fh := &zip.FileHeader{
|
||||
fh := zip.FileHeader{
|
||||
Name: "mimetype",
|
||||
Method: zip.Store,
|
||||
Modified: t,
|
||||
@ -53,7 +53,7 @@ func (e *EPUBZip) WriteMagic() error {
|
||||
fh.CreatorVersion = fh.CreatorVersion&0xff00 | 20 // preserve compatibility byte
|
||||
fh.ReaderVersion = 20
|
||||
fh.SetMode(0600)
|
||||
m, err := e.wz.CreateRaw(fh)
|
||||
m, err := e.wz.CreateRaw(&fh)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
@ -62,12 +62,12 @@ func (e *EPUBZip) WriteMagic() error {
|
||||
return err
|
||||
}
|
||||
|
||||
func (e *EPUBZip) Copy(fz *zip.File) error {
|
||||
func (e EPUBZip) Copy(fz *zip.File) error {
|
||||
return e.wz.Copy(fz)
|
||||
}
|
||||
|
||||
// WriteRaw Write image. They are already compressed, so we write them down directly.
|
||||
func (e *EPUBZip) WriteRaw(raw *ZipImage) error {
|
||||
func (e EPUBZip) WriteRaw(raw ZipImage) error {
|
||||
m, err := e.wz.CreateRaw(raw.Header)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -77,7 +77,7 @@ func (e *EPUBZip) WriteRaw(raw *ZipImage) error {
|
||||
}
|
||||
|
||||
// WriteContent Write file. Compressed it using deflate.
|
||||
func (e *EPUBZip) WriteContent(file string, content []byte) error {
|
||||
func (e EPUBZip) WriteContent(file string, content []byte) error {
|
||||
m, err := e.wz.CreateHeader(&zip.FileHeader{
|
||||
Name: file,
|
||||
Modified: time.Now(),
|
||||
|
@ -18,7 +18,7 @@ type ZipImage struct {
|
||||
}
|
||||
|
||||
// CompressImage create gzip encoded jpeg
|
||||
func CompressImage(filename string, format string, img image.Image, quality int) (*ZipImage, error) {
|
||||
func CompressImage(filename string, format string, img image.Image, quality int) (ZipImage, error) {
|
||||
var (
|
||||
data, cdata bytes.Buffer
|
||||
err error
|
||||
@ -33,27 +33,27 @@ func CompressImage(filename string, format string, img image.Image, quality int)
|
||||
err = fmt.Errorf("unknown format %q", format)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return ZipImage{}, err
|
||||
}
|
||||
|
||||
wcdata, err := flate.NewWriter(&cdata, flate.BestCompression)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return ZipImage{}, err
|
||||
}
|
||||
|
||||
_, err = wcdata.Write(data.Bytes())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return ZipImage{}, err
|
||||
}
|
||||
|
||||
err = wcdata.Close()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return ZipImage{}, err
|
||||
}
|
||||
|
||||
t := time.Now()
|
||||
//goland:noinspection GoDeprecation
|
||||
return &ZipImage{
|
||||
return ZipImage{
|
||||
&zip.FileHeader{
|
||||
Name: filename,
|
||||
CompressedSize64: uint64(cdata.Len()),
|
||||
|
@ -14,16 +14,16 @@ type StorageImageWriter struct {
|
||||
mut *sync.Mutex
|
||||
}
|
||||
|
||||
func NewStorageImageWriter(filename string, format string) (*StorageImageWriter, error) {
|
||||
func NewStorageImageWriter(filename string, format string) (StorageImageWriter, error) {
|
||||
fh, err := os.Create(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return StorageImageWriter{}, err
|
||||
}
|
||||
fz := zip.NewWriter(fh)
|
||||
return &StorageImageWriter{fh, fz, format, &sync.Mutex{}}, nil
|
||||
return StorageImageWriter{fh, fz, format, &sync.Mutex{}}, nil
|
||||
}
|
||||
|
||||
func (e *StorageImageWriter) Close() error {
|
||||
func (e StorageImageWriter) Close() error {
|
||||
if err := e.fz.Close(); err != nil {
|
||||
_ = e.fh.Close()
|
||||
return err
|
||||
@ -31,7 +31,7 @@ func (e *StorageImageWriter) Close() error {
|
||||
return e.fh.Close()
|
||||
}
|
||||
|
||||
func (e *StorageImageWriter) Add(filename string, img image.Image, quality int) error {
|
||||
func (e StorageImageWriter) Add(filename string, img image.Image, quality int) error {
|
||||
zipImage, err := CompressImage(filename, e.format, img, quality)
|
||||
if err != nil {
|
||||
return err
|
||||
@ -59,42 +59,41 @@ type StorageImageReader struct {
|
||||
files map[string]*zip.File
|
||||
}
|
||||
|
||||
func NewStorageImageReader(filename string) (*StorageImageReader, error) {
|
||||
func NewStorageImageReader(filename string) (StorageImageReader, error) {
|
||||
fh, err := os.Open(filename)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return StorageImageReader{}, err
|
||||
}
|
||||
s, err := fh.Stat()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return StorageImageReader{}, err
|
||||
}
|
||||
fz, err := zip.NewReader(fh, s.Size())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return StorageImageReader{}, err
|
||||
}
|
||||
files := map[string]*zip.File{}
|
||||
for _, z := range fz.File {
|
||||
files[z.Name] = z
|
||||
}
|
||||
return &StorageImageReader{filename, fh, fz, files}, nil
|
||||
return StorageImageReader{filename, fh, fz, files}, nil
|
||||
}
|
||||
|
||||
func (e *StorageImageReader) Get(filename string) *zip.File {
|
||||
func (e StorageImageReader) Get(filename string) *zip.File {
|
||||
return e.files[filename]
|
||||
}
|
||||
|
||||
func (e *StorageImageReader) Size(filename string) uint64 {
|
||||
img := e.Get(filename)
|
||||
if img != nil {
|
||||
func (e StorageImageReader) Size(filename string) uint64 {
|
||||
if img, ok := e.files[filename]; ok {
|
||||
return img.CompressedSize64 + 30 + uint64(len(img.Name))
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (e *StorageImageReader) Close() error {
|
||||
func (e StorageImageReader) Close() error {
|
||||
return e.fh.Close()
|
||||
}
|
||||
|
||||
func (e *StorageImageReader) Remove() error {
|
||||
func (e StorageImageReader) Remove() error {
|
||||
return os.Remove(e.filename)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user