Skip to content

Commit

Permalink
fix: #120 XMP are rejected
Browse files Browse the repository at this point in the history
  • Loading branch information
simulot committed Jan 6, 2024
1 parent 79eb1be commit 7997a44
Show file tree
Hide file tree
Showing 9 changed files with 91 additions and 66 deletions.
127 changes: 65 additions & 62 deletions browser/files/localassets.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,88 +79,91 @@ func (la *LocalAssetBrowser) handleFolder(ctx context.Context, fsys fs.FS, fileC
return err
}

fileMap := map[string][]fs.DirEntry{}
// fileMap := map[string][]fs.DirEntry{}
// for _, e := range entries {
// if e.IsDir() {
// continue
// }
// ext := path.Ext(e.Name())
// _, err := fshelper.MimeFromExt(ext)
// if strings.ToLower(ext) == ".xmp" || err == nil {
// base := strings.TrimSuffix(e.Name(), ext)
// fileMap[base] = append(fileMap[base], e)
// }
// }

for _, e := range entries {
if e.IsDir() {
continue
}
ext := path.Ext(e.Name())
_, err := fshelper.MimeFromExt(ext)
if strings.ToLower(ext) == ".xmp" || err == nil {
base := strings.TrimSuffix(e.Name(), ext)
fileMap[base] = append(fileMap[base], e)
fileName := path.Join(folder, e.Name())
la.log.AddEntry(fileName, logger.DISCOVERED_FILE, "")
name := e.Name()
ext := strings.ToLower(path.Ext(name))
if fshelper.IsMetadataExt(ext) {
continue
} else if fshelper.IsIgnoredExt(ext) {
la.log.AddEntry(fileName, logger.UNSUPPORTED, "")
continue
}
m, err := fshelper.MimeFromExt(strings.ToLower(ext))
if err != nil {
la.log.AddEntry(fileName, logger.UNSUPPORTED, "")
continue
}
ss := strings.Split(m[0], "/")
if ss[0] == "image" {
la.log.AddEntry(name, logger.SCANNED_IMAGE, "")
} else {
la.log.AddEntry(name, logger.SCANNED_VIDEO, "")
}
}

for _, es := range fileMap {

for _, e := range es {
fileName := path.Join(folder, e.Name())
la.log.AddEntry(fileName, logger.DISCOVERED_FILE, "")
name := e.Name()
ext := strings.ToLower(path.Ext(name))
if fshelper.IsIgnoredExt(ext) {
la.log.AddEntry(fileName, logger.UNSUPPORTED, "")
continue
}
m, err := fshelper.MimeFromExt(strings.ToLower(ext))
if err != nil {
la.log.AddEntry(fileName, logger.UNSUPPORTED, "")
continue
}
ss := strings.Split(m[0], "/")
if ss[0] == "image" {
la.log.AddEntry(name, logger.SCANNED_IMAGE, "")
} else {
la.log.AddEntry(name, logger.SCANNED_VIDEO, "")
}

f := browser.LocalAssetFile{
FSys: fsys,
FileName: path.Join(folder, name),
Title: path.Base(name),
FileSize: 0,
Err: err,
DateTaken: metadata.TakeTimeFromName(filepath.Base(name)),
}
f := browser.LocalAssetFile{
FSys: fsys,
FileName: path.Join(folder, name),
Title: path.Base(name),
FileSize: 0,
Err: err,
DateTaken: metadata.TakeTimeFromName(filepath.Base(name)),
}

s, err := e.Info()
if err != nil {
f.Err = err
} else {
f.FileSize = int(s.Size())
if f.DateTaken.IsZero() {
err = la.ReadMetadataFromFile(&f)
_ = err
if f.DateTaken.Before(toOldDate) {
f.DateTaken = time.Now()
}
}
if !la.checkSidecar(fsys, &f, name+".xmp") {
la.checkSidecar(fsys, &f, strings.TrimSuffix(name, ext)+".xmp")
s, err := e.Info()
if err != nil {
f.Err = err
} else {
f.FileSize = int(s.Size())
if f.DateTaken.IsZero() {
err = la.ReadMetadataFromFile(&f)
_ = err
if f.DateTaken.Before(toOldDate) {
f.DateTaken = time.Now()
}
}
// Check if the context has been cancelled
select {
case <-ctx.Done():
// If the context has been cancelled, return immediately
return ctx.Err()
default:
fileChan <- &f
if !la.checkSidecar(fsys, &f, path.Join(folder, name)+".xmp") {
la.checkSidecar(fsys, &f, strings.TrimSuffix(path.Join(folder, name), ext)+".xmp")
}
}
// Check if the context has been cancelled
select {
case <-ctx.Done():
// If the context has been cancelled, return immediately
return ctx.Err()
default:
fileChan <- &f
}

}
return nil
}

func (la *LocalAssetBrowser) checkSidecar(fsys fs.FS, f *browser.LocalAssetFile, name string) bool {
_, err := fs.Stat(fsys, name+".xmp")
_, err := fs.Stat(fsys, name)
if err == nil {
la.log.AddEntry(name, logger.METADATA, "")
f.SideCar = &metadata.SideCar{
FileName: name + ".xmp",
FileName: name,
OnFSsys: true,
}
la.log.AddEntry(name, logger.METADATA, "")
return true
}
return false
Expand Down
2 changes: 1 addition & 1 deletion cmdduplicate/duplicate.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ import (
"strings"
"time"

"github.com/simulot/immich-go/helpers/fshelper/myflag"
"github.com/simulot/immich-go/helpers/gen"
"github.com/simulot/immich-go/helpers/myflag"
"github.com/simulot/immich-go/immich"
"github.com/simulot/immich-go/logger"
"github.com/simulot/immich-go/ui"
Expand Down
2 changes: 1 addition & 1 deletion cmdmetadata/metadatacmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"time"

"github.com/simulot/immich-go/helpers/docker"
"github.com/simulot/immich-go/helpers/fshelper/myflag"
"github.com/simulot/immich-go/helpers/myflag"
"github.com/simulot/immich-go/immich"
"github.com/simulot/immich-go/immich/metadata"
"github.com/simulot/immich-go/logger"
Expand Down
14 changes: 14 additions & 0 deletions cmdupload/e2e_upload_folder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,20 @@ func Test_CreateAlbumFolder(t *testing.T) {
runCase(t, tc)
}

func Test_XMP(t *testing.T) {

tc := testCase{
name: "Test_XMP",
args: []string{
"../../test-data/xmp/files",
},
resetImmich: true,
expectError: false,
APITrace: false,
}
runCase(t, tc)
}

// ResetImmich
// ⛔: will remove the content of the server.‼️
// Give the user of the connection to confirm the server instance: debug@example.com
Expand Down
2 changes: 1 addition & 1 deletion cmdupload/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@ import (
"github.com/simulot/immich-go/browser/files"
"github.com/simulot/immich-go/browser/gp"
"github.com/simulot/immich-go/helpers/fshelper"
"github.com/simulot/immich-go/helpers/fshelper/myflag"
"github.com/simulot/immich-go/helpers/gen"
"github.com/simulot/immich-go/helpers/myflag"
"github.com/simulot/immich-go/helpers/stacking"
"github.com/simulot/immich-go/immich"
"github.com/simulot/immich-go/immich/metadata"
Expand Down
8 changes: 8 additions & 0 deletions helpers/fshelper/extensions.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,3 +100,11 @@ var ignoredExtensions = []string{
func IsIgnoredExt(ext string) bool {
return slices.Contains(ignoredExtensions, ext)
}

var metaDataExtensions = []string{
".json", ".xmp",
}

func IsMetadataExt(ext string) bool {
return slices.Contains(metaDataExtensions, ext)
}
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
"github.com/simulot/immich-go/cmdstack"
"github.com/simulot/immich-go/cmdtool"
"github.com/simulot/immich-go/cmdupload"
"github.com/simulot/immich-go/helpers/fshelper/myflag"
"github.com/simulot/immich-go/helpers/myflag"
"github.com/simulot/immich-go/helpers/tzone"
"github.com/simulot/immich-go/immich"
"github.com/simulot/immich-go/logger"
Expand Down

0 comments on commit 7997a44

Please sign in to comment.