diff --git a/server/dlna/list.go b/server/dlna/list.go index f16eafa..fa216a4 100644 --- a/server/dlna/list.go +++ b/server/dlna/list.go @@ -20,7 +20,6 @@ import ( ) func getRoot() (ret []interface{}) { - // Torrents Object tObj := upnpav.Object{ ID: "%2FTR", @@ -37,18 +36,16 @@ func getRoot() (ret []interface{}) { ret = append(ret, cnt) return - } func getTorrents() (ret []interface{}) { - torrs := torr.ListTorrent() // sort by title as in cds SortCaps sort.Slice(torrs, func(i, j int) bool { return torrs[i].Title < torrs[j].Title }) - var vol = 0 + vol := 0 for _, t := range torrs { vol++ obj := upnpav.Object{ @@ -251,7 +248,6 @@ func getLink(host, path string) string { } func getObjFromTorrent(path, parent, host string, torr *torr.Torrent, file *state.TorrentFileStat) (ret interface{}) { - mime, err := mt.MimeTypeByPath(file.Path) if err != nil { if settings.BTsets.EnableDebug { diff --git a/server/go.mod b/server/go.mod index 6aea526..dd4d743 100644 --- a/server/go.mod +++ b/server/go.mod @@ -11,7 +11,7 @@ require ( github.com/anacrolix/log v0.13.2-0.20221123232138-02e2764801c3 github.com/anacrolix/missinggo v1.3.0 github.com/anacrolix/publicip v0.3.0 - github.com/anacrolix/torrent v1.48.1-0.20230130214106-5a185c45c08c + github.com/anacrolix/torrent v1.48.1-0.20230214014649-2cb7121a93c7 github.com/gin-contrib/cors v1.4.0 github.com/gin-contrib/location v0.0.2 github.com/gin-gonic/gin v1.8.1 @@ -57,16 +57,36 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mschoch/smat v0.2.0 // indirect - github.com/pelletier/go-toml/v2 v2.0.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.6 // indirect + github.com/pion/datachannel v1.5.5 // indirect + github.com/pion/dtls/v2 v2.2.4 // indirect + github.com/pion/ice/v2 v2.2.12 // indirect + github.com/pion/interceptor v0.1.12 // indirect + github.com/pion/logging v0.2.2 // indirect + github.com/pion/mdns v0.0.5 // indirect + github.com/pion/randutil v0.1.0 // indirect + github.com/pion/rtcp v1.2.10 // indirect + github.com/pion/rtp v1.7.13 // indirect + github.com/pion/sctp v1.8.5 // indirect + github.com/pion/sdp/v3 v3.0.6 // indirect + github.com/pion/srtp/v2 v2.0.10 // indirect + github.com/pion/stun v0.3.5 // indirect + github.com/pion/transport v0.14.1 // indirect + github.com/pion/transport/v2 v2.0.0 // indirect + github.com/pion/turn/v2 v2.0.9 // indirect + github.com/pion/udp v0.1.4 // indirect + github.com/pion/webrtc/v3 v3.1.50 // indirect github.com/rs/dnscache v0.0.0-20211102005908-e0241e321417 // indirect - github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect - github.com/ugorji/go/codec v1.2.7 // indirect - golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 // indirect - golang.org/x/exp v0.0.0-20221217163422-3c43f8badb15 // indirect - golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect - golang.org/x/sync v0.0.0-20220907140024-f12130a52804 // indirect - golang.org/x/sys v0.1.0 // indirect - golang.org/x/text v0.3.7 // indirect + github.com/tidwall/btree v1.6.0 // indirect + github.com/ugorji/go/codec v1.2.8 // indirect + go.opentelemetry.io/otel v1.11.2 // indirect + go.opentelemetry.io/otel/trace v1.11.2 // indirect + golang.org/x/crypto v0.5.0 // indirect + golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb // indirect + golang.org/x/net v0.7.0 // indirect + golang.org/x/sync v0.1.0 // indirect + golang.org/x/sys v0.5.0 // indirect + golang.org/x/text v0.7.0 // indirect google.golang.org/protobuf v1.28.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect ) diff --git a/server/go.sum b/server/go.sum index ea1ddb7..1c6dad9 100644 --- a/server/go.sum +++ b/server/go.sum @@ -71,6 +71,8 @@ github.com/anacrolix/sync v0.4.0/go.mod h1:BbecHL6jDSExojhNtgTFSBcdGerzNc64tz3DC github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= github.com/anacrolix/tagflag v1.0.0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw= github.com/anacrolix/tagflag v1.1.0/go.mod h1:Scxs9CV10NQatSmbyjqmqmeQNwGzlNe0CMUMIxqHIG8= +github.com/anacrolix/torrent v1.48.1-0.20230214014649-2cb7121a93c7 h1:R8QhMYfNfbubLrVPnAOa1NsbyCCbWPKJOV6q1m7BolM= +github.com/anacrolix/torrent v1.48.1-0.20230214014649-2cb7121a93c7/go.mod h1:xZTzaCylzaU7v79t6W6goTkAABwI8hMB+3uYixVyqbc= github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96 h1:QAVZ3pN/J4/UziniAhJR2OZ9Ox5kOY2053tBbbqUPYA= github.com/anacrolix/upnp v0.1.3-0.20220123035249-922794e51c96/go.mod h1:Wa6n8cYIdaG35x15aH3Zy6d03f7P728QfdcDeD/IEOs= github.com/anacrolix/utp v0.1.0 h1:FOpQOmIwYsnENnz7tAGohA+r6iXpRjrq8ssKSre2Cp4= @@ -240,6 +242,50 @@ github.com/pelletier/go-toml/v2 v2.0.5 h1:ipoSadvV8oGUjnUbMub59IDPPwfxF694nG/jwb github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pion/datachannel v1.5.5 h1:10ef4kwdjije+M9d7Xm9im2Y3O6A6ccQb0zcqZcJew8= +github.com/pion/datachannel v1.5.5/go.mod h1:iMz+lECmfdCMqFRhXhcA/219B0SQlbpoR2V118yimL0= +github.com/pion/dtls/v2 v2.1.5/go.mod h1:BqCE7xPZbPSubGasRoDFJeTsyJtdD1FanJYL0JGheqY= +github.com/pion/dtls/v2 v2.2.4 h1:YSfYwDQgrxMYXLBc/m7PFY5BVtWlNm/DN4qoU2CbcWg= +github.com/pion/dtls/v2 v2.2.4/go.mod h1:WGKfxqhrddne4Kg3p11FUMJrynkOY4lb25zHNO49wuw= +github.com/pion/ice/v2 v2.2.12 h1:n3M3lUMKQM5IoofhJo73D3qVla+mJN2nVvbSPq32Nig= +github.com/pion/ice/v2 v2.2.12/go.mod h1:z2KXVFyRkmjetRlaVRgjO9U3ShKwzhlUylvxKfHfd5A= +github.com/pion/interceptor v0.1.11/go.mod h1:tbtKjZY14awXd7Bq0mmWvgtHB5MDaRN7HV3OZ/uy7s8= +github.com/pion/interceptor v0.1.12 h1:CslaNriCFUItiXS5o+hh5lpL0t0ytQkFnUcbbCs2Zq8= +github.com/pion/interceptor v0.1.12/go.mod h1:bDtgAD9dRkBZpWHGKaoKb42FhDHTG2rX8Ii9LRALLVA= +github.com/pion/logging v0.2.2 h1:M9+AIj/+pxNsDfAT64+MAVgJO0rsyLnoJKCqf//DoeY= +github.com/pion/logging v0.2.2/go.mod h1:k0/tDVsRCX2Mb2ZEmTqNa7CWsQPc+YYCB7Q+5pahoms= +github.com/pion/mdns v0.0.5 h1:Q2oj/JB3NqfzY9xGZ1fPzZzK7sDSD8rZPOvcIQ10BCw= +github.com/pion/mdns v0.0.5/go.mod h1:UgssrvdD3mxpi8tMxAXbsppL3vJ4Jipw1mTCW+al01g= +github.com/pion/randutil v0.1.0 h1:CFG1UdESneORglEsnimhUjf33Rwjubwj6xfiOXBa3mA= +github.com/pion/randutil v0.1.0/go.mod h1:XcJrSMMbbMRhASFVOlj/5hQial/Y8oH/HVo7TBZq+j8= +github.com/pion/rtcp v1.2.9/go.mod h1:qVPhiCzAm4D/rxb6XzKeyZiQK69yJpbUDJSF7TgrqNo= +github.com/pion/rtcp v1.2.10 h1:nkr3uj+8Sp97zyItdN60tE/S6vk4al5CPRR6Gejsdjc= +github.com/pion/rtcp v1.2.10/go.mod h1:ztfEwXZNLGyF1oQDttz/ZKIBaeeg/oWbRYqzBM9TL1I= +github.com/pion/rtp v1.7.13 h1:qcHwlmtiI50t1XivvoawdCGTP4Uiypzfrsap+bijcoA= +github.com/pion/rtp v1.7.13/go.mod h1:bDb5n+BFZxXx0Ea7E5qe+klMuqiBrP+w8XSjiWtCUko= +github.com/pion/sctp v1.8.5 h1:JCc25nghnXWOlSn3OVtEnA9PjQ2JsxQbG+CXZ1UkJKQ= +github.com/pion/sctp v1.8.5/go.mod h1:SUFFfDpViyKejTAdwD1d/HQsCu+V/40cCs2nZIvC3s0= +github.com/pion/sdp/v3 v3.0.6 h1:WuDLhtuFUUVpTfus9ILC4HRyHsW6TdugjEX/QY9OiUw= +github.com/pion/sdp/v3 v3.0.6/go.mod h1:iiFWFpQO8Fy3S5ldclBkpXqmWy02ns78NOKoLLL0YQw= +github.com/pion/srtp/v2 v2.0.10 h1:b8ZvEuI+mrL8hbr/f1YiJFB34UMrOac3R3N1yq2UN0w= +github.com/pion/srtp/v2 v2.0.10/go.mod h1:XEeSWaK9PfuMs7zxXyiN252AHPbH12NX5q/CFDWtUuA= +github.com/pion/stun v0.3.5 h1:uLUCBCkQby4S1cf6CGuR9QrVOKcvUwFeemaC865QHDg= +github.com/pion/stun v0.3.5/go.mod h1:gDMim+47EeEtfWogA37n6qXZS88L5V6LqFcf+DZA2UA= +github.com/pion/transport v0.12.2/go.mod h1:N3+vZQD9HlDP5GWkZ85LohxNsDcNgofQmyL6ojX5d8Q= +github.com/pion/transport v0.13.0/go.mod h1:yxm9uXpK9bpBBWkITk13cLo1y5/ur5VQpG22ny6EP7g= +github.com/pion/transport v0.13.1/go.mod h1:EBxbqzyv+ZrmDb82XswEE0BjfQFtuw1Nu6sjnjWCsGg= +github.com/pion/transport v0.14.1 h1:XSM6olwW+o8J4SCmOBb/BpwZypkHeyM0PGFCxNQBr40= +github.com/pion/transport v0.14.1/go.mod h1:4tGmbk00NeYA3rUa9+n+dzCCoKkcy3YlYb99Jn2fNnI= +github.com/pion/transport/v2 v2.0.0 h1:bsMYyqHCbkvHwj+eNCFBuxtlKndKfyGI2vaQmM3fIE4= +github.com/pion/transport/v2 v2.0.0/go.mod h1:HS2MEBJTwD+1ZI2eSXSvHJx/HnzQqRy2/LXxt6eVMHc= +github.com/pion/turn/v2 v2.0.8/go.mod h1:+y7xl719J8bAEVpSXBXvTxStjJv3hbz9YFflvkpcGPw= +github.com/pion/turn/v2 v2.0.9 h1:jcDPw0Vfd5I4iTc7s0Upfc2aMnyu2lgJ9vV0SUrNC1o= +github.com/pion/turn/v2 v2.0.9/go.mod h1:DQlwUwx7hL8Xya6TTAabbd9DdKXTNR96Xf5g5Qqso/M= +github.com/pion/udp v0.1.1/go.mod h1:6AFo+CMdKQm7UiA0eUPA8/eVCTx8jBIITLZHc9DWX5M= +github.com/pion/udp v0.1.4 h1:OowsTmu1Od3sD6i3fQUJxJn2fEvJO6L1TidgadtbTI8= +github.com/pion/udp v0.1.4/go.mod h1:G8LDo56HsFwC24LIcnT4YIDU5qcB6NepqqjP0keL2us= +github.com/pion/webrtc/v3 v3.1.50 h1:wLMo1+re4WMZ9Kun9qcGcY+XoHkE3i0CXrrc0sjhVCk= +github.com/pion/webrtc/v3 v3.1.50/go.mod h1:y9n09weIXB+sjb9mi0GBBewNxo4TKUQm5qdtT5v3/X4= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4 h1:Qj1ukM4GlMWXNdMBuXcXfz/Kw9s1qm0CLY32QxuSImI= github.com/pkg/browser v0.0.0-20210115035449-ce105d075bb4/go.mod h1:N6UoU20jOqggOuDwUaBQpluzLNDqif3kq9z2wpdYEfQ= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= @@ -313,11 +359,13 @@ golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 h1:Y/gsMcFOcR+6S6f3YeMKl5g+dZMEWqcz5Czj/GWYbkM= -golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20221010152910-d6f0a8c073c2/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= +golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20221217163422-3c43f8badb15 h1:5oN1Pz/eDhCpbMbLstvIPa0b/BEQo6g6nwV3pLjfM6w= -golang.org/x/exp v0.0.0-20221217163422-3c43f8badb15/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb h1:PaBZQdo+iSDyHT053FjUCgZQ/9uqVwPOcl7KSWhKn6w= +golang.org/x/exp v0.0.0-20230213192124-5e25df0256eb/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -335,8 +383,13 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220524220425-1d687d428aca/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= +golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= +golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= +golang.org/x/net v0.7.0 h1:rJrUqqhjsgNp7KqAIc25s9pZnjU7TUcSY7HcVZjdn1g= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -370,14 +423,27 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0 h1:MUK/U/4lj1t1oPg0HfuXDN/Z1wv31ZJ/YcPiGccS4DU= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/server/log/log.go b/server/log/log.go index b92343d..ae730ec 100644 --- a/server/log/log.go +++ b/server/log/log.go @@ -12,20 +12,24 @@ import ( "github.com/gin-gonic/gin" ) -var logPath = "" -var webLogPath = "" +var ( + logPath = "" + webLogPath = "" +) var webLog *log.Logger -var logFile *os.File -var webLogFile *os.File +var ( + logFile *os.File + webLogFile *os.File +) func Init(path, webpath string) { webLogPath = webpath logPath = path if webpath != "" { - ff, err := os.OpenFile(webLogPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + ff, err := os.OpenFile(webLogPath, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666) if err != nil { TLogln("Error create web log file:", err) } else { @@ -40,7 +44,7 @@ func Init(path, webpath string) { os.Remove(path) } } - ff, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) + ff, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0o666) if err != nil { TLogln("Error create log file:", err) return @@ -87,7 +91,7 @@ func WebLogger() gin.HandlerFunc { return } body := "" - //save body if not form or file + // save body if not form or file if !strings.HasPrefix(c.Request.Header.Get("Content-Type"), "multipart/form-data") { body, _ := ioutil.ReadAll(c.Request.Body) c.Request.Body = ioutil.NopCloser(bytes.NewBuffer(body)) diff --git a/server/mimetype/mimetype.go b/server/mimetype/mimetype.go index c9b91f7..03685aa 100644 --- a/server/mimetype/mimetype.go +++ b/server/mimetype/mimetype.go @@ -10,7 +10,6 @@ import ( ) func init() { - // Add a minimal number of mime types to augment go's built in types // for environments which don't have access to a mime.types file (e.g. // Termux on android) diff --git a/server/rutor/mem_test.go b/server/rutor/mem_test.go index 273314f..70e1400 100644 --- a/server/rutor/mem_test.go +++ b/server/rutor/mem_test.go @@ -6,12 +6,13 @@ import ( "fmt" "os" "path/filepath" - "server/rutor/models" "testing" + + "server/rutor/models" ) func TestParseChannel(t *testing.T) { - var channel = make(chan *models.TorrentDetails, 0) + channel := make(chan *models.TorrentDetails, 0) var ftors []*models.TorrentDetails go func() { for torr := range channel { diff --git a/server/rutor/rutor.go b/server/rutor/rutor.go index fb6eaed..5565e59 100644 --- a/server/rutor/rutor.go +++ b/server/rutor/rutor.go @@ -3,21 +3,23 @@ package rutor import ( "compress/flate" "encoding/json" - "github.com/agnivade/levenshtein" "io" "net/http" "os" "path/filepath" + "sort" + "strconv" + "strings" + "time" + + "github.com/agnivade/levenshtein" + "server/log" "server/rutor/models" "server/rutor/torrsearch" "server/rutor/utils" "server/settings" utils2 "server/torr/utils" - "sort" - "strconv" - "strings" - "time" ) var ( diff --git a/server/rutor/torrsearch/tokenizer.go b/server/rutor/torrsearch/tokenizer.go index 58c3cff..be75275 100644 --- a/server/rutor/torrsearch/tokenizer.go +++ b/server/rutor/torrsearch/tokenizer.go @@ -18,6 +18,6 @@ func analyze(text string) []string { tokens := tokenize(text) tokens = lowercaseFilter(tokens) tokens = stopwordFilter(tokens) - //tokens = stemmerFilter(tokens) + // tokens = stemmerFilter(tokens) return tokens } diff --git a/server/settings/btsets.go b/server/settings/btsets.go index 5c57696..6dc4299 100644 --- a/server/settings/btsets.go +++ b/server/settings/btsets.go @@ -53,9 +53,7 @@ func (v *BTSets) String() string { return string(buf) } -var ( - BTsets *BTSets -) +var BTsets *BTSets func SetBTSets(sets *BTSets) { if ReadOnly { diff --git a/server/settings/db.go b/server/settings/db.go index 05c9c92..03ec985 100644 --- a/server/settings/db.go +++ b/server/settings/db.go @@ -16,7 +16,7 @@ type TDB struct { } func NewTDB() *TDB { - db, err := bolt.Open(filepath.Join(Path, "config.db"), 0666, &bolt.Options{Timeout: 5 * time.Second}) + db, err := bolt.Open(filepath.Join(Path, "config.db"), 0o666, &bolt.Options{Timeout: 5 * time.Second}) if err != nil { log.TLogln(err) return nil @@ -60,7 +60,6 @@ func (v *TDB) Get(xpath, name string) []byte { ret = buckt.Get([]byte(name)) return nil }) - if err != nil { log.TLogln("Error get sets", xpath+"/"+name, ", error:", err) } @@ -95,12 +94,10 @@ func (v *TDB) Set(xpath, name string, value []byte) { return buckt.Put([]byte(name), value) }) - if err != nil { log.TLogln("Error put sets", xpath+"/"+name, ", error:", err) log.TLogln("value:", value) } - } func (v *TDB) List(xpath string) []string { @@ -134,7 +131,6 @@ func (v *TDB) List(xpath string) []string { return nil }) - if err != nil { log.TLogln("Error list sets", xpath, ", error:", err) } @@ -169,9 +165,7 @@ func (v *TDB) Rem(xpath, name string) { return buckt.Delete([]byte(name)) }) - if err != nil { log.TLogln("Error rem sets", xpath+"/"+name, ", error:", err) } - } diff --git a/server/settings/migrate.go b/server/settings/migrate.go index d0ed0ed..e0c6ce1 100644 --- a/server/settings/migrate.go +++ b/server/settings/migrate.go @@ -11,9 +11,7 @@ import ( "server/web/api/utils" ) -var ( - dbTorrentsName = []byte("Torrents") -) +var dbTorrentsName = []byte("Torrents") type torrentOldDB struct { Name string @@ -29,7 +27,7 @@ func Migrate() { return } - db, err := bolt.Open(filepath.Join(Path, "torrserver.db"), 0666, nil) + db, err := bolt.Open(filepath.Join(Path, "torrserver.db"), 0o666, nil) if err != nil { return } diff --git a/server/settings/viewed.go b/server/settings/viewed.go index 55e4e73..bf02562 100644 --- a/server/settings/viewed.go +++ b/server/settings/viewed.go @@ -69,7 +69,7 @@ func ListViewed(hash string) []*Viewed { err = json.Unmarshal(buf, &indeces) if err == nil { var ret []*Viewed - for i, _ := range indeces { + for i := range indeces { ret = append(ret, &Viewed{hash, i}) } return ret @@ -85,7 +85,7 @@ func ListViewed(hash string) []*Viewed { var indeces map[int]struct{} err = json.Unmarshal(buf, &indeces) if err == nil { - for i, _ := range indeces { + for i := range indeces { ret = append(ret, &Viewed{key, i}) } } diff --git a/server/torr/apihelper.go b/server/torr/apihelper.go index 93d9ee2..e2773a4 100644 --- a/server/torr/apihelper.go +++ b/server/torr/apihelper.go @@ -15,9 +15,7 @@ import ( sets "server/settings" ) -var ( - bts *BTServer -) +var bts *BTServer func InitApiHelper(bt *BTServer) { bts = bt diff --git a/server/torr/dbwrapper.go b/server/torr/dbwrapper.go index 1eb532d..4aca82f 100644 --- a/server/torr/dbwrapper.go +++ b/server/torr/dbwrapper.go @@ -2,9 +2,10 @@ package torr import ( "encoding/json" - "server/torr/utils" "time" + "server/torr/utils" + "server/settings" "server/torr/state" diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index b84365b..e8657d6 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -64,7 +64,7 @@ func (c *Cache) Init(info *metainfo.Info, hash metainfo.Hash) { if settings.BTsets.UseDisk { name := filepath.Join(settings.BTsets.TorrentsSavePath, hash.HexString()) - err := os.MkdirAll(name, 0777) + err := os.MkdirAll(name, 0o777) if err != nil { log.TLogln("Error create dir:", err) } @@ -235,7 +235,7 @@ func (c *Cache) getRemPieces() []*Piece { } } else { // on preload clean - //TODO проверить + // TODO проверить if p.Size > 0 && !c.isIdInFileBE(ranges, id) { piecesRemove = append(piecesRemove, p) } @@ -288,7 +288,6 @@ func (c *Cache) getRemPieces() []*Piece { } func (c *Cache) isIdInFileBE(ranges []Range, id int) bool { - // keep 8/16 MB FileRangeNotDelete := int64(c.pieceLength) if FileRangeNotDelete < 8*1024*1024 { diff --git a/server/torr/storage/torrstor/diskpiece.go b/server/torr/storage/torrstor/diskpiece.go index b20de74..822a68e 100644 --- a/server/torr/storage/torrstor/diskpiece.go +++ b/server/torr/storage/torrstor/diskpiece.go @@ -35,7 +35,7 @@ func (p *DiskPiece) WriteAt(b []byte, off int64) (n int, err error) { p.mu.Lock() defer p.mu.Unlock() - ff, err := os.OpenFile(p.name, os.O_RDWR|os.O_CREATE, 0666) + ff, err := os.OpenFile(p.name, os.O_RDWR|os.O_CREATE, 0o666) if err != nil { log.TLogln("Error open file:", err) return 0, err @@ -55,7 +55,7 @@ func (p *DiskPiece) ReadAt(b []byte, off int64) (n int, err error) { p.mu.Lock() defer p.mu.Unlock() - ff, err := os.OpenFile(p.name, os.O_RDONLY, 0666) + ff, err := os.OpenFile(p.name, os.O_RDONLY, 0o666) if os.IsNotExist(err) { return 0, io.EOF } diff --git a/server/torr/storage/torrstor/reader.go b/server/torr/storage/torrstor/reader.go index 80afb8a..ffb2cf6 100644 --- a/server/torr/storage/torrstor/reader.go +++ b/server/torr/storage/torrstor/reader.go @@ -71,21 +71,21 @@ func (r *Reader) Read(p []byte) (n int, err error) { r.readerOn() n, err = r.Reader.Read(p) - //samsung tv fix xvid/divx + // samsung tv fix xvid/divx if r.offset == 0 && len(p) >= 192 { str := strings.ToLower(string(p[112:116])) if str == "xvid" || str == "divx" { - p[112] = 0x4D //M - p[113] = 0x50 //P - p[114] = 0x34 //4 - p[115] = 0x56 //V + p[112] = 0x4D // M + p[113] = 0x50 // P + p[114] = 0x34 // 4 + p[115] = 0x56 // V } str = strings.ToLower(string(p[188:192])) if str == "xvid" || str == "divx" { - p[188] = 0x4D //M - p[189] = 0x50 //P - p[190] = 0x34 //4 - p[191] = 0x56 //V + p[188] = 0x4D // M + p[189] = 0x50 // P + p[190] = 0x34 // 4 + p[191] = 0x56 // V } } diff --git a/server/torr/torrent.go b/server/torr/torrent.go index 7be01c4..e6d783c 100644 --- a/server/torr/torrent.go +++ b/server/torr/torrent.go @@ -135,13 +135,14 @@ func (t *Torrent) AddExpiredTime(duration time.Duration) { } func (t *Torrent) watch() { - t.progressTicker = time.NewTicker(time.Second) + t.progressTicker = time.NewTicker(time.Second / 2) defer t.progressTicker.Stop() for { select { case <-t.progressTicker.C: go t.progressEvent() + time.Sleep(time.Second / 2) // FIXME! TEMP TEST TIMER case <-t.closed: return } diff --git a/server/torr/utils/webImageChecker.go b/server/torr/utils/webImageChecker.go index 11d83d4..3b457d7 100644 --- a/server/torr/utils/webImageChecker.go +++ b/server/torr/utils/webImageChecker.go @@ -5,6 +5,7 @@ import ( _ "image/jpeg" _ "image/png" "net/http" + "server/log" ) diff --git a/server/version/version.go b/server/version/version.go index f2e8dcf..51d9caf 100644 --- a/server/version/version.go +++ b/server/version/version.go @@ -1,3 +1,3 @@ package version -const Version = "MatriX.120.OE" +const Version = "MatriX.121.OE" diff --git a/server/web/api/cache.go b/server/web/api/cache.go index e8da18b..a27d4d6 100644 --- a/server/web/api/cache.go +++ b/server/web/api/cache.go @@ -9,7 +9,7 @@ import ( "github.com/pkg/errors" ) -//Action: get +// Action: get type cacheReqJS struct { requestI Hash string `json:"hash,omitempty"` diff --git a/server/web/api/ffprobe.go b/server/web/api/ffprobe.go index 045f0e0..f8a3f33 100644 --- a/server/web/api/ffprobe.go +++ b/server/web/api/ffprobe.go @@ -4,14 +4,22 @@ import ( "context" "errors" "fmt" - "github.com/gin-gonic/gin" - "gopkg.in/vansante/go-ffprobe.v2" "net/http" "os" + "os/exec" "path/filepath" + "server/utils" + + "github.com/gin-gonic/gin" + "gopkg.in/vansante/go-ffprobe.v2" ) +func commandExists(cmd string) bool { + _, err := exec.LookPath(cmd) + return err == nil +} + func ffp(c *gin.Context) { hash := c.Param("hash") indexStr := c.Param("id") @@ -22,13 +30,22 @@ func ffp(c *gin.Context) { } host := utils.GetScheme(c) + "://" + c.Request.Host + "/stream?link=" + hash + "&index=" + indexStr + "&play" - fmt.Println(host) + // log.Println("ffprobe", host) ctx, cancelFn := context.WithCancel(context.Background()) defer cancelFn() - if _, err := os.Stat("ffprobe"); os.IsNotExist(err) { - ffprobe.SetFFProbeBinPath(filepath.Dir(os.Args[0]) + "/ffprobe") + // path lookup + path, err := exec.LookPath("ffprobe") + if err == nil { + // log.Println("ffprobe found in", path) + ffprobe.SetFFProbeBinPath(path) + } else { + // log.Println("ffprobe not found in $PATH") + // working dir + if _, err := os.Stat("ffprobe"); os.IsNotExist(err) { + ffprobe.SetFFProbeBinPath(filepath.Dir(os.Args[0]) + "/ffprobe") + } } data, err := ffprobe.ProbeURL(ctx, host) diff --git a/server/web/api/m3u.go b/server/web/api/m3u.go index afce025..076e492 100644 --- a/server/web/api/m3u.go +++ b/server/web/api/m3u.go @@ -100,10 +100,10 @@ func getM3uList(tor *state.TorrentStatus, host string, fromLast bool) string { fn = f.Path } m3u += "#EXTINF:0," + fn + "\n" - fileNamesakes := findFileNamesakes(tor.FileStats, f) //find external media with same name (audio/subtiles tracks) + fileNamesakes := findFileNamesakes(tor.FileStats, f) // find external media with same name (audio/subtiles tracks) if fileNamesakes != nil { - m3u += "#EXTVLCOPT:input-slave=" //include VLC option for external media - for _, namesake := range fileNamesakes { //include play-links to external media, with # splitter + m3u += "#EXTVLCOPT:input-slave=" // include VLC option for external media + for _, namesake := range fileNamesakes { // include play-links to external media, with # splitter sname := filepath.Base(namesake.Path) m3u += host + "/stream/" + url.PathEscape(sname) + "?link=" + tor.Hash + "&index=" + fmt.Sprint(namesake.Id) + "&play#" } @@ -118,12 +118,12 @@ func getM3uList(tor *state.TorrentStatus, host string, fromLast bool) string { } func findFileNamesakes(files []*state.TorrentFileStat, file *state.TorrentFileStat) []*state.TorrentFileStat { - //find files with the same name in torrent + // find files with the same name in torrent name := filepath.Base(strings.TrimSuffix(file.Path, filepath.Ext(file.Path))) var namesakes []*state.TorrentFileStat for _, f := range files { - if strings.Contains(f.Path, name) { //external tracks always include name of videofile - if f != file { //exclude itself + if strings.Contains(f.Path, name) { // external tracks always include name of videofile + if f != file { // exclude itself namesakes = append(namesakes, f) } } diff --git a/server/web/api/settings.go b/server/web/api/settings.go index 42ae959..6edf6c1 100644 --- a/server/web/api/settings.go +++ b/server/web/api/settings.go @@ -2,6 +2,7 @@ package api import ( "net/http" + "server/rutor" "github.com/gin-gonic/gin" diff --git a/server/web/api/stream.go b/server/web/api/stream.go index 9c5f39e..b33f22b 100644 --- a/server/web/api/stream.go +++ b/server/web/api/stream.go @@ -211,5 +211,4 @@ func streamNoAuth(c *gin.Context) { } c.Header("WWW-Authenticate", "Basic realm=Authorization Required") c.AbortWithStatus(http.StatusUnauthorized) - } diff --git a/server/web/api/torrents.go b/server/web/api/torrents.go index d67a084..c7f843f 100644 --- a/server/web/api/torrents.go +++ b/server/web/api/torrents.go @@ -15,7 +15,7 @@ import ( "github.com/pkg/errors" ) -//Action: add, get, set, rem, list, drop +// Action: add, get, set, rem, list, drop type torrReqJS struct { requestI Link string `json:"link,omitempty"` diff --git a/server/web/blocker/iplist.go b/server/web/blocker/iplist.go index 105fb43..690a7d0 100644 --- a/server/web/blocker/iplist.go +++ b/server/web/blocker/iplist.go @@ -68,7 +68,7 @@ func (ipl *IPList) Lookup(ip net.IP) (r Range, ok bool) { // Return the range the given IP is in. Returns nil if no range is found. func (ipl *IPList) lookup(ip net.IP) (Range, bool) { var rng Range - var ok = false + ok := false for _, r := range ipl.ranges { ok = bytes.Compare(r.First, ip) <= 0 && bytes.Compare(ip, r.Last) <= 0 if ok { diff --git a/server/web/msx/assets/russian.json.gz b/server/web/msx/assets/russian.json.gz index 9445289..f57c823 100644 Binary files a/server/web/msx/assets/russian.json.gz and b/server/web/msx/assets/russian.json.gz differ diff --git a/server/web/msx/assets/tizen.js.gz b/server/web/msx/assets/tizen.js.gz new file mode 100644 index 0000000..2b3e298 Binary files /dev/null and b/server/web/msx/assets/tizen.js.gz differ diff --git a/server/web/msx/assets/torrent.js.gz b/server/web/msx/assets/torrent.js.gz new file mode 100644 index 0000000..e3a0a84 Binary files /dev/null and b/server/web/msx/assets/torrent.js.gz differ diff --git a/server/web/msx/assets/torrents.js.gz b/server/web/msx/assets/torrents.js.gz new file mode 100644 index 0000000..de4a4f6 Binary files /dev/null and b/server/web/msx/assets/torrents.js.gz differ diff --git a/server/web/msx/assets/tvx.js.gz b/server/web/msx/assets/tvx.js.gz index 5b9ca7e..4ce3e23 100644 Binary files a/server/web/msx/assets/tvx.js.gz and b/server/web/msx/assets/tvx.js.gz differ diff --git a/server/web/msx/msx.go b/server/web/msx/msx.go index 4d411b0..dfb8fe5 100644 --- a/server/web/msx/msx.go +++ b/server/web/msx/msx.go @@ -2,7 +2,7 @@ package msx import ( _ "embed" - + "server/version" "github.com/gin-gonic/gin" @@ -11,9 +11,11 @@ import ( var ( //go:embed assets/tvx.js.gz tvx []byte - //go:embed assets/tizen.html.gz + //go:embed assets/tizen.js.gz tzn []byte - //go:embed assets/torrents.min.html.gz + //go:embed assets/torrents.js.gz + trs []byte + //go:embed assets/torrent.js.gz trn []byte //go:embed assets/html5x.html.gz h5x []byte @@ -21,24 +23,46 @@ var ( rus []byte ) -func ass(b []byte, t string) func(*gin.Context) { - return func(c *gin.Context) { - c.Header("Content-Encoding", "gzip") - c.Data(200, t+"; charset=UTF-8", b) - } +func ass(c *gin.Context, b []byte, t string) { + c.Header("Content-Encoding", "gzip") + c.Data(200, t+"; charset=UTF-8", b) } func SetupRoute(r *gin.RouterGroup) { - r.GET("/msx/start.json", func(c *gin.Context) { - c.JSON(200, gin.H{ - "name": "TorrServer", - "version": version.Version, - "parameter": "content:request:interaction:init@{PREFIX}{SERVER}/msx/torrents", - }) + r.GET("/msx/:pth", func(c *gin.Context) { + s := []string{"tvx", "tizen"} + switch p := c.Param("pth"); p { + case "start.json": + c.JSON(200, gin.H{ + "name": "TorrServer", + "version": version.Version, + "parameter": "content:request:interaction:init@{PREFIX}{SERVER}/msx/torrents", + }) + case "russian.json": + ass(c, rus, "application.json") + case "html5x": + ass(c, h5x, "text/html") + case "tvx.js": + ass(c, tvx, "text/javascript") + case "tizen.js": + ass(c, tzn, "text/javascript") + case "torrents.js": + ass(c, trs, "text/javascript") + case "torrent.js": + ass(c, trn, "text/javascript") + case "torrents": + s = append(s, p) + p = "torrent" + fallthrough + case "torrent": + s = append(s, p) + b := []byte("\n\n\nTorrServer Interaction Plugin\n\n") + for _, j := range s { + b = append(b, "\n"...) + } + c.Data(200, "text/html", append(b, "\n\n"...)) + default: + c.AbortWithStatus(404) + } }) - r.GET("/msx/russian.json", ass(rus, "application/json")) - r.GET("/msx/tvx.js", ass(tvx, "text/javascript")) - r.GET("/msx/torrents", ass(trn, "text/html")) - r.GET("/msx/tizen", ass(tzn, "text/html")) - r.GET("/msx/html5x", ass(h5x, "text/html")) } diff --git a/server/web/server.go b/server/web/server.go index e3f3cc1..c7de238 100644 --- a/server/web/server.go +++ b/server/web/server.go @@ -2,9 +2,10 @@ package web import ( "net" - "server/rutor" "sort" + "server/rutor" + "github.com/gin-contrib/cors" "github.com/gin-contrib/location" "github.com/gin-gonic/gin" @@ -42,11 +43,11 @@ func Start(port string) { gin.SetMode(gin.ReleaseMode) - //corsCfg := cors.DefaultConfig() - //corsCfg.AllowAllOrigins = true - //corsCfg.AllowHeaders = []string{"*"} - //corsCfg.AllowMethods = []string{"*"} - //corsCfg.AllowPrivateNetwork = true + // corsCfg := cors.DefaultConfig() + // corsCfg.AllowAllOrigins = true + // corsCfg.AllowHeaders = []string{"*"} + // corsCfg.AllowMethods = []string{"*"} + // corsCfg.AllowPrivateNetwork = true corsCfg := cors.DefaultConfig() corsCfg.AllowAllOrigins = true corsCfg.AllowHeaders = []string{"Origin", "Content-Length", "Content-Type", "X-Requested-With", "Accept", "Authorization"}