diff --git a/go.mod b/go.mod index 31fb1a9a..7016279f 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/mattn/go-colorable v0.1.1 // indirect github.com/mattn/go-isatty v0.0.7 // indirect github.com/mattn/go-sqlite3 v1.10.0 + github.com/muesli/go-app-paths v0.0.0-20181030220709-913f7f7ac60f github.com/patrickmn/go-cache v2.1.0+incompatible github.com/shurcooL/httpfs v0.0.0-20181222201310-74dc9339e414 // indirect github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd diff --git a/go.sum b/go.sum index 4407900c..d7ed0126 100644 --- a/go.sum +++ b/go.sum @@ -50,8 +50,11 @@ github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/ github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.10.0 h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o= github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= +github.com/muesli/go-app-paths v0.0.0-20181030220709-913f7f7ac60f h1:qC86+y8MoTDwlkAeS4p8fuo9nzKtZV/Gg9Nbqeu1+LM= +github.com/muesli/go-app-paths v0.0.0-20181030220709-913f7f7ac60f/go.mod h1:YIG7FlQLGglsbGA+CX6/boYl9aNdoQXfx+ZtACJCMug= github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= diff --git a/path-generator.go b/path-generator.go new file mode 100644 index 00000000..1662279d --- /dev/null +++ b/path-generator.go @@ -0,0 +1,35 @@ +// +build !dev + +package main + +import ( + "os" + + apppaths "github.com/muesli/go-app-paths" +) + +func init() { + // Get data directory + dataDir = getDataDirectory() + + // Make sure directory exist + os.MkdirAll(dataDir, os.ModePerm) +} + +func getDataDirectory() string { + // Try to look at environment variables + dataDir, found := os.LookupEnv("ENV_SHIORI_DIR") + if found { + return dataDir + } + + // Try to use platform specific app path + userScope := apppaths.NewScope(apppaths.User, "shiori", "shiori") + dataDir, err := userScope.DataDir() + if err == nil { + return dataDir + } + + // When all fail, use current working directory + return "." +}