Skip to content

Latest commit

 

History

15 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LinkJet

独立的 115 直链代理服务,与 OneFive 解耦的飞牛 OS 应用

项目目标

把 OneFive 内嵌的 115 直链服务(p115nano302)独立成单独的飞牛应用,解决:

  • CPU 飙升:OneFive 主进程的整理任务与直链服务共享 GIL,导致 Emby 拉直链时整机 CPU 拉满
  • Cookie 风控:直链服务用独立小号,与 OneFive 整理主号隔离
  • 崩溃域:直链服务挂掉不影响 OneFive,反之亦然
  • 升级耦合:p115nano302 升级只重启 LinkJet

架构

┌─────────────────────────────────────────────────┐
│ 飞牛 OS 容器                                    │
│                                                 │
│  ┌──────────────┐      ┌──────────────────────┐ │
│  │ OneFive      │      │ LinkJet (本项目)     │ │
│  │ 整理/通知    │      │ FastAPI 管理面       │ │
│  │              │      │ + p115nano302 ASGI   │ │
│  │ 独立 cookie  │      │ 独立 cookie (小号)   │ │
│  └──────────────┘      └──────────────────────┘ │
└─────────────────────────────────────────────────┘
            ↑                       ↑
            └────── 飞牛网关 ───────┘
                      ↓
                 Emby / 播放器

技术栈

后端

  • FastAPI:管理面 Web 框架
  • p115nano302:直链 302 ASGI 应用核心
  • p115qrcode:115 扫码登录(库函数复用)
  • aiosqlite:真异步 SQLite(修 OneFive 同步阻塞事件循环的 bug)
  • uvicorn:ASGI 服务器

前端

  • Vue 3 + TypeScript:Composition API
  • Pinia:状态管理
  • vue-router:单页路由
  • Chart.js + vue-chartjs:实时请求量折线图
  • lucide-vue-next:图标
  • Cormorant + Montserrat + JetBrains Mono:字体

设计风格

  • 纯暗色模式(dev tool 推荐 Dark Mode OLED)
  • Bento Box Grid 布局(避开 OneFive 侧边栏布局)
  • 局部液态玻璃(避开 OneFive 玻璃全场景滥用)
  • 仅交互态内凹(保留 neumorphic 偏好但不滥用)

详见 design-system/linkjet/pages/dashboard.md

目录结构

LinkJet/
├── backend/
│   ├── pyproject.toml          # 5 个核心依赖
│   ├── run.py                  # Nuitka 打包入口
│   └── src/linkjet/
│       ├── main.py             # FastAPI 入口
│       ├── paths.py            # 飞牛 TRIM_PKGVAR 感知
│       ├── logger.py            # 日志
│       ├── db.py                # aiosqlite 单例
│       ├── models.py           # 统一 ApiResponse
│       ├── auth/                # 扫码登录 + Cookie 持久化
│       ├── direct_link/         # p115nano302 启停 + L2 异步缓存 + dispatcher
│       └── api/                 # 管理面 HTTP 路由
├── frontend/
│   ├── package.json
│   ├── vite.config.ts
│   └── src/
│       ├── main.ts             # Vue 入口
│       ├── App.vue
│       ├── router/             # 单页路由
│       ├── stores/             # Pinia (auth, service)
│       ├── api/                # HTTP 客户端
│       ├── composables/        # useToast, usePolling
│       ├── views/Dashboard.vue # Bento 单页
│       ├── components/         # TopBar + 9 张 Bento 卡片
│       └── styles/             # tokens/typography/components
├── design-system/linkjet/      # ui-ux-pro-max 生成的设计规范
└── trim-package.toml           # 飞牛 OS 应用清单

本地开发

后端

cd D:\OneFive\LinkJet\backend
$env:PYTHONPATH = "src"
python -m uvicorn linkjet.main:app --host :: --port 11580 --reload

前端

cd D:\OneFive\LinkJet\frontend
npm install
npm run dev
# 访问 http://localhost:5173/

生产构建

# 前端
cd D:\OneFive\LinkJet\frontend
npm run build  # 产物在 frontend/dist/

# 后端(飞牛 Nuitka 打包)
cd D:\OneFive\LinkJet\backend
python -m nuitka --standalone --output-dir=build run.py

API 端点

方法 路径 说明
GET /health 健康检查
GET /api/status 直链服务运行状态
GET /api/settings 获取服务配置
POST /api/settings 保存配置(enabled/port/allow_lan)
POST /api/start 启动直链服务
POST /api/stop 停止直链服务
GET /api/auth/status 115 登录状态
POST /api/auth/qr/start 开始扫码登录
GET /api/auth/qr/status?session_id=xxx 轮询扫码状态
POST /api/auth/logout 退出登录
GET /api/stats/requests 请求数统计
GET /api/stats/cache 缓存命中率
GET /api/stats/timeseries 实时请求量时序数据
GET /api/logs/recent?limit=20 最近请求日志
GET /api/stats/stream SSE 实时推送(请求/日志/时序)
ANY /d115/* 直链 302 重定向(p115nano302)

与 OneFive 视觉签名的区隔清单

维度 OneFive LinkJet
布局 260px 侧边栏 + 主内容 Bento Box Grid 单页
默认主题 亮色 #f5f5f7 暗色 #0A0A0B
主色 苹果蓝 #0071e3 金色 #D4AF37
标题字体 SF Pro Display Cormorant
正文字体 SF Pro Text Montserrat
玻璃范围 全场景 局部(顶栏 + 模态遮罩)
内凹范围 全场景 仅交互态
顶栏 粘性吸顶全宽 浮动悬浮圆角
弹窗 圆形 danger + 底部双按钮 右上 X + 横向按钮组

About

115云盘直链服务

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages