Use functions for all config values #50

Why? See https://github.com/photoprism/photoprism/issues/50#issuecomment-433856358
This commit is contained in:
Michael Mayer 2018-11-09 20:48:23 +01:00
parent 2cce8ded84
commit dd26ee0dca
26 changed files with 230 additions and 138 deletions

View file

@ -19,7 +19,7 @@ install-bin:
scripts/build.sh install /usr/local/bin/$(BINARY_NAME)
install-assets:
mkdir -p /srv/photoprism/photos
mkdir -p /srv/photoprism/thumbnails
mkdir -p /srv/photoprism/cache
mkdir -p /srv/photoprism/database
cp -r assets/server /srv/photoprism
cp -r assets/tensorflow /srv/photoprism

View file

@ -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)
volumes:
- ~/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:
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)
@ -30,7 +30,7 @@ services:
MYSQL_DATABASE: photoprism
volumes: # keep this
photoprism-thumbnails:
photoprism-cache:
driver: local
photoprism-database:
driver: local

View file

@ -1,7 +1,7 @@
debug: false
darktable-cli: /usr/bin/darktable-cli
assets-path: /srv/photoprism
thumbnails-path: /srv/photoprism/thumbnails
cache-path: /srv/photoprism/cache
originals-path: /srv/photoprism/photos/originals
import-path: /srv/photoprism/photos/import
export-path: /srv/photoprism/photos/export

View file

@ -13,7 +13,7 @@ services:
PHOTOPRISM_DEBUG: "true"
PHOTOPRISM_SERVER_MODE: "debug"
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_EXPORT_PATH: "/go/src/github.com/photoprism/photoprism/assets/photos/export"
PHOTOPRISM_ORIGINALS_PATH: "/go/src/github.com/photoprism/photoprism/assets/photos/originals"

View file

