From 67df8f8cdb84f75791be0a9424f6e493d3a3f9ab Mon Sep 17 00:00:00 2001
From: Matt Joiner <anacrolix@gmail.com>
Date: Mon, 11 Apr 2022 14:53:02 +1000
Subject: [PATCH] Fix webrtc logging for JS build

---
 .github/workflows/go.yml        |  2 +-
 webtorrent/setting-engine.go    | 24 ++++++++++++++++++++++++
 webtorrent/setting-engine_js.go | 13 +++++++++++++
 webtorrent/transport.go         | 11 -----------
 4 files changed, 38 insertions(+), 12 deletions(-)
 create mode 100644 webtorrent/setting-engine.go
 create mode 100644 webtorrent/setting-engine_js.go

diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml
index af1530ff..4b12c907 100644
--- a/.github/workflows/go.yml
+++ b/.github/workflows/go.yml
@@ -60,7 +60,7 @@ jobs:
     - uses: actions/checkout@v2
     - uses: ./.github/actions/go-common
     - name: Some packages compile for WebAssembly
-      run: GOOS=js GOARCH=wasm go build -v . ./storage ./tracker/...
+      run: GOOS=js GOARCH=wasm go build . ./storage ./tracker/...
 
   torrentfs:
     runs-on: ubuntu-latest
diff --git a/webtorrent/setting-engine.go b/webtorrent/setting-engine.go
new file mode 100644
index 00000000..a84ee020
--- /dev/null
+++ b/webtorrent/setting-engine.go
@@ -0,0 +1,24 @@
+// These build constraints are copied from webrtc's settingengine.go.
+//go:build !js
+// +build !js
+
+package webtorrent
+
+import (
+	"io"
+
+	"github.com/pion/logging"
+	"github.com/pion/webrtc/v3"
+)
+
+var s = webrtc.SettingEngine{
+	// This could probably be done with better integration into anacrolix/log, but I'm not sure if
+	// it's worth the effort.
+	LoggerFactory: discardLoggerFactory{},
+}
+
+type discardLoggerFactory struct{}
+
+func (discardLoggerFactory) NewLogger(scope string) logging.LeveledLogger {
+	return logging.NewDefaultLeveledLoggerForScope(scope, logging.LogLevelInfo, io.Discard)
+}
diff --git a/webtorrent/setting-engine_js.go b/webtorrent/setting-engine_js.go
new file mode 100644
index 00000000..ea42d11a
--- /dev/null
+++ b/webtorrent/setting-engine_js.go
@@ -0,0 +1,13 @@
+// These build constraints are copied from webrtc's settingengine_js.go.
+//go:build js && wasm
+// +build js,wasm
+
+package webtorrent
+
+import (
+	"github.com/pion/webrtc/v3"
+)
+
+// I'm not sure what to do for logging for JS. See
+// https://gophers.slack.com/archives/CAK2124AG/p1649651943947579.
+var s = webrtc.SettingEngine{}
diff --git a/webtorrent/transport.go b/webtorrent/transport.go
index 511ab595..e4c3b73d 100644
--- a/webtorrent/transport.go
+++ b/webtorrent/transport.go
@@ -8,24 +8,13 @@ import (
 
 	"github.com/anacrolix/missinggo/v2/pproffd"
 	"github.com/pion/datachannel"
-	"github.com/pion/logging"
-
 	"github.com/pion/webrtc/v3"
 )
 
-type DiscardLoggerFactory struct{}
-
-func (f *DiscardLoggerFactory) NewLogger(scope string) logging.LeveledLogger {
-	return logging.NewDefaultLeveledLoggerForScope(scope, logging.LogLevelInfo, io.Discard)
-}
-
 var (
 	metrics = expvar.NewMap("webtorrent")
 	api     = func() *webrtc.API {
 		// Enable the detach API (since it's non-standard but more idiomatic).
-		s := webrtc.SettingEngine{
-			LoggerFactory: &DiscardLoggerFactory{},
-		}
 		s.DetachDataChannels()
 		return webrtc.NewAPI(webrtc.WithSettingEngine(s))
 	}()
-- 
2.51.0