get rid of duplicate bytes.Buffer, use bytes.Reader instead, #39

This commit is contained in:
2024-01-27 17:23:09 +01:00
committed by T.v.Dein
parent d8d5be5c7d
commit a84f0e1436
7 changed files with 19 additions and 14 deletions

2
ad.go
View File

@@ -1,5 +1,5 @@
/*
Copyright © 2023 Thomas von Dein
Copyright © 2023-2024 Thomas von Dein
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by

View File

@@ -34,7 +34,7 @@ import (
)
const (
VERSION string = "0.3.2"
VERSION string = "0.3.3"
Baseuri string = "https://www.kleinanzeigen.de"
Listuri string = "/s-bestandsliste.html"
Defaultdir string = "."

View File

@@ -33,7 +33,7 @@ const MaxDistance = 3
type Image struct {
Filename string
Hash *goimagehash.ImageHash
Data *bytes.Buffer
Data *bytes.Reader
URI string
}
@@ -49,7 +49,7 @@ func (img *Image) LogValue() slog.Value {
// holds all images of an ad
type Cache []*goimagehash.ImageHash
func NewImage(buf *bytes.Buffer, filename string, uri string) *Image {
func NewImage(buf *bytes.Reader, filename string, uri string) *Image {
img := &Image{
Filename: filename,
URI: uri,
@@ -131,7 +131,9 @@ func ReadImages(addir string, dont bool) (Cache, error) {
return nil, err
}
img := NewImage(data, filename, "")
reader := bytes.NewReader(data.Bytes())
img := NewImage(reader, filename, "")
if err = img.CalcHash(); err != nil {
return nil, err
}

View File

@@ -168,14 +168,15 @@ func ScrapeImages(fetch *Fetcher, advertisement *Ad, addir string) error {
}
buf := new(bytes.Buffer)
_, err = buf.ReadFrom(body)
if err != nil {
return fmt.Errorf("failed to read from image buffer: %w", err)
}
buf2 := buf.Bytes() // needed for image writing
reader := bytes.NewReader(buf.Bytes())
image := NewImage(buf, file, imguri)
image := NewImage(reader, file, imguri)
err = image.CalcHash()
if err != nil {
return err
@@ -189,12 +190,13 @@ func ScrapeImages(fetch *Fetcher, advertisement *Ad, addir string) error {
}
}
err = WriteImage(file, buf2)
reader.Seek(0, 0)
err = WriteImage(file, reader)
if err != nil {
return err
}
slog.Debug("wrote image", "image", image, "size", len(buf2), "throttle", throttle)
slog.Debug("wrote image", "image", image, "size", buf.Len(), "throttle", throttle)
return nil
})

View File

@@ -89,14 +89,14 @@ func WriteAd(conf *Config, advertisement *Ad) (string, error) {
return addir, nil
}
func WriteImage(filename string, buf []byte) error {
func WriteImage(filename string, reader *bytes.Reader) error {
file, err := os.Create(filename)
if err != nil {
return fmt.Errorf("failed to open image file: %w", err)
}
defer file.Close()
_, err = file.Write(buf)
_, err = reader.WriteTo(file)
if err != nil {
return fmt.Errorf("failed to write to image file: %w", err)

View File

@@ -18,6 +18,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
package main
import (
"bytes"
"testing"
)
@@ -28,10 +29,10 @@ import (
func TestWriteImage(t *testing.T) {
t.Parallel()
buf := []byte{1, 2, 3, 4, 5, 6, 7, 8}
reader := bytes.NewReader([]byte{1, 2, 3, 4, 5, 6, 7, 8})
file := "t/out/t.jpg"
err := WriteImage(file, buf)
err := WriteImage(file, reader)
if err != nil {
t.Errorf("Could not write mock image to %s: %s", file, err.Error())
}

View File

@@ -1,5 +1,5 @@
/*
Copyright © 2023 Thomas von Dein
Copyright © 2023-2024 Thomas von Dein
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by