attempt at fixing existing filename issue when exporting

This commit is contained in:
Paul Hovey 2023-12-25 14:58:38 -06:00
parent e8558b17f5
commit cc0ea56798
3 changed files with 51 additions and 13 deletions

View file

@ -74,6 +74,22 @@ func (a *albumDiskInfo) IsMetaFileNamePresent(metaFileName string) bool {
return ok
}
// GenerateUniqueMetaFileName generates a unique metafile name.
func (a *albumDiskInfo) GenerateUniqueMetaFileName(baseFileName, extension string) string {
potentialDiskFileName := fmt.Sprintf("%s%s.json", baseFileName, extension)
count := 1
for a.IsMetaFileNamePresent(potentialDiskFileName) {
// separate the file name and extension
fileName := fmt.Sprintf("%s_%d", baseFileName, count)
potentialDiskFileName = fmt.Sprintf("%s%s.json", fileName, extension)
count++
if !a.IsMetaFileNamePresent(potentialDiskFileName) {
break
}
}
return potentialDiskFileName
}
// GenerateUniqueFileName generates a unique file name.
func (a *albumDiskInfo) GenerateUniqueFileName(baseFileName, extension string) string {
fileName := fmt.Sprintf("%s%s", baseFileName, extension)

32
pkg/disk_test.go Normal file
View file

@ -0,0 +1,32 @@
package pkg
import (
"path/filepath"
"strings"
"testing"
)
func TestGenerateUniqueFileName(t *testing.T) {
existingFilenames := make(map[string]bool)
testFilename := "FullSizeRender.jpg" // what Apple calls shared files
existingFilenames[strings.ToLower(testFilename)] = true
a := &albumDiskInfo{
FileNames: &existingFilenames,
}
// this is taken from downloadEntry()
extension := filepath.Ext(testFilename)
baseFileName := strings.TrimSuffix(filepath.Clean(filepath.Base(testFilename)), extension)
for i := 0; i < 100; i++ {
newFilename := a.GenerateUniqueFileName(baseFileName, extension)
if strings.Contains(newFilename, "_1_2") {
t.Fatalf("Filename contained _1_2")
} else {
// add generated name to existing files
existingFilenames[strings.ToLower(newFilename)] = true
}
}
}

View file

@ -124,17 +124,7 @@ func (c *ClICtrl) downloadEntry(ctx context.Context,
// Get the extension
extension := filepath.Ext(fileDiskMetadata.Title)
baseFileName := strings.TrimSuffix(filepath.Clean(filepath.Base(fileDiskMetadata.Title)), extension)
potentialDiskFileName := fmt.Sprintf("%s%s.json", baseFileName, extension)
count := 1
for diskInfo.IsMetaFileNamePresent(potentialDiskFileName) {
// separate the file name and extension
baseFileName = fmt.Sprintf("%s_%d", baseFileName, count)
potentialDiskFileName = fmt.Sprintf("%s%s.json", baseFileName, extension)
count++
if !diskInfo.IsMetaFileNamePresent(potentialDiskFileName) {
break
}
}
diskMetaFileName := diskInfo.GenerateUniqueMetaFileName(baseFileName, extension)
if file.IsLivePhoto() {
imagePath, videoPath, err := UnpackLive(*decrypt)
if err != nil {
@ -176,13 +166,13 @@ func (c *ClICtrl) downloadEntry(ctx context.Context,
fileDiskMetadata.AddFileName(fileName)
}
fileDiskMetadata.MetaFileName = potentialDiskFileName
fileDiskMetadata.MetaFileName = diskMetaFileName
err = diskInfo.AddEntry(fileDiskMetadata)
if err != nil {
return err
}
err = writeJSONToFile(filepath.Join(diskInfo.ExportRoot, diskInfo.AlbumMeta.FolderName, ".meta", potentialDiskFileName), fileDiskMetadata)
err = writeJSONToFile(filepath.Join(diskInfo.ExportRoot, diskInfo.AlbumMeta.FolderName, ".meta", diskMetaFileName), fileDiskMetadata)
if err != nil {
return err
}