Files
OpenList/go.mod
T
ef5d8c8d41 feat(media): scan every folder level, save incrementally, TV tags, seed task progress (#3263)
* feat(media): scan every folder level, save incrementally, TV tags, seed task progress

Media library
- Merge mode now walks every folder level instead of only the first one.
  A folder that directly contains media files is one collection and is not
  split further; a folder without media is descended into. Loose files in
  the scan root stay individual items. Depth is capped at 16.
- Scanning no longer buffers the whole tree before writing: items are
  flushed to the database every 20 items or 3 seconds, for all four media
  types, so results appear while the scan is still running. Skipped and
  failed items still advance the progress counter.
- The scan path type tag now decides movie vs. series. Tags such as
  TV series / anime / variety / documentary mark every video under the
  path as "tv" (shown as series in Emby, also for single files); movie
  tags force "movie" even when merge mode is on. Unrecognised tags keep
  the old rule (folder items are series). Emby virtual folders use the
  same rule.
- Fix: a music folder containing a non-audio file was dropped entirely.

Playback URL
- When no site_url is configured and the request host is a loopback
  address (127.0.0.1 / localhost / ::1), stream_url now returns relative
  /d and /p paths instead of absolute loopback URLs. An explicit site_url
  or a forwarded host still produces absolute URLs.

Seed tasks
- Seed generation reports progress by bytes hashed plus a stage message
  and is exposed at /task/seed_generate.
- Seed save, rapid upload and transit transfer register a display-only
  task at /task/seed_save (the operation stays synchronous) so progress
  is visible in the task list.

Tests cover tag classification, index-length checks, level-by-level merge
scanning (stop at collection, list errors, depth limit) and loopback
detection.

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(server): keep site_url path prefix in playback base url

site_url 允许配置成 /openlist 这样的路径前缀;原先只有以 http 开头才走绝对地址,前缀模式下播放地址会丢掉前缀导致 404。改为配置了 site_url 就统一用 GetApiUrlFromRequest 生成。

* feat(media): season-aware episodes, album admin api, cover upload, zip export

- 扫描:季目录(第N季/Season N/S01)解析季号写入 EpisodeInfo.season,Emby 与播放器可按季分组;显式电影标签不再被季目录反推成剧集;merge_depth 语义固定为「第 N 层=一条记录」,与模型注释、UI 一致
- 刮削:音乐条目的文件自带封面(data:/thumb:/站内地址)不再被在线封面覆盖
- 后台新增:封面 URL/上传(/admin/media/items/cover)、专辑聚合列表与批量编辑(/admin/media/albums、/album/items、/album/update)、条目可编辑字段扩充(选集/视频类型/季集/时长/外部ID)
- 导入导出升级为 zip(media_export.json + covers/),导入兼容旧 JSON
- Emby:多季合集按每集 season 拆分 Season,集 ID 带季号避免跨季重号
- fix(seed):中转转存部分文件失败时任务按失败收尾,不再一律标记成功

* fix(media): patch semantics for item update, transactional album update, concurrent cover export

- UpdateMediaItemAdmin 改为 PATCH 语义(字段全部指针,只写出现过的键),修复只传 hidden 也会清空 cover/plot 的问题;cover 增加 12MB 上限
- 专辑批量更新走单事务(新增 db.UpdateMediaItems),失败整批回滚;旧封面文件在事务成功后才删除
- 导出封面改为并发读取(4 并发,单张 8MB / 总量 512MB / 5000 张上限),避免大库导出逐张串行

* fix(media,seed): unify episode ids, season fallback, cancellable seed tasks, periodic flush

- Emby 集 ID 统一走 parseEpisodeID(新格式 ep-item-season-num,兼容旧两段),修掉封面/刷新/续播列表里仍假设旧格式的三处;续播能唯一定位时补季号
- 季号兜底 seasonFromText 与前端 episodeSeasonOf 规则对齐,老数据不会在 Emby 和网页端分到不同季
- 种子任务真正可取消:任务 ctx 重新绑定(tache Add 会覆盖)、保存 IO 改用任务 ctx、逐文件与哈希读取检查取消、取消后状态为 Canceled
- mediaSaver 增加定时落盘协程,Close 时停表并收尾 Flush

* feat(media): artist aggregation api and image exif lookup

- 新增 GET /fs/media/artists(db.ListArtists):按 album_artist 聚合专辑数/曲目数/封面,供音乐库「按艺术家」分类
- /fs/media/albums 支持 album_artist 过滤,艺术家下钻时只取该艺术家的专辑
- 新增 GET /fs/media/exif:按需读取图片文件头解析 EXIF(设备/镜头/曝光/焦距/时间/GPS)并缓存,解析失败返回 available=false 而不是 500

* fix(emby): return full UserDto from /Users/Public (issue #3301)

严格类型的客户端会把 user['Policy'] / user['Configuration'] 直接强转成 Map,
之前 /Users/Public 只返回 5 个标量字段,转 null 时抛异常并中断渲染(封面全挂)。

- 删除 embyPublicUserDto,/Users/Public 直接复用 embyUserDtoOf,与登录接口结构一致
- 新增 embyUserConfiguration(),按官方 UserConfiguration 给全默认值(空 map 同样是缺键)
- 补 TestEmbyUserDtoHasPolicyAndConfiguration 回归测试

* feat(media): pure-go pdf cover rendering, keep existing cover by default, same-dir thumbnails

- PDF 封面改用纯 Go 光栅化(github.com/go-pdfkit/render,BSD-3、无 cgo):渲染第 1 页再缩到 300px,矢量/扫描件/Flate 压缩图都能出图;失败时仍退回原来的内嵌 JPEG 扫描。渲染带 MaxPixels/MaxDuration 上限,防止恶意或超大页面拖住扫描
- 新增设置 media_overwrite_cover(默认关闭):刮削不再覆盖条目已有封面,只负责补空;需要替换时手动打开。原先只对音乐做了保护,现在统一到所有媒体类型
- 缩略图存储新增 samedir 模式:封面写到媒体文件同目录,文件名为「原文件名.图片后缀」(song.flac.jpg),不覆盖原文件,也不需要配置 VFS 目录
- 依赖代价:go 指令 1.26.0 -> 1.26.4,新增 render 及其纯 Go 依赖(go-gfx/opentype 等),go.sum 由 tidy 收敛

* feat(media): add skip-file-metadata switch (default off)

- 新设置 media_skip_file_metadata(默认关闭):开启后扫描与刮削都不读取媒体文件内容
- 音乐:扫描与刮削均跳过 ID3/Vorbis 解析,退回目录名/文件名,内嵌封面与内嵌歌词一并跳过
- 书籍:刮削时跳过 EPUB/PDF 内嵌封面提取
- 图片:刮削时跳过 EXIF(拍摄时间/地点/设备),缩略图仍生成
- 书籍封面依旧只在刮削阶段提取,扫描阶段完全不读文件

* feat(seed): support folder expansion, split mode and structure-preserving paths

- 右键目录也能生成种子:后端递归展开目录下所有文件(深度/数量上限,逐目录校验权限)
- 新增 preserve_structure(默认关闭):开启后种子内保留相对目录结构,关闭时拍平成文件名,重名自动加序号
- 新增 split(默认关闭):每个文件生成一个种子;关闭时全部合并(默认)
- 默认命名:单文件/单目录用其名字;多选合并固定为 torrent
- 能力探测接口同步支持目录,前端按展开后的文件列表展示哈希/流量
- 单测覆盖命名规则、保留/拍平路径与重名处理

* feat(seed): compute missing hashes from source files when converting

- ConvertSeed 新增 compute_missing / file_base_path:缺哈希时按种子内相对路径读取源目录文件补算,而不是直接返回不可转换
- torrent 目标按整包拼接计算 SHA-1 pieces(解决 piece boundary crosses the next file),CAS 目标按 10 MiB 分片补 MD5
- 补算后仍不满足时返回 400 并带具体原因,避免前端误判成功

* feat(seed): persist overall comment when converting

- /fs/seed/convert 新增 comment 字段(指针,允许清空)
- 转换与保存注释合并为一次请求,前端不必先保存再转换

* feat(seed): convert to multiple target formats in one request

- /fs/seed/convert 新增 formats 数组(去重、bt 别名、最多 3 个),逐个编码并写入目标目录,返回 artifacts
- 每个目标独立解码,避免 CAS 补算修改 PieceSize 后污染 torrent pieces
- 预检仍保留「不可转换 + 原因」的响应;单目标响应字段保持兼容
- 新增 TestSeedConvertTargets

* fix(seed): identity conversion is always feasible and folder roots no longer nest twice

- seedConversionStates 现在接收源格式:目标等于源格式时直接可行,不再用「按文件 pieces」去诊断整包结构。合法 torrent(pieces 跨文件)之前被误报 piece boundary crosses the next file,导致预览页对当前格式打叉\n- ConvertSeed 对同一格式直接复制原始字节,跳过诊断与重新编码\n- 保留目录结构时,只选一个目录以该目录为根,修复「剧/剧/S01/...」重复嵌套\n- 新增回归测试:身份转换可行、跨格式仍诊断、单目录/多目录保留结构路径

* fix(seed): keep the torrent's global pieces so it can be re-encoded

- Seed 新增运行时字段 GlobalPieces:解析 .torrent 时保留整包 SHA-1 pieces(含 x-openlist 种子),重新编码直接复用,不再按文件拼接\n- DiagnoseConversion 在存在整包 pieces 时跳过「piece 跨文件」检查;否则合法 torrent 会被判成不可转换(Cannot convert to torrent: piece boundary crosses the next file)\n- TorrentFromSeed 优先使用整包 pieces,并对无效哈希返回诊断而不是静默拼接\n- 移除文件 / 重算哈希后清空 GlobalPieces,避免用对不上的旧 pieces 编码\n- 新增往返测试:跨文件 pieces 编码→解析→再编码字节一致;逐文件 pieces 仍拒绝跨文件拼接

* fix(seed): expose seed-level hash availability for torrents

BT 的 pieces 是整包的,跨文件时无法拆到单个文件(ValidateSeed 要求每文件片数 = ceil(size/piece)),此前这些文件拿不到 pieces,前端按文件判断就全显示 needs file;现在 SeedFromTorrent 汇总 available_hashes / available_piece_hashes,前端优先按种子级标记显示,并补生成到解析的往返测试

* fix(seed): accept single-file torrent name differing from x-openlist

单文件 torrent 的 info.name 是文件名(带扩展名),x-openlist 的 seed.name 可以不带扩展名;一致性校验此前直接比较两者,判定种子损坏,导致解析 400、前端兜底本地解析(无 conversions/无哈希,全部显示 needs file)。现在单文件允许 info.name == base(seed.Files[0].Path),并补回归测试

* fix(media-seed): address audit findings and review feedback

- Enforce seed source visibility, bounded hashing, and stream cleanup.

- Apply conversion selections and hash matrices, preserve comments and global pieces, and restore legacy episode IDs.

- Correct task cancellation and retries, scan persistence, and cover protection.

- Bound and validate media ZIP import/export, authorize public aggregates, and handle cover edit patches.

- Add regression tests and extend the CI test scope.

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: pikachuren <pikachuren@example.com>
2026-11-04 13:23:35 +08:00

340 lines
16 KiB
AMPL

module github.com/OpenListTeam/OpenList/v4
go 1.26.4
toolchain go1.27.3
require (
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.23.1
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.8.1
github.com/KarpelesLab/reflink v1.0.2
github.com/KirCute/zip v1.0.1
github.com/OpenListTeam/go-cache v0.1.0
github.com/OpenListTeam/gofakes3 v0.8.2
github.com/OpenListTeam/sftpd-openlist v1.0.1
github.com/OpenListTeam/tache v0.2.2
github.com/OpenListTeam/times v0.1.0
github.com/OpenListTeam/wopan-sdk-go v0.1.5
github.com/ProtonMail/go-crypto v1.4.1
github.com/ProtonMail/gopenpgp/v2 v2.10.0
github.com/SheltonZhu/115driver v1.3.5
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible
github.com/antchfx/htmlquery v1.3.6
github.com/antchfx/xpath v1.3.8
github.com/avast/retry-go v3.0.0+incompatible
github.com/aws/aws-sdk-go v1.55.8
github.com/blevesearch/bleve/v2 v2.6.1
github.com/bmatcuk/doublestar/v4 v4.10.0
github.com/caarlos0/env/v9 v9.0.0
github.com/charmbracelet/bubbles v0.21.1
github.com/charmbracelet/bubbletea v1.3.10
github.com/charmbracelet/lipgloss v1.1.0
github.com/city404/v6-public-rpc-proto/go v0.0.0-20240817070657-90f8e24b653e
github.com/cloudsoda/go-smb2 v0.0.0-20260803221621-0b399b9d036c
github.com/coreos/go-oidc v2.5.0+incompatible
github.com/deckarep/golang-set/v2 v2.9.0
github.com/dhowden/tag v0.0.0-20240417053706-3d75831295e8
github.com/disintegration/imaging v1.6.2
github.com/dlclark/regexp2 v1.12.0
github.com/dustinxie/ecc v0.0.0-20210511000915-959544187564
github.com/fclairamb/ftpserverlib v0.26.1-0.20250709223522-4a925d79caf6
github.com/foxxorcat/mopan-sdk-go v0.1.6
github.com/foxxorcat/weiyun-sdk-go v0.1.4
github.com/gin-contrib/cors v1.7.7
github.com/gin-gonic/gin v1.12.0
github.com/glebarez/sqlite v1.11.0
github.com/go-pdfkit/reader v0.6.0
github.com/go-pdfkit/render v0.60.0
github.com/go-resty/resty/v2 v2.17.2
github.com/go-webauthn/webauthn v0.18.0
github.com/golang-jwt/jwt/v4 v4.5.2
github.com/google/uuid v1.6.0
github.com/gorilla/websocket v1.5.3
github.com/halalcloud/golang-sdk-lite v0.0.0-20251105081800-78cbb6786c38
github.com/hekmon/transmissionrpc/v3 v3.0.0
github.com/henrybear327/go-proton-api v1.0.0
github.com/ipfs/go-ipfs-api v0.7.0
github.com/jlaffaye/ftp v0.2.4
github.com/json-iterator/go v1.1.12
github.com/kdomanski/iso9660 v0.4.0
github.com/maruel/natural v1.3.0
github.com/meilisearch/meilisearch-go v0.32.0
github.com/mholt/archives v0.1.5
github.com/natefinch/lumberjack v2.0.0+incompatible
github.com/ncw/swift/v2 v2.0.5
github.com/pkg/errors v0.9.1
github.com/pkg/sftp v1.13.11
github.com/pquerna/otp v1.5.0
github.com/quic-go/quic-go v0.61.0
github.com/rclone/rclone v1.75.2
github.com/rwcarlsen/goexif v0.0.0-20190401172101-9e8deecbddbd
github.com/shirou/gopsutil/v4 v4.26.8
github.com/sirupsen/logrus v1.10.2
github.com/spf13/afero v1.15.0
github.com/spf13/cobra v1.10.2
github.com/stretchr/testify v1.12.1
github.com/t3rm1n4l/go-mega v0.0.0-20260717075258-c6acd6a5bd04
github.com/tchap/go-patricia/v2 v2.3.3
github.com/u2takey/ffmpeg-go v0.5.0
github.com/upyun/go-sdk/v3 v3.0.4
github.com/zzzhr1990/go-common-entity v0.0.0-20250202070650-1a200048f0d3
golang.org/x/crypto v0.57.0
golang.org/x/image v0.46.0
golang.org/x/net v0.60.0
golang.org/x/oauth2 v0.36.0
golang.org/x/time v0.15.0
gopkg.in/ldap.v3 v3.1.0
gorm.io/driver/mysql v1.6.0
gorm.io/driver/postgres v1.6.3
gorm.io/driver/sqlite v1.6.0
gorm.io/gorm v1.31.2
)
require (
filippo.io/edwards25519 v1.1.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.12.0 // indirect
github.com/BurntSushi/toml v1.6.0 // indirect
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf // indirect
github.com/ProtonMail/gluon v0.17.1-0.20230724134000-308be39be96e // indirect
github.com/ProtonMail/go-mime v0.0.0-20230322103455-7d82a3887f2f // indirect
github.com/ProtonMail/go-srp v0.0.7 // indirect
github.com/PuerkitoBio/goquery v1.12.0 // indirect
github.com/RoaringBitmap/roaring/v2 v2.14.5 // indirect
github.com/adrg/xdg v0.5.3 // indirect
github.com/ajroetker/go-highway v0.0.12 // indirect
github.com/andybalholm/cascadia v1.3.4 // indirect
github.com/apache/arrow-go/v18 v18.7.0 // indirect
github.com/blevesearch/zapx/v17 v17.2.3 // indirect
github.com/bradenaw/juniper v0.15.3 // indirect
github.com/bytedance/gopkg v0.1.3 // indirect
github.com/charmbracelet/colorprofile v0.4.1 // indirect
github.com/charmbracelet/x/cellbuf v0.0.15 // indirect
github.com/clipperhouse/displaywidth v0.9.0 // indirect
github.com/clipperhouse/stringish v0.1.1 // indirect
github.com/clipperhouse/uax29/v2 v2.7.0 // indirect
github.com/cloudsoda/sddl v0.0.0-20250224235906-926454e91efc // indirect
github.com/coreos/go-systemd/v22 v22.6.0 // indirect
github.com/cronokirby/saferith v0.33.1-0.20250226174546-1f11f94ce488 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/ebitengine/purego v0.10.2 // indirect
github.com/emersion/go-message v0.18.2 // indirect
github.com/emersion/go-vcard v0.0.0-20260618161152-d854b7e0e2d3 // indirect
github.com/geoffgarside/ber v1.2.0 // indirect
github.com/glebarez/go-sqlite v1.21.2 // indirect
github.com/go-gfx/gfx v0.34.0 // indirect
github.com/go-images/jpeg v0.1.0 // indirect
github.com/go-images/jpeg2000 v0.9.1 // indirect
github.com/go-opentype/fonts v0.10.0 // indirect
github.com/go-opentype/opentype v0.13.0 // indirect
github.com/go-pdfkit/pdffont v0.3.1 // indirect
github.com/go-viper/mapstructure/v2 v2.5.0 // indirect
github.com/goccy/go-yaml v1.19.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/google/flatbuffers v25.12.19+incompatible // indirect
github.com/hashicorp/go-uuid v1.0.3 // indirect
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
github.com/jcmturner/gofork v1.7.6 // indirect
github.com/jcmturner/goidentity/v6 v6.0.1 // indirect
github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
github.com/lanrat/extsort v1.4.2 // indirect
github.com/mikelolasagasti/xz v1.0.1 // indirect
github.com/minio/minlz v1.2.0 // indirect
github.com/minio/xxml v0.0.3 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/ncruces/go-strftime v1.0.0 // indirect
github.com/philhofer/fwd v1.2.0 // indirect
github.com/quic-go/qpack v0.6.0 // indirect
github.com/relvacode/iso8601 v1.7.0 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/sergeymakinen/go-bmp v1.0.0 // indirect
github.com/sergeymakinen/go-ico v1.0.0 // indirect
github.com/stangelandcl/ppmd v0.1.1 // indirect
github.com/tannevaled/gobig2 v0.2.0 // indirect
github.com/tinylib/msgp v1.6.4 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
github.com/zeebo/blake3 v0.2.4 // indirect
github.com/zeebo/xxh3 v1.1.0 // indirect
go.mongodb.org/mongo-driver v1.17.9 // indirect
go.mongodb.org/mongo-driver/v2 v2.5.0 // indirect
go.yaml.in/yaml/v3 v3.0.5 // indirect
golang.org/x/exp v0.0.0-20260813180055-c1d0aacb2297 // indirect
gopkg.in/go-jose/go-jose.v2 v2.6.3 // indirect
modernc.org/libc v1.73.4 // indirect
modernc.org/mathutil v1.7.1 // indirect
modernc.org/memory v1.11.0 // indirect
modernc.org/sqlite v1.53.0 // indirect
)
require (
github.com/OpenListTeam/115-sdk-go v0.2.6
github.com/STARRY-S/zip v0.2.3 // indirect
github.com/aymerick/douceur v0.2.0 // indirect
github.com/blevesearch/go-faiss v1.1.5 // indirect
github.com/blevesearch/zapx/v16 v16.3.4 // indirect
github.com/bodgit/plumbing v1.3.0 // indirect
github.com/bodgit/sevenzip v1.6.5
github.com/bodgit/windows v1.0.1 // indirect
github.com/bytedance/sonic/loader v0.5.0 // indirect
github.com/charmbracelet/x/ansi v0.11.5 // indirect
github.com/charmbracelet/x/term v0.2.2 // indirect
github.com/cloudflare/circl v1.6.4 // indirect
github.com/cloudwego/base64x v0.1.6 // indirect
github.com/dsnet/compress v0.0.2-0.20230904184137-39efe44ab707 // indirect
github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect
github.com/fclairamb/go-log v0.6.0 // indirect
github.com/gorilla/css v1.0.1 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/hekmon/cunits/v2 v2.1.0 // indirect
github.com/ipfs/boxo v0.12.0 // indirect
github.com/jackc/puddle/v2 v2.2.2 // indirect
github.com/klauspost/pgzip v1.2.6 // indirect
github.com/matoous/go-nanoid/v2 v2.1.0 // indirect
github.com/microcosm-cc/bluemonday v1.0.27
github.com/nwaples/rardecode/v2 v2.4.1
github.com/sorairolake/lzip-go v0.3.8 // indirect
github.com/taruti/bytepool v0.0.0-20160310082835-5e3a9ea56543 // indirect
github.com/ulikunitz/xz v0.5.15 // indirect
go4.org v0.0.0-20260112195520-a5071408f32f
resty.dev/v3 v3.0.0-beta.2 // indirect
)
require (
github.com/Max-Sum/base32768 v0.0.0-20230304063302-18e6ce5945fd // indirect
github.com/OpenListTeam/gsync v0.1.0 // indirect
github.com/abbot/go-http-auth v0.4.0 // indirect
github.com/aead/ecdh v0.2.0 // indirect
github.com/andreburgaud/crypt2go v1.8.0 // indirect
github.com/andybalholm/brotli v1.2.2 // indirect
github.com/axgle/mahonia v0.0.0-20180208002826-3358181d7394
github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
github.com/benbjohnson/clock v1.3.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bits-and-blooms/bitset v1.24.4 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/blevesearch/bleve_index_api v1.4.1 // indirect
github.com/blevesearch/geo v0.2.6 // indirect
github.com/blevesearch/go-porterstemmer v1.0.3 // indirect
github.com/blevesearch/gtreap v0.1.1 // indirect
github.com/blevesearch/mmap-go v1.2.0 // indirect
github.com/blevesearch/scorch_segment_api/v2 v2.4.10 // indirect
github.com/blevesearch/segment v0.9.1 // indirect
github.com/blevesearch/snowballstem v0.9.0 // indirect
github.com/blevesearch/upsidedown_store_api v1.0.2 // indirect
github.com/blevesearch/vellum v1.2.0 // indirect
github.com/blevesearch/zapx/v11 v11.4.3 // indirect
github.com/blevesearch/zapx/v12 v12.4.3 // indirect
github.com/blevesearch/zapx/v13 v13.4.3 // indirect
github.com/blevesearch/zapx/v14 v14.4.3 // indirect
github.com/blevesearch/zapx/v15 v15.4.3 // indirect
github.com/boombuler/barcode v1.1.0 // indirect
github.com/bytedance/sonic v1.15.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/crackcomm/go-gitignore v0.0.0-20170627025303-887ab5e44cc3 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.1.0 // indirect
github.com/fxamacker/cbor/v2 v2.9.3 // indirect
github.com/gabriel-vasile/mimetype v1.4.13 // indirect
github.com/gin-contrib/sse v1.1.0 // indirect
github.com/go-chi/chi/v5 v5.3.1 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.30.3 // indirect
github.com/go-sql-driver/mysql v1.8.1 // indirect
github.com/go-webauthn/x v0.3.0 // indirect
github.com/goccy/go-json v0.10.6 // indirect
github.com/golang-jwt/jwt/v5 v5.3.1 // indirect
github.com/golang/snappy v1.0.0 // indirect
github.com/google/go-tpm v0.9.8 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/henrybear327/Proton-API-Bridge v1.0.0
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/ipfs/go-cid v0.6.2
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
github.com/jackc/pgx/v5 v5.10.0 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jzelinskie/whirlpool v0.0.0-20201016144138-0675e54bb004 // indirect
github.com/klauspost/compress v1.19.2 // indirect
github.com/klauspost/cpuid/v2 v2.4.0 // indirect
github.com/kr/fs v0.1.0 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/libp2p/go-buffer-pool v0.1.0 // indirect
github.com/libp2p/go-flow-metrics v0.1.0 // indirect
github.com/libp2p/go-libp2p v0.27.8 // indirect
github.com/lucasb-eyer/go-colorful v1.4.0 // indirect
github.com/lufia/plan9stats v0.0.0-20260627054121-477a66015f15 // indirect
github.com/mailru/easyjson v0.9.2 // indirect
github.com/mattn/go-colorable v0.1.15 // indirect
github.com/mattn/go-isatty v0.0.23 // indirect
github.com/mattn/go-localereader v0.0.1 // indirect
github.com/mattn/go-runewidth v0.0.24 // indirect
github.com/mattn/go-sqlite3 v1.14.22 // indirect
github.com/minio/sha256-simd v1.0.1 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mr-tron/base58 v1.3.0 // indirect
github.com/mschoch/smat v0.2.0 // indirect
github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 // indirect
github.com/muesli/cancelreader v0.2.2 // indirect
github.com/muesli/termenv v0.16.0 // indirect
github.com/multiformats/go-base32 v0.1.0 // indirect
github.com/multiformats/go-base36 v0.2.0 // indirect
github.com/multiformats/go-multiaddr v0.9.0 // indirect
github.com/multiformats/go-multibase v0.3.0 // indirect
github.com/multiformats/go-multicodec v0.9.0 // indirect
github.com/multiformats/go-multihash v0.2.3 // indirect
github.com/multiformats/go-multistream v0.4.1 // indirect
github.com/multiformats/go-varint v0.1.0 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/pierrec/lz4/v4 v4.1.28 // indirect
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
github.com/pquerna/cachecontrol v0.1.0 // indirect
github.com/prometheus/client_golang v1.23.2 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/common v0.70.0 // indirect
github.com/prometheus/procfs v0.21.1 // indirect
github.com/rfjakob/eme v1.2.0 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect
github.com/shabbyrobe/gocovmerge v0.0.0-20230507112040-c3350d9342df // indirect
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/tklauser/go-sysconf v0.4.0 // indirect
github.com/tklauser/numcpus v0.12.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/u2takey/go-utils v0.3.1 // indirect
github.com/ugorji/go/codec v1.3.1 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.etcd.io/bbolt v1.5.0 // indirect
golang.org/x/arch v0.23.0 // indirect
golang.org/x/sync v0.23.0
golang.org/x/sys v0.48.0
golang.org/x/term v0.46.0 // indirect
golang.org/x/text v0.42.0
golang.org/x/tools v0.49.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260817212433-ac3dfec99bb1 // indirect
google.golang.org/grpc v1.85.0-dev.0.20260825072537-93e31b48545e
google.golang.org/protobuf v1.36.12 // indirect
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
lukechampine.com/blake3 v1.1.7 // indirect
)
replace github.com/ProtonMail/go-proton-api => github.com/henrybear327/go-proton-api v1.0.0
replace github.com/cronokirby/saferith => github.com/Da3zKi7/saferith v0.33.0-fixed
// replace github.com/OpenListTeam/115-sdk-go => ../../OpenListTeam/115-sdk-go
replace github.com/KarpelesLab/reflink => github.com/OpenListTeam/reflink v0.0.0-20260701021214-78760eaeafef