From dc253bc85cba03c0eeb53bae9abcaf2e34278df4 Mon Sep 17 00:00:00 2001 From: Igor Timofeev Date: Mon, 16 Oct 2023 10:34:58 +0000 Subject: [PATCH] Moved everything (except ocelot.jar) to AppData/home --- lib/ocelot-brain | 2 +- sprites/icons/Link.png | Bin 2976 -> 2957 bytes src/main/resources/log4j2.xml | 19 ------ .../images/spritesheet/spritesheet.png | Bin 144701 -> 144625 bytes src/main/resources/ocelot/desktop/ocelot.conf | 4 +- .../scala/ocelot/desktop/OcelotDesktop.scala | 61 ++++++++++++++---- src/main/scala/ocelot/desktop/Settings.scala | 54 +++++++++------- .../ocelot/desktop/graphics/Graphics.scala | 6 +- .../scala/ocelot/desktop/ui/UiHandler.scala | 35 ++++------ .../ocelot/desktop/ui/widget/RootWidget.scala | 4 +- .../widget/settings/SystemSettingsTab.scala | 21 +++--- .../scala/ocelot/desktop/util/FileUtils.scala | 7 -- .../desktop/util/LoggingConfiguration.scala | 44 +++++++++++++ .../ocelot/desktop/util/OcelotPaths.scala | 45 +++++++++++++ .../ocelot/desktop/util/SettingsData.scala | 2 +- 15 files changed, 199 insertions(+), 105 deletions(-) delete mode 100644 src/main/resources/log4j2.xml create mode 100644 src/main/scala/ocelot/desktop/util/LoggingConfiguration.scala create mode 100644 src/main/scala/ocelot/desktop/util/OcelotPaths.scala diff --git a/lib/ocelot-brain b/lib/ocelot-brain index a507175..5255398 160000 --- a/lib/ocelot-brain +++ b/lib/ocelot-brain @@ -1 +1 @@ -Subproject commit a507175686c3a60f61efde013d0269c596e03b28 +Subproject commit 525539880fd9510b5a5e476a951d3661a0f5bfa2 diff --git a/sprites/icons/Link.png b/sprites/icons/Link.png index e3f447fb2d093bea1e122038b38d72921d972b67..62be6bb3bff356a6fd0d21b1ca1d293659cd4af9 100644 GIT binary patch delta 381 zcmZ1=-YdSLhLN#;axG(zx~ZO-ZnB|?se-wso}rnsiKV5Ef{}rtg}#A>zM-+Mp_!G5 zft8WbW&Ri2TWXRBmnU<7m;hGV?h zwAh`ULC&|Fe3L_Q^Kniy#`>+FW>qsVFcf;aIEGmCo}F}%>wp4}^XFs#{!ib0c+HMg z%?}gBsycmV32j_E)oR*}-y94~DkpRO3s~JJony$E?eIIRaC+q`=KFy>C!42eylroG znU#85SCZ?9X5{j{2KSU&vtAypD(g_0$Y$Iv$QKeP_9JHYpCj?CdizhAi##{wYwQ8q O&fw|l=d#Wzp$PzbQ+Mb9 delta 387 zcmeAbUm(7rhLN#maxG(zx|yDVZnA-ak%GCUo}rnEiG_uZf{}rdfxdyczM+Axk&%^w znU$&WW&mdKI;Vst05&s!d;kCd diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml deleted file mode 100644 index bc29822..0000000 --- a/src/main/resources/log4j2.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png b/src/main/resources/ocelot/desktop/images/spritesheet/spritesheet.png index f75c717c2aab3fb6325f45523a18f851d8e610b6..234a185bd4be82a5c7b97f44fc8647c6155031d5 100644 GIT binary patch delta 52159 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�AJgZI?0&jTLX(lsZu6xyE#Vxdny1D%CJw*>8av?Hw}4h2$v zEK@{kNi#x4<#KV=z-!9E@djufaJp)A68eHp}N`ctJ?mQGXs zljjcw8bA}^E%c?!%`vDI?d7^}WKp-7;>$VLOQ!?=bcBY~gF}BBFTf864KqV;FXfN? zS=2M3dffJuR=kcv_Gh`N4i=h#S*w8A0cYrrU!N(4IM3iqr>k97skU?swlMcjMf~aI zCNJd4TU4_la7;xhjGy8V;;zL22AGANyUE5TN@`lm%YH3r`C>@o40H`-k<%LOcq%uh z{kqF9RQjJ5dAbDkacPQ*ZZqS8M^itnZ~np*e?p4h)>6={Q|;eonNj-hQB8$LL$ZB+ zyQ;fXuM7Yi)dh=!$|&I*WMjVzS*&$zcQ5!1l+Z}yD` zbipIh=&1QGSgWHur(!VF3z9zPFLUohGmUQ1Oa!RcN{O-eu4+NW1}1m0sotP{l3i!C zfa-S*L@0)M%n(XXH`TdpaEAo^g*Z@u>k?-wKzkO19^YL^s^{H~$@;m&oL1`QhBmVk z5hLd+zSids)e)#KX@^a}SF^sW7_y(sM@bbCf`%SdQEyJ6+MIyXp@gKzy7c3{uYeee zS_%twsP}$|M;}mOd@y?iOp~N8iM+kwV4*>y&MTT2ile;r>r0lD0{z|WAe@<4sqI~Pg;52Xt?LX~t%=$L!d tn^o3cMgJ~Dd-f3e{B_z(v@EN5;N}AavXc3T12hXL%BkKfyz}Vk{{x8lPci@i diff --git a/src/main/resources/ocelot/desktop/ocelot.conf b/src/main/resources/ocelot/desktop/ocelot.conf index d1ea4a8..ec44680 100644 --- a/src/main/resources/ocelot/desktop/ocelot.conf +++ b/src/main/resources/ocelot/desktop/ocelot.conf @@ -5,8 +5,8 @@ ocelot { brain { # This is the path to OpenComputers configuration file, that Ocelot Brain can use # to apply the settings which can be applicable in emulation context (like `bufferChanges: false`). - # Optional. - configPath: brain.conf + # Optional. By default it's being stored at ~/AppData/Ocelot or ~/.config/ocelot + customConfigPath: null } sound { diff --git a/src/main/scala/ocelot/desktop/OcelotDesktop.scala b/src/main/scala/ocelot/desktop/OcelotDesktop.scala index f2303a7..dd4ba51 100644 --- a/src/main/scala/ocelot/desktop/OcelotDesktop.scala +++ b/src/main/scala/ocelot/desktop/OcelotDesktop.scala @@ -7,10 +7,10 @@ import ocelot.desktop.ui.swing.SplashScreen import ocelot.desktop.ui.widget._ import ocelot.desktop.ui.widget.modal.notification.{NotificationDialog, NotificationType} import ocelot.desktop.util.CommandLine.Argument -import ocelot.desktop.util.FileUtils.getOcelotConfigDirectory import ocelot.desktop.util._ import org.apache.commons.io.FileUtils -import org.apache.logging.log4j.LogManager +import org.apache.commons.lang3.SystemUtils +import org.lwjgl.opengl.Display import totoro.ocelot.brain.Ocelot import totoro.ocelot.brain.nbt.ExtendedNBT.{extendNBTTagCompound, extendNBTTagList} import totoro.ocelot.brain.nbt.{CompressedStreamTools, NBT, NBTTagCompound, NBTTagString} @@ -29,7 +29,11 @@ import scala.io.Source import scala.jdk.CollectionConverters._ import scala.util.{Failure, Success, Try, Using} -object OcelotDesktop extends Logging { +object OcelotDesktop + // This configures Log4j appenders & loggers, it should come before Logging in inheritance hierarchy + extends LoggingConfiguration + with Logging +{ System.setProperty("awt.useSystemAAFontSettings", "on") System.setProperty("swing.aatext", "true") @@ -64,18 +68,46 @@ object OcelotDesktop extends Logging { splashScreen.setStatus("Loading configuration...", 0.10f) val customConfigPath = args.get(CommandLine.ConfigPath).flatten - val settingsFile = if (customConfigPath.isEmpty) - getOcelotConfigDirectory.resolve("ocelot.conf") - else - Paths.get(customConfigPath.get) + val desktopConfigPath: Path = + if (customConfigPath.isDefined) { + Paths.get(customConfigPath.get) + } + else { + // TODO: migration for old locations of ocelot.conf, can be safely removed later + // TODO: uncomment this line and delete everything below it when you're ready! + // OcelotPaths.desktopConfig + + val newConfigPath = OcelotPaths.desktopConfig + + try { + if (!Files.exists(newConfigPath)) { + val oldConfigPath = + if (SystemUtils.IS_OS_WINDOWS) + Paths.get(OcelotPaths.windowsAppDataDirectoryName, "Ocelot", "ocelot.conf") + else + Paths.get(OcelotPaths.linuxHomeDirectoryName, ".config", "ocelot", "ocelot.conf") + + if (Files.exists(oldConfigPath)) + Files.move(oldConfigPath, newConfigPath) + } + } + catch { + case _: Throwable => + } + + // TODO: end of upper todo <3 + newConfigPath + } + + Settings.load(desktopConfigPath) - Settings.load(settingsFile) Messages.load(Source.fromURL(getClass.getResource("/ocelot/desktop/messages.txt"))) ColorScheme.load(Source.fromURL(getClass.getResource("/ocelot/desktop/colorscheme.txt"))) splashScreen.setStatus("Initializing brain...", 0.20f) - Ocelot.configPath = Settings.get.brainConfigPath - Ocelot.initialize(LogManager.getLogger(Ocelot)) + Ocelot.configPath = Settings.get.brainCustomConfigPath.map(Paths.get(_)) + Ocelot.librariesPath = Some(OcelotPaths.libraries) + Ocelot.initialize(logger) Items.init() @@ -90,6 +122,8 @@ object OcelotDesktop extends Logging { val loadRecentWorkspace = Settings.get.recentWorkspace.isDefined && Settings.get.openLastWorkspace root = new RootWidget(!loadRecentWorkspace) + root.width = Display.getWidth + root.height = Display.getHeight UiHandler.setRoot(root) splashScreen.setStatus("Loading workspace...", 0.90f) @@ -151,7 +185,7 @@ object OcelotDesktop extends Logging { } WebcamCapture.cleanup() - Settings.save(settingsFile) + Settings.save(desktopConfigPath) UiHandler.terminate() ResourceManager.checkEmpty() @@ -237,9 +271,11 @@ object OcelotDesktop extends Logging { for (path <- oldFiles) { val oldFile = oldPath.resolve(path.getFileName).toFile val newFile = outputPath.resolve(path.getFileName).toFile + if (Files.isDirectory(path)) { FileUtils.copyDirectory(oldFile, newFile) - } else { + } + else { FileUtils.copyFile(oldFile, newFile) } } @@ -290,6 +326,7 @@ object OcelotDesktop extends Logging { def load(dir: File): Try[Unit] = { val path = Paths.get(dir.getCanonicalPath, "workspace.nbt") + if (Files.exists(path)) { Using(new DataInputStream(Files.newInputStream(path))) { reader => val nbt = CompressedStreamTools.readCompressed(reader) diff --git a/src/main/scala/ocelot/desktop/Settings.scala b/src/main/scala/ocelot/desktop/Settings.scala index bad41fc..53391fb 100644 --- a/src/main/scala/ocelot/desktop/Settings.scala +++ b/src/main/scala/ocelot/desktop/Settings.scala @@ -14,7 +14,7 @@ import scala.io.{Codec, Source} class Settings(val config: Config) extends SettingsData { // TODO: refactor this mess (having to declare every field 3 times is extremely error-prone) - brainConfigPath = config.getOptionalString("ocelot.brain.configPath") + brainCustomConfigPath = config.getOptionalString("ocelot.brain.customConfigPath") volumeMaster = (config.getDouble("ocelot.sound.volumeMaster") max 0 min 1).toFloat volumeBeep = (config.getDouble("ocelot.sound.volumeBeep") max 0 min 1).toFloat @@ -114,40 +114,46 @@ object Settings extends Logging { def load(path: Path): Unit = { import java.lang.System.{lineSeparator => EOL} + + if (Files.exists(path)) { + var stream: InputStream = null + + try { + stream = Files.newInputStream(path) + val source = Source.fromInputStream(stream)(Codec.UTF8) + val plain = source.getLines().mkString("", EOL, EOL) + val config = ConfigFactory.parseString(plain) + settings = new Settings(config) + source.close() + + logger.info(s"Loaded Ocelot Desktop configuration from: $path") + + return + } + catch { + case _: Throwable => + logger.info(s"Failed to parse $path, using default Ocelot Desktop configuration.") + } + finally { + if (stream != null) + stream.close() + } + } + val defaults = { val in = getClass.getResourceAsStream("/ocelot/desktop/ocelot.conf") val config = Source.fromInputStream(in)(Codec.UTF8).getLines().mkString("", EOL, EOL) in.close() ConfigFactory.parseString(config) } - var stream: InputStream = null - try { - stream = Files.newInputStream(path) - val source = Source.fromInputStream(stream)(Codec.UTF8) - val plain = source.getLines().mkString("", EOL, EOL) - val config = ConfigFactory.parseString(plain) - settings = new Settings(config) - source.close() - logger.info(s"Loaded Ocelot Desktop configuration from: $path") - } - catch { - case e: Throwable => - logger.info("Using default Ocelot Desktop configuration.") - if (Files.exists(path)) { - logger.warn(s"(Failed to parse $path!)", e) - } - settings = new Settings(defaults) - } - finally { - if (stream != null) - stream.close() - } + + settings = new Settings(defaults) } def save(path: Path): Unit = { if (settings != null) { val updatedConfig = settings.config - .withValuePreserveOrigin("ocelot.brain.configPath", settings.brainConfigPath) + .withValuePreserveOrigin("ocelot.brain.customConfigPath", settings.brainCustomConfigPath) .withValuePreserveOrigin("ocelot.sound.volumeMaster", settings.volumeMaster) .withValuePreserveOrigin("ocelot.sound.volumeBeep", settings.volumeBeep) .withValuePreserveOrigin("ocelot.sound.volumeEnvironment", settings.volumeEnvironment) diff --git a/src/main/scala/ocelot/desktop/graphics/Graphics.scala b/src/main/scala/ocelot/desktop/graphics/Graphics.scala index b3a2743..7f10d9c 100644 --- a/src/main/scala/ocelot/desktop/graphics/Graphics.scala +++ b/src/main/scala/ocelot/desktop/graphics/Graphics.scala @@ -14,12 +14,10 @@ import scala.collection.mutable import scala.util.control.Breaks._ //noinspection ScalaWeakerAccess,ScalaUnusedSymbol -class Graphics(private var scalingFactor: Float) extends Logging with Resource { +class Graphics(private var width: Int, private var height: Int, private var scalingFactor: Float) extends Logging with Resource { private var time = 0f - private var projection = Transform2D.viewport(800, 600) - private var width = 800 - private var height = 600 + private var projection = Transform2D.viewport(width, height) private val shaderProgram = new ShaderProgram("general") private val renderer = new InstanceRenderer[MeshVertex2D, MeshInstance2D](Mesh2D.quad, MeshInstance2D, shaderProgram) diff --git a/src/main/scala/ocelot/desktop/ui/UiHandler.scala b/src/main/scala/ocelot/desktop/ui/UiHandler.scala index fca3676..59e87e1 100644 --- a/src/main/scala/ocelot/desktop/ui/UiHandler.scala +++ b/src/main/scala/ocelot/desktop/ui/UiHandler.scala @@ -9,7 +9,6 @@ import ocelot.desktop.ui.event.sources.{KeyEvents, MouseEvents, ScrollEvents} import ocelot.desktop.ui.widget.{RootWidget, Widget} import ocelot.desktop.util._ import ocelot.desktop.{OcelotDesktop, Settings} -import org.apache.commons.io.FileUtils import org.apache.commons.lang3.SystemUtils import org.lwjgl.BufferUtils import org.lwjgl.input.Mouse @@ -20,7 +19,7 @@ import java.awt.datatransfer.{DataFlavor, StringSelection, UnsupportedFlavorExce import java.io.{File, FileOutputStream} import java.nio.ByteBuffer import java.nio.channels.Channels -import java.nio.file.{Files, Paths} +import java.nio.file.Paths import javax.imageio.ImageIO import scala.collection.mutable import scala.concurrent.duration.DurationInt @@ -195,9 +194,8 @@ object UiHandler extends Logging { Display.create((new PixelFormat).withSRGB(true), new ContextAttribs(3, 2)) - if (Settings.get.windowValidatePosition) { + if (Settings.get.windowValidatePosition) fixInsaneInitialWindowGeometry() - } KeyEvents.init() MouseEvents.init() @@ -208,11 +206,13 @@ object UiHandler extends Logging { logger.info(s"OpenGL version: ${GL11.glGetString(GL11.GL_VERSION)}") Spritesheet.load() - graphics = new Graphics(scalingFactor) + + graphics = new Graphics(Display.getWidth, Display.getHeight, scalingFactor) if (Settings.get.audioDisable) { logger.warn("Sound disabled (via config)") - } else { + } + else { Audio.init() } } @@ -222,19 +222,8 @@ object UiHandler extends Logging { root.relayout() } - private var nativeLibrariesDir: String = _ - def loadLibraries(): Unit = { - // we cannot remove DLL files on Windows after they were loaded by Ocelot - // therefore we will create them in local directory and keep for future - nativeLibrariesDir = if (SystemUtils.IS_OS_WINDOWS) { - Paths.get(this.getClass.getProtectionDomain.getCodeSource.getLocation.toURI.resolve("natives")).toString - } else { - val directory = Files.createTempDirectory("ocelot-desktop") - Runtime.getRuntime.addShutdownHook(new Thread(() => FileUtils.deleteDirectory(new File(nativeLibrariesDir)))) - - directory.toString - } + val librariesPath = OcelotPaths.libraries.toString val arch = System.getProperty("os.arch") val is64bit = arch.startsWith("amd64") @@ -254,9 +243,10 @@ object UiHandler extends Logging { else throw new Exception("Unsupported OS") - logger.debug("Unpacking native libraries to: " + nativeLibrariesDir) + logger.debug(s"Unpacking native libraries to: $librariesPath") + for (lib <- libs) { - val dest = new File(Paths.get(nativeLibrariesDir, lib).toString) + val dest = new File(Paths.get(librariesPath, lib).toString) if (!dest.exists()) { val source = getClass.getResourceAsStream("/" + lib) @@ -272,7 +262,7 @@ object UiHandler extends Logging { } } - System.setProperty("org.lwjgl.librarypath", nativeLibrariesDir) + System.setProperty("org.lwjgl.librarypath", librariesPath) if (Settings.get.debugLwjgl) { logger.info("Enabling LWJGL debug mode") @@ -362,7 +352,8 @@ object UiHandler extends Logging { } private def update(): Unit = { - if (shouldUpdateHierarchy) _updateHierarchy() + if (shouldUpdateHierarchy) + _updateHierarchy() val mousePos = mousePosition if (mousePos.x < 0 || mousePos.y < 0 || mousePos.x > root.width || mousePos.y > root.height) { diff --git a/src/main/scala/ocelot/desktop/ui/widget/RootWidget.scala b/src/main/scala/ocelot/desktop/ui/widget/RootWidget.scala index b54cb89..a9000f2 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/RootWidget.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/RootWidget.scala @@ -23,7 +23,9 @@ class RootWidget(setupDefaultWorkspace: Boolean = true) extends Widget { val workspaceView = new WorkspaceView workspaceView.root = root - if (setupDefaultWorkspace) workspaceView.createDefaultWorkspace() + + if (setupDefaultWorkspace) + workspaceView.createDefaultWorkspace() val modalDialogPool = new ModalDialogPool val draggedItemPool = new DraggedItemPool diff --git a/src/main/scala/ocelot/desktop/ui/widget/settings/SystemSettingsTab.scala b/src/main/scala/ocelot/desktop/ui/widget/settings/SystemSettingsTab.scala index b5e2285..0b0943d 100644 --- a/src/main/scala/ocelot/desktop/ui/widget/settings/SystemSettingsTab.scala +++ b/src/main/scala/ocelot/desktop/ui/widget/settings/SystemSettingsTab.scala @@ -1,20 +1,19 @@ package ocelot.desktop.ui.widget.settings import ocelot.desktop.color.Color -import ocelot.desktop.{ColorScheme, OcelotDesktop, Settings} import ocelot.desktop.geometry.Padding2D import ocelot.desktop.graphics.{Graphics, IconSource} import ocelot.desktop.ui.layout.LinearLayout import ocelot.desktop.ui.widget.modal.notification.{NotificationDialog, NotificationType} -import ocelot.desktop.ui.widget.{Button, IconButton, Label, PaddingBox, TextInput, Widget} -import ocelot.desktop.util.{FileUtils, Logging, Orientation} +import ocelot.desktop.ui.widget._ +import ocelot.desktop.util.{FileUtils, Logging, OcelotPaths, Orientation} +import ocelot.desktop.{ColorScheme, OcelotDesktop, Settings} import java.io.File import javax.swing.JFileChooser -import scala.util.{Failure, Success, Try} +import scala.util.{Failure, Success} class SystemSettingsTab extends SettingsTab with Logging { - private val OpenComputersConfigName = "opencomputers.conf" private val OpenComputersConfigResource = "/application.conf" override val icon: IconSource = IconSource.SettingsSystem @@ -22,9 +21,9 @@ class SystemSettingsTab extends SettingsTab with Logging { children :+= new PaddingBox(new Label("OpenComputers configuration file path:"), Padding2D(bottom = 8)) - private val textInput: TextInput = new TextInput(Settings.get.brainConfigPath.getOrElse("")) { + private val textInput: TextInput = new TextInput(Settings.get.brainCustomConfigPath.getOrElse("")) { override def onInput(text: String): Unit = { - Settings.get.brainConfigPath = Some(text) + Settings.get.brainCustomConfigPath = Some(text) restartWarning.isVisible = true } } @@ -60,15 +59,13 @@ class SystemSettingsTab extends SettingsTab with Logging { children :+= new Button { override def text: String = "Current Directory" override def onClick(): Unit = { - unpackConfig(new File(OpenComputersConfigName)) + unpackConfig(new File(OcelotPaths.openComputersConfigName)) } } children :+= new PaddingBox(new Button { override def text: String = "Config Directory" override def onClick(): Unit = { - val path = new File(FileUtils.getOcelotConfigDirectory.toFile, OpenComputersConfigName) - println(path) - unpackConfig(path) + unpackConfig(OcelotPaths.openComputersConfig.toFile) } }, Padding2D(left = 8)) children :+= new PaddingBox(new Button { @@ -112,7 +109,7 @@ class SystemSettingsTab extends SettingsTab with Logging { } private def setConfigPath(path: String): Unit = { - Settings.get.brainConfigPath = Some(path) + Settings.get.brainCustomConfigPath = Some(path) textInput.setInput(path) restartWarning.isVisible = true } diff --git a/src/main/scala/ocelot/desktop/util/FileUtils.scala b/src/main/scala/ocelot/desktop/util/FileUtils.scala index d94e767..27bb142 100644 --- a/src/main/scala/ocelot/desktop/util/FileUtils.scala +++ b/src/main/scala/ocelot/desktop/util/FileUtils.scala @@ -1,12 +1,10 @@ package ocelot.desktop.util import ocelot.desktop.Settings -import org.apache.commons.lang3.SystemUtils import java.io.{File, FileOutputStream, IOException, RandomAccessFile} import java.nio.ByteBuffer import java.nio.channels.Channels -import java.nio.file.{Path, Paths} import scala.util.{Try, Using} object FileUtils extends Logging { @@ -40,9 +38,4 @@ object FileUtils extends Logging { target } } - - def getOcelotConfigDirectory: Path = { - if (SystemUtils.IS_OS_WINDOWS) Paths.get(System.getenv("APPDATA"), "Ocelot") - else Paths.get(System.getProperty("user.home"), ".config", "ocelot") - } } diff --git a/src/main/scala/ocelot/desktop/util/LoggingConfiguration.scala b/src/main/scala/ocelot/desktop/util/LoggingConfiguration.scala new file mode 100644 index 0000000..c33237a --- /dev/null +++ b/src/main/scala/ocelot/desktop/util/LoggingConfiguration.scala @@ -0,0 +1,44 @@ +package ocelot.desktop.util + +import org.apache.logging.log4j.Level +import org.apache.logging.log4j.core.config.Configurator +import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory + +trait LoggingConfiguration { + { + val builder = ConfigurationBuilderFactory.newConfigurationBuilder() + + // Console appender + val consoleAppender = builder.newAppender("console", "Console") + + var patternLayout = builder.newLayout("PatternLayout") + patternLayout.addAttribute("pattern", "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n") + consoleAppender.add(patternLayout) + + builder.add(consoleAppender) + + // File + val fileAppender = builder.newAppender("file", "File") + fileAppender.addAttribute("fileName", OcelotPaths.desktopLog) + fileAppender.addAttribute("immediateFlush", false) + fileAppender.addAttribute("append", false) + + patternLayout = builder.newLayout("PatternLayout") + patternLayout.addAttribute("pattern", "%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n") + fileAppender.add(patternLayout) + + builder.add(fileAppender) + + // Root logger + val rootLogger = builder.newRootLogger(Level.DEBUG) + rootLogger.add(builder.newAppenderRef("console")) + rootLogger.add(builder.newAppenderRef("file")) + builder.add(rootLogger) + + // Webcam logger, required for Camera node from Computronix + val webcamLogger = builder.newLogger("com.github.sarxos.webcam", Level.INFO) + builder.add(webcamLogger) + + Configurator.initialize(builder.build) + } +} diff --git a/src/main/scala/ocelot/desktop/util/OcelotPaths.scala b/src/main/scala/ocelot/desktop/util/OcelotPaths.scala new file mode 100644 index 0000000..c6fea81 --- /dev/null +++ b/src/main/scala/ocelot/desktop/util/OcelotPaths.scala @@ -0,0 +1,45 @@ +package ocelot.desktop.util + +import org.apache.commons.lang3.SystemUtils + +import java.nio.file.{Path, Paths} + +object OcelotPaths { + def windowsAppDataDirectoryName: String = System.getenv("APPDATA") + def linuxHomeDirectoryName: String = System.getProperty(SystemUtils.USER_HOME) + + def openComputersConfigName: String = { + if (SystemUtils.IS_OS_WINDOWS) + "OpenComputers.conf" + else + "opencomputers.conf" + } + + def libraries: Path = { + if (SystemUtils.IS_OS_WINDOWS) + Paths.get(windowsAppDataDirectoryName, "Ocelot", "Libraries") + else + Paths.get(linuxHomeDirectoryName, ".local", "lib", "ocelot") + } + + def openComputersConfig: Path = { + if (SystemUtils.IS_OS_WINDOWS) + Paths.get(windowsAppDataDirectoryName, "Ocelot", "Config", openComputersConfigName) + else + Paths.get(linuxHomeDirectoryName, ".config", "ocelot", openComputersConfigName) + } + + def desktopConfig: Path = { + if (SystemUtils.IS_OS_WINDOWS) + Paths.get(windowsAppDataDirectoryName, "Ocelot", "Config", "Desktop.conf") + else + Paths.get(linuxHomeDirectoryName, ".config", "ocelot", "desktop.conf") + } + + def desktopLog: Path = { + if (SystemUtils.IS_OS_WINDOWS) + Paths.get(windowsAppDataDirectoryName, "Ocelot", "Logs", "Desktop.log") + else + Paths.get(linuxHomeDirectoryName, ".local", "share", "ocelot", "desktop.log") + } +} diff --git a/src/main/scala/ocelot/desktop/util/SettingsData.scala b/src/main/scala/ocelot/desktop/util/SettingsData.scala index d6babe9..5ff4ecf 100644 --- a/src/main/scala/ocelot/desktop/util/SettingsData.scala +++ b/src/main/scala/ocelot/desktop/util/SettingsData.scala @@ -15,7 +15,7 @@ class SettingsData { updateWith(data) } - var brainConfigPath: Option[String] = None + var brainCustomConfigPath: Option[String] = None var volumeMaster: Float = 1f var volumeBeep: Float = 1f