Skip to content

Commit 5f3a337

Browse files
committed
feat: implement checksum calculation for assets
1 parent 8ed7098 commit 5f3a337

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

internal/assets/asset.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package assets
22

33
import (
4+
"errors"
45
"fmt"
56
"log/slog"
67
"path"
78
"time"
89

910
"github.com/simulot/immich-go/internal/fshelper"
1011
"github.com/simulot/immich-go/internal/fshelper/cachereader"
12+
"github.com/simulot/immich-go/internal/fshelper/hash"
1113
)
1214

1315
/*
@@ -161,3 +163,28 @@ func (a *Asset) MergeTags(t2 []Tag) {
161163
}
162164
}
163165
}
166+
167+
// GetChecksum returns the checksum of the asset.
168+
// If the checksum is already set, it returns it. Otherwise, it computes it.
169+
// Use this method to get the checksum of an asset.
170+
func (a *Asset) GetChecksum() (string, error) {
171+
if a.Checksum != "" {
172+
return a.Checksum, nil
173+
}
174+
if a.File.FS() == nil {
175+
return "", errors.New("no file to compute checksum")
176+
}
177+
178+
f, err := a.File.Open()
179+
if err != nil {
180+
return "", err
181+
}
182+
defer f.Close()
183+
184+
sha1Hash, err := hash.Base64Encode(hash.GetSHA1Hash(f))
185+
if err != nil {
186+
return "", err
187+
}
188+
a.Checksum = sha1Hash
189+
return a.Checksum, nil
190+
}

internal/assets/assetFile.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@ func (a *Asset) OpenFile() (osfs.OSFS, error) {
2222
}
2323
debugfiles.TrackOpenFile(f, a.File.FullName())
2424
// Create a cache reader from the FS.File
25-
cr, err := cachereader.NewCacheReader(a.File.FullName(), f)
25+
cr, sha1, err := cachereader.NewCacheReader(a.File.FullName(), f)
2626
if err != nil {
2727
return nil, err
2828
}
2929
a.cacheReader = cr
30+
a.Checksum = sha1
3031
}
3132
return a.cacheReader.OpenFile()
3233
}

0 commit comments

Comments
 (0)