aboutsummaryrefslogtreecommitdiff
path: root/content.go
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2021-09-03 15:38:35 +0200
committerHimbeerserverDE <himbeerserverde@gmail.com>2021-09-03 15:38:35 +0200
commitf00e88a14b3a0165a2bb812f058be5feceaaba6e (patch)
treef5fcd1adc0c00eb7d53ec7acc02ffa5a22ff2c8e /content.go
parentf4ccac8d93cfcbfe5ef1c6b4cc9c92220958ae71 (diff)
Fix #39
Diffstat (limited to 'content.go')
-rw-r--r--content.go59
1 files changed, 51 insertions, 8 deletions
diff --git a/content.go b/content.go
index 079739e..614de98 100644
--- a/content.go
+++ b/content.go
@@ -1,10 +1,14 @@
package main
import (
+ "crypto/sha1"
+ "encoding/base64"
"errors"
"fmt"
"log"
"net"
+ "os"
+ "path/filepath"
"regexp"
"strings"
"sync"
@@ -15,6 +19,8 @@ import (
"github.com/anon55555/mt/rudp"
)
+var b64 = base64.StdEncoding
+
type mediaFile struct {
name string
base64SHA1 string
@@ -58,6 +64,35 @@ func (cc *contentConn) setState(state clientState) {
func (cc *contentConn) done() <-chan struct{} { return cc.doneCh }
+func (cc *contentConn) readDefaultTextures() error {
+ executable, err := os.Executable()
+ if err != nil {
+ return err
+ }
+
+ path := filepath.Dir(executable) + "/textures"
+ files, err := os.ReadDir(path)
+ if err != nil {
+ return err
+ }
+
+ for _, file := range files {
+ data, err := os.ReadFile(path + "/" + file.Name())
+ if err != nil {
+ return err
+ }
+
+ sum := sha1.Sum(data)
+ cc.media = append(cc.media, mediaFile{
+ name: file.Name(),
+ base64SHA1: b64.EncodeToString(sum[:]),
+ data: data,
+ })
+ }
+
+ return nil
+}
+
func (cc *contentConn) log(dir, msg string) {
log.Printf("{←|⇶} %s {%s} %s", dir, cc.name, msg)
}
@@ -177,13 +212,21 @@ func handleContent(cc *contentConn) {
case *mt.ToCltAnnounceMedia:
var filenames []string
+RequestLoop:
for _, f := range cmd.Files {
+ filenames = append(filenames, f.Name)
+
+ for i, mf := range cc.media {
+ if mf.name == f.Name {
+ cc.media[i].base64SHA1 = f.Base64SHA1
+ continue RequestLoop
+ }
+ }
+
cc.media = append(cc.media, mediaFile{
name: f.Name,
base64SHA1: f.Base64SHA1,
})
-
- filenames = append(filenames, f.Name)
}
cc.SendCmd(&mt.ToSrvReqMedia{Filenames: filenames})
@@ -438,7 +481,11 @@ func muxContent(userName string) (itemDefs []mt.ItemDef, aliases []struct{ Alias
return
}
- cc := connectContent(conn, srv.Name, userName)
+ var cc *contentConn
+ cc, err = connectContent(conn, srv.Name, userName)
+ if err != nil {
+ return
+ }
defer cc.Close()
conns = append(conns, cc)
@@ -484,10 +531,6 @@ func (cc *clientConn) srvParam0(p0 *mt.Content) string {
return ""
}
-func isDefaultTexture(s string) bool {
- return s == ""
-}
-
func isDefaultNode(s string) bool {
list := []string{
"",
@@ -506,7 +549,7 @@ func isDefaultNode(s string) bool {
}
func prependRaw(prep string, s *string, isTexture bool) {
- if (isTexture && !isDefaultTexture(*s)) || (!isTexture && !isDefaultNode(*s)) {
+ if !isDefaultNode(*s) {
reg := regexp.MustCompile("[^a-zA-Z0-9-_.:]")
subs := reg.Split(*s, -1)
seps := reg.FindAllString(*s, -1)