Skip to content

Commit

Permalink
consfn, new console compat
Browse files Browse the repository at this point in the history
  • Loading branch information
Weathercold committed Feb 18, 2023
1 parent ba9ee84 commit fb0eb00
Show file tree
Hide file tree
Showing 11 changed files with 112 additions and 84 deletions.
1 change: 1 addition & 0 deletions .clj-kondo/config.edn
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
{:lint-as {logging.core.setting/defsetting clojure.core/defonce
logging.util.lambdas/consfn clojure.core/fn
logging.util.macros/if-let' clojure.core/let
logging.util.macros/when-let' clojure.core/let}}
2 changes: 1 addition & 1 deletion .idea/extra-logging.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 15 additions & 3 deletions assets/mod.hjson
Original file line number Diff line number Diff line change
@@ -1,10 +1,22 @@
name: extra-logging
displayName: "Extra Logging 2"
subtitle: "Debugging utilities and QoLs"
description: "Adds more debugging features and improvements.\n\nFeatures:\n - Fully customizable log messages /w timestamp\n - Translate chat messages to your locale\n - Change log level\n - Force colored terminal output, colorize `[name]` in log messages\n - Print event triggers to the console\n - Various other QoL improvements.\n\nSee README.md for more information."
author: "Weathercold"
description: '''
Adds more debugging features and improvements.

version: 2.0.0-alpha
Features:
- Fully customizable log messages /w timestamp
- Translate chat messages to your locale
- Change log level
- Colorize `[name]` in log messages
- Print event triggers to the console
- Various other QoL improvements.

See README.md for more information.
'''
author: Weathercold

version: 2.0.0-delta
minGameVersion: 140

main: logging.CljLoader
Expand Down
4 changes: 2 additions & 2 deletions project.clj
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
(defproject extra-logging "2.0.0-gamma"
(defproject extra-logging "2.0.0-delta"
:description "Extra Logging"
:url "http://github.com/Weathercold/extra-logging"
:license {:name "GPL-3.0-or-later"
:url "https://www.gnu.org/licenses/gpl-3.0.txt"}

:repositories [["jitpack" "https://www.jitpack.io"]]
:repositories {"jitpack" "https://www.jitpack.io"}
:dependencies [[org.clojure/clojure "1.11.1"]
[org.clojure/data.json "2.4.0"]
[org.flatland/ordered "1.15.10"]
Expand Down
4 changes: 2 additions & 2 deletions src/clojure/logging/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
[settings :as settings]
[translating :as tl])
[logging.ui.fragments.chat-fragment :as chat-fragment]
[logging.util.lambdas :refer [cons1]]
[logging.util.lambdas :refer [consfn]]
[logging.util.log :refer [debug]])
(:import (arc Events)
(arc.util CommandHandler)
Expand All @@ -17,7 +17,7 @@
(debug "Creating mod")
(repl/-main)
(events-log/-main)
(Events/on EventType$DisposeEvent (cons1 (fn [_] (shutdown-agents)))))
(Events/on EventType$DisposeEvent (consfn [_] (shutdown-agents))))

(defn -init []
(debug "Initializing")
Expand Down
4 changes: 2 additions & 2 deletions src/clojure/logging/core/events_log.clj
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
(ns logging.core.events-log
(:require [clojure.string :as str]
[logging.core.setting :refer [defsetting]]
[logging.util.lambdas :refer [cons1]]
[logging.util.lambdas :refer [consfn]]
[logging.util.log :refer [err log]]
[logging.util.task-queue :as tq])
(:import (arc Events)
Expand Down Expand Up @@ -40,5 +40,5 @@

(defn -main []
(when @enable
(run! (fn [c] (Events/on c (cons1 #(log @log-level (trace %)))))
(run! #(Events/on % (consfn [e] (log @log-level (trace e))))
@listening-events)))
100 changes: 59 additions & 41 deletions src/clojure/logging/core/log_handler.clj
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,29 @@
(:require [clojure.string :as str]
[logging.core.setting :refer [defsetting]]
(logging.util [color :as color]
[lambdas :refer [cons1]]
[lambdas :refer [consfn]]
[log :refer [err]]
[task-queue :as tq]))
(:import (arc Events)
(arc.util Log Log$LogHandler Log$LogLevel)
(arc.util Log Log$LogHandler Log$LogLevel Reflect)
(java.time LocalTime)
(java.time.format DateTimeFormatter)
(mindustry Vars)
(mindustry.game EventType$ClientLoadEvent EventType$FileTreeInitEvent)))

(def level->code (zipmap (Log$LogLevel/values)
["&lc" "&lb" "&ly" "&lr" "&lw"]))
(def level->tag (zipmap (Log$LogLevel/values)
["[green]" "[royal]" "[yellow]" "[scarlet]" "[lightgray]"]))
(def level->icon (zipmap (Log$LogLevel/values)
["D", "I", "W", "E", "/"]))
(def client-loaded (ref false))
(def log-buffer (ref [] :validator #(or (= @client-loaded false) (empty? %))))
(def level->code
(zipmap (Log$LogLevel/values)
["&lc" "&lb" "&ly" "&lr" "&lw"]))
(def level->tag
(zipmap (Log$LogLevel/values)
["[green]" "[royal]" "[yellow]" "[scarlet]" "[lightgray]"]))
(def level->icon
(zipmap (Log$LogLevel/values)
["D", "I", "W", "E", "/"]))
(def client-loaded (atom false))
(def log-buffer (atom [] :validator #(or (not @client-loaded) (empty? %))))
(def has-new-console (ref false))
(def nc-log-buffer (ref nil))

(defsetting log-level "extra-loglevel" 0
(fn [ord]
Expand All @@ -38,37 +43,50 @@
(def instance
(reify Log$LogHandler
(log [_ lvl s]
(let [timestamp (.format ^DateTimeFormatter @time-formatter (LocalTime/now))
term-msg (-> @terminal-format
(str/replace "$t" timestamp)
(str/replace "$L" (level->code lvl))
(str/replace "$l" (level->icon lvl))
(str/replace "$m" s)
(#(if @colored-terminal
(-> % color/str-code->escseq color/str-tag->escseq)
(color/remove-colors %))))
cons-msg (-> @console-format
(str/replace "$t" timestamp)
(str/replace "$L" (level->tag lvl))
(str/replace "$l" (level->icon lvl))
(str/replace "$m" s)
color/str-escseq->tag
color/str-code->tag)]
(println term-msg)
(when-not Vars/headless
(if @client-loaded
(.. Vars/ui -consolefrag (addMessage cons-msg))
(dosync (alter log-buffer conj cons-msg))))))))
;; New Console compatibility
(when-not (str/starts-with? s "\u0019")
(let [timestamp (.format ^DateTimeFormatter @time-formatter (LocalTime/now))
term-msg (-> @terminal-format
(str/replace "$t" timestamp)
(str/replace "$L" (level->code lvl))
(str/replace "$l" (level->icon lvl))
(str/replace "$m" s)
(#(if @colored-terminal
(-> % color/str-code->escseq color/str-tag->escseq)
(color/remove-colors %))))
cons-msg (-> @console-format
(str/replace "$t" timestamp)
(str/replace "$L" (level->tag lvl))
(str/replace "$l" (level->icon lvl))
(str/replace "$m" s)
color/str-escseq->tag
color/str-code->tag)]
(println term-msg)
(when-not Vars/headless
(if @client-loaded
(.. Vars/ui -consolefrag (addMessage cons-msg))
(swap! log-buffer conj cons-msg))
(when @has-new-console
(.. ^StringBuilder @nc-log-buffer (append cons-msg) (append "\n")))))))))

(defn -main []
(set! Log/logger instance)
(Events/on EventType$FileTreeInitEvent
(cons1 (fn [_] (set! Log/logger instance))))
(Events/on EventType$ClientLoadEvent
(cons1 (fn [_]
(run! #(.. Vars/ui -consolefrag (addMessage %))
(dosync
(let [logs @log-buffer]
(ref-set client-loaded true)
(ref-set log-buffer [])
logs)))))))
;; New Console's event registers after this mod loads, so we delay the event
;; registration
(Events/on
EventType$FileTreeInitEvent
(consfn [_]
(Events/on
EventType$ClientLoadEvent
(consfn [_]
(reset! client-loaded true)
(run! #(.. Vars/ui -consolefrag (addMessage %)) @log-buffer)
(reset! log-buffer [])
(set! Log/logger instance)
(when-some [new-console (.getMod Vars/mods "newconsole")]
(dosync
(ref-set has-new-console true)
(as-> (.-loader new-console) %
(Class/forName "newconsole.ui.dialogs.Console" true %)
(Reflect/get % "logBuffer")
(ref-set nc-log-buffer %)))))))))
4 changes: 2 additions & 2 deletions src/clojure/logging/core/repl.clj
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(ns logging.core.repl
(:require [logging.core.setting :refer [defsetting]]
[logging.util.lambdas :refer [cons1]]
[logging.util.lambdas :refer [consfn]]
[logging.util.log :refer [err info]]
[logging.util.task-queue :as tq]
[nrepl.core :as nrepl]
Expand All @@ -25,4 +25,4 @@
(when @enable
(reset! server (nrepls/start-server :bind @address :port @port))
(info "Started REPL on @:@" @address @port)
(Events/on EventType$DisposeEvent (cons1 (fn [_] (nrepls/stop-server @server))))))
(Events/on EventType$DisposeEvent (consfn [_] (nrepls/stop-server @server)))))
28 changes: 14 additions & 14 deletions src/clojure/logging/core/translating.clj
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
[logging.core.setting :refer [defsetting]]
[logging.core.translating.libretranslate :as libretranslate]
(logging.util [color :as color]
[lambdas :refer [command-runner cons1]]
[lambdas :refer [command-runner consfn]]
[log :refer [info]]
[macros :refer [if-let' when-let']])
[logging.vars :refer [is-foo]])
Expand Down Expand Up @@ -38,12 +38,12 @@

(defmulti languages (constantly backend))
(defmethod languages :backends/libretranslate
([] (libretranslate/languages))
([] (libretranslate/languages identity))
([callback] (libretranslate/languages callback)))

(defmulti translate (constantly backend))
(defmethod translate :backends/libretranslate
([s callback] (libretranslate/translate s callback))
([s callback] (libretranslate/translate s "en" callback))
([s dst callback] (libretranslate/translate s dst callback)))

;; Disable reflection warning, foo methods can't be statically resolved
Expand All @@ -59,17 +59,17 @@
(when @is-foo
(Events/on
(Class/forName "mindustry.game.EventType$PlayerChatEventClient")
(cons1 (fn [_]
(when-let' [_ @enable-translation
msg (-> (.. Vars/ui -chatfrag -messages)
(first)
.-unformatted
color/remove-colors)
_ (seq msg)]
(translate msg @target-lang
#(when-not (= % msg)
(.addMessage (.-chatfrag Vars/ui)
% "Translation" Color/sky "" %)))))))))
(consfn [_]
(when-let' [_ @enable-translation
msg (-> (.. Vars/ui -chatfrag -messages)
(first)
.-unformatted
color/remove-colors)
_ (seq msg)]
(translate msg @target-lang
#(when-not (= % msg)
(.addMessage (.-chatfrag Vars/ui)
% "Translation" Color/sky "" %))))))))

