diff --git a/app-commons/src/main/scala/org/bitcoins/commons/config/AppConfig.scala b/app-commons/src/main/scala/org/bitcoins/commons/config/AppConfig.scala index 0aa6e97dbc..1ca7a7a07e 100644 --- a/app-commons/src/main/scala/org/bitcoins/commons/config/AppConfig.scala +++ b/app-commons/src/main/scala/org/bitcoins/commons/config/AppConfig.scala @@ -2,11 +2,11 @@ package org.bitcoins.commons.config import com.typesafe.config.{Config, ConfigFactory, ConfigParseOptions} import org.bitcoins.commons.util.BitcoinSLogger -import org.bitcoins.core.config._ +import org.bitcoins.core.config.* import org.bitcoins.core.protocol.blockchain.BitcoinChainParams -import org.bitcoins.core.util.StartStopAsync +import org.bitcoins.core.util.{EnvUtil, StartStopAsync} -import java.nio.file._ +import java.nio.file.* import scala.concurrent.Future import scala.jdk.CollectionConverters.CollectionHasAsScala import scala.util.Properties @@ -236,8 +236,37 @@ object AppConfig extends BitcoinSLogger { * TODO: use different directories on Windows and Mac, should probably mimic * what Bitcoin Core does */ - private[bitcoins] lazy val DEFAULT_BITCOIN_S_DATADIR: Path = - Paths.get(Properties.userHome, ".bitcoin-s") + private[bitcoins] lazy val DEFAULT_BITCOIN_S_DATADIR: Path = { + val base = Paths.get(Properties.userHome, ".bitcoin-s") + if (EnvUtil.isLinux) { + base + } else if (EnvUtil.isMac) { + // migration code to use proper location on mac + val full = Paths + .get(Properties.userHome) + .resolve("Library") + .resolve("Application Support") + .resolve("bitcoin-s") + if (Files.exists(full)) { + full + } else { + if (Files.exists(base)) { + // just use old directory for now + // we will eventually migrate this in the future + base + } else { + // fresh install, so use the proper spot + full + } + } + } else if (EnvUtil.isWindows) { + // windows + base + } else { + sys.error(s"Unsupported os=${EnvUtil.osName}") + } + + } private[bitcoins] lazy val DEFAULT_BITCOIN_S_CONF_FILE: String = "bitcoin-s.conf" diff --git a/core/src/main/scala/org/bitcoins/core/util/EnvUtil.scala b/core/src/main/scala/org/bitcoins/core/util/EnvUtil.scala index 96d27a3234..4b9f1265bf 100644 --- a/core/src/main/scala/org/bitcoins/core/util/EnvUtil.scala +++ b/core/src/main/scala/org/bitcoins/core/util/EnvUtil.scala @@ -3,7 +3,7 @@ package org.bitcoins.core.util import scala.util.Properties object EnvUtil { - private val osName = System.getProperty("os.name") + lazy val osName: String = System.getProperty("os.name") lazy val isLinux: Boolean = osName.startsWith("Linux") diff --git a/project/CommonSettings.scala b/project/CommonSettings.scala index e3fe9834a3..db8a300858 100644 --- a/project/CommonSettings.scala +++ b/project/CommonSettings.scala @@ -2,28 +2,15 @@ import com.typesafe.sbt.SbtNativePackager.Docker import com.typesafe.sbt.SbtNativePackager.autoImport.packageName -import java.nio.file.Paths -import com.typesafe.sbt.packager.Keys.{ - daemonUser, - daemonUserUid, - dockerAlias, - dockerAliases, - dockerCommands, - dockerExposedVolumes, - dockerRepository, - dockerUpdateLatest, - maintainer -} +import java.nio.file.{Files, Paths} +import com.typesafe.sbt.packager.Keys.{daemonUser, daemonUserUid, dockerAlias, dockerAliases, dockerCommands, dockerExposedVolumes, dockerRepository, dockerUpdateLatest, maintainer} import com.typesafe.sbt.packager.archetypes.jlink.JlinkPlugin.autoImport.JlinkIgnore import com.typesafe.sbt.packager.docker.{Cmd, DockerChmodType} -import com.typesafe.sbt.packager.docker.DockerPlugin.autoImport.{ - dockerAdditionalPermissions, - dockerBaseImage -} -import sbt._ -import sbt.Keys._ +import com.typesafe.sbt.packager.docker.DockerPlugin.autoImport.{dockerAdditionalPermissions, dockerBaseImage} +import sbt.* +import sbt.Keys.* import sbtprotoc.ProtocPlugin.autoImport.PB -import sbtassembly.AssemblyKeys._ +import sbtassembly.AssemblyKeys.* import sbtdynver.DynVer import scala.sys.process.Process @@ -243,8 +230,37 @@ object CommonSettings { ) } - lazy val binariesPath = - Paths.get(Properties.userHome, ".bitcoin-s", "binaries") + lazy val binariesPath = { + val base = Paths.get(Properties.userHome, ".bitcoin-s", "binaries") + if (EnvUtil.isLinux) { + base + } else if (EnvUtil.isMac) { + // migration code to use proper location on mac + val full = Paths + .get(Properties.userHome) + .resolve("Library") + .resolve("Application Support") + .resolve("bitcoin-s") + .resolve("binaries") + if (Files.exists(full)) { + full + } else { + if (Files.exists(base)) { + // just use old directory for now + // we will eventually migrate this in the future + base + } else { + // fresh install, so use the proper spot + full + } + } + } else if (EnvUtil.isWindows) { + // windows + base + } else { + sys.error(s"Unsupported os=${EnvUtil.osName}") + } + } lazy val cryptoJlinkIgnore = { Vector( diff --git a/project/EnvUtil.scala b/project/EnvUtil.scala index 9926e14de4..d4d286960c 100644 --- a/project/EnvUtil.scala +++ b/project/EnvUtil.scala @@ -1,7 +1,7 @@ import scala.util.Properties object EnvUtil { - private val osName = System.getProperty("os.name") + val osName = System.getProperty("os.name") lazy val isLinux: Boolean = osName.startsWith("Linux")