mirror of
https://codeberg.org/scip/kleingebaeck.git
synced 2025-12-17 04:21:00 +01:00
Compare commits
4 Commits
fix/gocrit
...
fix/flag
| Author | SHA1 | Date | |
|---|---|---|---|
| bfcb4f5e43 | |||
| 5728c1eab3 | |||
| e092ce7b8e | |||
| 8950185307 |
1
.github/ISSUE_TEMPLATE/note_to_self.md
vendored
1
.github/ISSUE_TEMPLATE/note_to_self.md
vendored
@@ -5,3 +5,4 @@ title: "[bug-report]"
|
||||
labels: bug
|
||||
assignees: TLINDEN
|
||||
|
||||
---
|
||||
|
||||
2
ad.go
2
ad.go
@@ -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
|
||||
|
||||
@@ -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 = "."
|
||||
@@ -153,6 +153,7 @@ func InitConfig(output io.Writer) (*Config, error) {
|
||||
flagset.BoolP("help", "h", false, "show usage")
|
||||
flagset.BoolP("manual", "m", false, "show manual")
|
||||
flagset.BoolP("force", "f", false, "force")
|
||||
flagset.BoolP("ignoreerrors", "", false, "ignore image download HTTP errors")
|
||||
|
||||
if err := flagset.Parse(os.Args[1:]); err != nil {
|
||||
return nil, fmt.Errorf("failed to parse program arguments: %w", err)
|
||||
|
||||
8
image.go
8
image.go
@@ -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
|
||||
}
|
||||
|
||||
14
scrape.go
14
scrape.go
@@ -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,17 @@ func ScrapeImages(fetch *Fetcher, advertisement *Ad, addir string) error {
|
||||
}
|
||||
}
|
||||
|
||||
err = WriteImage(file, buf2)
|
||||
_, err = reader.Seek(0, 0)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to seek(0) on image reader: %w", err)
|
||||
}
|
||||
|
||||
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
|
||||
})
|
||||
|
||||
4
store.go
4
store.go
@@ -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)
|
||||
|
||||
@@ -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())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user