(defn -register-client-commands [^CommandHandler handler]
(.register
Expand Down
27 changes: 12 additions & 15 deletions src/clojure/logging/core/translating/libretranslate.clj
Original file line number Diff line number Diff line change
Expand Up @@ -56,19 +56,16 @@
ret))))
(warn "No server available. Aborting translation.")))

(defn languages
([] (languages identity))
([callback] (fetch "/languages" {} #(callback (set (map :code %))))))
(defn languages [callback]
(fetch "/languages" {} #(callback (set (map :code %)))))

(defn translate
([s callback] (translate s "en" callback))
([s dst callback]
(debug "Translating @ to @..." s dst)
(fetch "/translate"
{:method :post
:body (json/write-str {:q s
:source "auto"
:target dst}
:escape-unicode false)
:filter (http/max-body-filter 1024)}
#(callback (:translatedText %)))))
(defn translate [s dst callback]
(debug "Translating @ to @..." s dst)
(fetch "/translate"
{:method :post
:body (json/write-str {:q s
:source "auto"
:target dst}
:escape-unicode false)
:filter (http/max-body-filter 1024)}
#(callback (:translatedText %))))
4 changes: 2 additions & 2 deletions src/clojure/logging/util/lambdas.clj
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,6 @@
;; endregion

;; Experimental
(defmacro defcons [& body]
(defmacro consfn [bindings & body]
`(reify Cons
(get [a] ~@body)))
(get ~(into ['this] bindings) ~@body)))

0 comments on commit fb0eb00

Please sign in to comment.