@ -29,7 +29,7 @@ func GetPhotos(router *gin.RouterGroup, conf *photoprism.Config) {
router.GET("/photos", func(c *gin.Context) {
var form forms.PhotoSearchForm
search := photoprism.NewSearch(conf.OriginalsPath, conf.GetDb())
search := photoprism.NewSearch(conf.GetOriginalsPath(), conf.GetDb())
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
func LikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
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)
@ -74,7 +74,7 @@ func LikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
// photoId: int Photo ID as returned by the API
func DislikePhoto(router *gin.RouterGroup, conf *photoprism.Config) {
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)

View file

@ -32,23 +32,23 @@ func GetThumbnail(router *gin.RouterGroup, conf *photoprism.Config) {
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)
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 {
switch thumbnailType {
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())
} else {
log.Printf("could not create thumbnail: %s", err.Error())
c.Data(400, "image/svg+xml", photoIconSvg)
}
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())
} else {
log.Printf("could not create square thumbnail: %s", err.Error())

View file

@ -18,16 +18,16 @@ func configAction(context *cli.Context) error {
conf := photoprism.NewConfig(context)
fmt.Printf("NAME VALUE\n")
fmt.Printf("debug %t\n", conf.Debug)
fmt.Printf("config-file %s\n", conf.ConfigFile)
fmt.Printf("assets-path %s\n", conf.AssetsPath)
fmt.Printf("originals-path %s\n", conf.OriginalsPath)
fmt.Printf("thumbnails-path %s\n", conf.ThumbnailsPath)
fmt.Printf("import-path %s\n", conf.ImportPath)
fmt.Printf("export-path %s\n", conf.ExportPath)
fmt.Printf("darktable-cli %s\n", conf.DarktableCli)
fmt.Printf("database-driver %s\n", conf.DatabaseDriver)
fmt.Printf("database-dsn %s\n", conf.DatabaseDsn)
fmt.Printf("debug %t\n", conf.IsDebug())
fmt.Printf("config-file %s\n", conf.GetConfigFile())
fmt.Printf("darktable-cli %s\n", conf.GetDarktableCli())
fmt.Printf("originals-path %s\n", conf.GetOriginalsPath())
fmt.Printf("import-path %s\n", conf.GetImportPath())
fmt.Printf("export-path %s\n", conf.GetExportPath())
fmt.Printf("cache-path %s\n", conf.GetCachePath())
fmt.Printf("assets-path %s\n", conf.GetAssetsPath())
fmt.Printf("database-driver %s\n", conf.GetDatabaseDriver())
fmt.Printf("database-dsn %s\n", conf.GetDatabaseDsn())
return nil
}

View file

@ -22,11 +22,11 @@ func convertAction(context *cli.Context) error {
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.")

View file

@ -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")
originals := photoprism.FindOriginalsByDate(conf.OriginalsPath, afterDate, beforeDate)
originals := photoprism.FindOriginalsByDate(conf.GetOriginalsPath(), afterDate, beforeDate)
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.")

View file

@ -26,12 +26,6 @@ var GlobalFlags = []cli.Flag{
Value: "/srv/photoprism/photos/originals",
EnvVar: "PHOTOPRISM_ORIGINALS_PATH",
},
cli.StringFlag{
Name: "thumbnails-path",
Usage: "thumbnails `PATH`",
Value: "/srv/photoprism/photos/thumbnails",
EnvVar: "PHOTOPRISM_THUMBNAILS_PATH",
},
cli.StringFlag{
Name: "import-path",
Usage: "import `PATH`",
@ -44,6 +38,12 @@ var GlobalFlags = []cli.Flag{
Value: "/srv/photoprism/photos/export",
EnvVar: "PHOTOPRISM_EXPORT_PATH",
},
cli.StringFlag{
Name: "cache-path",
Usage: "cache `PATH`",
Value: "/srv/photoprism/cache",
EnvVar: "PHOTOPRISM_CACHE_PATH",
},
cli.StringFlag{
Name: "assets-path",
Usage: "assets `PATH`",

View file

@ -24,17 +24,17 @@ func importAction(context *cli.Context) error {
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())
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.")

View file

@ -24,11 +24,11 @@ func indexAction(context *cli.Context) error {
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())
indexer := photoprism.NewIndexer(conf.OriginalsPath, tensorFlow, conf.GetDb())
indexer := photoprism.NewIndexer(conf.GetOriginalsPath(), tensorFlow, conf.GetDb())
indexer.IndexAll()

View file

@ -41,19 +41,7 @@ var startFlags = []cli.Flag{
func startAction(context *cli.Context) error {
conf := photoprism.NewConfig(context)
if context.IsSet("server-host") || conf.ServerIP == "" {
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 {
if conf.GetServerPort() < 1 {
log.Fatal("Server port must be a positive integer")
}

View file

@ -36,7 +36,7 @@ func thumbnailsAction(context *cli.Context) error {
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")
@ -50,7 +50,7 @@ func thumbnailsAction(context *cli.Context) error {
}
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.")

View file

@ -11,7 +11,7 @@ func TestMediaFile_GetColors(t *testing.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()
t.Log(names, vibrantHex, mutedHex)
@ -23,7 +23,7 @@ func TestMediaFile_GetColors(t *testing.T) {
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()
@ -35,7 +35,7 @@ func TestMediaFile_GetColors(t *testing.T) {
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()

View file

@ -27,6 +27,7 @@ type Config struct {
ServerPort int
ServerMode string
AssetsPath string
CachePath string
ThumbnailsPath string
OriginalsPath string
ImportPath string
@ -83,8 +84,8 @@ func (c *Config) SetValuesFromFile(fileName string) error {
c.AssetsPath = GetExpandedFilename(assetsPath)
}
if thumbnailsPath, err := yamlConfig.Get("thumbnails-path"); err == nil {
c.ThumbnailsPath = GetExpandedFilename(thumbnailsPath)
if cachePath, err := yamlConfig.Get("cache-path"); err == nil {
c.CachePath = GetExpandedFilename(cachePath)
}
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"))
}
if context.GlobalIsSet("thumbnails-path") || c.ThumbnailsPath == "" {
c.ThumbnailsPath = GetExpandedFilename(context.GlobalString("thumbnails-path"))
if context.GlobalIsSet("cache-path") || c.CachePath == "" {
c.CachePath = GetExpandedFilename(context.GlobalString("cache-path"))
}
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")
}
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
}
@ -162,19 +175,31 @@ func (c *Config) SetValuesFromCliContext(context *cli.Context) error {
// ImportPath
// ExportPath
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
}
if err := os.MkdirAll(c.ThumbnailsPath, os.ModePerm); err != nil {
if err := os.MkdirAll(c.GetImportPath(), os.ModePerm); err != nil {
return err
}
if err := os.MkdirAll(c.ImportPath, os.ModePerm); err != nil {
if err := os.MkdirAll(c.GetExportPath(), os.ModePerm); err != nil {
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
}
@ -207,6 +232,86 @@ func (c *Config) connectToDatabase() error {
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.
func (c *Config) GetAssetsPath() string {
return c.AssetsPath

View file

@ -25,7 +25,7 @@ const testConfigFile = "../../configs/photoprism.yml"
var darktableCli = "/usr/bin/darktable-cli"
var testDataZip = "/tmp/photoprism/testdata.zip"
var assetsPath = GetExpandedFilename("../../assets")
var thumbnailsPath = GetExpandedFilename(testDataPath + "/thumbnails")
var cachePath = GetExpandedFilename(testDataPath + "/cache")
var originalsPath = GetExpandedFilename(testDataPath + "/originals")
var importPath = GetExpandedFilename(testDataPath + "/import")
var exportPath = GetExpandedFilename(testDataPath + "/export")
@ -38,10 +38,10 @@ func init() {
}
func (c *Config) RemoveTestData(t *testing.T) {
os.RemoveAll(c.ImportPath)
os.RemoveAll(c.ExportPath)
os.RemoveAll(c.OriginalsPath)
os.RemoveAll(c.ThumbnailsPath)
os.RemoveAll(c.GetImportPath())
os.RemoveAll(c.GetExportPath())
os.RemoveAll(c.GetOriginalsPath())
os.RemoveAll(c.GetCachePath())
}
func (c *Config) DownloadTestData(t *testing.T) {
@ -83,7 +83,7 @@ func NewTestConfig() *Config {
return &Config{
Debug: false,
AssetsPath: assetsPath,
ThumbnailsPath: thumbnailsPath,
CachePath: cachePath,
OriginalsPath: originalsPath,
ImportPath: importPath,
ExportPath: exportPath,
@ -123,8 +123,8 @@ func TestNewConfig(t *testing.T) {
assert.IsType(t, &Config{}, c)
assert.Equal(t, assetsPath, c.AssetsPath)
assert.False(t, c.Debug)
assert.Equal(t, assetsPath, c.GetAssetsPath())
assert.False(t, c.IsDebug())
}
func TestConfig_SetValuesFromFile(t *testing.T) {
@ -132,20 +132,19 @@ func TestConfig_SetValuesFromFile(t *testing.T) {
c.SetValuesFromFile(GetExpandedFilename(testConfigFile))
assert.Equal(t, "/srv/photoprism", c.AssetsPath)
assert.Equal(t, "/srv/photoprism/thumbnails", c.ThumbnailsPath)
assert.Equal(t, "/srv/photoprism/photos/originals", c.OriginalsPath)
assert.Equal(t, "/srv/photoprism/photos/import", c.ImportPath)
assert.Equal(t, "/srv/photoprism/photos/export", c.ExportPath)
assert.Equal(t, databaseDriver, c.DatabaseDriver)
assert.Equal(t, databaseDsn, c.DatabaseDsn)
assert.Equal(t, "/srv/photoprism", c.GetAssetsPath())
assert.Equal(t, "/srv/photoprism/cache", c.GetCachePath())
assert.Equal(t, "/srv/photoprism/cache/thumbnails", c.GetThumbnailsPath())
assert.Equal(t, "/srv/photoprism/photos/originals", c.GetOriginalsPath())
assert.Equal(t, "/srv/photoprism/photos/import", c.GetImportPath())
assert.Equal(t, "/srv/photoprism/photos/export", c.GetExportPath())
assert.Equal(t, databaseDriver, c.GetDatabaseDriver())
assert.Equal(t, databaseDsn, c.GetDatabaseDsn())
}
func TestConfig_ConnectToDatabase(t *testing.T) {
c := NewTestConfig()
c.connectToDatabase()
db := c.GetDb()
assert.IsType(t, &gorm.DB{}, db)

View file

@ -10,7 +10,7 @@ import (
func TestNewConverter(t *testing.T) {
conf := NewTestConfig()
converter := NewConverter(conf.DarktableCli)
converter := NewConverter(conf.GetDarktableCli())
assert.IsType(t, &Converter{}, converter)
}
@ -20,9 +20,9 @@ func TestConverter_ConvertToJpeg(t *testing.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)
@ -46,7 +46,7 @@ func TestConverter_ConvertToJpeg(t *testing.T) {
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)
@ -56,7 +56,7 @@ func TestConverter_ConvertToJpeg(t *testing.T) {
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)
@ -72,11 +72,11 @@ func TestConverter_ConvertAll(t *testing.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?")
@ -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")
existingJpegFilename := conf.ImportPath + "/raw/20140717_154212_1EC48F8489.jpg"
existingJpegFilename := conf.GetImportPath() + "/raw/20140717_154212_1EC48F8489.jpg"
oldHash := fileHash(existingJpegFilename)
os.Remove(existingJpegFilename)
converter.ConvertAll(conf.ImportPath)
converter.ConvertAll(conf.GetImportPath())
newHash := fileHash(existingJpegFilename)

View file

@ -11,7 +11,7 @@ func TestMediaFile_GetExifData(t *testing.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)
@ -23,7 +23,7 @@ func TestMediaFile_GetExifData(t *testing.T) {
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)

View file

@ -11,11 +11,11 @@ func TestNewImporter(t *testing.T) {
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)
}
@ -27,13 +27,13 @@ func TestImporter_ImportPhotosFromDirectory(t *testing.T) {
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) {
@ -42,13 +42,13 @@ func TestImporter_GetDestinationFilename(t *testing.T) {
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)
@ -56,5 +56,5 @@ func TestImporter_GetDestinationFilename(t *testing.T) {
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)
}

View file

@ -11,11 +11,11 @@ func TestMediaFile_GetRelatedFiles(t *testing.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)
expectedBaseFilename := conf.ImportPath + "/raw/20140717_154212_1EC48F8489"
expectedBaseFilename := conf.GetImportPath() + "/raw/20140717_154212_1EC48F8489"
related, _, err := mediaFile.GetRelatedFiles()
@ -41,7 +41,7 @@ func TestMediaFile_GetRelatedFiles_Ordering(t *testing.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)
@ -62,9 +62,9 @@ func TestMediaFile_GetEditedFilename(t *testing.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.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
mediaFile2, err := NewMediaFile("/foo/bar/IMG_E1234.jpg")
@ -72,7 +72,7 @@ func TestMediaFile_GetEditedFilename(t *testing.T) {
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.Equal(t, "", mediaFile3.GetEditedFilename())
}
@ -82,13 +82,13 @@ func TestMediaFile_GetPerceptiveHash(t *testing.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)
hash1, _ := mediaFile1.GetPerceptualHash()
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)
hash2, _ := mediaFile2.GetPerceptualHash()
@ -98,7 +98,7 @@ func TestMediaFile_GetPerceptiveHash(t *testing.T) {
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)
hash3, _ := mediaFile3.GetPerceptualHash()
@ -114,11 +114,11 @@ func TestMediaFile_GetMimeType(t *testing.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.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.Equal(t, "application/octet-stream", image2.GetMimeType())
}
@ -126,12 +126,12 @@ func TestMediaFile_GetMimeType(t *testing.T) {
func TestMediaFile_Exists(t *testing.T) {
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.NotNil(t, mediaFile)
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.Nil(t, mediaFile)
}

View file

@ -13,7 +13,7 @@ func TestSearch_Photos_Query(t *testing.T) {
conf.InitializeTestData(t)
search := NewSearch(conf.OriginalsPath, conf.GetDb())
search := NewSearch(conf.GetOriginalsPath(), conf.GetDb())
var form forms.PhotoSearchForm
@ -46,7 +46,7 @@ func TestSearch_Photos_Camera(t *testing.T) {
conf.InitializeTestData(t)
search := NewSearch(conf.OriginalsPath, conf.GetDb())
search := NewSearch(conf.GetOriginalsPath(), conf.GetDb())
var form forms.PhotoSearchForm

View file

@ -14,7 +14,7 @@ func TestTensorFlow_GetImageTags(t *testing.T) {
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)
} else {
result, err := tensorFlow.GetImageTags(string(imageBuffer))
@ -38,7 +38,7 @@ func TestTensorFlow_GetImageTagsFromFile(t *testing.T) {
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.Nil(t, err)

View file

@ -13,10 +13,10 @@ func TestMediaFile_GetThumbnail(t *testing.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)
thumbnail1, err := image1.GetThumbnail(conf.ThumbnailsPath, 350)
thumbnail1, err := image1.GetThumbnail(conf.GetThumbnailsPath(), 350)
assert.Empty(t, err)
@ -30,10 +30,10 @@ func TestMediaFile_GetSquareThumbnail(t *testing.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)
thumbnail1, err := image1.GetSquareThumbnail(conf.ThumbnailsPath, 350)
thumbnail1, err := image1.GetSquareThumbnail(conf.GetThumbnailsPath(), 350)
assert.Empty(t, err)
@ -49,15 +49,15 @@ func TestCreateThumbnailsFromOriginals(t *testing.T) {
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)
}

View file

@ -9,8 +9,8 @@ import (
// Start the REST API server using the configuration provided
func Start(conf *photoprism.Config) {
if conf.ServerMode != "" {
gin.SetMode(conf.ServerMode)
if conf.GetServerMode() != "" {
gin.SetMode(conf.GetServerMode())
} else if conf.Debug == false {
gin.SetMode(gin.ReleaseMode)
}
@ -22,5 +22,5 @@ func Start(conf *photoprism.Config) {
registerRoutes(app, conf)
app.Run(fmt.Sprintf("%s:%d", conf.ServerIP, conf.ServerPort))
app.Run(fmt.Sprintf("%s:%d", conf.GetServerIP(), conf.GetServerPort()))
}