Compare commits

...

10 Commits

Author SHA1 Message Date
dev
8988e0afe2 update
Some checks failed
ci / build-test-publish (push) Has been cancelled
fmt / format (push) Has been cancelled
2024-12-14 16:01:13 +00:00
涵曦
7c4af5d548 build: 更新 runtime 镜像 2024-12-14 22:13:07 +08:00
Issues Docs [BOT]
93c20f2f94 Auto-Generate docs 🤖 2024-12-14 10:24:26 +00:00
Issues Docs [BOT]
ffb79f0fc3 Auto-Generate docs 🤖 2024-12-14 00:37:34 +00:00
涵曦
161c0d738b
Update static.yml 2024-12-14 07:39:47 +08:00
涵曦
52a5574220
Update static.yml 2024-12-14 07:37:03 +08:00
涵曦
8e0f7a4b46 bump: version 0.3.56 → 0.3.57 2024-12-14 03:51:03 +08:00
涵曦
f060665027 build: update static version 2024-12-14 03:51:03 +08:00
涵曦
dfc79e1b5f build: 文档生成问题 2024-12-13 21:09:10 +08:00
涵曦
3737c7359f docs: changelog 页面问题 2024-12-13 20:52:26 +08:00
20 changed files with 1205 additions and 41 deletions

View File

@ -5,8 +5,13 @@ on:
# Runs on pushes targeting the default branch # Runs on pushes targeting the default branch
push: push:
branches: ["main"] branches: ["main"]
tags:
- "v*"
paths: paths:
- 'docs/**' # Only trigger on changes in the docs directory - 'docs/**'
- 'README.md'
- 'CHANGELOG..md'
- '.github/workflows/static.yml'
# Runs on issue events # Runs on issue events
issues: issues:
types: [opened, edited, reopened] # Specify events you're interested in types: [opened, edited, reopened] # Specify events you're interested in
@ -50,7 +55,8 @@ jobs:
env: env:
VITE_GITHUB_ISSUES_TOKEN: ${{ secrets.VITE_GITHUB_ISSUES_TOKEN }} VITE_GITHUB_ISSUES_TOKEN: ${{ secrets.VITE_GITHUB_ISSUES_TOKEN }}
working-directory: ./docs # 指定工作目录为 docs working-directory: ./docs # 指定工作目录为 docs
run: | run: | # 有点小问题得执行2次
npm run docs:build
npm run docs:build npm run docs:build
- name: Check for changes - name: Check for changes

View File

