Thumbnail

rani/matterbridge.git

Clone URL: https://git.buni.party/rani/matterbridge.git

commit 230c714e14d228c3fd15b959611516ed2a9788d6 Author: Wim <wim@42.be> Date: Sat Mar 19 23:14:56 2022 +0000 Refactor utf-8 conversion (irc) (#1767) diff --git a/bridge/irc/charset.go b/bridge/irc/charset.go new file mode 100644 index 0000000..57872ec --- /dev/null +++ b/bridge/irc/charset.go @@ -00 +132 @@ +package birc + +import ( + "golang.org/x/text/encoding" + "golang.org/x/text/encoding/japanese" + "golang.org/x/text/encoding/korean" + "golang.org/x/text/encoding/simplifiedchinese" + "golang.org/x/text/encoding/traditionalchinese" + "golang.org/x/text/encoding/unicode" +) + +var encoders = map[string]encoding.Encoding{ + "utf-8": unicode.UTF8, + "iso-2022-jp": japanese.ISO2022JP, + "big5": traditionalchinese.Big5, + "gbk": simplifiedchinese.GBK, + "euc-kr": korean.EUCKR, + "gb2312": simplifiedchinese.HZGB2312, + "shift-jis": japanese.ShiftJIS, + "euc-jp": japanese.EUCJP, + "gb18030": simplifiedchinese.GB18030, +} + +func toUTF8(from string, input string) string { + enc, ok := encoders[from] + if !ok { + return input + } + + res, _ := enc.NewDecoder().String(input) + return res +} diff --git a/bridge/irc/handlers.go b/bridge/irc/handlers.go index b90fa3a..987df2c 100644 --- a/bridge/irc/handlers.go +++ b/bridge/irc/handlers.go @@ -117 +116 @@ import (   "github.com/42wim/matterbridge/bridge/config"   "github.com/42wim/matterbridge/bridge/helper"   "github.com/lrstanley/girc" - "github.com/missdeer/golib/ic"   "github.com/paulrosania/go-charset/charset"   "github.com/saintfish/chardet"   @@ -2412 +2312 @@ func (b *Birc) handleCharset(msg *config.Message) error {   if b.GetString("Charset") != "" {   switch b.GetString("Charset") {   case "gbk", "gb18030", "gb2312", "big5", "euc-kr", "euc-jp", "shift-jis", "iso-2022-jp": - msg.Text = ic.ConvertString("utf-8", b.GetString("Charset"), msg.Text) + msg.Text = toUTF8(b.GetString("Charset"), msg.Text)   default:   buf := new(bytes.Buffer)   w, err := charset.NewWriter(b.GetString("Charset"), buf)   if err != nil { - b.Log.Errorf("charset from utf-8 conversion failed: %s", err) + b.Log.Errorf("charset to utf-8 conversion failed: %s", err)   return err   }   fmt.Fprint(w, msg.Text) @@ -2277 +2267 @@ func (b *Birc) handlePrivMsg(client *girc.Client, event girc.Event) {   }   switch mycharset {   case "gbk", "gb18030", "gb2312", "big5", "euc-kr", "euc-jp", "shift-jis", "iso-2022-jp": - rmsg.Text = ic.ConvertString("utf-8", b.GetString("Charset"), rmsg.Text) + rmsg.Text = toUTF8(b.GetString("Charset"), rmsg.Text)   default:   r, err := charset.NewReader(mycharset, strings.NewReader(rmsg.Text))   if err != nil { diff --git a/go.mod b/go.mod index 03e3df8..02c9437 100644 --- a/go.mod +++ b/go.mod @@ -327 +326 @@ require (   github.com/mattermost/mattermost-server/v5 v5.39.3   github.com/mattermost/mattermost-server/v6 v6.4.2   github.com/mattn/godown v0.0.1 - github.com/missdeer/golib v1.0.4   github.com/nelsonken/gomf v0.0.0-20180504123937-a9dd2f9deae9   github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c   github.com/rs/xid v1.3.0 @@ -496 +487 @@ require (   github.com/zfjagann/golang-ring v0.0.0-20210116075443-7c86fdb43134   golang.org/x/image v0.0.0-20220302094943-723b81ca9867   golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a + golang.org/x/text v0.3.7   gomod.garykim.dev/nc-talk v0.3.0   gopkg.in/olahol/melody.v1 v1.0.0-20170518105555-d52139073376   layeh.com/gumble v0.0.0-20200818122324-146f9205029b @@ -1267 +1266 @@ require (   golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd // indirect   golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect   golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect - golang.org/x/text v0.3.7 // indirect   golang.org/x/time v0.0.0-20201208040808-7e3f01d25324 // indirect   google.golang.org/appengine v1.6.7 // indirect   google.golang.org/protobuf v1.27.1 // indirect diff --git a/go.sum b/go.sum index 0f90c7f..d5533da 100644 --- a/go.sum +++ b/go.sum @@ -11638 +11636 @@ github.com/minio/minio-go/v7 v7.0.16/go.mod h1:pUV0Pc+hPd1nccgmzQF/EXh48l/Z/yps6  github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM=  github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g=  github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/missdeer/golib v1.0.4 h1:tM7MJIPffXSmwFCTOCMjL5C7JsT5SQ+OmZwzssZQOa8= -github.com/missdeer/golib v1.0.4/go.mod h1:mPN/UcszFq0GxKfQsZI3aFOiRjnzXCBZ392od3guGEY=  github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=  github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=  github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=