ad9167360d
* Import: Implement "add to album" in backend #246 Signed-off-by: Michael Mayer <michael@liquidbytes.net> * Import: Implement "add to album" in frontend #246 Signed-off-by: Michael Mayer <michael@liquidbytes.net> * Add OriginalName to photo search result Signed-off-by: Michael Mayer <michael@liquidbytes.net> * Add json tags to PhotoName and PhotoPath Signed-off-by: Michael Mayer <michael@liquidbytes.net> * Photo: Use EstimateCountry() in UpdateLocation() Signed-off-by: Michael Mayer <michael@liquidbytes.net> * Photo: Set OriginalName earlier while indexing Signed-off-by: Michael Mayer <michael@liquidbytes.net> * Ignore whitespace when stripping sequence from filename #335 Signed-off-by: Michael Mayer <michael@liquidbytes.net> * Fix labels count for SQLite Signed-off-by: Michael Mayer <michael@liquidbytes.net> * Import: Show name of new albums #246 Signed-off-by: Michael Mayer <michael@liquidbytes.net> * Frontend: Add acceptance test files Co-authored-by: Michael Mayer <michael@liquidbytes.net>
52 lines
1.4 KiB
Go
52 lines
1.4 KiB
Go
package query
|
|
|
|
import (
|
|
"path/filepath"
|
|
|
|
"github.com/photoprism/photoprism/internal/entity"
|
|
"github.com/photoprism/photoprism/pkg/fs"
|
|
)
|
|
|
|
// FoldersByPath returns a slice of folders in a given directory incl sub directories in recursive mode.
|
|
func FoldersByPath(rootName, rootPath, path string, recursive bool) (folders entity.Folders, err error) {
|
|
dirs, err := fs.Dirs(filepath.Join(rootPath, path), recursive)
|
|
|
|
if err != nil {
|
|
return folders, err
|
|
}
|
|
|
|
folders = make(entity.Folders, len(dirs))
|
|
|
|
for i, dir := range dirs {
|
|
folder := entity.FindFolder(rootName, filepath.Join(path, dir))
|
|
|
|
if folder == nil {
|
|
newFolder := entity.NewFolder(rootName, filepath.Join(path, dir), nil)
|
|
|
|
if err := newFolder.Create(); err != nil {
|
|
log.Errorf("folders: %s (create folder)", err.Error())
|
|
} else {
|
|
folders[i] = newFolder
|
|
}
|
|
} else {
|
|
folders[i] = *folder
|
|
}
|
|
}
|
|
|
|
return folders, nil
|
|
}
|
|
|
|
// AlbumFolders returns folders that should be added as album.
|
|
func AlbumFolders(threshold int) (folders entity.Folders, err error) {
|
|
db := UnscopedDb().Table("folders").
|
|
Select("folders.*, COUNT(photos.id) AS photo_count").
|
|
Joins("JOIN photos ON photos.photo_path = folders.path AND photos.deleted_at IS NULL AND photos.photo_quality >= 3").
|
|
Group("folders.path").
|
|
Having("photo_count >= ?", threshold)
|
|
|
|
if err := db.Scan(&folders).Error; err != nil {
|
|
return folders, err
|
|
}
|
|
|
|
return folders, nil
|
|
}
|