diff --git a/build-all.sh b/build-all.sh index 1df528a..4ea903f 100755 --- a/build-all.sh +++ b/build-all.sh @@ -55,7 +55,7 @@ for PLATFORM in "${PLATFORMS[@]}"; do set_goarm "$GOARCH" BIN_FILENAME="${OUTPUT}-${GOOS}-${GOARCH}${GOARM}" if [[ "${GOOS}" == "windows" ]]; then BIN_FILENAME="${BIN_FILENAME}.exe"; fi - CMD="GOOS=${GOOS} GOARCH=${GOARCH} ${GO_ARM} ${GOBIN} build ${BUILD_FLAGS} -o ${BIN_FILENAME} ./cmd" + CMD="GOOS=${GOOS} GOARCH=${GOARCH} ${GO_ARM} CGO_ENABLED=0 ${GOBIN} build ${BUILD_FLAGS} -o ${BIN_FILENAME} ./cmd" echo "${CMD}" eval "$CMD" || FAILURES="${FAILURES} ${GOOS}/${GOARCH}${GOARM}" done diff --git a/server/torr/state/state.go b/server/torr/state/state.go index 7e79ccf..be9fd02 100644 --- a/server/torr/state/state.go +++ b/server/torr/state/state.go @@ -1,5 +1,9 @@ package state +import ( + "server/torr/storage/reader" +) + type TorrentStat int func (t TorrentStat) String() string { @@ -62,6 +66,8 @@ type TorrentStatus struct { PiecesDirtiedGood int64 `json:"pieces_dirtied_good,omitempty"` PiecesDirtiedBad int64 `json:"pieces_dirtied_bad,omitempty"` + Readers []*reader.ReaderState `json:"readers,omitempty"` + FileStats []*TorrentFileStat `json:"file_stats,omitempty"` } diff --git a/server/torr/storage/reader/state.go b/server/torr/storage/reader/state.go new file mode 100644 index 0000000..c38bbbe --- /dev/null +++ b/server/torr/storage/reader/state.go @@ -0,0 +1,7 @@ +package reader + +type ReaderState struct { + Start int + End int + Reader int +} diff --git a/server/torr/storage/state/state.go b/server/torr/storage/state/state.go index 306c9b0..0daa755 100644 --- a/server/torr/storage/state/state.go +++ b/server/torr/storage/state/state.go @@ -2,6 +2,7 @@ package state import ( "server/torr/state" + "server/torr/storage/reader" ) type CacheState struct { @@ -12,7 +13,7 @@ type CacheState struct { PiecesCount int Torrent *state.TorrentStatus Pieces map[int]ItemState - Readers []*ReaderState + Readers []*reader.ReaderState } type ItemState struct { @@ -21,9 +22,3 @@ type ItemState struct { Size int64 Completed bool } - -type ReaderState struct { - Start int - End int - Reader int -} diff --git a/server/torr/storage/torrstor/cache.go b/server/torr/storage/torrstor/cache.go index 3a38bc2..206a9a9 100644 --- a/server/torr/storage/torrstor/cache.go +++ b/server/torr/storage/torrstor/cache.go @@ -13,6 +13,7 @@ import ( "server/log" "server/settings" + "server/torr/storage/reader" "server/torr/storage/state" "server/torr/utils" @@ -149,12 +150,12 @@ func (c *Cache) GetState() *state.CacheState { } } - readersState := make([]*state.ReaderState, 0) + readersState := make([]*reader.ReaderState, 0) c.muReaders.Lock() for r, _ := range c.readers { rng := r.getPiecesRange() pc := r.getReaderPiece() - readersState = append(readersState, &state.ReaderState{ + readersState = append(readersState, &reader.ReaderState{ Start: rng.Start, End: rng.End, Reader: pc, diff --git a/server/torr/storage/torrstor/diskpiece.go b/server/torr/storage/torrstor/diskpiece.go index 71bc569..e973eb0 100644 --- a/server/torr/storage/torrstor/diskpiece.go +++ b/server/torr/storage/torrstor/diskpiece.go @@ -37,7 +37,9 @@ func (p *DiskPiece) WriteAt(b []byte, off int64) (n int, err error) { go p.piece.cache.LoadPiecesOnDisk() - p.piece.Size += int64(n) + if p.piece.Size > p.piece.cache.pieceLength { + p.piece.Size = p.piece.cache.pieceLength + } p.piece.Accessed = time.Now().Unix() return } diff --git a/server/torr/storage/torrstor/mempiece.go b/server/torr/storage/torrstor/mempiece.go index 3f7b48c..6b69724 100644 --- a/server/torr/storage/torrstor/mempiece.go +++ b/server/torr/storage/torrstor/mempiece.go @@ -29,6 +29,9 @@ func (p *MemPiece) WriteAt(b []byte, off int64) (n int, err error) { } n = copy(p.buffer[off:], b[:]) p.piece.Size += int64(n) + if p.piece.Size > p.piece.cache.pieceLength { + p.piece.Size = p.piece.cache.pieceLength + } p.piece.Accessed = time.Now().Unix() return } diff --git a/server/torr/storage/torrstor/reader.go b/server/torr/storage/torrstor/reader.go index 2cbf3dc..3d5e57e 100644 --- a/server/torr/storage/torrstor/reader.go +++ b/server/torr/storage/torrstor/reader.go @@ -135,7 +135,7 @@ func (r *Reader) getPieceNum(offset int64) int { func (r *Reader) getOffsetRange() (int64, int64) { - if time.Now().Unix() > r.lastAccess+60 { + if time.Now().Unix() > r.lastAccess+60 && len(r.cache.readers) > 1 { return r.file.Offset(), r.file.Offset() } diff --git a/server/torr/torrent.go b/server/torr/torrent.go index 59494fd..f0858a1 100644 --- a/server/torr/torrent.go +++ b/server/torr/torrent.go @@ -427,6 +427,11 @@ func (t *Torrent) Status() *state.TorrentStatus { } } } + + if t.cache != nil { + st.Readers = t.cache.GetState().Readers + } + return st } diff --git a/server/version/version.go b/server/version/version.go index f247f31..2f242c0 100644 --- a/server/version/version.go +++ b/server/version/version.go @@ -1,3 +1,3 @@ package version -const Version = "MatriX.94" +const Version = "MatriX.95" diff --git a/server/web/pages/template/pages/index.html b/server/web/pages/template/pages/index.html index d2d01f6..d959f20 100644 --- a/server/web/pages/template/pages/index.html +++ b/server/web/pages/template/pages/index.html @@ -4,7 +4,7 @@ //# sourceMappingURL=firebase-app.js.map \ No newline at end of file + \ No newline at end of file diff --git a/web/dest/index.html b/web/dest/index.html index d2d01f6..d959f20 100644 --- a/web/dest/index.html +++ b/web/dest/index.html @@ -4,7 +4,7 @@ //# sourceMappingURL=firebase-app.js.map \ No newline at end of file + \ No newline at end of file diff --git a/web/src/components/DialogTorrentInfo.jsx b/web/src/components/DialogTorrentInfo.jsx index b52aa54..5352519 100644 --- a/web/src/components/DialogTorrentInfo.jsx +++ b/web/src/components/DialogTorrentInfo.jsx @@ -72,7 +72,7 @@ export default function DialogTorrentInfo({ torrent, open }) { - + Donate - + - + {/* eslint-disable-next-line react/no-danger */}