v0.8.5: add XMP privacy controls
This commit is contained in:
@@ -4584,6 +4584,10 @@ func TestSidecarConfigAndErrors(t *testing.T) {
|
||||
if _, ok := parseExportOptions([]string{"--sidecar", "bad"}, &stderr); ok || !strings.Contains(stderr.String(), "--sidecar") {
|
||||
t.Fatalf("expected sidecar validation error, stderr=%q", stderr.String())
|
||||
}
|
||||
stderr.Reset()
|
||||
if _, ok := parseExportOptions([]string{"--xmp-privacy", "bad"}, &stderr); ok || !strings.Contains(stderr.String(), "--xmp-privacy") {
|
||||
t.Fatalf("expected xmp privacy validation error, stderr=%q", stderr.String())
|
||||
}
|
||||
|
||||
b := &mockBridge{assets: []photos.Asset{{ID: "x1", Filename: "photo.jpg"}}}
|
||||
b.exportPreviewFn = func(assetID, out string, targetSize, quality, index int) (photos.ExportResult, error) {
|
||||
@@ -4598,6 +4602,44 @@ func TestSidecarConfigAndErrors(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestXMPSidecarPrivacy(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
asset := photos.Asset{ID: "x1", Filename: "geo.jpg", Location: &photos.AssetLocation{Latitude: 59.3293, Longitude: 18.0686}}
|
||||
bridge := &mockBridge{}
|
||||
bridge.reverseGeocodeFn = func(float64, float64) (photos.Placemark, error) {
|
||||
return photos.Placemark{Country: "Sweden", Locality: "Stockholm"}, nil
|
||||
}
|
||||
pa := pendingAsset{asset: asset, root: dir, path: dir, album: "Album"}
|
||||
for _, tc := range []struct {
|
||||
privacy string
|
||||
wantGPS bool
|
||||
wantAddress bool
|
||||
}{
|
||||
{privacy: "keep", wantGPS: true, wantAddress: true},
|
||||
{privacy: "strip-address", wantGPS: true, wantAddress: false},
|
||||
{privacy: "strip-location", wantGPS: false, wantAddress: false},
|
||||
} {
|
||||
path := filepath.Join(dir, tc.privacy+".jpg")
|
||||
if err := os.WriteFile(path, []byte("data"), 0644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := writeSidecarIfNeeded(pa, photos.ExportResult{Filename: filepath.Base(path), Size: 4}, false, exportOptions{sidecar: "xmp", reverseGeocode: true, xmpPrivacy: tc.privacy}, newGeocodeCache(dir), bridge); err != nil {
|
||||
t.Fatalf("%s write sidecar: %v", tc.privacy, err)
|
||||
}
|
||||
data, err := os.ReadFile(sidecarPath(path))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
content := string(data)
|
||||
if strings.Contains(content, "photoscli:latitude") != tc.wantGPS {
|
||||
t.Fatalf("%s GPS presence mismatch in %s", tc.privacy, content)
|
||||
}
|
||||
if strings.Contains(content, "photoscli:addressCountry") != tc.wantAddress {
|
||||
t.Fatalf("%s address presence mismatch in %s", tc.privacy, content)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMetadataOnlyExport(t *testing.T) {
|
||||
dir := t.TempDir()
|
||||
m := manifest.LoadJSONL(dir)
|
||||
|
||||
Reference in New Issue
Block a user