@ -1,3 +1,30 @@
## v0.3.57 (2024-12-14)
### Feat
- 优化批量下载工具命名和下载高码率音频
- 新增搜索播放口令用于生成临时播放列表
- 新增设置项 ignore_tag_dirs 用于忽略读取目录下的标签信息,解决挂载 alist 目录的问题
- 新主题 Material (#299)
### Fix
- 默认主题刷新时选中当前播放歌曲
- 修复当前播放列表没更新的问题
- 修复搜索时不显示保存输入框问题
- 收藏 (#301)
- 修复收藏歌曲失败的问题
- 小屏幕设备主页显示问题 (#300)
### Refactor
- 修改默认主题
- 后端也加入 umami 统计
- 新增自托管 umami 统计
- XIAOMUSIC_HOSTNAME 携带端口号友好提醒并处理 (#303)
- 修改标题
- 冲突解决错误
## v0.3.56 (2024-12-07) ## v0.3.56 (2024-12-07)
### Feat ### Feat

View File

@ -7,6 +7,7 @@ RUN apt-get update && apt-get install -y \
libtiff6 \ libtiff6 \
libopenjp2-7 \ libopenjp2-7 \
libxcb1 \ libxcb1 \
supervisor \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
WORKDIR /app WORKDIR /app

View File

@ -135,6 +135,14 @@ function copyFile(source: string, destination: string) {
} }
} }
// 在文件开头插入内容
function prependToFile(filePath: string, text: string) {
const content = fs.readFileSync(filePath, 'utf-8');
const updatedContent = `${text}\n\n${content}`;
fs.writeFileSync(filePath, updatedContent, 'utf-8');
console.log(`Prepended text to ${filePath}`);
}
function replaceGithubAssetUrls(content: string, githubProxy: string): string { function replaceGithubAssetUrls(content: string, githubProxy: string): string {
const pattern1 = /https:\/\/github\.com\/[^\/]+\/[^\/]+\/assets\/[\w-]+/g; const pattern1 = /https:\/\/github\.com\/[^\/]+\/[^\/]+\/assets\/[\w-]+/g;
const pattern2 = /https:\/\/github\.com\/user-attachments\/assets\/[\w-]+/g; const pattern2 = /https:\/\/github\.com\/user-attachments\/assets\/[\w-]+/g;
@ -182,6 +190,7 @@ export default function GitHubIssuesPlugin(options: GitHubIssuesPluginOptions):
const changelogSource = path.join(process.cwd(), '../CHANGELOG.md'); const changelogSource = path.join(process.cwd(), '../CHANGELOG.md');
const changelogDestination = path.join(docsDir, 'changelog.md'); const changelogDestination = path.join(docsDir, 'changelog.md');
copyFile(changelogSource, changelogDestination); copyFile(changelogSource, changelogDestination);
prependToFile(changelogDestination, '# 变更日志');
for (const issue of issues) { for (const issue of issues) {
// 仅处理包含 "文档" 标签的 issue // 仅处理包含 "文档" 标签的 issue

View File

@ -5,10 +5,13 @@ title: 群晖docker安装 xiaomusic
# 群晖docker安装 xiaomusic # 群晖docker安装 xiaomusic
由于现在群晖已经无法正常下载 docker 里的镜像了,绕了好多弯;现在用 ssh 服务命令拉取镜像来创建容器; 由于现在群晖已经无法正常下载 docker 里的镜像了,绕了好多弯;现在用 ssh 服务命令拉取镜像来创建容器;
1、ssh 输入账号密码进入群晖
2、输入 sudo -i 再次输入密码进入 root 权限 ## 1. ssh 输入账号密码进入群晖
3、输入 docker search xiaomusic来查找到该镜像名 ## 2. 输入 sudo -i 再次输入密码进入 root 权限
4、然后输入 docker pull xiaomusic 试试是否能安装,如果不能;就得在命令前加个代理地址;下面列了一些代理地址可以一个个的试 ## 3. 输入 docker search xiaomusic来查找到该镜像名
## 4. 然后输入 docker pull xiaomusic 试试是否能安装,如果不能;就得在命令前加个代理地址;下面列了一些代理地址可以一个个的试
```
docker.fxxk.dedyn.iodocker.io docker.fxxk.dedyn.iodocker.io
registry-docker-hub-latest-9vgc.onrender.com registry-docker-hub-latest-9vgc.onrender.com
docker.chenby.cn docker.chenby.cn
@ -17,21 +20,31 @@ hub.uuuadc.top
docker.jsdelivr.fyi docker.jsdelivr.fyi
docker.registry.cyou docker.registry.cyou
dockerhub.anzu.vip dockerhub.anzu.vip
```
我是用的最下面这个成功的 我是用的最下面这个成功的
docker pull dockerhub.anzu.vip/xiaomusic:latest
5、安装完成后就进入群晖 DOCKER 配置 xiaomusic
<img width="491" alt="image" src="https://github.hanxi.cc/proxy/hanxi/xiaomusic/assets/38914725/e318062b-bd70-464c-a8df-8ce3635f2d84">
MI_HARDWARE=型号 前面第4 步骤获取的
XIAOMUSIC_SEARCH=搜索方式我填写的bilisearch: 意思是通过 bilibili 搜索
MI_DID=前面第4 步骤获取的
MI_USER=小米账号
MI_PASS=小米密码
XIAOMUSIC_FUZZY_MATCH_CUTOFF=模糊匹配,最小为 0.1 最大为 1越小越模糊越大越精准
6、配置端口 ```
docker pull dockerhub.anzu.vip/xiaomusic:latest
```
## 5. 安装完成后就进入群晖 DOCKER 配置 xiaomusic
<img width="491" alt="image" src="https://github.hanxi.cc/proxy/hanxi/xiaomusic/assets/38914725/e318062b-bd70-464c-a8df-8ce3635f2d84">
- MI_HARDWARE=型号 前面第4 步骤获取的
- XIAOMUSIC_SEARCH=搜索方式我填写的bilisearch: 意思是通过 bilibili 搜索
- MI_DID=前面第4 步骤获取的
- MI_USER=小米账号
- MI_PASS=小米密码
- XIAOMUSIC_FUZZY_MATCH_CUTOFF=模糊匹配,最小为 0.1 最大为 1越小越模糊越大越精准
## 6. 配置端口
<img width="757" alt="image (1)" src="https://github.hanxi.cc/proxy/hanxi/xiaomusic/assets/38914725/2b6b9283-296f-4845-a3ff-0ebb11f548b4"> <img width="757" alt="image (1)" src="https://github.hanxi.cc/proxy/hanxi/xiaomusic/assets/38914725/2b6b9283-296f-4845-a3ff-0ebb11f548b4">
7、映射路径
## 7. 映射路径
<img width="737" alt="image (2)" src="https://github.hanxi.cc/proxy/hanxi/xiaomusic/assets/38914725/593718dd-8302-4a69-bec9-36e70f3f0407"> <img width="737" alt="image (2)" src="https://github.hanxi.cc/proxy/hanxi/xiaomusic/assets/38914725/593718dd-8302-4a69-bec9-36e70f3f0407">

23
docs/issues/235.md Normal file
View File

@ -0,0 +1,23 @@
---
title: xiaomusic立体声
---
# xiaomusic立体声
有多个不同版本的小爱,怎么能选择多个音箱一起播放?
## 评论
### 评论 1 - hanxi
参考这个文档,配到一个组里就能同时播放,但是会有播放进度不一致的情况。 /issues/65.html#issuecomment-2215736529
---
### 评论 2 - F-loat
我这边先用一个音箱播放,然后米家里设置全屋播放,就能多个音箱同时播了,进度也同步,而且后续会自动全屋播放
---
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/235)

31
docs/issues/86.md Normal file
View File

@ -0,0 +1,31 @@
---
title: 微信交流群二维码
---
# 微信交流群二维码
![mmqrcode1734136802660](https://github.hanxi.cc/proxy/user-attachments/assets/a53867c9-f841-4873-b91b-35b877221fe1)
## 评论
### 评论 1 - DarrenWen
群满200人没法加入了
---
### 评论 2 - hanxi
没想到这么快就满了,新建了一个。
---
### 评论 3 - hanxi
![mm_reward_qrcode_1726365700471](https://github.hanxi.cc/proxy/user-attachments/assets/7863e361-7e61-48a7-bd71-8f8f609f11b4)
---
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/86)

View File

@ -959,5 +959,43 @@ docker compose pull
docker compose up -d docker compose up -d
``` ```
---
### 评论 60 - oklrc
更新到最新版后,找不到小爱同学了
日志:
[2024-12-14 11:34:54] [0.3.57] [ERROR] xiaomusic.py:1283: Execption 'NoneType' object has no attribute 'device_list'
Traceback (most recent call last):
File "/app/xiaomusic/xiaomusic.py", line 1281, in getalldevices
device_list = await self.mina_service.device_list()
AttributeError: 'NoneType' object has no attribute 'device_list'
[2024-12-14 11:34:54] [0.3.57] [INFO] httpserver.py:246: getsetting device_list: []
[2024-12-14 11:34:54] [0.3.57] [INFO] httpserver.py:246: getsetting device_list: []
[2024-12-14 11:34:54] [0.3.57] [INFO] httpserver.py:246: getsetting device_list: []
---
### 评论 61 - hanxi
> 更新到最新版后,找不到小爱同学了
>
> 日志: [2024-12-14 11:34:54] [0.3.57] [ERROR] xiaomusic.py:1283: Execption 'NoneType' object has no attribute 'device_list' Traceback (most recent call last): File "/app/xiaomusic/xiaomusic.py", line 1281, in getalldevices device_list = await self.mina_service.device_list() AttributeError: 'NoneType' object has no attribute 'device_list' [2024-12-14 11:34:54] [0.3.57] [INFO] httpserver.py:246: getsetting device_list: [] [2024-12-14 11:34:54] [0.3.57] [INFO] httpserver.py:246: getsetting device_list: [] [2024-12-14 11:34:54] [0.3.57] [INFO] httpserver.py:246: getsetting device_list: []
登陆掉了吧,重新登陆一下。
---
### 评论 62 - sprout-cooler
登录后,显示无设备;上面提到的方法都试过了。没有用,日志显示
File "/app/xiaomusic/xiaomusic.py", line 1270, in reinit
await self.init_all_data(self.session)
AttributeError: 'XiaoMusic' object has no attribute 'session'
--- ---
[链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/99) [链接到 GitHub Issue](https://github.com/hanxi/xiaomusic/issues/99)

1015
docs/issues/changelog.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
[project] [project]
name = "xiaomusic" name = "xiaomusic"
version = "0.3.56" version = "0.3.57"
description = "Play Music with xiaomi AI speaker" description = "Play Music with xiaomi AI speaker"
authors = [ authors = [
{name = "涵曦", email = "im.hanxi@gmail.com"}, {name = "涵曦", email = "im.hanxi@gmail.com"},

View File

@ -1 +1 @@
__version__ = "0.3.56" __version__ = "0.3.57"

View File

@ -97,19 +97,19 @@ class Analytics:
def _get_user_agent(self): def _get_user_agent(self):
# 获取系统信息 # 获取系统信息
os_name = platform.system() # 操作系统名称,如 'Windows', 'Linux', 'Darwin' # os_name = platform.system() # 操作系统名称,如 'Windows', 'Linux', 'Darwin'
os_version = platform.version() # 操作系统版本号 # os_version = platform.version() # 操作系统版本号
architecture = platform.architecture()[0] # '32bit' or '64bit' # architecture = platform.architecture()[0] # '32bit' or '64bit'
machine = platform.machine() # 机器类型,如 'x86_64', 'arm64' # machine = platform.machine() # 机器类型,如 'x86_64', 'arm64'
# 获取 Python 版本信息 # 获取 Python 版本信息
python_version = platform.python_version() # Python 版本 # python_version = platform.python_version() # Python 版本
# 组合 User-Agent 字符串 # 组合 User-Agent 字符串
user_agent = ( user_agent = (
f"XiaoMusic/{__version__} " f"XiaoMusic/{__version__} "
f"({os_name} {os_version}; {architecture}; {machine}) " # f"({os_name} {os_version}; {architecture}; {machine}) "
f"Python/{python_version}" # f"Python/{python_version}"
) )
return user_agent return user_agent

View File

@ -6,9 +6,9 @@
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<title>Debug For XiaoMusic</title> <title>Debug For XiaoMusic</title>
<link rel="stylesheet" type="text/css" href="./main.css?version=1733933734"> <link rel="stylesheet" type="text/css" href="./main.css?version=1734119463">
<script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script> <script src="https://unpkg.com/vconsole@latest/dist/vconsole.min.js"></script>
<script src="./jquery-3.7.1.min.js?version=1733933734"></script> <script src="./jquery-3.7.1.min.js?version=1734119463"></script>
<!-- Google tag (gtag.js) --> <!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script>

View File

@ -4,8 +4,8 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<title>歌曲下载工具</title> <title>歌曲下载工具</title>
<link rel="stylesheet" type="text/css" href="./main.css?version=1733933734"> <link rel="stylesheet" type="text/css" href="./main.css?version=1734119463">
<script src="./jquery-3.7.1.min.js?version=1733933734"></script> <script src="./jquery-3.7.1.min.js?version=1734119463"></script>
<!-- Google tag (gtag.js) --> <!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script>

View File

@ -6,8 +6,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>小爱音箱操控面板</title> <title>小爱音箱操控面板</title>
<link href="https://fonts.googleapis.com/css?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet"> <link href="https://fonts.googleapis.com/css?family=Material+Icons|Material+Icons+Outlined" rel="stylesheet">
<script src="./jquery-3.7.1.min.js?version=1733933734"></script> <script src="./jquery-3.7.1.min.js?version=1734119463"></script>
<link rel="stylesheet" href="./main.css?version=1733933734"> <link rel="stylesheet" href="./main.css?version=1734119463">
<link rel="icon" href="./favicon.ico"> <link rel="icon" href="./favicon.ico">
<!-- Google tag (gtag.js) --> <!-- Google tag (gtag.js) -->
@ -26,7 +26,7 @@
<body class="index_page"> <body class="index_page">
<div class="player"> <div class="player">
<h1>小爱音箱播放器 <h1>小爱音箱播放器
<a id="version" href="https://xdocs.hanxi.cc/issues/changelog.md" target="_blank">版本 <a id="version" href="https://xdocs.hanxi.cc/issues/changelog.html" target="_blank">版本
1.0.0</a><span id="versionnew" class="new-badge"></span> 1.0.0</a><span id="versionnew" class="new-badge"></span>
</h1> </h1>
@ -196,7 +196,7 @@
Powered by XiaoMusic Powered by XiaoMusic
</div> </div>
<script src="./md.js?version=1733933734"> <script src="./md.js?version=1734119463">
</script> </script>
</body> </body>

View File

@ -5,7 +5,7 @@
<link rel="icon" href="/favicon.ico"> <link rel="icon" href="/favicon.ico">
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<title>M3U to JSON Converter</title> <title>M3U to JSON Converter</title>
<link rel="stylesheet" type="text/css" href="./main.css?version=1733933734"> <link rel="stylesheet" type="text/css" href="./main.css?version=1734119463">
<!-- Google tag (gtag.js) --> <!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script>

View File

@ -5,9 +5,9 @@
<meta name="viewport" content="width=device-width"> <meta name="viewport" content="width=device-width">
<title>小爱音箱操控面板</title> <title>小爱音箱操控面板</title>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<script src="./jquery-3.7.1.min.js?version=1733933734"></script> <script src="./jquery-3.7.1.min.js?version=1734119463"></script>
<script src="./setting.js?version=1733933734"></script> <script src="./setting.js?version=1734119463"></script>
<link rel="stylesheet" type="text/css" href="./main.css?version=1733933734"> <link rel="stylesheet" type="text/css" href="./main.css?version=1734119463">
<!-- Google tag (gtag.js) --> <!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-Z09NC1K7ZW"></script>
@ -31,7 +31,7 @@ var vConsole = new window.VConsole();
</head> </head>
<body> <body>
<h2>小爱音箱设置面板 <h2>小爱音箱设置面板
(<a id="version" href="https://xdocs.hanxi.cc/issues/changelog.md">版本未知</a>) (<a id="version" href="https://xdocs.hanxi.cc/issues/changelog.html">版本未知</a>)
</h2> </h2>
<hr> <hr>

View File

@ -30,7 +30,7 @@ var vConsole = new window.VConsole();
</head> </head>
<body> <body>
<h2>小爱音箱操控面板 <h2>小爱音箱操控面板
(<a id="version" href="https://xdocs.hanxi.cc/issues/changelog.md">版本未知</a>) (<a id="version" href="https://xdocs.hanxi.cc/issues/changelog.html">版本未知</a>)
<span id="versionnew" class="blink"></span> <span id="versionnew" class="blink"></span>
</h2> </h2>
<hr> <hr>

View File

@ -30,7 +30,7 @@ var vConsole = new window.VConsole();
</head> </head>
<body> <body>
<h2>小爱音箱设置面板 <h2>小爱音箱设置面板
(<a id="version" href="https://xdocs.hanxi.cc/issues/changelog.md">版本未知</a>) (<a id="version" href="https://xdocs.hanxi.cc/issues/changelog.html">版本未知</a>)
</h2> </h2>
<hr> <hr>

View File

@ -756,6 +756,7 @@ class XiaoMusic:
analytics_task is not None analytics_task is not None
) # to keep the reference to task, do not remove this ) # to keep the reference to task, do not remove this
async with ClientSession() as session: async with ClientSession() as session:
self.log.debug(f"set session:{session}")
self.session = session self.session = session
await self.init_all_data(session) await self.init_all_data(session)
task = asyncio.create_task(self.poll_latest_ask()) task = asyncio.create_task(self.poll_latest_ask())