diff --git a/README.md b/README.md index 23fb0cd..f86f3fe 100644 --- a/README.md +++ b/README.md @@ -238,7 +238,7 @@ mkdir -p data cache media downloads ```bash cat > .env <<'EOF' # 固定版本;需要升级时改成新的 MediaStationGo-vX.Y.Z 后执行 docker compose pull && docker compose up -d -MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.30 +MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.31 MEDIASTATION_HTTP_PORT=18080 # 程序数据和缓存建议放在 MediaStationGo 部署目录下,便于备份和迁移。 @@ -307,7 +307,7 @@ vim docker-compose.yml # # 镜像版本: # 默认拉取 latest;如需固定版本,创建 .env 并写入: -# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.30 +# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.31 # # 路径映射总览: # /data 程序数据目录。保存 SQLite 数据库、JWT secret、系统配置等,必须持久化。 @@ -516,7 +516,7 @@ docker compose up -d ```bash cat > .env <<'EOF' -MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.30 +MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.31 MEDIASTATION_HTTP_PORT=18080 MEDIASTATION_DATA_DIR=./data MEDIASTATION_CACHE_DIR=./cache @@ -779,26 +779,26 @@ cd MediaStationGo | 平台 | 包名示例 | | --- | --- | -| Linux x86_64 | `MediaStationGo-v0.0.30-linux-amd64.tar.gz` | -| Linux ARM64 | `MediaStationGo-v0.0.30-linux-arm64.tar.gz` | -| Windows x86_64 | `MediaStationGo-v0.0.30-windows-amd64.zip` | -| macOS Intel | `MediaStationGo-v0.0.30-darwin-amd64.tar.gz` | -| macOS Apple Silicon | `MediaStationGo-v0.0.30-darwin-arm64.tar.gz` | +| Linux x86_64 | `MediaStationGo-v0.0.31-linux-amd64.tar.gz` | +| Linux ARM64 | `MediaStationGo-v0.0.31-linux-arm64.tar.gz` | +| Windows x86_64 | `MediaStationGo-v0.0.31-windows-amd64.zip` | +| macOS Intel | `MediaStationGo-v0.0.31-darwin-amd64.tar.gz` | +| macOS Apple Silicon | `MediaStationGo-v0.0.31-darwin-arm64.tar.gz` | 部署步骤: ```bash # Linux 示例 -tar -xzf MediaStationGo-v0.0.30-linux-amd64.tar.gz -cd MediaStationGo-v0.0.30-linux-amd64 +tar -xzf MediaStationGo-v0.0.31-linux-amd64.tar.gz +cd MediaStationGo-v0.0.31-linux-amd64 MEDIASTATION_APP_PORT=18080 ./mediastation-go ``` Windows: ```powershell -Expand-Archive .\MediaStationGo-v0.0.30-windows-amd64.zip -cd .\MediaStationGo-v0.0.30-windows-amd64 +Expand-Archive .\MediaStationGo-v0.0.31-windows-amd64.zip +cd .\MediaStationGo-v0.0.31-windows-amd64 $env:MEDIASTATION_APP_PORT = "18080" .\mediastation-go.exe ``` diff --git a/README_EN.md b/README_EN.md index 16c91ec..1b89b6c 100644 --- a/README_EN.md +++ b/README_EN.md @@ -235,7 +235,7 @@ mkdir -p data cache media downloads ```bash cat > .env <<'EOF' -MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.30 +MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.31 MEDIASTATION_HTTP_PORT=18080 MEDIASTATION_DATA_DIR=./data MEDIASTATION_CACHE_DIR=./cache @@ -344,7 +344,7 @@ For production, pin a specific release tag instead of using `latest`. Recommende ```bash cat > .env <<'EOF' -MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.30 +MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.31 MEDIASTATION_HTTP_PORT=18080 MEDIASTATION_DATA_DIR=./data MEDIASTATION_CACHE_DIR=./cache @@ -593,25 +593,25 @@ Each release provides multi-platform archives: | Platform | Package example | | --- | --- | -| Linux x86_64 | `MediaStationGo-v0.0.30-linux-amd64.tar.gz` | -| Linux ARM64 | `MediaStationGo-v0.0.30-linux-arm64.tar.gz` | -| Windows x86_64 | `MediaStationGo-v0.0.30-windows-amd64.zip` | -| macOS Intel | `MediaStationGo-v0.0.30-darwin-amd64.tar.gz` | -| macOS Apple Silicon | `MediaStationGo-v0.0.30-darwin-arm64.tar.gz` | +| Linux x86_64 | `MediaStationGo-v0.0.31-linux-amd64.tar.gz` | +| Linux ARM64 | `MediaStationGo-v0.0.31-linux-arm64.tar.gz` | +| Windows x86_64 | `MediaStationGo-v0.0.31-windows-amd64.zip` | +| macOS Intel | `MediaStationGo-v0.0.31-darwin-amd64.tar.gz` | +| macOS Apple Silicon | `MediaStationGo-v0.0.31-darwin-arm64.tar.gz` | Linux example: ```bash -tar -xzf MediaStationGo-v0.0.30-linux-amd64.tar.gz -cd MediaStationGo-v0.0.30-linux-amd64 +tar -xzf MediaStationGo-v0.0.31-linux-amd64.tar.gz +cd MediaStationGo-v0.0.31-linux-amd64 MEDIASTATION_APP_PORT=18080 ./mediastation-go ``` Windows example: ```powershell -Expand-Archive .\MediaStationGo-v0.0.30-windows-amd64.zip -cd .\MediaStationGo-v0.0.30-windows-amd64 +Expand-Archive .\MediaStationGo-v0.0.31-windows-amd64.zip +cd .\MediaStationGo-v0.0.31-windows-amd64 $env:MEDIASTATION_APP_PORT = "18080" .\mediastation-go.exe ``` diff --git a/docker-compose.yml b/docker-compose.yml index 28ac5ce..aaa466b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -17,7 +17,7 @@ # # 镜像版本: # 默认拉取 latest;如需固定版本,创建 .env 并写入: -# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.30 +# MEDIASTATION_IMAGE_TAG=MediaStationGo-v0.0.31 # # 路径映射总览: # /data 程序数据目录。保存 SQLite 数据库、JWT secret、系统配置等,必须持久化。 diff --git a/internal/service/fileid_other.go b/internal/service/fileid_other.go index f924880..2f13f28 100644 --- a/internal/service/fileid_other.go +++ b/internal/service/fileid_other.go @@ -1,4 +1,4 @@ -//go:build !unix +//go:build !unix && !windows package service diff --git a/internal/service/fileid_windows.go b/internal/service/fileid_windows.go new file mode 100644 index 0000000..d151c36 --- /dev/null +++ b/internal/service/fileid_windows.go @@ -0,0 +1,39 @@ +//go:build windows + +package service + +import ( + "fmt" + + "golang.org/x/sys/windows" +) + +func fileIdentity(path string) (string, bool) { + ptr, err := windows.UTF16PtrFromString(path) + if err != nil { + return "", false + } + handle, err := windows.CreateFile( + ptr, + windows.GENERIC_READ, + windows.FILE_SHARE_READ|windows.FILE_SHARE_WRITE|windows.FILE_SHARE_DELETE, + nil, + windows.OPEN_EXISTING, + windows.FILE_FLAG_BACKUP_SEMANTICS, + 0, + ) + if err != nil { + return "", false + } + defer windows.CloseHandle(handle) + + var info windows.ByHandleFileInformation + if err := windows.GetFileInformationByHandle(handle, &info); err != nil { + return "", false + } + if info.NumberOfLinks < 2 { + return "", false + } + fileIndex := (uint64(info.FileIndexHigh) << 32) | uint64(info.FileIndexLow) + return fmt.Sprintf("%d:%d", info.VolumeSerialNumber, fileIndex), true +}