Use functions for all config values #50
Why? See https://github.com/photoprism/photoprism/issues/50#issuecomment-433856358
This commit is contained in:
parent
2cce8ded84
commit
dd26ee0dca
2
Makefile
2
Makefile
|
@ -19,7 +19,7 @@ install-bin:
|
||||||
scripts/build.sh install /usr/local/bin/$(BINARY_NAME)
|
scripts/build.sh install /usr/local/bin/$(BINARY_NAME)
|
||||||
install-assets:
|
install-assets:
|
||||||
mkdir -p /srv/photoprism/photos
|
mkdir -p /srv/photoprism/photos
|
||||||
mkdir -p /srv/photoprism/thumbnails
|
mkdir -p /srv/photoprism/cache
|
||||||
mkdir -p /srv/photoprism/database
|
mkdir -p /srv/photoprism/database
|
||||||
cp -r assets/server /srv/photoprism
|
cp -r assets/server /srv/photoprism
|
||||||
cp -r assets/tensorflow /srv/photoprism
|
cp -r assets/tensorflow /srv/photoprism
|
||||||
|
|
|
@ -11,7 +11,7 @@ services:
|
||||||
- 2342:80 # left side is your local port (change if port 2342 is already used or you want to use port 80)
|
- 2342:80 # left side is your local port (change if port 2342 is already used or you want to use port 80)
|
||||||
volumes:
|
volumes:
|
||||||
- ~/Photos:/srv/photoprism/photos # change ~/Photos to whatever directory you want to use on your local computer
|
- ~/Photos:/srv/photoprism/photos # change ~/Photos to whatever directory you want to use on your local computer
|
||||||
- photoprism-thumbnails:/srv/photoprism/thumbnails # keep this (thumbnail cache)
|
- photoprism-cache:/srv/photoprism/cache # keep this (thumbnail cache)
|
||||||
environment:
|
environment:
|
||||||
PHOTOPRISM_IMPORT_PATH: /srv/photoprism/photos/Import # ~/Photos/Import (files to be imported to originals)
|
PHOTOPRISM_IMPORT_PATH: /srv/photoprism/photos/Import # ~/Photos/Import (files to be imported to originals)
|
||||||
PHOTOPRISM_EXPORT_PATH: /srv/photoprism/photos/Export # ~/Photos/Export (files exported from originals)
|
PHOTOPRISM_EXPORT_PATH: /srv/photoprism/photos/Export # ~/Photos/Export (files exported from originals)
|
||||||
|
@ -30,7 +30,7 @@ services:
|
||||||
MYSQL_DATABASE: photoprism
|
MYSQL_DATABASE: photoprism
|
||||||
|
|
||||||
volumes: # keep this
|
volumes: # keep this
|
||||||
photoprism-thumbnails:
|
photoprism-cache:
|
||||||
driver: local
|
driver: local
|
||||||
photoprism-database:
|
photoprism-database:
|
||||||
driver: local
|
driver: local
|
|
@ -1,7 +1,7 @@
|
||||||
debug: false
|
debug: false
|
||||||
darktable-cli: /usr/bin/darktable-cli
|
darktable-cli: /usr/bin/darktable-cli
|
||||||
assets-path: /srv/photoprism
|
assets-path: /srv/photoprism
|
||||||
thumbnails-path: /srv/photoprism/thumbnails
|
cache-path: /srv/photoprism/cache
|
||||||
originals-path: /srv/photoprism/photos/originals
|
originals-path: /srv/photoprism/photos/originals
|
||||||
import-path: /srv/photoprism/photos/import
|
import-path: /srv/photoprism/photos/import
|
||||||
export-path: /srv/photoprism/photos/export
|
export-path: /srv/photoprism/photos/export
|
||||||
|
|
|
@ -13,7 +13,7 @@ services:
|
||||||
PHOTOPRISM_DEBUG: "true"
|
PHOTOPRISM_DEBUG: "true"
|
||||||
PHOTOPRISM_SERVER_MODE: "debug"
|
PHOTOPRISM_SERVER_MODE: "debug"
|
||||||
PHOTOPRISM_ASSETS_PATH: "/go/src/github.com/photoprism/photoprism/assets"
|
PHOTOPRISM_ASSETS_PATH: "/go/src/github.com/photoprism/photoprism/assets"
|
||||||
PHOTOPRISM_THUMBNAILS_PATH: "/go/src/github.com/photoprism/photoprism/assets/thumbnails"
|
PHOTOPRISM_CACHE_PATH: "/go/src/github.com/photoprism/photoprism/assets/cache"
|
||||||
PHOTOPRISM_IMPORT_PATH: "/go/src/github.com/photoprism/photoprism/assets/photos/import"
|
PHOTOPRISM_IMPORT_PATH: "/go/src/github.com/photoprism/photoprism/assets/photos/import"
|
||||||
PHOTOPRISM_EXPORT_PATH: "/go/src/github.com/photoprism/photoprism/assets/photos/export"
|
PHOTOPRISM_EXPORT_PATH: "/go/src/github.com/photoprism/photoprism/assets/photos/export"
|
||||||
PHOTOPRISM_ORIGINALS_PATH: "/go/src/github.com/photoprism/photoprism/assets/photos/originals"
|
PHOTOPRISM_ORIGINALS_PATH: "/go/src/github.com/photoprism/photoprism/assets/photos/originals"
|
||||||
|
|
|
@ -29,7 +29,7 @@ func GetPhotos(router *gin.RouterGroup, conf *photoprism.Config) {
|
||||||
router.GET("/photos", func(c *gin.Context) {
|
router.GET("/photos", func(c *gin.Context) {
|
||||||
var form forms.PhotoSearchForm
|
var form forms.PhotoSearchForm
|
||||||
|
|
||||||
search := photoprism.NewSearch(conf.OriginalsPath, conf.GetDb())
|
search := photoprism.NewSearch(conf.GetOriginalsPath(), conf.GetDb())
|
||||||
|
|
||||||
c.MustBindWith(&form, binding.Form)
|
c.MustBindWith(&form, binding.Form)
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ func GetPhotos(router *gin.RouterGroup, conf *photoprism.Config) {
|
||||||
// photoId: int Photo ID as returned by the API
|
// photoId: int Photo ID as returned by the API
|
||||||
func LikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
|
func LikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
|
||||||
router.POST("/photos/:photoId/like", func(c *gin.Context) {
|
router.POST("/photos/:photoId/like", func(c *gin.Context) {
|
||||||
search := photoprism.NewSearch(conf.OriginalsPath, conf.GetDb())
|
search := photoprism.NewSearch(conf.GetOriginalsPath(), conf.GetDb())
|
||||||
|
|
||||||
photoId, err := strconv.ParseUint(c.Param("photoId"), 10, 64)
|
photoId, err := strconv.ParseUint(c.Param("photoId"), 10, 64)
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ func LikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
|
||||||
// photoId: int Photo ID as returned by the API
|
// photoId: int Photo ID as returned by the API
|
||||||
func DislikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
|
func DislikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
|
||||||
router.DELETE("/photos/:photoId/like", func(c *gin.Context) {
|
router.DELETE("/photos/:photoId/like", func(c *gin.Context) {
|
||||||
search := photoprism.NewSearch(conf.OriginalsPath, conf.GetDb())
|
search := photoprism.NewSearch(conf.GetOriginalsPath(), conf.GetDb())
|
||||||
|
|
||||||
photoId, err := strconv.ParseUint(c.Param("photoId"), 10, 64)
|
photoId, err := strconv.ParseUint(c.Param("photoId"), 10, 64)
|
||||||
|
|
||||||
|
|
|
@ -32,23 +32,23 @@ func GetThumbnail(router *gin.RouterGroup, conf *photoprism.Config) {
|
||||||
c.Data(400, "image/svg+xml", photoIconSvg)
|
c.Data(400, "image/svg+xml", photoIconSvg)
|
||||||
}
|
}
|
||||||
|
|
||||||
search := photoprism.NewSearch(conf.OriginalsPath, conf.GetDb())
|
search := photoprism.NewSearch(conf.GetOriginalsPath(), conf.GetDb())
|
||||||
|
|
||||||
file := search.FindFileByHash(fileHash)
|
file := search.FindFileByHash(fileHash)
|
||||||
|
|
||||||
fileName := fmt.Sprintf("%s/%s", conf.OriginalsPath, file.FileName)
|
fileName := fmt.Sprintf("%s/%s", conf.GetOriginalsPath(), file.FileName)
|
||||||
|
|
||||||
if mediaFile, err := photoprism.NewMediaFile(fileName); err == nil {
|
if mediaFile, err := photoprism.NewMediaFile(fileName); err == nil {
|
||||||
switch thumbnailType {
|
switch thumbnailType {
|
||||||
case "fit":
|
case "fit":
|
||||||
if thumbnail, err := mediaFile.GetThumbnail(conf.ThumbnailsPath, size); err == nil {
|
if thumbnail, err := mediaFile.GetThumbnail(conf.GetThumbnailsPath(), size); err == nil {
|
||||||
c.File(thumbnail.GetFilename())
|
c.File(thumbnail.GetFilename())
|
||||||
} else {
|
} else {
|
||||||
log.Printf("could not create thumbnail: %s", err.Error())
|
log.Printf("could not create thumbnail: %s", err.Error())
|
||||||
c.Data(400, "image/svg+xml", photoIconSvg)
|
c.Data(400, "image/svg+xml", photoIconSvg)
|
||||||
}
|
}
|
||||||
case "square":
|
case "square":
|
||||||
if thumbnail, err := mediaFile.GetSquareThumbnail(conf.ThumbnailsPath, size); err == nil {
|
if thumbnail, err := mediaFile.GetSquareThumbnail(conf.GetThumbnailsPath(), size); err == nil {
|
||||||
c.File(thumbnail.GetFilename())
|
c.File(thumbnail.GetFilename())
|
||||||
} else {
|
} else {
|
||||||
log.Printf("could not create square thumbnail: %s", err.Error())
|
log.Printf("could not create square thumbnail: %s", err.Error())
|
||||||
|
|
|
@ -18,16 +18,16 @@ func configAction(context *cli.Context) error {
|
||||||
conf := photoprism.NewConfig(context)
|
conf := photoprism.NewConfig(context)
|
||||||
|
|
||||||
fmt.Printf("NAME VALUE\n")
|
fmt.Printf("NAME VALUE\n")
|
||||||
fmt.Printf("debug %t\n", conf.Debug)
|
fmt.Printf("debug %t\n", conf.IsDebug())
|
||||||
fmt.Printf("config-file %s\n", conf.ConfigFile)
|
fmt.Printf("config-file %s\n", conf.GetConfigFile())
|
||||||
fmt.Printf("assets-path %s\n", conf.AssetsPath)
|
fmt.Printf("darktable-cli %s\n", conf.GetDarktableCli())
|
||||||
fmt.Printf("originals-path %s\n", conf.OriginalsPath)
|
fmt.Printf("originals-path %s\n", conf.GetOriginalsPath())
|
||||||
fmt.Printf("thumbnails-path %s\n", conf.ThumbnailsPath)
|
fmt.Printf("import-path %s\n", conf.GetImportPath())
|
||||||
fmt.Printf("import-path %s\n", conf.ImportPath)
|
fmt.Printf("export-path %s\n", conf.GetExportPath())
|
||||||
fmt.Printf("export-path %s\n", conf.ExportPath)
|
fmt.Printf("cache-path %s\n", conf.GetCachePath())
|
||||||
fmt.Printf("darktable-cli %s\n", conf.DarktableCli)
|
fmt.Printf("assets-path %s\n", conf.GetAssetsPath())
|
||||||
fmt.Printf("database-driver %s\n", conf.DatabaseDriver)
|
fmt.Printf("database-driver %s\n", conf.GetDatabaseDriver())
|
||||||
fmt.Printf("database-dsn %s\n", conf.DatabaseDsn)
|
fmt.Printf("database-dsn %s\n", conf.GetDatabaseDsn())
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,11 +22,11 @@ func convertAction(context *cli.Context) error {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Converting RAW images in %s to JPEG...\n", conf.OriginalsPath)
|
fmt.Printf("Converting RAW images in %s to JPEG...\n", conf.GetOriginalsPath())
|
||||||
|
|
||||||
converter := photoprism.NewConverter(conf.DarktableCli)
|
converter := photoprism.NewConverter(conf.GetDarktableCli())
|
||||||
|
|
||||||
converter.ConvertAll(conf.OriginalsPath)
|
converter.ConvertAll(conf.GetOriginalsPath())
|
||||||
|
|
||||||
fmt.Println("Done.")
|
fmt.Println("Done.")
|
||||||
|
|
||||||
|
|
|
@ -68,13 +68,13 @@ func exportAction(context *cli.Context) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
exportPath := fmt.Sprintf("%s/%s", conf.ExportPath, name)
|
exportPath := fmt.Sprintf("%s/%s", conf.GetExportPath(), name)
|
||||||
size := context.Int("size")
|
size := context.Int("size")
|
||||||
originals := photoprism.FindOriginalsByDate(conf.OriginalsPath, afterDate, beforeDate)
|
originals := photoprism.FindOriginalsByDate(conf.GetOriginalsPath(), afterDate, beforeDate)
|
||||||
|
|
||||||
fmt.Printf("Exporting photos to %s...\n", exportPath)
|
fmt.Printf("Exporting photos to %s...\n", exportPath)
|
||||||
|
|
||||||
photoprism.ExportPhotosFromOriginals(originals, conf.ThumbnailsPath, exportPath, size)
|
photoprism.ExportPhotosFromOriginals(originals, conf.GetThumbnailsPath(), exportPath, size)
|
||||||
|
|
||||||
fmt.Println("Done.")
|
fmt.Println("Done.")
|
||||||
|
|
||||||
|
|
|
@ -26,12 +26,6 @@ var GlobalFlags = []cli.Flag{
|
||||||
Value: "/srv/photoprism/photos/originals",
|
Value: "/srv/photoprism/photos/originals",
|
||||||
EnvVar: "PHOTOPRISM_ORIGINALS_PATH",
|
EnvVar: "PHOTOPRISM_ORIGINALS_PATH",
|
||||||
},
|
},
|
||||||
cli.StringFlag{
|
|
||||||
Name: "thumbnails-path",
|
|
||||||
Usage: "thumbnails `PATH`",
|
|
||||||
Value: "/srv/photoprism/photos/thumbnails",
|
|
||||||
EnvVar: "PHOTOPRISM_THUMBNAILS_PATH",
|
|
||||||
},
|
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "import-path",
|
Name: "import-path",
|
||||||
Usage: "import `PATH`",
|
Usage: "import `PATH`",
|
||||||
|
@ -44,6 +38,12 @@ var GlobalFlags = []cli.Flag{
|
||||||
Value: "/srv/photoprism/photos/export",
|
Value: "/srv/photoprism/photos/export",
|
||||||
EnvVar: "PHOTOPRISM_EXPORT_PATH",
|
EnvVar: "PHOTOPRISM_EXPORT_PATH",
|
||||||
},
|
},
|
||||||
|
cli.StringFlag{
|
||||||
|
Name: "cache-path",
|
||||||
|
Usage: "cache `PATH`",
|
||||||
|
Value: "/srv/photoprism/cache",
|
||||||
|
EnvVar: "PHOTOPRISM_CACHE_PATH",
|
||||||
|
},
|
||||||
cli.StringFlag{
|
cli.StringFlag{
|
||||||
Name: "assets-path",
|
Name: "assets-path",
|
||||||
Usage: "assets `PATH`",
|
Usage: "assets `PATH`",
|
||||||
|
|
|
@ -24,17 +24,17 @@ func importAction(context *cli.Context) error {
|
||||||
|
|
||||||
conf.MigrateDb()
|
conf.MigrateDb()
|
||||||
|
|
||||||
fmt.Printf("Importing photos from %s...\n", conf.ImportPath)
|
fmt.Printf("Importing photos from %s...\n", conf.GetImportPath())
|
||||||
|
|
||||||
tensorFlow := photoprism.NewTensorFlow(conf.GetTensorFlowModelPath())
|
tensorFlow := photoprism.NewTensorFlow(conf.GetTensorFlowModelPath())
|
||||||
|
|
||||||
indexer := photoprism.NewIndexer(conf.OriginalsPath, tensorFlow, conf.GetDb())
|
indexer := photoprism.NewIndexer(conf.GetOriginalsPath(), tensorFlow, conf.GetDb())
|
||||||
|
|
||||||
converter := photoprism.NewConverter(conf.DarktableCli)
|
converter := photoprism.NewConverter(conf.GetDarktableCli())
|
||||||
|
|
||||||
importer := photoprism.NewImporter(conf.OriginalsPath, indexer, converter)
|
importer := photoprism.NewImporter(conf.GetOriginalsPath(), indexer, converter)
|
||||||
|
|
||||||
importer.ImportPhotosFromDirectory(conf.ImportPath)
|
importer.ImportPhotosFromDirectory(conf.GetImportPath())
|
||||||
|
|
||||||
fmt.Println("Done.")
|
fmt.Println("Done.")
|
||||||
|
|
||||||
|
|
|
@ -24,11 +24,11 @@ func indexAction(context *cli.Context) error {
|
||||||
|
|
||||||
conf.MigrateDb()
|
conf.MigrateDb()
|
||||||
|
|
||||||
fmt.Printf("Indexing photos in %s...\n", conf.OriginalsPath)
|
fmt.Printf("Indexing photos in %s...\n", conf.GetOriginalsPath())
|
||||||
|
|
||||||
tensorFlow := photoprism.NewTensorFlow(conf.GetTensorFlowModelPath())
|
tensorFlow := photoprism.NewTensorFlow(conf.GetTensorFlowModelPath())
|
||||||
|
|
||||||
indexer := photoprism.NewIndexer(conf.OriginalsPath, tensorFlow, conf.GetDb())
|
indexer := photoprism.NewIndexer(conf.GetOriginalsPath(), tensorFlow, conf.GetDb())
|
||||||
|
|
||||||
indexer.IndexAll()
|
indexer.IndexAll()
|
||||||
|
|
||||||
|
|
|
@ -41,19 +41,7 @@ var startFlags = []cli.Flag{
|
||||||
func startAction(context *cli.Context) error {
|
func startAction(context *cli.Context) error {
|
||||||
conf := photoprism.NewConfig(context)
|
conf := photoprism.NewConfig(context)
|
||||||
|
|
||||||
if context.IsSet("server-host") || conf.ServerIP == "" {
|
if conf.GetServerPort() < 1 {
|
||||||
conf.ServerIP = context.String("server-host")
|
|
||||||
}
|
|
||||||
|
|
||||||
if context.IsSet("server-port") || conf.ServerPort == 0 {
|
|
||||||
conf.ServerPort = context.Int("server-port")
|
|
||||||
}
|
|
||||||
|
|
||||||
if context.IsSet("server-mode") || conf.ServerMode == "" {
|
|
||||||
conf.ServerMode = context.String("server-mode")
|
|
||||||
}
|
|
||||||
|
|
||||||
if conf.ServerPort < 1 {
|
|
||||||
log.Fatal("Server port must be a positive integer")
|
log.Fatal("Server port must be a positive integer")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ func thumbnailsAction(context *cli.Context) error {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Creating thumbnails in %s...\n", conf.ThumbnailsPath)
|
fmt.Printf("Creating thumbnails in %s...\n", conf.GetThumbnailsPath())
|
||||||
|
|
||||||
sizes := context.IntSlice("size")
|
sizes := context.IntSlice("size")
|
||||||
|
|
||||||
|
@ -50,7 +50,7 @@ func thumbnailsAction(context *cli.Context) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, size := range sizes {
|
for _, size := range sizes {
|
||||||
photoprism.CreateThumbnailsFromOriginals(conf.OriginalsPath, conf.ThumbnailsPath, size, context.Bool("square"))
|
photoprism.CreateThumbnailsFromOriginals(conf.GetOriginalsPath(), conf.GetThumbnailsPath(), size, context.Bool("square"))
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("Done.")
|
fmt.Println("Done.")
|
||||||
|
|
|
@ -11,7 +11,7 @@ func TestMediaFile_GetColors(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
if mediaFile1, err := NewMediaFile(conf.ImportPath + "/dog.jpg"); err == nil {
|
if mediaFile1, err := NewMediaFile(conf.GetImportPath() + "/dog.jpg"); err == nil {
|
||||||
names, vibrantHex, mutedHex := mediaFile1.GetColors()
|
names, vibrantHex, mutedHex := mediaFile1.GetColors()
|
||||||
|
|
||||||
t.Log(names, vibrantHex, mutedHex)
|
t.Log(names, vibrantHex, mutedHex)
|
||||||
|
@ -23,7 +23,7 @@ func TestMediaFile_GetColors(t *testing.T) {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if mediaFile2, err := NewMediaFile(conf.ImportPath + "/iphone/IMG_6788.JPG"); err == nil {
|
if mediaFile2, err := NewMediaFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG"); err == nil {
|
||||||
|
|
||||||
names, vibrantHex, mutedHex := mediaFile2.GetColors()
|
names, vibrantHex, mutedHex := mediaFile2.GetColors()
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ func TestMediaFile_GetColors(t *testing.T) {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if mediaFile3, err := NewMediaFile(conf.ImportPath + "/raw/20140717_154212_1EC48F8489.jpg"); err == nil {
|
if mediaFile3, err := NewMediaFile(conf.GetImportPath() + "/raw/20140717_154212_1EC48F8489.jpg"); err == nil {
|
||||||
|
|
||||||
names, vibrantHex, mutedHex := mediaFile3.GetColors()
|
names, vibrantHex, mutedHex := mediaFile3.GetColors()
|
||||||
|
|
||||||
|
|
|
@ -27,6 +27,7 @@ type Config struct {
|
||||||
ServerPort int
|
ServerPort int
|
||||||
ServerMode string
|
ServerMode string
|
||||||
AssetsPath string
|
AssetsPath string
|
||||||
|
CachePath string
|
||||||
ThumbnailsPath string
|
ThumbnailsPath string
|
||||||
OriginalsPath string
|
OriginalsPath string
|
||||||
ImportPath string
|
ImportPath string
|
||||||
|
@ -83,8 +84,8 @@ func (c *Config) SetValuesFromFile(fileName string) error {
|
||||||
c.AssetsPath = GetExpandedFilename(assetsPath)
|
c.AssetsPath = GetExpandedFilename(assetsPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
if thumbnailsPath, err := yamlConfig.Get("thumbnails-path"); err == nil {
|
if cachePath, err := yamlConfig.Get("cache-path"); err == nil {
|
||||||
c.ThumbnailsPath = GetExpandedFilename(thumbnailsPath)
|
c.CachePath = GetExpandedFilename(cachePath)
|
||||||
}
|
}
|
||||||
|
|
||||||
if originalsPath, err := yamlConfig.Get("originals-path"); err == nil {
|
if originalsPath, err := yamlConfig.Get("originals-path"); err == nil {
|
||||||
|
@ -125,8 +126,8 @@ func (c *Config) SetValuesFromCliContext(context *cli.Context) error {
|
||||||
c.AssetsPath = GetExpandedFilename(context.GlobalString("assets-path"))
|
c.AssetsPath = GetExpandedFilename(context.GlobalString("assets-path"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if context.GlobalIsSet("thumbnails-path") || c.ThumbnailsPath == "" {
|
if context.GlobalIsSet("cache-path") || c.CachePath == "" {
|
||||||
c.ThumbnailsPath = GetExpandedFilename(context.GlobalString("thumbnails-path"))
|
c.CachePath = GetExpandedFilename(context.GlobalString("cache-path"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if context.GlobalIsSet("originals-path") || c.OriginalsPath == "" {
|
if context.GlobalIsSet("originals-path") || c.OriginalsPath == "" {
|
||||||
|
@ -153,6 +154,18 @@ func (c *Config) SetValuesFromCliContext(context *cli.Context) error {
|
||||||
c.DatabaseDsn = context.GlobalString("database-dsn")
|
c.DatabaseDsn = context.GlobalString("database-dsn")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if context.IsSet("server-host") || c.ServerIP == "" {
|
||||||
|
c.ServerIP = context.String("server-host")
|
||||||
|
}
|
||||||
|
|
||||||
|
if context.IsSet("server-port") || c.ServerPort == 0 {
|
||||||
|
c.ServerPort = context.Int("server-port")
|
||||||
|
}
|
||||||
|
|
||||||
|
if context.IsSet("server-mode") || c.ServerMode == "" {
|
||||||
|
c.ServerMode = context.String("server-mode")
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,19 +175,31 @@ func (c *Config) SetValuesFromCliContext(context *cli.Context) error {
|
||||||
// ImportPath
|
// ImportPath
|
||||||
// ExportPath
|
// ExportPath
|
||||||
func (c *Config) CreateDirectories() error {
|
func (c *Config) CreateDirectories() error {
|
||||||
if err := os.MkdirAll(c.OriginalsPath, os.ModePerm); err != nil {
|
if err := os.MkdirAll(c.GetOriginalsPath(), os.ModePerm); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.MkdirAll(c.ThumbnailsPath, os.ModePerm); err != nil {
|
if err := os.MkdirAll(c.GetImportPath(), os.ModePerm); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.MkdirAll(c.ImportPath, os.ModePerm); err != nil {
|
if err := os.MkdirAll(c.GetExportPath(), os.ModePerm); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := os.MkdirAll(c.ExportPath, os.ModePerm); err != nil {
|
if err := os.MkdirAll(c.GetThumbnailsPath(), os.ModePerm); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.MkdirAll(c.GetDatabasePath(), os.ModePerm); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.MkdirAll(c.GetTensorFlowModelPath(), os.ModePerm); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.MkdirAll(c.GetPublicBuildPath(), os.ModePerm); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -207,6 +232,86 @@ func (c *Config) connectToDatabase() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAppName returns the application name.
|
||||||
|
func (c *Config) GetAppName() string {
|
||||||
|
return c.AppName
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetAppVersion returns the application version.
|
||||||
|
func (c *Config) GetAppVersion() string {
|
||||||
|
return c.AppVersion
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCopyright returns the application copyright.
|
||||||
|
func (c *Config) GetCopyright() string {
|
||||||
|
return c.Copyright
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsDebug returns true if debug mode is on.
|
||||||
|
func (c *Config) IsDebug() bool {
|
||||||
|
return c.Debug
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetConfigFile returns the config file name.
|
||||||
|
func (c *Config) GetConfigFile() string {
|
||||||
|
return c.ConfigFile
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetServerIP returns the server IP address (empty for all).
|
||||||
|
func (c *Config) GetServerIP() string {
|
||||||
|
return c.ServerIP
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetServerPort returns the server port.
|
||||||
|
func (c *Config) GetServerPort() int {
|
||||||
|
return c.ServerPort
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetServerMode returns the server mode.
|
||||||
|
func (c *Config) GetServerMode() string {
|
||||||
|
return c.ServerMode
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetOriginalsPath returns the originals.
|
||||||
|
func (c *Config) GetOriginalsPath() string {
|
||||||
|
return c.OriginalsPath
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetImportPath returns the import directory.
|
||||||
|
func (c *Config) GetImportPath() string {
|
||||||
|
return c.ImportPath
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetExportPath returns the export directory.
|
||||||
|
func (c *Config) GetExportPath() string {
|
||||||
|
return c.ExportPath
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDarktableCli returns the darktable-cli binary file name.
|
||||||
|
func (c *Config) GetDarktableCli() string {
|
||||||
|
return c.DarktableCli
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDatabaseDriver returns the database driver name.
|
||||||
|
func (c *Config) GetDatabaseDriver() string {
|
||||||
|
return c.DatabaseDriver
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDatabaseDsn returns the database data source name (DSN).
|
||||||
|
func (c *Config) GetDatabaseDsn() string {
|
||||||
|
return c.DatabaseDsn
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCachePath returns the path to the cache.
|
||||||
|
func (c *Config) GetCachePath() string {
|
||||||
|
return c.CachePath
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetThumbnailsPath returns the path to the cached thumbnails.
|
||||||
|
func (c *Config) GetThumbnailsPath() string {
|
||||||
|
return c.GetCachePath() + "/thumbnails"
|
||||||
|
}
|
||||||
|
|
||||||
// GetAssetsPath returns the path to the assets.
|
// GetAssetsPath returns the path to the assets.
|
||||||
func (c *Config) GetAssetsPath() string {
|
func (c *Config) GetAssetsPath() string {
|
||||||
return c.AssetsPath
|
return c.AssetsPath
|
||||||
|
|
|
@ -25,7 +25,7 @@ const testConfigFile = "../../configs/photoprism.yml"
|
||||||
var darktableCli = "/usr/bin/darktable-cli"
|
var darktableCli = "/usr/bin/darktable-cli"
|
||||||
var testDataZip = "/tmp/photoprism/testdata.zip"
|
var testDataZip = "/tmp/photoprism/testdata.zip"
|
||||||
var assetsPath = GetExpandedFilename("../../assets")
|
var assetsPath = GetExpandedFilename("../../assets")
|
||||||
var thumbnailsPath = GetExpandedFilename(testDataPath + "/thumbnails")
|
var cachePath = GetExpandedFilename(testDataPath + "/cache")
|
||||||
var originalsPath = GetExpandedFilename(testDataPath + "/originals")
|
var originalsPath = GetExpandedFilename(testDataPath + "/originals")
|
||||||
var importPath = GetExpandedFilename(testDataPath + "/import")
|
var importPath = GetExpandedFilename(testDataPath + "/import")
|
||||||
var exportPath = GetExpandedFilename(testDataPath + "/export")
|
var exportPath = GetExpandedFilename(testDataPath + "/export")
|
||||||
|
@ -38,10 +38,10 @@ func init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Config) RemoveTestData(t *testing.T) {
|
func (c *Config) RemoveTestData(t *testing.T) {
|
||||||
os.RemoveAll(c.ImportPath)
|
os.RemoveAll(c.GetImportPath())
|
||||||
os.RemoveAll(c.ExportPath)
|
os.RemoveAll(c.GetExportPath())
|
||||||
os.RemoveAll(c.OriginalsPath)
|
os.RemoveAll(c.GetOriginalsPath())
|
||||||
os.RemoveAll(c.ThumbnailsPath)
|
os.RemoveAll(c.GetCachePath())
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Config) DownloadTestData(t *testing.T) {
|
func (c *Config) DownloadTestData(t *testing.T) {
|
||||||
|
@ -83,7 +83,7 @@ func NewTestConfig() *Config {
|
||||||
return &Config{
|
return &Config{
|
||||||
Debug: false,
|
Debug: false,
|
||||||
AssetsPath: assetsPath,
|
AssetsPath: assetsPath,
|
||||||
ThumbnailsPath: thumbnailsPath,
|
CachePath: cachePath,
|
||||||
OriginalsPath: originalsPath,
|
OriginalsPath: originalsPath,
|
||||||
ImportPath: importPath,
|
ImportPath: importPath,
|
||||||
ExportPath: exportPath,
|
ExportPath: exportPath,
|
||||||
|
@ -123,8 +123,8 @@ func TestNewConfig(t *testing.T) {
|
||||||
|
|
||||||
assert.IsType(t, &Config{}, c)
|
assert.IsType(t, &Config{}, c)
|
||||||
|
|
||||||
assert.Equal(t, assetsPath, c.AssetsPath)
|
assert.Equal(t, assetsPath, c.GetAssetsPath())
|
||||||
assert.False(t, c.Debug)
|
assert.False(t, c.IsDebug())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConfig_SetValuesFromFile(t *testing.T) {
|
func TestConfig_SetValuesFromFile(t *testing.T) {
|
||||||
|
@ -132,20 +132,19 @@ func TestConfig_SetValuesFromFile(t *testing.T) {
|
||||||
|
|
||||||
c.SetValuesFromFile(GetExpandedFilename(testConfigFile))
|
c.SetValuesFromFile(GetExpandedFilename(testConfigFile))
|
||||||
|
|
||||||
assert.Equal(t, "/srv/photoprism", c.AssetsPath)
|
assert.Equal(t, "/srv/photoprism", c.GetAssetsPath())
|
||||||
assert.Equal(t, "/srv/photoprism/thumbnails", c.ThumbnailsPath)
|
assert.Equal(t, "/srv/photoprism/cache", c.GetCachePath())
|
||||||
assert.Equal(t, "/srv/photoprism/photos/originals", c.OriginalsPath)
|
assert.Equal(t, "/srv/photoprism/cache/thumbnails", c.GetThumbnailsPath())
|
||||||
assert.Equal(t, "/srv/photoprism/photos/import", c.ImportPath)
|
assert.Equal(t, "/srv/photoprism/photos/originals", c.GetOriginalsPath())
|
||||||
assert.Equal(t, "/srv/photoprism/photos/export", c.ExportPath)
|
assert.Equal(t, "/srv/photoprism/photos/import", c.GetImportPath())
|
||||||
assert.Equal(t, databaseDriver, c.DatabaseDriver)
|
assert.Equal(t, "/srv/photoprism/photos/export", c.GetExportPath())
|
||||||
assert.Equal(t, databaseDsn, c.DatabaseDsn)
|
assert.Equal(t, databaseDriver, c.GetDatabaseDriver())
|
||||||
|
assert.Equal(t, databaseDsn, c.GetDatabaseDsn())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConfig_ConnectToDatabase(t *testing.T) {
|
func TestConfig_ConnectToDatabase(t *testing.T) {
|
||||||
c := NewTestConfig()
|
c := NewTestConfig()
|
||||||
|
|
||||||
c.connectToDatabase()
|
|
||||||
|
|
||||||
db := c.GetDb()
|
db := c.GetDb()
|
||||||
|
|
||||||
assert.IsType(t, &gorm.DB{}, db)
|
assert.IsType(t, &gorm.DB{}, db)
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
func TestNewConverter(t *testing.T) {
|
func TestNewConverter(t *testing.T) {
|
||||||
conf := NewTestConfig()
|
conf := NewTestConfig()
|
||||||
|
|
||||||
converter := NewConverter(conf.DarktableCli)
|
converter := NewConverter(conf.GetDarktableCli())
|
||||||
|
|
||||||
assert.IsType(t, &Converter{}, converter)
|
assert.IsType(t, &Converter{}, converter)
|
||||||
}
|
}
|
||||||
|
@ -20,9 +20,9 @@ func TestConverter_ConvertToJpeg(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
converter := NewConverter(conf.DarktableCli)
|
converter := NewConverter(conf.GetDarktableCli())
|
||||||
|
|
||||||
jpegFilename := conf.ImportPath + "/iphone/IMG_6788.JPG"
|
jpegFilename := conf.GetImportPath() + "/iphone/IMG_6788.JPG"
|
||||||
|
|
||||||
assert.Truef(t, fileExists(jpegFilename), "file does not exist: %s", jpegFilename)
|
assert.Truef(t, fileExists(jpegFilename), "file does not exist: %s", jpegFilename)
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ func TestConverter_ConvertToJpeg(t *testing.T) {
|
||||||
|
|
||||||
assert.Equal(t, "iPhone SE", infoJpeg.CameraModel)
|
assert.Equal(t, "iPhone SE", infoJpeg.CameraModel)
|
||||||
|
|
||||||
rawFilemame := conf.ImportPath + "/raw/IMG_1435.CR2"
|
rawFilemame := conf.GetImportPath() + "/raw/IMG_1435.CR2"
|
||||||
|
|
||||||
t.Logf("Testing RAW to JPEG converter with %s", rawFilemame)
|
t.Logf("Testing RAW to JPEG converter with %s", rawFilemame)
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ func TestConverter_ConvertToJpeg(t *testing.T) {
|
||||||
|
|
||||||
imageRaw, _ := converter.ConvertToJpeg(rawMediaFile)
|
imageRaw, _ := converter.ConvertToJpeg(rawMediaFile)
|
||||||
|
|
||||||
assert.True(t, fileExists(conf.ImportPath+"/raw/IMG_1435.jpg"), "Jpeg file was not found - is Darktable installed?")
|
assert.True(t, fileExists(conf.GetImportPath()+"/raw/IMG_1435.jpg"), "Jpeg file was not found - is Darktable installed?")
|
||||||
|
|
||||||
assert.NotEqual(t, rawFilemame, imageRaw.filename)
|
assert.NotEqual(t, rawFilemame, imageRaw.filename)
|
||||||
|
|
||||||
|
@ -72,11 +72,11 @@ func TestConverter_ConvertAll(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
converter := NewConverter(conf.DarktableCli)
|
converter := NewConverter(conf.GetDarktableCli())
|
||||||
|
|
||||||
converter.ConvertAll(conf.ImportPath)
|
converter.ConvertAll(conf.GetImportPath())
|
||||||
|
|
||||||
jpegFilename := conf.ImportPath + "/raw/IMG_1435.jpg"
|
jpegFilename := conf.GetImportPath() + "/raw/IMG_1435.jpg"
|
||||||
|
|
||||||
assert.True(t, fileExists(jpegFilename), "Jpeg file was not found - is Darktable installed?")
|
assert.True(t, fileExists(jpegFilename), "Jpeg file was not found - is Darktable installed?")
|
||||||
|
|
||||||
|
@ -92,13 +92,13 @@ func TestConverter_ConvertAll(t *testing.T) {
|
||||||
|
|
||||||
assert.Equal(t, "Canon EOS M10", infoRaw.CameraModel, "Camera model should be Canon EOS M10")
|
assert.Equal(t, "Canon EOS M10", infoRaw.CameraModel, "Camera model should be Canon EOS M10")
|
||||||
|
|
||||||
existingJpegFilename := conf.ImportPath + "/raw/20140717_154212_1EC48F8489.jpg"
|
existingJpegFilename := conf.GetImportPath() + "/raw/20140717_154212_1EC48F8489.jpg"
|
||||||
|
|
||||||
oldHash := fileHash(existingJpegFilename)
|
oldHash := fileHash(existingJpegFilename)
|
||||||
|
|
||||||
os.Remove(existingJpegFilename)
|
os.Remove(existingJpegFilename)
|
||||||
|
|
||||||
converter.ConvertAll(conf.ImportPath)
|
converter.ConvertAll(conf.GetImportPath())
|
||||||
|
|
||||||
newHash := fileHash(existingJpegFilename)
|
newHash := fileHash(existingJpegFilename)
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ func TestMediaFile_GetExifData(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
image1, err := NewMediaFile(conf.ImportPath + "/iphone/IMG_6788.JPG")
|
image1, err := NewMediaFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG")
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
@ -23,7 +23,7 @@ func TestMediaFile_GetExifData(t *testing.T) {
|
||||||
|
|
||||||
assert.Equal(t, "iPhone SE", info.CameraModel)
|
assert.Equal(t, "iPhone SE", info.CameraModel)
|
||||||
|
|
||||||
image2, err := NewMediaFile(conf.ImportPath + "/raw/IMG_1435.CR2")
|
image2, err := NewMediaFile(conf.GetImportPath() + "/raw/IMG_1435.CR2")
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
|
|
@ -11,11 +11,11 @@ func TestNewImporter(t *testing.T) {
|
||||||
|
|
||||||
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
||||||
|
|
||||||
indexer := NewIndexer(conf.OriginalsPath, tensorFlow, conf.GetDb())
|
indexer := NewIndexer(conf.GetOriginalsPath(), tensorFlow, conf.GetDb())
|
||||||
|
|
||||||
converter := NewConverter(conf.DarktableCli)
|
converter := NewConverter(conf.GetDarktableCli())
|
||||||
|
|
||||||
importer := NewImporter(conf.OriginalsPath, indexer, converter)
|
importer := NewImporter(conf.GetOriginalsPath(), indexer, converter)
|
||||||
|
|
||||||
assert.IsType(t, &Importer{}, importer)
|
assert.IsType(t, &Importer{}, importer)
|
||||||
}
|
}
|
||||||
|
@ -27,13 +27,13 @@ func TestImporter_ImportPhotosFromDirectory(t *testing.T) {
|
||||||
|
|
||||||
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
||||||
|
|
||||||
indexer := NewIndexer(conf.OriginalsPath, tensorFlow, conf.GetDb())
|
indexer := NewIndexer(conf.GetOriginalsPath(), tensorFlow, conf.GetDb())
|
||||||
|
|
||||||
converter := NewConverter(conf.DarktableCli)
|
converter := NewConverter(conf.GetDarktableCli())
|
||||||
|
|
||||||
importer := NewImporter(conf.OriginalsPath, indexer, converter)
|
importer := NewImporter(conf.GetOriginalsPath(), indexer, converter)
|
||||||
|
|
||||||
importer.ImportPhotosFromDirectory(conf.ImportPath)
|
importer.ImportPhotosFromDirectory(conf.GetImportPath())
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestImporter_GetDestinationFilename(t *testing.T) {
|
func TestImporter_GetDestinationFilename(t *testing.T) {
|
||||||
|
@ -42,13 +42,13 @@ func TestImporter_GetDestinationFilename(t *testing.T) {
|
||||||
|
|
||||||
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
||||||
|
|
||||||
indexer := NewIndexer(conf.OriginalsPath, tensorFlow, conf.GetDb())
|
indexer := NewIndexer(conf.GetOriginalsPath(), tensorFlow, conf.GetDb())
|
||||||
|
|
||||||
converter := NewConverter(conf.DarktableCli)
|
converter := NewConverter(conf.GetDarktableCli())
|
||||||
|
|
||||||
importer := NewImporter(conf.OriginalsPath, indexer, converter)
|
importer := NewImporter(conf.GetOriginalsPath(), indexer, converter)
|
||||||
|
|
||||||
rawFile, err := NewMediaFile(conf.ImportPath + "/raw/IMG_1435.CR2")
|
rawFile, err := NewMediaFile(conf.GetImportPath() + "/raw/IMG_1435.CR2")
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
@ -56,5 +56,5 @@ func TestImporter_GetDestinationFilename(t *testing.T) {
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
assert.Equal(t, conf.OriginalsPath+"/2018/02/20180204_170813_863A6248DCCA.cr2", filename)
|
assert.Equal(t, conf.GetOriginalsPath()+"/2018/02/20180204_170813_863A6248DCCA.cr2", filename)
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,11 +11,11 @@ func TestMediaFile_GetRelatedFiles(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
mediaFile, err := NewMediaFile(conf.ImportPath + "/raw/20140717_154212_1EC48F8489.cr2")
|
mediaFile, err := NewMediaFile(conf.GetImportPath() + "/raw/20140717_154212_1EC48F8489.cr2")
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
expectedBaseFilename := conf.ImportPath + "/raw/20140717_154212_1EC48F8489"
|
expectedBaseFilename := conf.GetImportPath() + "/raw/20140717_154212_1EC48F8489"
|
||||||
|
|
||||||
related, _, err := mediaFile.GetRelatedFiles()
|
related, _, err := mediaFile.GetRelatedFiles()
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ func TestMediaFile_GetRelatedFiles_Ordering(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
mediaFile, err := NewMediaFile(conf.ImportPath + "/20130203_193332_0AE340D280.jpg")
|
mediaFile, err := NewMediaFile(conf.GetImportPath() + "/20130203_193332_0AE340D280.jpg")
|
||||||
|
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
@ -62,9 +62,9 @@ func TestMediaFile_GetEditedFilename(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
mediaFile1, err := NewMediaFile(conf.ImportPath + "/iphone/IMG_6788.JPG")
|
mediaFile1, err := NewMediaFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, conf.ImportPath+"/iphone/IMG_E6788.JPG", mediaFile1.GetEditedFilename())
|
assert.Equal(t, conf.GetImportPath()+"/iphone/IMG_E6788.JPG", mediaFile1.GetEditedFilename())
|
||||||
|
|
||||||
/* TODO: Add example files to import.zip
|
/* TODO: Add example files to import.zip
|
||||||
mediaFile2, err := NewMediaFile("/foo/bar/IMG_E1234.jpg")
|
mediaFile2, err := NewMediaFile("/foo/bar/IMG_E1234.jpg")
|
||||||
|
@ -72,7 +72,7 @@ func TestMediaFile_GetEditedFilename(t *testing.T) {
|
||||||
assert.Equal(t, "", mediaFile2.GetEditedFilename())
|
assert.Equal(t, "", mediaFile2.GetEditedFilename())
|
||||||
*/
|
*/
|
||||||
|
|
||||||
mediaFile3, err := NewMediaFile(conf.ImportPath + "/raw/20140717_154212_1EC48F8489.jpg")
|
mediaFile3, err := NewMediaFile(conf.GetImportPath() + "/raw/20140717_154212_1EC48F8489.jpg")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, "", mediaFile3.GetEditedFilename())
|
assert.Equal(t, "", mediaFile3.GetEditedFilename())
|
||||||
}
|
}
|
||||||
|
@ -82,13 +82,13 @@ func TestMediaFile_GetPerceptiveHash(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
mediaFile1, err := NewMediaFile(conf.ImportPath + "/20130203_193332_0AE340D280.jpg")
|
mediaFile1, err := NewMediaFile(conf.GetImportPath() + "/20130203_193332_0AE340D280.jpg")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
hash1, _ := mediaFile1.GetPerceptualHash()
|
hash1, _ := mediaFile1.GetPerceptualHash()
|
||||||
|
|
||||||
assert.Equal(t, "ef95", hash1)
|
assert.Equal(t, "ef95", hash1)
|
||||||
|
|
||||||
mediaFile2, err := NewMediaFile(conf.ImportPath + "/20130203_193332_0AE340D280_V2.jpg")
|
mediaFile2, err := NewMediaFile(conf.GetImportPath() + "/20130203_193332_0AE340D280_V2.jpg")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
hash2, _ := mediaFile2.GetPerceptualHash()
|
hash2, _ := mediaFile2.GetPerceptualHash()
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ func TestMediaFile_GetPerceptiveHash(t *testing.T) {
|
||||||
|
|
||||||
assert.Equal(t, 1, distance)
|
assert.Equal(t, 1, distance)
|
||||||
|
|
||||||
mediaFile3, err := NewMediaFile(conf.ImportPath + "/iphone/IMG_6788.JPG")
|
mediaFile3, err := NewMediaFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
hash3, _ := mediaFile3.GetPerceptualHash()
|
hash3, _ := mediaFile3.GetPerceptualHash()
|
||||||
|
|
||||||
|
@ -114,11 +114,11 @@ func TestMediaFile_GetMimeType(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
image1, err := NewMediaFile(conf.ImportPath + "/iphone/IMG_6788.JPG")
|
image1, err := NewMediaFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, "image/jpeg", image1.GetMimeType())
|
assert.Equal(t, "image/jpeg", image1.GetMimeType())
|
||||||
|
|
||||||
image2, err := NewMediaFile(conf.ImportPath + "/raw/20140717_154212_1EC48F8489.cr2")
|
image2, err := NewMediaFile(conf.GetImportPath() + "/raw/20140717_154212_1EC48F8489.cr2")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.Equal(t, "application/octet-stream", image2.GetMimeType())
|
assert.Equal(t, "application/octet-stream", image2.GetMimeType())
|
||||||
}
|
}
|
||||||
|
@ -126,12 +126,12 @@ func TestMediaFile_GetMimeType(t *testing.T) {
|
||||||
func TestMediaFile_Exists(t *testing.T) {
|
func TestMediaFile_Exists(t *testing.T) {
|
||||||
conf := NewTestConfig()
|
conf := NewTestConfig()
|
||||||
|
|
||||||
mediaFile, err := NewMediaFile(conf.ImportPath + "/iphone/IMG_6788.JPG")
|
mediaFile, err := NewMediaFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
assert.NotNil(t, mediaFile)
|
assert.NotNil(t, mediaFile)
|
||||||
assert.True(t, mediaFile.Exists())
|
assert.True(t, mediaFile.Exists())
|
||||||
|
|
||||||
mediaFile, err = NewMediaFile(conf.ImportPath + "/iphone/IMG_6788_XYZ.JPG")
|
mediaFile, err = NewMediaFile(conf.GetImportPath() + "/iphone/IMG_6788_XYZ.JPG")
|
||||||
assert.NotNil(t, err)
|
assert.NotNil(t, err)
|
||||||
assert.Nil(t, mediaFile)
|
assert.Nil(t, mediaFile)
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ func TestSearch_Photos_Query(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
search := NewSearch(conf.OriginalsPath, conf.GetDb())
|
search := NewSearch(conf.GetOriginalsPath(), conf.GetDb())
|
||||||
|
|
||||||
var form forms.PhotoSearchForm
|
var form forms.PhotoSearchForm
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@ func TestSearch_Photos_Camera(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
search := NewSearch(conf.OriginalsPath, conf.GetDb())
|
search := NewSearch(conf.GetOriginalsPath(), conf.GetDb())
|
||||||
|
|
||||||
var form forms.PhotoSearchForm
|
var form forms.PhotoSearchForm
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ func TestTensorFlow_GetImageTags(t *testing.T) {
|
||||||
|
|
||||||
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
||||||
|
|
||||||
if imageBuffer, err := ioutil.ReadFile(conf.ImportPath + "/iphone/IMG_6788.JPG"); err != nil {
|
if imageBuffer, err := ioutil.ReadFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG"); err != nil {
|
||||||
t.Error(err)
|
t.Error(err)
|
||||||
} else {
|
} else {
|
||||||
result, err := tensorFlow.GetImageTags(string(imageBuffer))
|
result, err := tensorFlow.GetImageTags(string(imageBuffer))
|
||||||
|
@ -38,7 +38,7 @@ func TestTensorFlow_GetImageTagsFromFile(t *testing.T) {
|
||||||
|
|
||||||
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
||||||
|
|
||||||
result, err := tensorFlow.GetImageTagsFromFile(conf.ImportPath + "/iphone/IMG_6788.JPG")
|
result, err := tensorFlow.GetImageTagsFromFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG")
|
||||||
|
|
||||||
assert.NotNil(t, result)
|
assert.NotNil(t, result)
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
|
@ -13,10 +13,10 @@ func TestMediaFile_GetThumbnail(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
image1, err := NewMediaFile(conf.ImportPath + "/iphone/IMG_6788.JPG")
|
image1, err := NewMediaFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
thumbnail1, err := image1.GetThumbnail(conf.ThumbnailsPath, 350)
|
thumbnail1, err := image1.GetThumbnail(conf.GetThumbnailsPath(), 350)
|
||||||
|
|
||||||
assert.Empty(t, err)
|
assert.Empty(t, err)
|
||||||
|
|
||||||
|
@ -30,10 +30,10 @@ func TestMediaFile_GetSquareThumbnail(t *testing.T) {
|
||||||
|
|
||||||
conf.InitializeTestData(t)
|
conf.InitializeTestData(t)
|
||||||
|
|
||||||
image1, err := NewMediaFile(conf.ImportPath + "/iphone/IMG_6788.JPG")
|
image1, err := NewMediaFile(conf.GetImportPath() + "/iphone/IMG_6788.JPG")
|
||||||
assert.Nil(t, err)
|
assert.Nil(t, err)
|
||||||
|
|
||||||
thumbnail1, err := image1.GetSquareThumbnail(conf.ThumbnailsPath, 350)
|
thumbnail1, err := image1.GetSquareThumbnail(conf.GetThumbnailsPath(), 350)
|
||||||
|
|
||||||
assert.Empty(t, err)
|
assert.Empty(t, err)
|
||||||
|
|
||||||
|
@ -49,15 +49,15 @@ func TestCreateThumbnailsFromOriginals(t *testing.T) {
|
||||||
|
|
||||||
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
tensorFlow := NewTensorFlow(conf.GetTensorFlowModelPath())
|
||||||
|
|
||||||
indexer := NewIndexer(conf.OriginalsPath, tensorFlow, conf.GetDb())
|
indexer := NewIndexer(conf.GetOriginalsPath(), tensorFlow, conf.GetDb())
|
||||||
|
|
||||||
converter := NewConverter(conf.DarktableCli)
|
converter := NewConverter(conf.GetDarktableCli())
|
||||||
|
|
||||||
importer := NewImporter(conf.OriginalsPath, indexer, converter)
|
importer := NewImporter(conf.GetOriginalsPath(), indexer, converter)
|
||||||
|
|
||||||
importer.ImportPhotosFromDirectory(conf.ImportPath)
|
importer.ImportPhotosFromDirectory(conf.GetImportPath())
|
||||||
|
|
||||||
CreateThumbnailsFromOriginals(conf.OriginalsPath, conf.ThumbnailsPath, 600, false)
|
CreateThumbnailsFromOriginals(conf.GetOriginalsPath(), conf.GetThumbnailsPath(), 600, false)
|
||||||
|
|
||||||
CreateThumbnailsFromOriginals(conf.OriginalsPath, conf.ThumbnailsPath, 300, true)
|
CreateThumbnailsFromOriginals(conf.GetOriginalsPath(), conf.GetThumbnailsPath(), 300, true)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,8 +9,8 @@ import (
|
||||||
|
|
||||||
// Start the REST API server using the configuration provided
|
// Start the REST API server using the configuration provided
|
||||||
func Start(conf *photoprism.Config) {
|
func Start(conf *photoprism.Config) {
|
||||||
if conf.ServerMode != "" {
|
if conf.GetServerMode() != "" {
|
||||||
gin.SetMode(conf.ServerMode)
|
gin.SetMode(conf.GetServerMode())
|
||||||
} else if conf.Debug == false {
|
} else if conf.Debug == false {
|
||||||
gin.SetMode(gin.ReleaseMode)
|
gin.SetMode(gin.ReleaseMode)
|
||||||
}
|
}
|
||||||
|
@ -22,5 +22,5 @@ func Start(conf *photoprism.Config) {
|
||||||
|
|
||||||
registerRoutes(app, conf)
|
registerRoutes(app, conf)
|
||||||
|
|
||||||
app.Run(fmt.Sprintf("%s:%d", conf.ServerIP, conf.ServerPort))
|
app.Run(fmt.Sprintf("%s:%d", conf.GetServerIP(), conf.GetServerPort()))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue