Skip to content

Releases: yangjian1412/OneNAS

v1.0.6

Choose a tag to compare

@yangjian1412 yangjian1412 released this 11 Oct 02:01

平板 / 折叠屏 / 横屏适配,以及由此暴露的三个必修 bug。

主程序升级

  • 增加平板适配,优化折叠屏、横屏显示
  • 平板 / 横屏(expanded)时,底部 tab 变为常驻左侧导航栏(图标 + 文字),使用 react-navigation v7 原生的 tabBarPosition="left" + tabBarVariant="material",未自绘组件;窄屏保持底部 tab
  • 新增 src/lib/useLayout.ts 作为全项目唯一窗口尺寸来源

komga模块升级至1.0.3

  • 高分率及宽屏适配优化
  • 优化条漫模式切换模式后强制 reloadKey 重载
  • 优化菜单点击坐标修复

v1.0.5-aria2(1.0.1)

Choose a tag to compare

@yangjian1412 yangjian1412 released this 07 Oct 08:57

Aria2 模块升级到 1.0.1:磁力链接与种子下载(纯下载模式,不做种)。App 版本仍 1.0.5。

v1.0.5beta2

Choose a tag to compare

@yangjian1412 yangjian1412 released this 24 Sep 08:53

Jellyfin Live TV channel list + playback fix: official POST /Items/{id}/PlaybackInfo flow; absolutize relative stream URLs (fixes ExoPlayer FileDataSource query error); remove debug logs.

v1.0.5

Choose a tag to compare

@yangjian1412 yangjian1412 released this 24 Sep 09:32

设置新增各服务独立版本与更新内容查看(关于 → 版本号)。App 版本固定为 1.0.5,此后仅大调整时更新;各服务独立排版(1.0.0 起,功能更新递增)。

One NAS v1.0.5beta

Choose a tag to compare

@yangjian1412 yangjian1412 released this 22 Sep 01:36

feat(navidrome): song/album/playlist row actions + multi-select + playlist CRUD; bump to 1.0.5beta

歌曲行 ⋮:播放 / 下一首播放 / 加入队列末尾 / 加入歌单… / 前往专辑 / 查看艺术家 / 收藏 / 从队列或歌单移除。
播放详情 header ⋮(与 ❤️ 同列右上角)。
专辑/歌单详情:⋯ 菜单(全部播放/全部加入队列/全部加入歌单/收藏/重命名/删除歌单)+ ☑ 多选模式 + 底部操作条(播放 N 首 / 加入队列 / 加入歌单 / 取消)。
歌单时长显示修 bug:m:ss。
新增 Subsonic 端点:createPlaylist / updatePlaylist / deletePlaylist / savePlayQueue / getPlayQueue。
复用 FileBrowser ⋮ 视觉(3 个小圆点 View)+ ☑ 视觉(外框 + 内填),无新 SVG。

One NAS v1.0.4alpha

Choose a tag to compare

@yangjian1412 yangjian1412 released this 18 Sep 02:32

feat(talebook): inline login UI in ConfigModal + MyBooks node compatibility; bump to 1.0.4alpha

API 层:talebookUnlockSite / GetShelf / ToggleShelf 按 serverType 分支;MyBooks captcha 端点返回 none。
UI 层:ConfigModal 新增「服务类型」选择器 (Talebook/MyBooks),登录/解锁/验证码 UI 内嵌到配置页。
Store:新增 initServerFromService 同步 server 配置;登录不再需要事先进入 TalebookScreen。

One NAS v1.0.3

Choose a tag to compare

@yangjian1412 yangjian1412 released this 13 Sep 01:18

One NAS v1.0.3

适配 Jellyfin v12.0(2026-09-08 发布的强制 auth 变更)。登录、看库、播放、投屏等全部接口在升级到 Jellyfin v12 后回归正常。

修复

fix(jellyfin): migrate auth to v12 single-header MediaBrowser scheme

Jellyfin v12 默认关闭 EnableLegacyAuthorization,仅保留:

  • 单一 Authorization: MediaBrowser Client="...", Device="...", DeviceId="...", Version="...", Token="..." header(与官方 jellyfin-sdk-typescript v1.0 一致)
  • ?ApiKey=<token> query 参数

旧代码同时发 X-Emby-Authorization + X-Emby-Token + Authorization: MediaBrowser Token=...,v12 全部弃用。结果就是登录 /Users/AuthenticateByName 时服务端从 Authorization 解析不到 client/device/deviceId/version,session 创建失败,返回 400。

改动:

  • src/lib/api/jellyfin.ts / jellyfinPlayback.ts:重写 fetch 头。buildAuthHeader(server) 统一生成 SDK v1.0 风格的单一 header。登录端点无 token 时 Token="" 占位
  • api_key= → ApiKey=:共 6 处(jellyfinGetImageUrl / jellyfinGetStreamUrl / jellyfinPlayback.ts getStream / upnp/streamUrl.ts)

安装

  • 版本:v1.0.3 / versionCode 15
  • 附件:app-release.apk(~38 MB,arm64-v8a)
  • adb:adb install -r app-release.apk

One NAS v1.0.2beta11

Choose a tag to compare

@yangjian1412 yangjian1412 released this 08 Sep 03:55

v1.0.2beta11

fix(filebrowser): per-segment URL encoding for literal ? in filenames

resourceUrl / requestResource 拆出 path / query 两个参数:

  • path 段:按 / 切分后逐段 encodeURIComponent,含字面 ? (U+003F) 的文件名会编码为 %3F,不再与 ?action=rename&... 的 query 分隔符冲突
  • query 段:原样透传(caller 已经 encodeURIComponent 编过)

修复的两个 bug:

  1. 字面 ? 文件名 rename 失败:encodeURI 不编码 ?(保留字符),原 URL .../Na?ve...mp3?action=rename&... 出现两个 ?,服务端把第一个当 query 分隔符,src 被截断到 /folder/Na,找不到目标文件 → rename 失败
  2. destination 二次编码:encodeURIComponent(destination) 之后 encodeURI 又把 % 编成 %25,服务端收 destination=%252F...,反编码后变成含字面 %2F 的"路径",不在文件系统上 → rename 失败

调用点更新(4 处):

  • renameResource / copyResource:把 query 改成单独参数传
  • uploadResource:?override=true
  • getFileChecksum:?checksum=...

安装

  • 版本:v1.0.2beta11 / versionCode 14
  • 附件:app-release.apk(~38 MB,arm64-v8a)
  • adb:adb install -r app-release.apk

One NAS v1.0.2beta10

Choose a tag to compare

@yangjian1412 yangjian1412 released this 08 Sep 02:47

v1.0.2 beta10

FileBrowser 子目录搜索结果 404 修复

之前在子目录里搜索结果点击会报 404,但根目录搜索正常。

根因:

FileBrowser 的 /api/search/<scope>?query=... 端点返回的路径是相对 <scope> 的:

  • 根目录搜(scope=/):返回 /folder/file.txt(碰巧等于绝对路径)→ 打开正常
  • 子目录 /documents 里搜(scope=/documents):返回 subdir/file.txt(相对 scope)→ loadDir 拼出 /api/resources/subdir/file.txt,而真实资源在 /api/resources/documents/subdir/file.txt → 404

修复:

在 src/lib/api/filebrowser.ts 的 searchFilesStream 内新增 normalizePath(rawPath, scope):当 raw.path 不以 / 开头时,自动拼接 scope 前缀。

应用在 3 个结果构造点:

  • NDJSON streaming path
  • JSON array streaming path
  • 纯文本 fallback path

注意 mapFileItem(普通列表端点,结果已经是绝对路径)保持不动。

附带修复:搜索结果点击文件的父目录推断。文件点开后会跳到父目录,原代码从相对路径算 parentDir 也会丢 scope 前缀,现在和 path 一起归一化后正确。

验证场景

  • 根目录搜索 → 点结果 → 打开正常(不变)
  • 子目录 /documents 搜索 → 点文件 → 打开父目录 /documents/xxx 正确
  • 子目录 /documents 搜索 → 点文件夹 → 进入 /documents/xxx 正确

版本

  • versionCode: 12 → 13
  • versionName: 1.0.2beta9 → 1.0.2beta10

安装

直接覆盖安装(release 复用 debug.keystore 签名)

One NAS v1.0.2beta9

Choose a tag to compare

@yangjian1412 yangjian1412 released this 03 Sep 07:53

v1.0.2 beta9

Jellyfin 库内文件分页加载

之前库内超过 50 个项目时只显示前 50 个,且无任何方式加载剩余内容。根因:

  • API 硬编码 limit=50
  • FlatList 没有 onEndReached,滚动到底不会触发加载

API 层 (src/lib/api/jellyfin.ts)

  • jellyfinGetLibraryItems 新增 startIndex 参数(默认 0)
  • 返回类型加 totalRecordCount?: number(从 /Items 响应里取)

状态层 (src/screens/JellyfinScreen.tsx)

  • 新增 hasMore / loadingMore 状态
  • 4 个初次加载点(handleLibraryPress、handleItemPress Folder 分支、handleSortFieldChange、handleToggleSortOrder)统一改用 startIndex=0,并根据 items.length < totalRecordCount 计算 hasMore
  • 新增 loadMore 回调:用 currentItems.length 作为下一段 startIndex 拉下一页,append 到列表;用 loadingMore || !hasMore 防止重复触发
  • 缓存结构调整为 { items, totalRecordCount }(兼容 60s TTL)

渲染层 (src/components/jellyfin/JellyfinItemGrid.tsx)

  • FlatList 加 onEndReached(threshold 0.5)+ ListFooterComponent
  • 加载中显示 spinner + "加载更多..."
  • 已无更多显示 "没有更多了"

验证场景

  • 100 部电影库 → 滚到底自动加载第 51-100 → 底部显示"没有更多了"
  • 切换排序 → 自动重置并重算 hasMore
  • 快速滚动 → loadMore 防抖,不重复发请求
  • 网络失败 → loadingMore 正确清除,可重试

版本

  • versionCode: 11 → 12
  • versionName: 1.0.2beta8 → 1.0.2beta9

安装

直接覆盖安装(release 复用 debug.keystore 签名)