diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a88390..6722261 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,13 @@ Project versioning adheres to [Semantic Versioning](http://semver.org/). Commit convention is based on [Conventional Commits](http://conventionalcommits.org). Change log format is based on [Keep a Changelog](http://keepachangelog.com/). +## [1.6.0](https://github.com/lyswhut/lx-music-mobile/compare/v1.5.0...v1.6.0) - 2024-08-24 + +### 新增 + +- 新增 我的列表-歌曲右击菜单-歌曲换源 功能,换源后下次再播放该列表的该歌曲时将优先尝试播放所选源的歌曲,该功能允许你手动指定来源以解决自动换源失败或者换源不准确的问题 +- 新增 Scheme URL 调用支持,调用传参格式与PC端一致,详情看文档说明: https://lyswhut.github.io/lx-music-doc/mobile/scheme-url + ## [1.5.0](https://github.com/lyswhut/lx-music-mobile/compare/v1.4.2...v1.5.0) - 2024-08-03 我们发布了关于 LX Music 项目发展调整与新项目计划的说明, diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 4cb022d..82fd99e 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -31,6 +31,12 @@ + + + + + + diff --git a/android/app/src/main/assets/fonts/icomoon.ttf b/android/app/src/main/assets/fonts/icomoon.ttf index 0630e3f..20a3dd2 100644 Binary files a/android/app/src/main/assets/fonts/icomoon.ttf and b/android/app/src/main/assets/fonts/icomoon.ttf differ diff --git a/publish/changeLog.md b/publish/changeLog.md index c0f5eab..ad9a391 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -1,16 +1,4 @@ -我们发布了关于 LX Music Mod 项目发展调整与新项目计划的说明, -详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912 +### 优化 -### 新增 +- 首次使用的提示窗口可以点击背景或者返回键关闭(#577) -- 新增重复歌曲列表,可以方便移除我的列表中的重复歌曲,此列表会列出目标列表里歌曲名相同的歌曲,可在“我的列表”里的列表名菜单中使用(注:该功能与PC端的区别是可以点击歌曲名多选删除) -- 新增打开当前歌曲详情页菜单,可以在歌曲菜单中使用 - -### 修复 - -- 修复潜在桌面歌词导致的崩溃问题 - -### 其他 - -- 更新 React native 到 v0.73.9 -- 更新 exoplayer 到 v1.4.0 diff --git a/publish/version.json b/publish/version.json index 1d0a8dc..e508158 100644 --- a/publish/version.json +++ b/publish/version.json @@ -1 +1 @@ -{"version":"1.5.0","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n新增\n- 新增重复歌曲列表,可以方便移除我的列表中的重复歌曲,此列表会列出目标列表里歌曲名相同的歌曲,可在“我的列表”里的列表名菜单中使用(注:该功能与PC端的区别是可以点击歌曲名多选删除)\n- 新增打开当前歌曲详情页菜单,可以在歌曲菜单中使用\n\n修复\n- 修复潜在桌面歌词导致的崩溃问题\n\n其他\n- 更新 React native 到 v0.73.9\n- 更新 exoplayer 到 v1.4.0","history":[{"version":"1.4.2","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n修复\n- 修复数据存储管理在移除数据时可能出现移除失败的问题"},{"version":"1.4.1","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n修复\n- 修复播放详情页歌词滚动问题(#518)"},{"version":"1.4.0","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n新增\n- 新增 设置-基本设置-启动后打开播放详情界面 设置,默认关闭(#502 @mingcc7)\n\n修复\n- 修复重复的数据初始化调用\n- 修复导入歌单时可能会导致歌单数据存储异常的问题(#500)\n\n变更\n- 设置-播放设置-优先播放320k音质选项改为“优先播放的音质”,允许选择更高优先播放的音质,如果歌曲及音源支持的话(#487)\n\n其他\n- 更新 React native 到 v0.73.8"},{"version":"1.3.0","desc":"新增\n- 新增棕色主题“泥牛入海”\n- 新增设置-基本设置-总是保留状态栏高度设置,如果在你的设备上出现软件可交互内容与状态栏内容显示重叠的情况,可以启用该设置以始终为系统状态栏保留空间\n- 新增在线自定义源导入功能,允许通过http/https链接导入自定义源\n\n优化\n- 不再丢弃kg源逐行歌词(@helloplhm-qwq)\n- 支持kw源排行榜显示大小(revert @Folltoshe #1460)\n- 优化本地歌曲换源匹配机制\n\n修复\n- 修复mg歌词在某些情况下获取失败的问题\n- 修复mg歌单搜索(@helloplhm-qwq)\n- 修复kg最新评论无法获取的问题(@helloplhm-qwq)\n\n其他\n- 更新 React native 到 v0.73.6"},{"version":"1.2.0","desc":"提前祝大家新年快乐!\n\n新增\n- 新增自定义源(实验性功能),调用方式与PC端一致,但需要注意的是,移动端自定义源的环境与PC端不同,某些环境API不可用,详情看自定义说明文档\n- 新增长按收藏列表名自动跳转列表顶部的功能\n- 新增实验性的添加本地歌曲到我的收藏支持,与PC端类似,在我的收藏的列表菜单中选择歌曲目录,将添加所选目录下的所有歌曲,目前支持mp3/flac/ogg/wav等格式\n- 新增歌曲标签编辑功能,允许编辑本地源且文件存在的歌曲标签信息\n- 新增动态背景,启用后将使用当前播放歌曲封面做APP背景,默认关闭,可到设置-主题设置启用\n- 新增APP全局字体阴影,默认关闭,可到设置-主题设置启用\n- 新增启用竖屏首页横向滚动设置,默认开启(原来的行为),如果你不想要竖屏的首页左右滑动则可以关闭此设置(#397)\n- 新增“使用系统文件选择器”设置,默认启用,启用该选项后,导入备份文件、自定义源等操作将不需要申请存储权限,但可能在某些系统上不可用\n- 播放详情页新增桌面歌词显示/隐藏切换按钮,长按可切换歌词锁定状态\n- 我的列表菜单列表新增“新建列表”菜单\n- 我的列表菜单列表新增“排序歌曲”菜单,可以排序所选列表内的歌曲,排序功能与PC一致\n- 添加 墨·状态栏特别版(版本号包含`sl`)的 release 构建\n\n优化\n- 添加是否忽略电池优化检查,用于提醒用户添加白名单,确保APP后台播放稳定性\n- 在设置界面返回时,不再直接返回桌面,将回到进入设置界面前的界面,在非设置界面返回时才会返回桌面\n- 更新播放栏进度条样式,进度条允许拖动调整进度\n- 优化播放详情页歌曲封面、控制按钮对各尺寸屏幕的适配,修改横屏下的控制栏按钮布局\n- 优化横竖屏界面的展示判断,现在趋于方屏的屏幕按竖屏的方式显示,横屏下的播放栏添加上一曲切歌按钮\n- 添加对wy源某些歌曲有问题的歌词进行修复(#370)\n- 文件选择器允许选择外置存储设备上的路径,添加SD卡、USB存储等外置存储设备的读写支持\n- 图片显示改用第三方的图片组件,支持gif类型的图片显示,尝试解决某些设备上图片过多导致的应用崩溃问题\n- 歌曲评论内容过长时自动折叠,需手动展开\n- 改进本地音乐在线信息的匹配机制\n- 移除播放服务唤醒锁,解决APP在空闲时仍然处于唤醒状态的问题\n- 添加创建同名列表时的二次确认\n\n修复\n- 修复主题背景覆盖不全的问题\n- 修复清理缓存后查看日志时会导致APP崩溃的问题\n- 修复临时列表变更会意外触发同步的问题\n\n变更\n- 在更低版本的安卓上启用跟随系统亮暗主题功能(#317)\n- 由于歌曲评论的图片太大占用较多资源,评论图片不再直接加载,需要点击图片区域后再加载\n- 导入文件(歌单备份、自定义源文件等)默认不再需要设备存储权限,但如果这导致在你的设备上无法选择文件,则可以关闭基本设置的“使用系统文件选择器”设置,回退到原来的文件选择方式\n\n其他\n- 移除所有内置源,由于收到腾讯投诉要求停止提供软件内置的连接到他们平台的在线播放及下载服务,所以从即日(2023年10月18日)起LX本身不再提供上述服务\n- 更新许可协议的排版,使其看起来更加清晰明了,更新数据来源原理说明\n- 更新 React native 到 v0.73.3\n- 核心播放器从 ExoPlayer 迁移到 media3 v1.2.1"},{"version":"1.1.1","desc":"落雪提前祝大家中秋快乐~🥮😘!\n\n优化\n- 通过歌曲菜单添加不喜欢歌曲时需要二次确认防止手抖\n- 减慢歌词详情页歌词滚动速度\n- 更改应用窗口大小获取方式,尝试解决在某些设备上的背景、弹出菜单显示问题\n- 优化同步功能错误消息提示,因同步服务版本不匹配导致的连接失败现在将区分提示\n\n修复\n- 修复横屏状态下的歌词滚动位置计算问题\n- 修复切歌时歌词激活行的重置问题\n- 修复更新翻译歌词、罗马音歌词设置后需重启应用才生效的问题,现在更新设置后会立即生效\n\n其他\n- 更新 React native 到 v0.72.5"},{"version":"1.1.0","desc":"目前本项目的原始发布地址只有 **GitHub** 及 **蓝奏网盘** (在设置-关于有说明),其他渠道均为第三方转载发布,可信度请自行鉴别。\n\n本项目无微信公众号之类的官方账号,也未在小米、华为、vivo等应用商店发布应用,商店内的“LX Music”、“洛雪音乐”相关的应用全部属于假冒应用,谨防被骗。\n\n本软件完全无广告且无引流(如需要加群、关注公众号之类才能使用或者升级)的行为,若你使用过程中遇到广告或者引流的信息,则表明你当前运行的软件是第三方修改版。\n\n若在升级新版本时提示签名不一致,则表明你手机上的旧版本或者将要安装的新版本中有一方是第三方修改版。\n\n若在升级新版本时提示无法降级安装,则表明你使用的是universal(通用)版安装包(安装包大小20M+),尝试使用arm64-v8a版安装包或者到GitHub下载其他版本安装包。\n\n该版本针对一加、OPPO、Pixel无法播放歌曲(提示音频加载出错,5 秒后切换下一首)或者无法完整播放歌曲的问题做了处理,但如果你使用该版本后问题依然存在,临时的解决方案是去设置-播放设置关闭“音频卸载”选项后完全重启应用\n\n不兼容性变更\n该版本修改了同步协议逻辑,同步功能至少需要PC端v2.4.0或移动端v1.1.0或同步服务v2.0.0版本才能连接使用\n\n新增\n- 新增列表设置-是否显示歌曲专辑名,默认关闭\n- 新增列表设置-是否显示歌曲时长,默认开启\n- 新增是否允许通过歌词调整播放进度功能,默认关闭,可到播放详情页右上角设置开启\n- 新增“不喜欢歌曲”功能,可以在我的列表或者在线列表内歌曲的右击菜单使用,还可以去“设置-其他”手动编辑不喜欢规则,注:“上一曲”、“下一曲”功能将跳过符合“不喜欢歌曲”规则的歌曲,但你仍可以手动播放这些歌曲\n- 新增同步功能对“不喜欢歌曲”列表的同步\n- 新增设置-播放设置-是否启用音频卸载,该设置之前默认是启用的,现在添加开关允许将其关闭,若出现播放器问题可尝试将其关闭\n- 新增设置-播放设置-自动清空已播放列表选项,默认关闭\n\n优化\n- 优化歌单列表歌单封面大小计算方式\n- 调整竖屏下的排行榜布局\n- 调整歌曲列表信息布局\n- 调整横屏下的歌曲列表为两列\n- 调整桌面歌词主题配色,增强歌词字体阴影(#276)\n- 优化数据传输逻辑,列表同步指令使用队列机制,保证列表同步操作的顺序\n- 暂停播放时播放详情歌词页不要自动滚动歌词回播放位置\n- 播放详情页歌词添加延迟滚动及着色动画\n- 优化息屏下的逻辑处理,尽量减少电量消耗\n\n修复\n- 修复wy歌单分类切换无效的问题\n- 修复因插入数字类型的ID导致其意外在末尾追加 .0 导致列表数据异常的问题,同时也可能导致同步数据丢失的问题(此问题会影响PC端,要完全修复这个问题还需要同时将PC端、同步服务更新到最新版本)\n- 修复在线列表、我的列表内的歌曲批量操作后,没有自动取消选择的问题\n- 修复tx热门评论昵称被错误切割的问题 (By: @helloplhm-qwq, @Folltoshe)\n- 修复wy源热搜词失效的问题(@Folltoshe)\n- 修复mg歌单搜索歌单播放数量显示问题\n- 修复搜索提示功能失效的问题(@Folltoshe)\n- 修复潜在导致列表数据不同步的问题\n- 修复kg无评论时的加载处理问题\n- 修复顺序播放时播放完列表的最后一首歌播放按钮状态没有更新的问题(#300)\n\n变更\n- 随机模式下,通过点击与播放列表相同的列表切歌时,将不再清空已播放列表,即已播放的歌曲不再重新参与随机,若想恢复之前的行为可以去设置-播放设置启用清空已播放列表选项\n\n其他\n- 更新 React native 到 v0.72.4"},{"version":"1.0.6","desc":"修复\n- 修复wy歌单分类切换无效的问题"},{"version":"1.0.5","desc":"优化\n- 增加kg歌单歌曲flac24bit显示(@helloplhm-qwq)\n- 增加tx源热门评论图片显示(@Folltoshe)\n- 支持wy热门评论翻页\n- 微调排行榜列表宽度及字体大小\n\n修复\n- 修复wy我喜欢列表使用token的方式导入,现在移动端可以使用token的方式导入我喜欢列表的音乐了,这意味着从PC端同步过来的歌单也可以在移动端上更新\n- 修复在线列表的多选问题\n- 修复mg搜索不显示时长的问题(@Folltoshe)\n- 修复mg评论加载失败的问题(@Folltoshe)\n- 修复在Android 5.1下报错的问题\n- 修复对存在错误时间标签的歌词的解析\n- 修复聚合搜索时未显示源名称的问题\n- 修复更改音源的列表歌曲颜色的实时更新问题\n\n其他\n- 更新kg、tx、wy等平台排行榜列表\n- 更新react native到v0.71.7"},{"version":"1.0.4","desc":"新增\n- 隐藏黑色主题背景设置,默认关闭,可以去设置-主题设置更改\n\n优化\n- 添加歌单分类、排行榜激活指示器\n- 调整设置界面竖屏下的UI布局\n\n修复\n- 修复歌单排序列表滚动重置问题\n- 修复搜索提示列表的显示时机问题\n- 就放tx源歌词获取失败的问题\n- 修复将播放速率调整为0.6后,再次打开设置面板将会导致app崩溃的问题\n- 修复播放详情页设置面板当前音量显示格式问题\n\n其他\n- 升级 React Native 到 v0.71.5"},{"version":"1.0.3","desc":"修复\n- 修复歌单详情页内歌曲最多只加载30首的问题"},{"version":"1.0.2","desc":"优化\n- 竖屏下的首页允许滑动切换页面(恢复v0.x.x的切页操作)\n- 优化更新语言、主题设置时的流畅度\n\n其他\n- 启用新架构"},{"version":"1.0.1","desc":"修复\n- 修复在线列表翻页问题"},{"version":"1.0.0","desc":"从v1.0.0起,我们发布了一个独立版的[数据同步服务](https://github.com/lyswhut/lx-music-sync-server#readme),如果你有服务器,可以将其部署到服务器上作为私人多端同步服务使用,详情看该项目说明\n\n由于该版本涉及旧版数据迁移,建议更新前先到设置-备份与恢复备份歌单\n\n不兼容性变更说明\n- 同步功能,该功能不支持与PC端v2.2.0之前的版本使用\n\n新增\n- 新增聚合搜索,注:由于这个方式需要对各个源的结果进行排序,所以需要以“歌曲名 歌手”的顺序输入(例如:突然的自我 伍佰),否则排序后的结果可能不是你想要的\n- 新增歌单搜索功能\n- 新增热门搜索显示,默认关闭,需要到设置-搜索设置开启\n- 新增搜索历史记录,默认关闭,需要到设置-搜索设置开启\n- 启动软件时自动回到上次的界面,例如上次退出软件时在我的收藏,下次启动软件时会自动进入我的收藏\n- 新增PC端所拥有的内置皮肤\n- 新增界面字体大小设置\n- 新增播放器音量大小设置,可以去播放详情页-播放器设置-音量大小更改\n- 新增播放器播放速率设置,可以去播放详情页-播放器设置-播放速率更改\n- 新增播放详情页歌词对齐方式设置,可以去播放详情页-播放器设置-歌词对齐方式更改\n- 新增是否在左侧导航栏显示返回桌面按钮设置,默认关闭,可以去设置-基本设置-是否显示返回桌面按钮开启\n- 新增是否在左侧导航栏显示退出应用按钮设置,默认关闭,可以去设置-基本设置-是否显示退出应用按钮开启\n- 支持wy源flac hires歌曲类型的显示\n- 添加kg源评论图片展示(@helloplhm-qwq)\n- 支持kg源搜索列表、排行榜flac hires歌曲类型的显示(@helloplhm-qwq, @Folltoshe)\n\n优化(界面/交互/功能)\n- 调整了首页的界面布局\n- 优化大屏幕下的字体大小及界面布局显示\n- 支持wy源flac hires歌曲类型的显示\n- 优化列表数据导入导出的性能,现在进行这些操作应该可以一下子完成且不会再冻结UI了\n- 支持kg源搜索列表flac hires歌曲类型的显示(@helloplhm-qwq)\n\n优化(程序)\n- 优化程序启动性能,优化与程序交互的流畅度\n- 重构整个程序,重新梳理了程序逻辑,使其更容易扩展及维护,将大部分代码从JavaScript迁移到TypeScript\n- 重写配置管理、列表管理功能,使其与PC端同步,更容易复用PC端的代码\n\n修复\n- 修复使用酷狗码无法打开某些类型的歌单的问题\n- 修复tx源某些歌单无法打开的问题\n\n变更\n- 原来播放详情页的歌词字体大小设置改为播放器设置\n\n其他\n- 升级React Native到v0.71.4"},{"version":"0.15.5","desc":"修复\n- 修复导入PC端v2列表文件歌曲信息转换丢失的问题\n- 修复上面问题导致的tx源评论加载失败的问题"},{"version":"0.15.4","desc":"修复\n- 修复播放详情页歌词翻译、罗马音歌词匹配问题"},{"version":"0.15.3","desc":"修复\n- 修复鸿蒙系统下的崩溃问题"},{"version":"0.15.2","desc":"修复\n- 修复潜在的歌词解析导致应用崩溃问题"},{"version":"0.15.1","desc":"修复\n- 修复某些歌曲的桌面歌词翻译或罗马音没有显示的问题\n- 修复kg某些歌单链接无法打开的问题"},{"version":"0.15.0","desc":"新增\n- 支持导入PC端v2版本的列表数据\n- 添加kg源罗马音歌词的支持\n- 支持打开波点音乐歌单(需在酷我源打开)\n\n修复\n- 支持单行多时间标签歌词解析,修复某些歌词会出现时间标签的问题\n- 修复某些类型的kg歌单无法导入的问题\n- 修复异常歌单、歌曲数据导致的崩溃问题(#157)\n\n其他\n- 升级react-native到 v0.68.5"},{"version":"0.14.3","desc":"修复\n- 修复因音源的域名到期导致的音源失效的问题"},{"version":"0.14.2","desc":"优化\n- 为tx、kw源添加 Flac 24bit 音质显示,注:由于之前没有记录此音质,所以之前收藏的歌曲信息中不包含它\n\n修复\n- 修复排行榜在旋转屏幕后,选中的榜单被重置回第一个的问题\n- 修复企鹅音乐搜索失效的问题"},{"version":"0.14.1","desc":"优化\n- 添加“弹出键盘时自动隐藏播放栏”设置,默认启用(原来的行为),若在某些设备上播放栏无法显示时则可以关闭此设置\n- 优化切歌时桌面歌词的切换动画显示\n- 暂停播放时自动隐藏桌面歌词\n- 在我的列表-列表名左侧添加了一个图标,以表示此处可以点击切换列表\n\n修复\n- 修复tx源搜索失效的问题"},{"version":"0.14.0","desc":"新增\n- 新增设置-桌面歌词-单行歌词设置,默认关闭,启用后只显示一行歌词,超出窗口宽度自动滚动到末尾\n- 新增设置-桌面歌词-显示歌词切换动画,默认启用,如果你觉得切换动画影响视觉可以将其关闭\n- 新增设置-基本设置-启动后自动播放音乐,默认关闭\n\n优化\n- 支持mg源的歌词翻译(之前添加的歌曲需要去设置清空缓存才会刷新歌词)\n- 添加歌曲列表更新操作的二次确认\n- 添加导入文件错误时的指引提示\n\n修复\n- 修复桌面歌词转繁体设置不立即生效的问题\n- 修复搜索、歌单、排行榜列表可能在切换新内容后出现上次列表内容的残留问题(#118)\n- 修复在某些系统上播放音乐会导致应用崩溃的问题(#129)\n- 修复停止播放后的播放器状态清理问题\n\n文档\n移动版文档已迁移到:"},{"version":"0.13.0","desc":"从这个版本起,你可以将桌面歌词拖动到状态栏上,然后将歌词字体调小后配合新增的歌词窗口宽度、行数设置,模拟出类似状态栏歌词的效果。\n\n如果你的设备装有Xposed框架,可以使用状态栏版(详情看GitHub置顶issue),它通过调用第三方Xposed模块【墨•状态栏歌词】的API支持来状态栏歌词(感谢@ftevxk)。\n但考虑到要依赖第三方应用,并且是Xposed模块,预计用的人会比较少,所以暂不考虑将此特性包含在正式版中。\n\n新增\n- 新增设置-播放设置-显示歌词罗马音,默认关闭,注:目前只有网易源能获取到罗马音歌词(得益于 Binaryify/NeteaseCloudMusicApi/pull/1523),如果你知道其他源的歌词罗马音获取方式,欢迎PR或开issue交流!\n- 新增黑、白桌面歌词主题\n- 桌面歌词新增窗口宽度百分比、最大歌词行数调整设置,允许将歌词拖动到刘海屏状态栏上。提示:有了这组功能你就可以模拟状态栏歌词了\n- 新增设置-播放设置-将播放的歌词转繁体功能(#114)\n\n优化\n- 允许桌面歌词拖动到状态栏上(感谢@ftevxk)\n- 允许选择更新日志弹窗里的文本内容\n- 桌面歌词的最大字体大小允许调整到500(#107)\n\n修复\n- 修复潜在的桌面歌词导致应用崩溃问题\n\n文档\n- 将歌曲添加“稍后播放”后,它们会被放在一个优先级最高的特殊队列中,点击“下一曲”时会消耗该队列中的歌曲,并且无法通过“上一曲”功能播放该队列的上一首歌曲\n- 在切歌时若不是通过“上一曲”、“下一曲”功能切歌(例如直接点击“排行榜列表”、“我的列表”中的歌曲切歌),“稍后播放”队列将会被清空\n\n其他\n- 升级React native到v0.68.2"},{"version":"0.12.0","desc":"新增\n- 为搜索、歌单、排行榜的歌曲菜单添加分享“分享歌曲”按钮\n- 新增设置-基本设置-分享设置,它用于控制歌曲菜单的分享行为,默认使用系统分享\n- 新增是否在通知栏显示歌曲图片设置,默认开启(原来的行为)\n- 新增黑色皮肤“黑灯瞎火”\n- 新增设置-基本设置-主题颜色-跟随系统亮、暗模式切换主题设置,注:此设置需要android 10或ios 13及以上的版本才支持\n\n优化\n- 现在即使切歌模式处于单曲循环、顺序播放、禁用时,手动切歌将会按照列表循环的规则处理(#69)\n- 添加定时退出计时结束后的提示\n\n修复\n- 修复wy源搜索某些歌曲时第一页之后的歌曲无法加载的问题\n- 每次启动时过滤无效的歌曲\n- 修复换源失败时的处理问题\n- 修复非循环模式下播放结束后的状态显示问题及无法重新播放的问题(#104)\n- 修复定时退出可能导致崩溃的问题\n- 修复播放详情页歌词界面在把应用切到后台再切回来会导致屏幕常亮失效的问题\n\n变更\n- 歌曲菜单的“复制歌曲名”改为“分享歌曲”,点击后可以选择第三方应用分享歌曲详情页链接\n- 已存在目录列表的歌曲再次添加时将不会变成移除\n\n其他\n- 升级react-native到 v0.68.1"},{"version":"0.11.1","desc":"修复\n- 修复播放栏在某些设备不显示的问题"},{"version":"0.11.0","desc":"新增\n- 新增“点击列表里的歌曲时自动切换到当前列表播放”设置,此功能仅对歌单、排行榜有效,默认关闭\n- 添加试听接口,这是测试接口、临时接口都不可用时最后的选择...\n\n优化\n- 过滤tx源某些不支持播放的歌曲,解决播放此类内容会导致意外的问题\n- 备份与恢复兼容单个列表文件的导入\n- 添加通知权限的检查提醒,点击“不再提示”后,将会在设置-清空缓存后才会恢复提示\n\n修复\n- 修复Android 12下的桌面歌词锁定后还是无法在应用外点击歌词后面下面的内容的问题\n\n其他\n- 升级React native到v0.67.4"},{"version":"0.10.3","desc":"优化\n- 优化kw源英文与翻译歌词的匹配\n\n修复\n- 修复桌面歌词播放器会导致应用崩溃的问题"},{"version":"0.10.2","desc":"修复\n- 修复某些系统下的虚拟导航栏会导致播放栏隐藏的问题(react-native v0.67.x导致的)\n\n其他\n- 降级react-native到 v0.66.4"},{"version":"0.10.1","desc":"优化\n- 优化通知栏的更新机制,尝试修复魅族的通知栏图片不显示的问题\n- 我的列表-列表名的右击菜单更新已收藏的在线列表时,将始终重新加载,不再使用缓存,解决在原平台更新歌单后,在LX点击更新可能看到的还是在原平台更新前的歌单的问题\n\n修复\n- 修复tx源无搜索结果的问题\n- 修复小米等设备下面的手势提示线背景颜色为黑色的问题\n\n其他\n- 升级React native到v0.67.1"},{"version":"0.10.0","desc":"新增\n- 同步功能新增对列表位置调整的支持(需v1.15.3以上的PC端版本才支持)\n- 新增播放详情页歌词字体大小调整设置,可在详情页右上角的按钮进行调整\n- 新增同步服务地址历史列表功能\n- 横屏播放详情页新增评论入口\n- 我的列表歌曲三个点的菜单新增复制歌曲名\n\n优化\n- 修改对播放模块的调用,杜绝应用显示正在播放的歌曲与实际播放歌曲不一致的问题(这是播放模块歌曲队列与应用内歌曲队列在某些情况下出现不一致时导致的)\n- 支持PC端同步功能添加对列表顺序调整的控制,确保手动调整位置后的列表与不同的电脑同步时,列表位置不会被还原\n- 调整横屏下的导航栏、播放详情页布局,提高屏幕空间利用率并使其更易操作\n- 调整歌单类别、我的列表弹出层界面\n- 播放栏移除上一曲按钮,将多出来的空间加给播放、下一曲按钮\n- 现在点击、长按播放栏歌曲标题也可以进入详情页、定位当前播放歌曲了\n\n修复\n- 修复kw源某些歌曲的歌词提取异常的问题\n\n其他\n- 升级react-native到v0.66.4"},{"version":"0.9.2","desc":"优化\n- 添加应用初始化出错时的错误捕获输出\n- 优化歌词自动换源机制\n\n修复\n- 修复因kw源歌词接口停用导致该源歌词获取失败的问题\n\n其他\n- 更新react-native到v0.66.3\n- 更新Exoplayer到v2.16.0"},{"version":"0.9.1","desc":"修复\n- 修复删除列表时会导致应用崩溃的问题\n- 修复原生代码导致的错误日志记录"},{"version":"0.9.0","desc":"新增\n- 新增歌曲评论显示,可在播放详情页进入。(与PC端一样,目前仅支持显示部分评论)\n- 新增播放、收藏整个排行榜功能,可长按排行榜名字后在弹出的菜单中操作\n- 新增单个列表导入/导出功能,可以方便分享歌曲列表,可在点击“我的列表”里的列表名右侧的按钮后弹出的菜单中使用\n- 新增删除列表前的确认弹窗,防止误删列表\n\n优化\n- 添加更多同步功能的日志记录\n\n修复\n- 修复kg源的歌单链接无法打开的问题\n- 修复同一首歌的URL、歌词等同时需要换源时的处理问题\n- 修复在排行榜页面无法时无法通过点击我的列表图标切换到我的列表的问题\n\n其他\n- 更新react-native到v0.66.1"},{"version":"0.8.3","desc":"修复\n- 修复我的列表搜索无法搜索小括号、中括号等字符,并会导致应用崩溃的问题\n- 修复使用同步功能同步完成后,列表没有被保存,导致下次再连接同步时被同步新增的歌曲被移除的问题(此问题由v0.8.2的存储切片改造引入的)\n\n其他\n- 更新React native到v0.66.0"},{"version":"0.8.2","desc":"优化\n- 缓冲进度条颜色\n- 优化数据存储,若需要存储的数据过大时会将数据切片后存储,现在存储大列表不会导致列表丢失了\n\n修复\n- 修复随机播放模式下在同列表切其他歌曲不会清空已播放列表的问题\n- 修复歌曲播放出错时的URL刷新问题"},{"version":"0.8.1","desc":"优化\n- 添加更多错误信息的记录\n\n修复\n- 修复潜在的获取缓存大小报错问题\n- 修复mg排行榜无法加载的问题\n- 修复列表导出失败时的提示信息缺失翻译的问题\n- 修复 Android 11 导入列表时,不显示备份文件的问题\n- 修复其他应用播放声音时,软件临时暂停播放后通知栏的状态仍显示正在播放的问题"},{"version":"0.8.0","desc":"新增\n- 添加对通知栏歌曲进度条的支持\n\n修复\n- 修复某些情况下桌面歌词会导致APP崩溃的问题\n- 修复从电脑浏览器复制的企鹅歌单链接无法打开的问题\n\n其他\n- 升级React native到v0.65.1\n- 升级播放模块`react-native-track-player`到v2版本,优化通知栏歌曲信息显示逻辑"},{"version":"0.7.1","desc":"修复\n- 修复无法从歌单界面打开网易歌单详情的问题"},{"version":"0.7.0","desc":"如果你喜欢并经常使用洛雪音乐,并想要第一时间尝鲜洛雪的新功能,可以加入测试企鹅群768786588,\n注意:测试版的功可能会不稳定,打算潜水的勿加。\n\n新增\n- 新增横屏状态下的播放详情页\n- 新增橙、粉、灰主题色\n- 新增桌面歌词的字体大小、透明度设置\n- 新增我的列表内歌曲搜索定位功能\n\n调整\n- 为了与搜索、歌单操作栏位置统一,现将我的列表-收藏的列表操作栏由底部挪到顶部\n\n修复\n- 修复tx源的歌词无法显示的问题\n- 修复随机播放模式下使用稍后播放功能会导致歌曲单曲循环的问题\n- 修复某些情况下桌面歌词会导致APP崩溃的问题"},{"version":"0.6.2","desc":"优化\n- 优化设置界面的输入框输入机制,现在只要键盘收起即可自动保存输入的内容\n- 添加在启用桌面歌词时对悬浮层权限的检查,这应该可以修复某些设备上点击启用桌面歌词时不显示无权限弹窗也不显示桌面歌词的情况\n\n变更\n- 不再自动聚焦定时退出、调整位置弹窗内的输入框,这应该可以修复某些设备无法在这两个地方弹出键盘的问题\n\n修复\n- 修复启用桌面歌词时的权限提示弹窗会导致应用报错的问题\n- 修复我的列表无法更新从收藏的排行榜的问题"},{"version":"0.6.1","desc":"修复\n- 修复随机播放下无法切歌的问题"},{"version":"0.6.0","desc":"新增\n- 新增局域网同步功能(实验性,首次使用前建议先备份一次列表),此功能需要配合PC端使用,移动端与PC端处在同一个局域网(路由器的网络)下时,可以多端实时同步歌曲列表,使用问题请看\"常见问题\"。\n- 新增桌面歌词\n\n优化\n- 优化退出应用的机制,现在在需要退出应用的场景将会完全退出应用\n\n修复\n- 修复某些情况下出现恢复播放信息失败的问题\n- 修复删除列表中正在播放的歌曲时会自动跳到第一首的问题\n- 修复因其他应用需要播放声音而暂停播放音乐时歌词不会暂停播放导致恢复播放后歌词与播放进度不一致的问题"},{"version":"0.5.3","desc":"修复\n- 修复歌曲缓存失效的问题"},{"version":"0.5.2","desc":"优化\n- 优化mg源打开歌单的链接兼容\n\n修复\n- 修复单曲循环播放时循环次数为偶数时歌词不重新播放的问题\n- 添加针对进入歌词界面时某些情况下会弹出`scrollToIndex out of range: requested index ...`崩溃错误弹窗的处理\n- 修复导入kg歌单最多只能加载100、500首歌曲的问题。注:现在可以加载1000+首歌曲的歌单,但出于未知原因会导致部分歌曲无法加载(可能是无版权导致的),目前酷狗码仍然最多只能加载500首歌"},{"version":"0.5.1","desc":"优化\n- 添加切换播放模式时的文字提示\n- 优化单首歌曲的添加弹窗操作,当选择当前歌曲已存在目标列表时(列表名灰色显示),会将当前歌曲从目标列表移除,否则将当前歌曲添加到目标列表,添加在弹窗内对歌曲的添加、移动、删除操作时的文字提示\n\n修复\n- 修复mg源搜索失效的问题\n\n移除\n- 因wy源的歌单列表已没有“最新”排序的选项,所以现跟随移除wy源歌单列表按“最新”排序的按钮"},{"version":"0.5.0","desc":"新增\n- 新增“其他应用播放声音时,自动暂停播放”设置,默认开启\n- 新增“添加歌曲到列表时的位置”设置,可选项为列表的“顶部”与“底部”\n- 新增“显示歌词翻译设置”,默认关闭\n\n变更\n- 添加歌曲到列表时从原来的底部改为顶部,若想要恢复原来的行为则可以去更改“添加歌曲到列表时的位置”设置项"},{"version":"0.4.2","desc":"优化\n- 优化wy源歌单导入匹配,现在存在链接外的其他字符也可以打开歌单了\n\n修复\n- 修复定时播放开启歌曲播放完毕再停止时,若倒计时已结束会导致无法播放歌曲的问题\n- 修复打开歌单失败时会导致应用崩溃的问题\n- 修复打开kw歌单失败时会无限重试的问题\n- 尝试修复弹出菜单、列表位置不正确的问题\n- 修复打开kg源歌单链接失败的问题\n- 尝试修复有时候进入播放详情歌词界面时会导致应用UI被冻结的问题\n- 修复有时候进入播放详情页时歌曲封面大小显示不正确的问题"},{"version":"0.4.1","desc":"修复\n- 修复定时播放开启歌曲播放完毕再停止时,若倒计时已结束会导致无法播放歌曲的问题"},{"version":"0.4.0","desc":"新增\n- 新增我的列表中已收藏的在线列表的更新功能。注意:这将会覆盖本地的目标列表,歌曲将被替换成最新的在线列表(与PC端的同步一样)\n- 歌曲添加、移动弹窗新增创建新列表功能\n- 新增定时退出播放\n\n优化\n- 优化应用布局对手机系统字体大小的适配\n- 调整歌单详情页,现在在歌单详情页按手机上的返回键将会返回歌单列表,而不是直接退出APP\n- 优化进入播放详情页、歌单详情页的动画效果\n\n修复\n- 尝试修复某些情况下进播放详情歌词界面时报错的问题"},{"version":"0.3.3","desc":"修复\n- 尝试修复软件启动时恢复上一次播放的歌曲可能导致软件崩溃的问题\n- 尝试修复播放详情页歌词导致UI冻结的问题\n- 修复企鹅音乐搜索歌曲没有结果的问题\n\n其他\n- 整合日志记录\n- 更新 exoPlayer 到 2.14.0"},{"version":"0.3.2","desc":"修复\n- 修复手机分享的wy歌单、某些tx、kg歌单无法打开的问题\n- 修复打开空的歌单时,点击播放全部会导致应用崩溃的问题\n- 修复企鹅音乐搜索歌曲没有结果的问题"},{"version":"0.3.1","desc":"修复\n- 修复进入播放详情歌词界面后的屏幕常亮不会被取消的问题"},{"version":"0.3.0","desc":"新增\n- 新增通过歌单链接打开歌单的功能\n\n优化\n- 切换到播放详情歌词界面时将阻止屏幕息屏\n\n修复\n- 修复一个导致崩溃日志写入文件前会导致APP崩溃的莫名其妙问题"},{"version":"0.2.0","desc":"新增\n- 新增竖屏下的播放详情页"},{"version":"0.1.7","desc":"优化\n- 修改歌单导入流程,添加对歌单导入错误的捕获\n\n修复\n- 修复在系统暗主题下,应用内文字输入框的字体会变成白色的问题"},{"version":"0.1.6","desc":"优化\n- 改进软件错误处理,添加对软件崩溃的错误日志记录,可在设置-其他查看错误日志历史。注:清理缓存时日志也将会被清理\n\n修复\n- 修复显示版本更新弹窗会导致应用崩溃的问题"},{"version":"0.1.5","desc":"修复\n- 修复修复协议弹窗可以被绕过的问题\n- 修复从在线列表使用稍后播放功能播放歌曲时,歌曲封面不显示的问题\n- 修复正在播放“稍后播放”的歌曲时,对“稍后播放”前播放的列表进行添加、删除操作会导致切歌的问题"},{"version":"0.1.4","desc":"修复\n- 修复获取在线列表时快速切换会导致APP闪退的问题"},{"version":"0.1.3","desc":"优化\n- 添加导入提示,兼容从PC端“全部数据”类型的备份文件中导入歌单\n- 添加全局异常错误捕获,现在一般情况下APP崩溃前会弹窗提示错误信息。"},{"version":"0.1.2","desc":"优化\n- 在搜索、歌单、排行榜列表多选音乐后点菜单中的播放将会把已选的歌曲添加到试听列表播放\n\n修复\n- 修复播放模块没拉取最新代码导致播放器存在无法从通知栏停止等问题"},{"version":"0.1.1","desc":"lx-music移动端v0.1.1版本发布 🎊 🎉"}]} +{"version":"1.6.0","desc":"新增\n- 新增 我的列表-歌曲右击菜单-歌曲换源 功能,换源后下次再播放该列表的该歌曲时将优先尝试播放所选源的歌曲,该功能允许你手动指定来源以解决自动换源失败或者换源不准确的问题\n- 新增 Scheme URL 调用支持,调用传参格式与PC端一致,详情看文档说明: https://lyswhut.github.io/lx-music-doc/mobile/scheme-url","history":[{"version":"1.5.0","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n新增\n- 新增重复歌曲列表,可以方便移除我的列表中的重复歌曲,此列表会列出目标列表里歌曲名相同的歌曲,可在“我的列表”里的列表名菜单中使用(注:该功能与PC端的区别是可以点击歌曲名多选删除)\n- 新增打开当前歌曲详情页菜单,可以在歌曲菜单中使用\n\n修复\n- 修复潜在桌面歌词导致的崩溃问题\n\n其他\n- 更新 React native 到 v0.73.9\n- 更新 exoplayer 到 v1.4.0"},{"version":"1.4.2","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n修复\n- 修复数据存储管理在移除数据时可能出现移除失败的问题"},{"version":"1.4.1","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n修复\n- 修复播放详情页歌词滚动问题(#518)"},{"version":"1.4.0","desc":"我们发布了关于 LX Music 项目发展调整与新项目计划的说明,\n详情看: https://github.com/lyswhut/lx-music-desktop/issues/1912\n\n新增\n- 新增 设置-基本设置-启动后打开播放详情界面 设置,默认关闭(#502 @mingcc7)\n\n修复\n- 修复重复的数据初始化调用\n- 修复导入歌单时可能会导致歌单数据存储异常的问题(#500)\n\n变更\n- 设置-播放设置-优先播放320k音质选项改为“优先播放的音质”,允许选择更高优先播放的音质,如果歌曲及音源支持的话(#487)\n\n其他\n- 更新 React native 到 v0.73.8"},{"version":"1.3.0","desc":"新增\n- 新增棕色主题“泥牛入海”\n- 新增设置-基本设置-总是保留状态栏高度设置,如果在你的设备上出现软件可交互内容与状态栏内容显示重叠的情况,可以启用该设置以始终为系统状态栏保留空间\n- 新增在线自定义源导入功能,允许通过http/https链接导入自定义源\n\n优化\n- 不再丢弃kg源逐行歌词(@helloplhm-qwq)\n- 支持kw源排行榜显示大小(revert @Folltoshe #1460)\n- 优化本地歌曲换源匹配机制\n\n修复\n- 修复mg歌词在某些情况下获取失败的问题\n- 修复mg歌单搜索(@helloplhm-qwq)\n- 修复kg最新评论无法获取的问题(@helloplhm-qwq)\n\n其他\n- 更新 React native 到 v0.73.6"},{"version":"1.2.0","desc":"提前祝大家新年快乐!\n\n新增\n- 新增自定义源(实验性功能),调用方式与PC端一致,但需要注意的是,移动端自定义源的环境与PC端不同,某些环境API不可用,详情看自定义说明文档\n- 新增长按收藏列表名自动跳转列表顶部的功能\n- 新增实验性的添加本地歌曲到我的收藏支持,与PC端类似,在我的收藏的列表菜单中选择歌曲目录,将添加所选目录下的所有歌曲,目前支持mp3/flac/ogg/wav等格式\n- 新增歌曲标签编辑功能,允许编辑本地源且文件存在的歌曲标签信息\n- 新增动态背景,启用后将使用当前播放歌曲封面做APP背景,默认关闭,可到设置-主题设置启用\n- 新增APP全局字体阴影,默认关闭,可到设置-主题设置启用\n- 新增启用竖屏首页横向滚动设置,默认开启(原来的行为),如果你不想要竖屏的首页左右滑动则可以关闭此设置(#397)\n- 新增“使用系统文件选择器”设置,默认启用,启用该选项后,导入备份文件、自定义源等操作将不需要申请存储权限,但可能在某些系统上不可用\n- 播放详情页新增桌面歌词显示/隐藏切换按钮,长按可切换歌词锁定状态\n- 我的列表菜单列表新增“新建列表”菜单\n- 我的列表菜单列表新增“排序歌曲”菜单,可以排序所选列表内的歌曲,排序功能与PC一致\n- 添加 墨·状态栏特别版(版本号包含`sl`)的 release 构建\n\n优化\n- 添加是否忽略电池优化检查,用于提醒用户添加白名单,确保APP后台播放稳定性\n- 在设置界面返回时,不再直接返回桌面,将回到进入设置界面前的界面,在非设置界面返回时才会返回桌面\n- 更新播放栏进度条样式,进度条允许拖动调整进度\n- 优化播放详情页歌曲封面、控制按钮对各尺寸屏幕的适配,修改横屏下的控制栏按钮布局\n- 优化横竖屏界面的展示判断,现在趋于方屏的屏幕按竖屏的方式显示,横屏下的播放栏添加上一曲切歌按钮\n- 添加对wy源某些歌曲有问题的歌词进行修复(#370)\n- 文件选择器允许选择外置存储设备上的路径,添加SD卡、USB存储等外置存储设备的读写支持\n- 图片显示改用第三方的图片组件,支持gif类型的图片显示,尝试解决某些设备上图片过多导致的应用崩溃问题\n- 歌曲评论内容过长时自动折叠,需手动展开\n- 改进本地音乐在线信息的匹配机制\n- 移除播放服务唤醒锁,解决APP在空闲时仍然处于唤醒状态的问题\n- 添加创建同名列表时的二次确认\n\n修复\n- 修复主题背景覆盖不全的问题\n- 修复清理缓存后查看日志时会导致APP崩溃的问题\n- 修复临时列表变更会意外触发同步的问题\n\n变更\n- 在更低版本的安卓上启用跟随系统亮暗主题功能(#317)\n- 由于歌曲评论的图片太大占用较多资源,评论图片不再直接加载,需要点击图片区域后再加载\n- 导入文件(歌单备份、自定义源文件等)默认不再需要设备存储权限,但如果这导致在你的设备上无法选择文件,则可以关闭基本设置的“使用系统文件选择器”设置,回退到原来的文件选择方式\n\n其他\n- 移除所有内置源,由于收到腾讯投诉要求停止提供软件内置的连接到他们平台的在线播放及下载服务,所以从即日(2023年10月18日)起LX本身不再提供上述服务\n- 更新许可协议的排版,使其看起来更加清晰明了,更新数据来源原理说明\n- 更新 React native 到 v0.73.3\n- 核心播放器从 ExoPlayer 迁移到 media3 v1.2.1"},{"version":"1.1.1","desc":"落雪提前祝大家中秋快乐~🥮😘!\n\n优化\n- 通过歌曲菜单添加不喜欢歌曲时需要二次确认防止手抖\n- 减慢歌词详情页歌词滚动速度\n- 更改应用窗口大小获取方式,尝试解决在某些设备上的背景、弹出菜单显示问题\n- 优化同步功能错误消息提示,因同步服务版本不匹配导致的连接失败现在将区分提示\n\n修复\n- 修复横屏状态下的歌词滚动位置计算问题\n- 修复切歌时歌词激活行的重置问题\n- 修复更新翻译歌词、罗马音歌词设置后需重启应用才生效的问题,现在更新设置后会立即生效\n\n其他\n- 更新 React native 到 v0.72.5"},{"version":"1.1.0","desc":"目前本项目的原始发布地址只有 **GitHub** 及 **蓝奏网盘** (在设置-关于有说明),其他渠道均为第三方转载发布,可信度请自行鉴别。\n\n本项目无微信公众号之类的官方账号,也未在小米、华为、vivo等应用商店发布应用,商店内的“LX Music”、“洛雪音乐”相关的应用全部属于假冒应用,谨防被骗。\n\n本软件完全无广告且无引流(如需要加群、关注公众号之类才能使用或者升级)的行为,若你使用过程中遇到广告或者引流的信息,则表明你当前运行的软件是第三方修改版。\n\n若在升级新版本时提示签名不一致,则表明你手机上的旧版本或者将要安装的新版本中有一方是第三方修改版。\n\n若在升级新版本时提示无法降级安装,则表明你使用的是universal(通用)版安装包(安装包大小20M+),尝试使用arm64-v8a版安装包或者到GitHub下载其他版本安装包。\n\n该版本针对一加、OPPO、Pixel无法播放歌曲(提示音频加载出错,5 秒后切换下一首)或者无法完整播放歌曲的问题做了处理,但如果你使用该版本后问题依然存在,临时的解决方案是去设置-播放设置关闭“音频卸载”选项后完全重启应用\n\n不兼容性变更\n该版本修改了同步协议逻辑,同步功能至少需要PC端v2.4.0或移动端v1.1.0或同步服务v2.0.0版本才能连接使用\n\n新增\n- 新增列表设置-是否显示歌曲专辑名,默认关闭\n- 新增列表设置-是否显示歌曲时长,默认开启\n- 新增是否允许通过歌词调整播放进度功能,默认关闭,可到播放详情页右上角设置开启\n- 新增“不喜欢歌曲”功能,可以在我的列表或者在线列表内歌曲的右击菜单使用,还可以去“设置-其他”手动编辑不喜欢规则,注:“上一曲”、“下一曲”功能将跳过符合“不喜欢歌曲”规则的歌曲,但你仍可以手动播放这些歌曲\n- 新增同步功能对“不喜欢歌曲”列表的同步\n- 新增设置-播放设置-是否启用音频卸载,该设置之前默认是启用的,现在添加开关允许将其关闭,若出现播放器问题可尝试将其关闭\n- 新增设置-播放设置-自动清空已播放列表选项,默认关闭\n\n优化\n- 优化歌单列表歌单封面大小计算方式\n- 调整竖屏下的排行榜布局\n- 调整歌曲列表信息布局\n- 调整横屏下的歌曲列表为两列\n- 调整桌面歌词主题配色,增强歌词字体阴影(#276)\n- 优化数据传输逻辑,列表同步指令使用队列机制,保证列表同步操作的顺序\n- 暂停播放时播放详情歌词页不要自动滚动歌词回播放位置\n- 播放详情页歌词添加延迟滚动及着色动画\n- 优化息屏下的逻辑处理,尽量减少电量消耗\n\n修复\n- 修复wy歌单分类切换无效的问题\n- 修复因插入数字类型的ID导致其意外在末尾追加 .0 导致列表数据异常的问题,同时也可能导致同步数据丢失的问题(此问题会影响PC端,要完全修复这个问题还需要同时将PC端、同步服务更新到最新版本)\n- 修复在线列表、我的列表内的歌曲批量操作后,没有自动取消选择的问题\n- 修复tx热门评论昵称被错误切割的问题 (By: @helloplhm-qwq, @Folltoshe)\n- 修复wy源热搜词失效的问题(@Folltoshe)\n- 修复mg歌单搜索歌单播放数量显示问题\n- 修复搜索提示功能失效的问题(@Folltoshe)\n- 修复潜在导致列表数据不同步的问题\n- 修复kg无评论时的加载处理问题\n- 修复顺序播放时播放完列表的最后一首歌播放按钮状态没有更新的问题(#300)\n\n变更\n- 随机模式下,通过点击与播放列表相同的列表切歌时,将不再清空已播放列表,即已播放的歌曲不再重新参与随机,若想恢复之前的行为可以去设置-播放设置启用清空已播放列表选项\n\n其他\n- 更新 React native 到 v0.72.4"},{"version":"1.0.6","desc":"修复\n- 修复wy歌单分类切换无效的问题"},{"version":"1.0.5","desc":"优化\n- 增加kg歌单歌曲flac24bit显示(@helloplhm-qwq)\n- 增加tx源热门评论图片显示(@Folltoshe)\n- 支持wy热门评论翻页\n- 微调排行榜列表宽度及字体大小\n\n修复\n- 修复wy我喜欢列表使用token的方式导入,现在移动端可以使用token的方式导入我喜欢列表的音乐了,这意味着从PC端同步过来的歌单也可以在移动端上更新\n- 修复在线列表的多选问题\n- 修复mg搜索不显示时长的问题(@Folltoshe)\n- 修复mg评论加载失败的问题(@Folltoshe)\n- 修复在Android 5.1下报错的问题\n- 修复对存在错误时间标签的歌词的解析\n- 修复聚合搜索时未显示源名称的问题\n- 修复更改音源的列表歌曲颜色的实时更新问题\n\n其他\n- 更新kg、tx、wy等平台排行榜列表\n- 更新react native到v0.71.7"},{"version":"1.0.4","desc":"新增\n- 隐藏黑色主题背景设置,默认关闭,可以去设置-主题设置更改\n\n优化\n- 添加歌单分类、排行榜激活指示器\n- 调整设置界面竖屏下的UI布局\n\n修复\n- 修复歌单排序列表滚动重置问题\n- 修复搜索提示列表的显示时机问题\n- 就放tx源歌词获取失败的问题\n- 修复将播放速率调整为0.6后,再次打开设置面板将会导致app崩溃的问题\n- 修复播放详情页设置面板当前音量显示格式问题\n\n其他\n- 升级 React Native 到 v0.71.5"},{"version":"1.0.3","desc":"修复\n- 修复歌单详情页内歌曲最多只加载30首的问题"},{"version":"1.0.2","desc":"优化\n- 竖屏下的首页允许滑动切换页面(恢复v0.x.x的切页操作)\n- 优化更新语言、主题设置时的流畅度\n\n其他\n- 启用新架构"},{"version":"1.0.1","desc":"修复\n- 修复在线列表翻页问题"},{"version":"1.0.0","desc":"从v1.0.0起,我们发布了一个独立版的[数据同步服务](https://github.com/lyswhut/lx-music-sync-server#readme),如果你有服务器,可以将其部署到服务器上作为私人多端同步服务使用,详情看该项目说明\n\n由于该版本涉及旧版数据迁移,建议更新前先到设置-备份与恢复备份歌单\n\n不兼容性变更说明\n- 同步功能,该功能不支持与PC端v2.2.0之前的版本使用\n\n新增\n- 新增聚合搜索,注:由于这个方式需要对各个源的结果进行排序,所以需要以“歌曲名 歌手”的顺序输入(例如:突然的自我 伍佰),否则排序后的结果可能不是你想要的\n- 新增歌单搜索功能\n- 新增热门搜索显示,默认关闭,需要到设置-搜索设置开启\n- 新增搜索历史记录,默认关闭,需要到设置-搜索设置开启\n- 启动软件时自动回到上次的界面,例如上次退出软件时在我的收藏,下次启动软件时会自动进入我的收藏\n- 新增PC端所拥有的内置皮肤\n- 新增界面字体大小设置\n- 新增播放器音量大小设置,可以去播放详情页-播放器设置-音量大小更改\n- 新增播放器播放速率设置,可以去播放详情页-播放器设置-播放速率更改\n- 新增播放详情页歌词对齐方式设置,可以去播放详情页-播放器设置-歌词对齐方式更改\n- 新增是否在左侧导航栏显示返回桌面按钮设置,默认关闭,可以去设置-基本设置-是否显示返回桌面按钮开启\n- 新增是否在左侧导航栏显示退出应用按钮设置,默认关闭,可以去设置-基本设置-是否显示退出应用按钮开启\n- 支持wy源flac hires歌曲类型的显示\n- 添加kg源评论图片展示(@helloplhm-qwq)\n- 支持kg源搜索列表、排行榜flac hires歌曲类型的显示(@helloplhm-qwq, @Folltoshe)\n\n优化(界面/交互/功能)\n- 调整了首页的界面布局\n- 优化大屏幕下的字体大小及界面布局显示\n- 支持wy源flac hires歌曲类型的显示\n- 优化列表数据导入导出的性能,现在进行这些操作应该可以一下子完成且不会再冻结UI了\n- 支持kg源搜索列表flac hires歌曲类型的显示(@helloplhm-qwq)\n\n优化(程序)\n- 优化程序启动性能,优化与程序交互的流畅度\n- 重构整个程序,重新梳理了程序逻辑,使其更容易扩展及维护,将大部分代码从JavaScript迁移到TypeScript\n- 重写配置管理、列表管理功能,使其与PC端同步,更容易复用PC端的代码\n\n修复\n- 修复使用酷狗码无法打开某些类型的歌单的问题\n- 修复tx源某些歌单无法打开的问题\n\n变更\n- 原来播放详情页的歌词字体大小设置改为播放器设置\n\n其他\n- 升级React Native到v0.71.4"},{"version":"0.15.5","desc":"修复\n- 修复导入PC端v2列表文件歌曲信息转换丢失的问题\n- 修复上面问题导致的tx源评论加载失败的问题"},{"version":"0.15.4","desc":"修复\n- 修复播放详情页歌词翻译、罗马音歌词匹配问题"},{"version":"0.15.3","desc":"修复\n- 修复鸿蒙系统下的崩溃问题"},{"version":"0.15.2","desc":"修复\n- 修复潜在的歌词解析导致应用崩溃问题"},{"version":"0.15.1","desc":"修复\n- 修复某些歌曲的桌面歌词翻译或罗马音没有显示的问题\n- 修复kg某些歌单链接无法打开的问题"},{"version":"0.15.0","desc":"新增\n- 支持导入PC端v2版本的列表数据\n- 添加kg源罗马音歌词的支持\n- 支持打开波点音乐歌单(需在酷我源打开)\n\n修复\n- 支持单行多时间标签歌词解析,修复某些歌词会出现时间标签的问题\n- 修复某些类型的kg歌单无法导入的问题\n- 修复异常歌单、歌曲数据导致的崩溃问题(#157)\n\n其他\n- 升级react-native到 v0.68.5"},{"version":"0.14.3","desc":"修复\n- 修复因音源的域名到期导致的音源失效的问题"},{"version":"0.14.2","desc":"优化\n- 为tx、kw源添加 Flac 24bit 音质显示,注:由于之前没有记录此音质,所以之前收藏的歌曲信息中不包含它\n\n修复\n- 修复排行榜在旋转屏幕后,选中的榜单被重置回第一个的问题\n- 修复企鹅音乐搜索失效的问题"},{"version":"0.14.1","desc":"优化\n- 添加“弹出键盘时自动隐藏播放栏”设置,默认启用(原来的行为),若在某些设备上播放栏无法显示时则可以关闭此设置\n- 优化切歌时桌面歌词的切换动画显示\n- 暂停播放时自动隐藏桌面歌词\n- 在我的列表-列表名左侧添加了一个图标,以表示此处可以点击切换列表\n\n修复\n- 修复tx源搜索失效的问题"},{"version":"0.14.0","desc":"新增\n- 新增设置-桌面歌词-单行歌词设置,默认关闭,启用后只显示一行歌词,超出窗口宽度自动滚动到末尾\n- 新增设置-桌面歌词-显示歌词切换动画,默认启用,如果你觉得切换动画影响视觉可以将其关闭\n- 新增设置-基本设置-启动后自动播放音乐,默认关闭\n\n优化\n- 支持mg源的歌词翻译(之前添加的歌曲需要去设置清空缓存才会刷新歌词)\n- 添加歌曲列表更新操作的二次确认\n- 添加导入文件错误时的指引提示\n\n修复\n- 修复桌面歌词转繁体设置不立即生效的问题\n- 修复搜索、歌单、排行榜列表可能在切换新内容后出现上次列表内容的残留问题(#118)\n- 修复在某些系统上播放音乐会导致应用崩溃的问题(#129)\n- 修复停止播放后的播放器状态清理问题\n\n文档\n移动版文档已迁移到:"},{"version":"0.13.0","desc":"从这个版本起,你可以将桌面歌词拖动到状态栏上,然后将歌词字体调小后配合新增的歌词窗口宽度、行数设置,模拟出类似状态栏歌词的效果。\n\n如果你的设备装有Xposed框架,可以使用状态栏版(详情看GitHub置顶issue),它通过调用第三方Xposed模块【墨•状态栏歌词】的API支持来状态栏歌词(感谢@ftevxk)。\n但考虑到要依赖第三方应用,并且是Xposed模块,预计用的人会比较少,所以暂不考虑将此特性包含在正式版中。\n\n新增\n- 新增设置-播放设置-显示歌词罗马音,默认关闭,注:目前只有网易源能获取到罗马音歌词(得益于 Binaryify/NeteaseCloudMusicApi/pull/1523),如果你知道其他源的歌词罗马音获取方式,欢迎PR或开issue交流!\n- 新增黑、白桌面歌词主题\n- 桌面歌词新增窗口宽度百分比、最大歌词行数调整设置,允许将歌词拖动到刘海屏状态栏上。提示:有了这组功能你就可以模拟状态栏歌词了\n- 新增设置-播放设置-将播放的歌词转繁体功能(#114)\n\n优化\n- 允许桌面歌词拖动到状态栏上(感谢@ftevxk)\n- 允许选择更新日志弹窗里的文本内容\n- 桌面歌词的最大字体大小允许调整到500(#107)\n\n修复\n- 修复潜在的桌面歌词导致应用崩溃问题\n\n文档\n- 将歌曲添加“稍后播放”后,它们会被放在一个优先级最高的特殊队列中,点击“下一曲”时会消耗该队列中的歌曲,并且无法通过“上一曲”功能播放该队列的上一首歌曲\n- 在切歌时若不是通过“上一曲”、“下一曲”功能切歌(例如直接点击“排行榜列表”、“我的列表”中的歌曲切歌),“稍后播放”队列将会被清空\n\n其他\n- 升级React native到v0.68.2"},{"version":"0.12.0","desc":"新增\n- 为搜索、歌单、排行榜的歌曲菜单添加分享“分享歌曲”按钮\n- 新增设置-基本设置-分享设置,它用于控制歌曲菜单的分享行为,默认使用系统分享\n- 新增是否在通知栏显示歌曲图片设置,默认开启(原来的行为)\n- 新增黑色皮肤“黑灯瞎火”\n- 新增设置-基本设置-主题颜色-跟随系统亮、暗模式切换主题设置,注:此设置需要android 10或ios 13及以上的版本才支持\n\n优化\n- 现在即使切歌模式处于单曲循环、顺序播放、禁用时,手动切歌将会按照列表循环的规则处理(#69)\n- 添加定时退出计时结束后的提示\n\n修复\n- 修复wy源搜索某些歌曲时第一页之后的歌曲无法加载的问题\n- 每次启动时过滤无效的歌曲\n- 修复换源失败时的处理问题\n- 修复非循环模式下播放结束后的状态显示问题及无法重新播放的问题(#104)\n- 修复定时退出可能导致崩溃的问题\n- 修复播放详情页歌词界面在把应用切到后台再切回来会导致屏幕常亮失效的问题\n\n变更\n- 歌曲菜单的“复制歌曲名”改为“分享歌曲”,点击后可以选择第三方应用分享歌曲详情页链接\n- 已存在目录列表的歌曲再次添加时将不会变成移除\n\n其他\n- 升级react-native到 v0.68.1"},{"version":"0.11.1","desc":"修复\n- 修复播放栏在某些设备不显示的问题"},{"version":"0.11.0","desc":"新增\n- 新增“点击列表里的歌曲时自动切换到当前列表播放”设置,此功能仅对歌单、排行榜有效,默认关闭\n- 添加试听接口,这是测试接口、临时接口都不可用时最后的选择...\n\n优化\n- 过滤tx源某些不支持播放的歌曲,解决播放此类内容会导致意外的问题\n- 备份与恢复兼容单个列表文件的导入\n- 添加通知权限的检查提醒,点击“不再提示”后,将会在设置-清空缓存后才会恢复提示\n\n修复\n- 修复Android 12下的桌面歌词锁定后还是无法在应用外点击歌词后面下面的内容的问题\n\n其他\n- 升级React native到v0.67.4"},{"version":"0.10.3","desc":"优化\n- 优化kw源英文与翻译歌词的匹配\n\n修复\n- 修复桌面歌词播放器会导致应用崩溃的问题"},{"version":"0.10.2","desc":"修复\n- 修复某些系统下的虚拟导航栏会导致播放栏隐藏的问题(react-native v0.67.x导致的)\n\n其他\n- 降级react-native到 v0.66.4"},{"version":"0.10.1","desc":"优化\n- 优化通知栏的更新机制,尝试修复魅族的通知栏图片不显示的问题\n- 我的列表-列表名的右击菜单更新已收藏的在线列表时,将始终重新加载,不再使用缓存,解决在原平台更新歌单后,在LX点击更新可能看到的还是在原平台更新前的歌单的问题\n\n修复\n- 修复tx源无搜索结果的问题\n- 修复小米等设备下面的手势提示线背景颜色为黑色的问题\n\n其他\n- 升级React native到v0.67.1"},{"version":"0.10.0","desc":"新增\n- 同步功能新增对列表位置调整的支持(需v1.15.3以上的PC端版本才支持)\n- 新增播放详情页歌词字体大小调整设置,可在详情页右上角的按钮进行调整\n- 新增同步服务地址历史列表功能\n- 横屏播放详情页新增评论入口\n- 我的列表歌曲三个点的菜单新增复制歌曲名\n\n优化\n- 修改对播放模块的调用,杜绝应用显示正在播放的歌曲与实际播放歌曲不一致的问题(这是播放模块歌曲队列与应用内歌曲队列在某些情况下出现不一致时导致的)\n- 支持PC端同步功能添加对列表顺序调整的控制,确保手动调整位置后的列表与不同的电脑同步时,列表位置不会被还原\n- 调整横屏下的导航栏、播放详情页布局,提高屏幕空间利用率并使其更易操作\n- 调整歌单类别、我的列表弹出层界面\n- 播放栏移除上一曲按钮,将多出来的空间加给播放、下一曲按钮\n- 现在点击、长按播放栏歌曲标题也可以进入详情页、定位当前播放歌曲了\n\n修复\n- 修复kw源某些歌曲的歌词提取异常的问题\n\n其他\n- 升级react-native到v0.66.4"},{"version":"0.9.2","desc":"优化\n- 添加应用初始化出错时的错误捕获输出\n- 优化歌词自动换源机制\n\n修复\n- 修复因kw源歌词接口停用导致该源歌词获取失败的问题\n\n其他\n- 更新react-native到v0.66.3\n- 更新Exoplayer到v2.16.0"},{"version":"0.9.1","desc":"修复\n- 修复删除列表时会导致应用崩溃的问题\n- 修复原生代码导致的错误日志记录"},{"version":"0.9.0","desc":"新增\n- 新增歌曲评论显示,可在播放详情页进入。(与PC端一样,目前仅支持显示部分评论)\n- 新增播放、收藏整个排行榜功能,可长按排行榜名字后在弹出的菜单中操作\n- 新增单个列表导入/导出功能,可以方便分享歌曲列表,可在点击“我的列表”里的列表名右侧的按钮后弹出的菜单中使用\n- 新增删除列表前的确认弹窗,防止误删列表\n\n优化\n- 添加更多同步功能的日志记录\n\n修复\n- 修复kg源的歌单链接无法打开的问题\n- 修复同一首歌的URL、歌词等同时需要换源时的处理问题\n- 修复在排行榜页面无法时无法通过点击我的列表图标切换到我的列表的问题\n\n其他\n- 更新react-native到v0.66.1"},{"version":"0.8.3","desc":"修复\n- 修复我的列表搜索无法搜索小括号、中括号等字符,并会导致应用崩溃的问题\n- 修复使用同步功能同步完成后,列表没有被保存,导致下次再连接同步时被同步新增的歌曲被移除的问题(此问题由v0.8.2的存储切片改造引入的)\n\n其他\n- 更新React native到v0.66.0"},{"version":"0.8.2","desc":"优化\n- 缓冲进度条颜色\n- 优化数据存储,若需要存储的数据过大时会将数据切片后存储,现在存储大列表不会导致列表丢失了\n\n修复\n- 修复随机播放模式下在同列表切其他歌曲不会清空已播放列表的问题\n- 修复歌曲播放出错时的URL刷新问题"},{"version":"0.8.1","desc":"优化\n- 添加更多错误信息的记录\n\n修复\n- 修复潜在的获取缓存大小报错问题\n- 修复mg排行榜无法加载的问题\n- 修复列表导出失败时的提示信息缺失翻译的问题\n- 修复 Android 11 导入列表时,不显示备份文件的问题\n- 修复其他应用播放声音时,软件临时暂停播放后通知栏的状态仍显示正在播放的问题"},{"version":"0.8.0","desc":"新增\n- 添加对通知栏歌曲进度条的支持\n\n修复\n- 修复某些情况下桌面歌词会导致APP崩溃的问题\n- 修复从电脑浏览器复制的企鹅歌单链接无法打开的问题\n\n其他\n- 升级React native到v0.65.1\n- 升级播放模块`react-native-track-player`到v2版本,优化通知栏歌曲信息显示逻辑"},{"version":"0.7.1","desc":"修复\n- 修复无法从歌单界面打开网易歌单详情的问题"},{"version":"0.7.0","desc":"如果你喜欢并经常使用洛雪音乐,并想要第一时间尝鲜洛雪的新功能,可以加入测试企鹅群768786588,\n注意:测试版的功可能会不稳定,打算潜水的勿加。\n\n新增\n- 新增横屏状态下的播放详情页\n- 新增橙、粉、灰主题色\n- 新增桌面歌词的字体大小、透明度设置\n- 新增我的列表内歌曲搜索定位功能\n\n调整\n- 为了与搜索、歌单操作栏位置统一,现将我的列表-收藏的列表操作栏由底部挪到顶部\n\n修复\n- 修复tx源的歌词无法显示的问题\n- 修复随机播放模式下使用稍后播放功能会导致歌曲单曲循环的问题\n- 修复某些情况下桌面歌词会导致APP崩溃的问题"},{"version":"0.6.2","desc":"优化\n- 优化设置界面的输入框输入机制,现在只要键盘收起即可自动保存输入的内容\n- 添加在启用桌面歌词时对悬浮层权限的检查,这应该可以修复某些设备上点击启用桌面歌词时不显示无权限弹窗也不显示桌面歌词的情况\n\n变更\n- 不再自动聚焦定时退出、调整位置弹窗内的输入框,这应该可以修复某些设备无法在这两个地方弹出键盘的问题\n\n修复\n- 修复启用桌面歌词时的权限提示弹窗会导致应用报错的问题\n- 修复我的列表无法更新从收藏的排行榜的问题"},{"version":"0.6.1","desc":"修复\n- 修复随机播放下无法切歌的问题"},{"version":"0.6.0","desc":"新增\n- 新增局域网同步功能(实验性,首次使用前建议先备份一次列表),此功能需要配合PC端使用,移动端与PC端处在同一个局域网(路由器的网络)下时,可以多端实时同步歌曲列表,使用问题请看\"常见问题\"。\n- 新增桌面歌词\n\n优化\n- 优化退出应用的机制,现在在需要退出应用的场景将会完全退出应用\n\n修复\n- 修复某些情况下出现恢复播放信息失败的问题\n- 修复删除列表中正在播放的歌曲时会自动跳到第一首的问题\n- 修复因其他应用需要播放声音而暂停播放音乐时歌词不会暂停播放导致恢复播放后歌词与播放进度不一致的问题"},{"version":"0.5.3","desc":"修复\n- 修复歌曲缓存失效的问题"},{"version":"0.5.2","desc":"优化\n- 优化mg源打开歌单的链接兼容\n\n修复\n- 修复单曲循环播放时循环次数为偶数时歌词不重新播放的问题\n- 添加针对进入歌词界面时某些情况下会弹出`scrollToIndex out of range: requested index ...`崩溃错误弹窗的处理\n- 修复导入kg歌单最多只能加载100、500首歌曲的问题。注:现在可以加载1000+首歌曲的歌单,但出于未知原因会导致部分歌曲无法加载(可能是无版权导致的),目前酷狗码仍然最多只能加载500首歌"},{"version":"0.5.1","desc":"优化\n- 添加切换播放模式时的文字提示\n- 优化单首歌曲的添加弹窗操作,当选择当前歌曲已存在目标列表时(列表名灰色显示),会将当前歌曲从目标列表移除,否则将当前歌曲添加到目标列表,添加在弹窗内对歌曲的添加、移动、删除操作时的文字提示\n\n修复\n- 修复mg源搜索失效的问题\n\n移除\n- 因wy源的歌单列表已没有“最新”排序的选项,所以现跟随移除wy源歌单列表按“最新”排序的按钮"},{"version":"0.5.0","desc":"新增\n- 新增“其他应用播放声音时,自动暂停播放”设置,默认开启\n- 新增“添加歌曲到列表时的位置”设置,可选项为列表的“顶部”与“底部”\n- 新增“显示歌词翻译设置”,默认关闭\n\n变更\n- 添加歌曲到列表时从原来的底部改为顶部,若想要恢复原来的行为则可以去更改“添加歌曲到列表时的位置”设置项"},{"version":"0.4.2","desc":"优化\n- 优化wy源歌单导入匹配,现在存在链接外的其他字符也可以打开歌单了\n\n修复\n- 修复定时播放开启歌曲播放完毕再停止时,若倒计时已结束会导致无法播放歌曲的问题\n- 修复打开歌单失败时会导致应用崩溃的问题\n- 修复打开kw歌单失败时会无限重试的问题\n- 尝试修复弹出菜单、列表位置不正确的问题\n- 修复打开kg源歌单链接失败的问题\n- 尝试修复有时候进入播放详情歌词界面时会导致应用UI被冻结的问题\n- 修复有时候进入播放详情页时歌曲封面大小显示不正确的问题"},{"version":"0.4.1","desc":"修复\n- 修复定时播放开启歌曲播放完毕再停止时,若倒计时已结束会导致无法播放歌曲的问题"},{"version":"0.4.0","desc":"新增\n- 新增我的列表中已收藏的在线列表的更新功能。注意:这将会覆盖本地的目标列表,歌曲将被替换成最新的在线列表(与PC端的同步一样)\n- 歌曲添加、移动弹窗新增创建新列表功能\n- 新增定时退出播放\n\n优化\n- 优化应用布局对手机系统字体大小的适配\n- 调整歌单详情页,现在在歌单详情页按手机上的返回键将会返回歌单列表,而不是直接退出APP\n- 优化进入播放详情页、歌单详情页的动画效果\n\n修复\n- 尝试修复某些情况下进播放详情歌词界面时报错的问题"},{"version":"0.3.3","desc":"修复\n- 尝试修复软件启动时恢复上一次播放的歌曲可能导致软件崩溃的问题\n- 尝试修复播放详情页歌词导致UI冻结的问题\n- 修复企鹅音乐搜索歌曲没有结果的问题\n\n其他\n- 整合日志记录\n- 更新 exoPlayer 到 2.14.0"},{"version":"0.3.2","desc":"修复\n- 修复手机分享的wy歌单、某些tx、kg歌单无法打开的问题\n- 修复打开空的歌单时,点击播放全部会导致应用崩溃的问题\n- 修复企鹅音乐搜索歌曲没有结果的问题"},{"version":"0.3.1","desc":"修复\n- 修复进入播放详情歌词界面后的屏幕常亮不会被取消的问题"},{"version":"0.3.0","desc":"新增\n- 新增通过歌单链接打开歌单的功能\n\n优化\n- 切换到播放详情歌词界面时将阻止屏幕息屏\n\n修复\n- 修复一个导致崩溃日志写入文件前会导致APP崩溃的莫名其妙问题"},{"version":"0.2.0","desc":"新增\n- 新增竖屏下的播放详情页"},{"version":"0.1.7","desc":"优化\n- 修改歌单导入流程,添加对歌单导入错误的捕获\n\n修复\n- 修复在系统暗主题下,应用内文字输入框的字体会变成白色的问题"},{"version":"0.1.6","desc":"优化\n- 改进软件错误处理,添加对软件崩溃的错误日志记录,可在设置-其他查看错误日志历史。注:清理缓存时日志也将会被清理\n\n修复\n- 修复显示版本更新弹窗会导致应用崩溃的问题"},{"version":"0.1.5","desc":"修复\n- 修复修复协议弹窗可以被绕过的问题\n- 修复从在线列表使用稍后播放功能播放歌曲时,歌曲封面不显示的问题\n- 修复正在播放“稍后播放”的歌曲时,对“稍后播放”前播放的列表进行添加、删除操作会导致切歌的问题"},{"version":"0.1.4","desc":"修复\n- 修复获取在线列表时快速切换会导致APP闪退的问题"},{"version":"0.1.3","desc":"优化\n- 添加导入提示,兼容从PC端“全部数据”类型的备份文件中导入歌单\n- 添加全局异常错误捕获,现在一般情况下APP崩溃前会弹窗提示错误信息。"},{"version":"0.1.2","desc":"优化\n- 在搜索、歌单、排行榜列表多选音乐后点菜单中的播放将会把已选的歌曲添加到试听列表播放\n\n修复\n- 修复播放模块没拉取最新代码导致播放器存在无法从通知栏停止等问题"},{"version":"0.1.1","desc":"lx-music移动端v0.1.1版本发布 🎊 🎉"}]} diff --git a/src/components/SourceSelector.tsx b/src/components/SourceSelector.tsx index e47156d..3de225f 100644 --- a/src/components/SourceSelector.tsx +++ b/src/components/SourceSelector.tsx @@ -20,6 +20,15 @@ export interface SourceSelectorType { setSourceList: (list: S, activeSource: S[number]) => void } +export const useSourceListI18n = (list: Sources) => { + const sourceNameType = useSettingValue('common.sourceNameType') + const t = useI18n() + return useMemo(() => { + return list.map(s => ({ label: t(`source_${sourceNameType}_${s}`), action: s })) + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [list, sourceNameType, t]) +} + const Component = ({ fontSize = 15, center, onSourceChange }: SourceSelectorProps, ref: Ref>) => { const sourceNameType = useSettingValue('common.sourceNameType') const [list, setList] = useState([] as unknown as S) @@ -33,10 +42,7 @@ const Component = ({ fontSize = 15, center, onSourceChange }: }, }), []) - const sourceList_t = useMemo(() => { - return list.map(s => ({ label: t(`source_${sourceNameType}_${s}`), action: s })) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [list, sourceNameType, t]) + const sourceList_t = useSourceListI18n(list) type DorpDownMenuProps = _DorpDownMenuProps diff --git a/src/core/init/deeplink/index.ts b/src/core/init/deeplink/index.ts new file mode 100644 index 0000000..cb4ebc7 --- /dev/null +++ b/src/core/init/deeplink/index.ts @@ -0,0 +1,60 @@ +import { Linking } from 'react-native' +import { errorDialog } from './utils' +import { handleMusicAction } from './musicAction' +import { handlePlayerAction, type PlayerAction } from './playerAction' +import { handleSonglistAction } from './songlistAction' + + +const handleLinkAction = async(link: string) => { + // console.log(link) + const [url, search] = link.split('?') + const [type, action, ...paths] = url.replace('lxmusic://', '').split('/') + const params: { + paths: string[] + data?: string + [key: string]: any + } = { + paths: [], + } + if (search) { + for (const param of search.split('&')) { + const [key, value] = param.split('=') + params[key] = value + } + if (params.data) params.data = JSON.parse(decodeURIComponent(params.data)) + } + params.paths = paths.map(p => decodeURIComponent(p)) + console.log(params) + switch (type) { + case 'music': + await handleMusicAction(action, params) + break + case 'songlist': + await handleSonglistAction(action, params) + break + case 'player': + await handlePlayerAction(action as PlayerAction) + break + // default: throw new Error('Unknown type: ' + type) + } +} +const runLinkAction = async(link: string) => { + if (!link.startsWith('lxmusic://')) return + try { + await handleLinkAction(link) + } catch (err: any) { + errorDialog(err.message) + // focusWindow() + } +} + +export const initDeeplink = async() => { + Linking.addEventListener('url', ({ url }) => { + void runLinkAction(url) + console.log('deeplink', url) + }) + const initialUrl = await Linking.getInitialURL() + if (initialUrl == null) return + console.log('deeplink', initialUrl) + void runLinkAction(initialUrl) +} diff --git a/src/core/init/deeplink/musicAction.js b/src/core/init/deeplink/musicAction.js new file mode 100644 index 0000000..4515fd4 --- /dev/null +++ b/src/core/init/deeplink/musicAction.js @@ -0,0 +1,214 @@ +import { decodeName, toNewMusicInfo } from '@/utils' +import { dataVerify, qualityFilter } from './utils' +import playerState from '@/store/player/state' +import { LIST_IDS } from '@/config/constant' +import { playNext } from '@/core/player/player' +import { getOtherSource } from '@/core/music/utils' +import { addTempPlayList } from '@/core/player/tempPlayList' + +// const handleSearchMusic = ({ paths, data: params }) => { +// let text +// let source +// if (params) { +// text = dataVerify([ +// { key: 'keywords', types: ['string', 'number'], max: 128, required: true }, +// ], params).keywords +// source = params.source +// } else { +// if (!paths.length) throw new Error('Keyword missing') + +// if (paths.length > 1) { +// text = paths[1] +// source = paths[0] +// } else { +// text = paths[0] +// } + +// if (text.length > 128) text = text.substring(0, 128) +// } + +// if (isShowPlayerDetail.value) setShowPlayerDetail(false) +// const sourceList = [...sources, 'all'] +// source = sourceList.includes(source) ? source : null +// setTimeout(() => { +// router.replace({ +// path: '/search', +// query: { +// text, +// source, +// }, +// }) +// }, 500) +// } + +const filterInfoByPlayMusic = musicInfo => { + switch (musicInfo.source) { + case 'kw': + musicInfo = dataVerify([ + { key: 'name', types: ['string'], required: true, max: 200 }, + { key: 'singer', types: ['string'], required: true, max: 200 }, + { key: 'source', types: ['string'], required: true }, + { key: 'songmid', types: ['string', 'number'], max: 64, required: true }, + { key: 'img', types: ['string'], max: 1024 }, + { key: 'albumId', types: ['string', 'number'], max: 64 }, + { key: 'interval', types: ['string'], max: 64 }, + { key: 'albumName', types: ['string'], max: 64 }, + { key: 'types', types: ['object'], required: true }, + ], musicInfo) + break + case 'kg': + musicInfo = dataVerify([ + { key: 'name', types: ['string'], required: true, max: 200 }, + { key: 'singer', types: ['string'], required: true, max: 200 }, + { key: 'source', types: ['string'], required: true }, + { key: 'songmid', types: ['string', 'number'], max: 64, required: true }, + { key: 'img', types: ['string'], max: 1024 }, + { key: 'albumId', types: ['string', 'number'], max: 64 }, + { key: 'interval', types: ['string'], max: 64 }, + { key: '_interval', types: ['number'], max: 64 }, + { key: 'albumName', types: ['string'], max: 64 }, + { key: 'types', types: ['object'], required: true }, + + { key: 'hash', types: ['string'], required: true, max: 64 }, + ], musicInfo) + break + case 'tx': + musicInfo = dataVerify([ + { key: 'name', types: ['string'], required: true, max: 200 }, + { key: 'singer', types: ['string'], required: true, max: 200 }, + { key: 'source', types: ['string'], required: true }, + { key: 'songmid', types: ['string', 'number'], max: 64, required: true }, + { key: 'img', types: ['string'], max: 1024 }, + { key: 'albumId', types: ['string', 'number'], max: 64 }, + { key: 'interval', types: ['string'], max: 64 }, + { key: 'albumName', types: ['string'], max: 64 }, + { key: 'types', types: ['object'], required: true }, + + { key: 'strMediaMid', types: ['string'], required: true, max: 64 }, + { key: 'albumMid', types: ['string'], max: 64 }, + ], musicInfo) + break + case 'wy': + musicInfo = dataVerify([ + { key: 'name', types: ['string'], required: true, max: 200 }, + { key: 'singer', types: ['string'], required: true, max: 200 }, + { key: 'source', types: ['string'], required: true }, + { key: 'songmid', types: ['string', 'number'], max: 64, required: true }, + { key: 'img', types: ['string'], max: 1024 }, + { key: 'albumId', types: ['string', 'number'], max: 64 }, + { key: 'interval', types: ['string'], max: 64 }, + { key: 'albumName', types: ['string'], max: 64 }, + { key: 'types', types: ['object'], required: true }, + ], musicInfo) + break + case 'mg': + musicInfo = dataVerify([ + { key: 'name', types: ['string'], required: true, max: 200 }, + { key: 'singer', types: ['string'], required: true, max: 200 }, + { key: 'source', types: ['string'], required: true }, + { key: 'songmid', types: ['string', 'number'], max: 64, required: true }, + { key: 'img', types: ['string'], max: 1024 }, + { key: 'albumId', types: ['string', 'number'], max: 64 }, + { key: 'interval', types: ['string'], max: 64 }, + { key: 'albumName', types: ['string'], max: 64 }, + { key: 'types', types: ['object'], required: true }, + + { key: 'copyrightId', types: ['string', 'number'], required: true, max: 64 }, + { key: 'lrcUrl', types: ['string'], max: 1024 }, + { key: 'trcUrl', types: ['string'], max: 1024 }, + { key: 'mrcUrl', types: ['string'], max: 1024 }, + ], musicInfo) + break + default: throw new Error('Unknown source: ' + musicInfo.source) + } + musicInfo.types = qualityFilter(musicInfo.source, musicInfo.types) + return musicInfo +} +const handlePlayMusic = ({ data: _musicInfo }) => { + _musicInfo = filterInfoByPlayMusic(_musicInfo) + + let musicInfo = { + ..._musicInfo, + singer: decodeName(_musicInfo.singer), + name: decodeName(_musicInfo.name), + albumName: decodeName(_musicInfo.albumName), + otherSource: null, + _types: {}, + typeUrl: {}, + } + for (const type of musicInfo.types) { + musicInfo._types[type.type] = { size: type.size } + } + musicInfo = toNewMusicInfo(musicInfo) + const isPlaying = !!playerState.playMusicInfo.musicInfo + addTempPlayList([{ listId: LIST_IDS.PLAY_LATER, musicInfo, isTop: true }]) + if (isPlaying) playNext() +} + + +const verifyInfo = (info) => { + return dataVerify([ + { key: 'name', types: ['string'], required: true, max: 200 }, + { key: 'singer', types: ['string'], max: 200 }, + { key: 'albumName', types: ['string'], max: 64 }, + { key: 'interval', types: ['string'], max: 64 }, + { key: 'playLater', types: ['boolean'] }, + ], info) +} + +const searchMusic = async(name, singer, albumName, interval) => { + return getOtherSource({ + name, + singer, + interval, + meta: { + albumName, + }, + source: 'local', + id: `sp_${name}_s${singer}_a${albumName}_i${interval ?? ''}`, + }) +} +const handleSearchPlayMusic = async({ paths, data }) => { + // console.log(paths, data) + let info + if (paths.length) { + let name = paths[0].trim() + let singer = '' + if (name.includes('-')) [name, singer] = name.split('-').map(val => val.trim()) + info = { + name, + singer, + } + } else info = data + info = verifyInfo(info) + if (!info.name) return + const musicList = await searchMusic(info.name, info.singer || '', info.albumName || '', info.interval || null) + if (musicList.length) { + console.log('find music:', musicList) + const musicInfo = musicList[0] + const isPlaying = !!playerState.playMusicInfo.musicInfo + if (info.playLater) { + addTempPlayList([{ listId: LIST_IDS.PLAY_LATER, musicInfo }]) + } else { + addTempPlayList([{ listId: LIST_IDS.PLAY_LATER, musicInfo, isTop: true }]) + if (isPlaying) playNext() + } + } else { + console.log('msuic not found:', info) + } +} + +export const handleMusicAction = async(action, info) => { + switch (action) { + // case 'search': + // handleSearchMusic(info) + // break + case 'play': + handlePlayMusic(info) + break + case 'searchPlay': + await handleSearchPlayMusic(info) + break + // default: throw new Error('Unknown action: ' + action) + } +} diff --git a/src/core/init/deeplink/playSonglist.ts b/src/core/init/deeplink/playSonglist.ts new file mode 100644 index 0000000..20d0959 --- /dev/null +++ b/src/core/init/deeplink/playSonglist.ts @@ -0,0 +1,44 @@ +import { LIST_IDS } from '@/config/constant' +import { setTempList } from '@/core/list' +import { playList } from '@/core/player/player' +import { getListDetail, getListDetailAll } from '@/core/songlist' +import listState from '@/store/list/state' + +const getListPlayIndex = (list: LX.Music.MusicInfoOnline[], index?: number) => { + if (index == null) { + index = 1 + } else { + if (index < 1) index = 1 + else if (index > list.length) index = list.length + } + return index - 1 +} + +const playSongListDetail = async(source: LX.OnlineSource, link: string, playIndex?: number) => { + // console.log(source, link, playIndex) + if (link == null) return + let isPlayingList = false + const id = decodeURIComponent(link) + const playListId = `${source}__${decodeURIComponent(link)}` + let list = (await getListDetail(id, source, 1)).list + if (playIndex == null || list.length > playIndex) { + isPlayingList = true + await setTempList(playListId, list) + await playList(LIST_IDS.TEMP, getListPlayIndex(list, playIndex)) + } + list = await getListDetailAll(source, id) + if (isPlayingList) { + if (listState.tempListMeta.id == id) await setTempList(playListId, list) + } else { + await setTempList(playListId, list) + await playList(LIST_IDS.TEMP, getListPlayIndex(list, playIndex)) + } +} +export const playSonglist = async(source: LX.OnlineSource, link: string, playIndex?: number) => { + try { + await playSongListDetail(source, link, playIndex) + } catch (err) { + console.error(err) + throw new Error('Get play list failed.') + } +} diff --git a/src/core/init/deeplink/playerAction.ts b/src/core/init/deeplink/playerAction.ts new file mode 100644 index 0000000..68214a5 --- /dev/null +++ b/src/core/init/deeplink/playerAction.ts @@ -0,0 +1,33 @@ +import { collectMusic, dislikeMusic, pause, play, playNext, playPrev, togglePlay, uncollectMusic } from '@/core/player/player' + +export type PlayerAction = 'play' | 'pause' | 'skipNext' | 'skipPrev' | 'togglePlay' | 'collect' | 'uncollect' | 'dislike' + +export const handlePlayerAction = async(action: PlayerAction) => { + switch (action) { + case 'play': + play() + break + case 'pause': + void pause() + break + case 'skipNext': + void playNext() + break + case 'skipPrev': + void playPrev() + break + case 'togglePlay': + togglePlay() + break + case 'collect': + collectMusic() + break + case 'uncollect': + uncollectMusic() + break + case 'dislike': + void dislikeMusic() + break + // default: throw new Error('Unknown action: ' + (action as any ?? '')) + } +} diff --git a/src/core/init/deeplink/songlistAction.js b/src/core/init/deeplink/songlistAction.js new file mode 100644 index 0000000..87afc66 --- /dev/null +++ b/src/core/init/deeplink/songlistAction.js @@ -0,0 +1,95 @@ +import { playSonglist } from './playSonglist' +import { dataVerify, sourceVerify } from './utils' + +// const handleOpenSonglist = params => { +// if (params.id) { +// router[route.path == '/songList/detail' ? 'replace' : 'push']({ +// path: '/songList/detail', +// query: { +// source: params.source, +// id: params.id, +// }, +// }) +// } else if (params.url) { +// router[route.path == '/songList/detail' ? 'replace' : 'push']({ +// path: '/songList/detail', +// query: { +// source: params.source, +// id: params.url, +// }, +// }) +// } +// } +// const openSonglist = () => { +// return ({ paths, data }) => { +// let songlistInfo = { +// source: null, +// id: null, +// url: null, +// } +// if (data) { +// songlistInfo = data +// } else { +// songlistInfo.source = paths[0] +// songlistInfo.url = paths[1] +// } + +// sourceVerify(songlistInfo.source) + +// songlistInfo = dataVerify([ +// { key: 'source', types: ['string'] }, +// { key: 'id', types: ['string', 'number'], max: 64 }, +// { key: 'url', types: ['string'], max: 500 }, +// ], songlistInfo) + +// if (!songlistInfo.id && !songlistInfo.url) throw new Error('id or url missing') +// if (isShowPlayerDetail.value) setShowPlayerDetail(false) +// handleOpenSonglist(songlistInfo) +// focusWindow() +// } +// } + +const handlePlaySonglist = async({ paths, data }) => { + let songlistInfo = { + source: null, + id: null, + url: null, + index: null, + } + if (data) { + songlistInfo = data + } else { + songlistInfo.source = paths[0] + songlistInfo.url = paths[1] + songlistInfo.index = paths[2] + if (songlistInfo.index != null) { + songlistInfo.index = parseInt(songlistInfo.index) + if (Number.isNaN(songlistInfo.index)) delete songlistInfo.index + } + } + + sourceVerify(songlistInfo.source) + + songlistInfo = dataVerify([ + { key: 'source', types: ['string'] }, + { key: 'id', types: ['string', 'number'], max: 64 }, + { key: 'url', types: ['string'], max: 500 }, + { key: 'index', types: ['number'], max: 1000000 }, + ], songlistInfo) + + if (!songlistInfo.id && !songlistInfo.url) throw new Error('id or url missing') + + await playSonglist(songlistInfo.source, songlistInfo.id ?? songlistInfo.url, songlistInfo.index) +} + +export const handleSonglistAction = async(action, info) => { + switch (action) { + // case 'open': + // handleOpenSonglist(info) + // break + case 'play': + await handlePlaySonglist(info) + break + // default: throw new Error('Unknown action: ' + action) + } +} diff --git a/src/core/init/index.ts b/src/core/init/index.ts index 7e6665e..b93b333 100644 --- a/src/core/init/index.ts +++ b/src/core/init/index.ts @@ -7,6 +7,7 @@ import initPlayer from './player' import dataInit from './dataInit' import initSync from './sync' import initCommonState from './common' +import { initDeeplink } from './deeplink' import { setApiSource } from '@/core/apiSource' import commonActions from '@/store/common/action' import settingState from '@/store/setting/state' @@ -22,6 +23,7 @@ const handlePushedHomeScreen = async() => { if (isFirstPush) { isFirstPush = false void checkUpdate() + void initDeeplink() } } else { if (isFirstPush) isFirstPush = false diff --git a/src/core/music/download.ts b/src/core/music/download.ts index 0f8923b..3c151e8 100644 --- a/src/core/music/download.ts +++ b/src/core/music/download.ts @@ -8,17 +8,18 @@ import { } from './online' import { buildLyricInfo, getCachedLyricInfo } from './utils' -export const getMusicUrl = async({ musicInfo, isRefresh, onToggleSource = () => {} }: { +export const getMusicUrl = async({ musicInfo, isRefresh, allowToggleSource = true, onToggleSource = () => {} }: { musicInfo: LX.Download.ListItem isRefresh: boolean onToggleSource?: (musicInfo?: LX.Music.MusicInfoOnline) => void + allowToggleSource?: boolean }): Promise => { // if (!isRefresh) { // const path = await getDownloadFilePath(musicInfo, appSetting['download.savePath']) // if (path) return path // } - return getOnlineMusicUrl({ musicInfo: musicInfo.metadata.musicInfo, isRefresh, onToggleSource }) + return getOnlineMusicUrl({ musicInfo: musicInfo.metadata.musicInfo, isRefresh, onToggleSource, allowToggleSource }) } export const getPicUrl = async({ musicInfo, isRefresh, listId, onToggleSource = () => {} }: { diff --git a/src/core/music/index.ts b/src/core/music/index.ts index 42272bb..0132a58 100644 --- a/src/core/music/index.ts +++ b/src/core/music/index.ts @@ -24,19 +24,20 @@ export const getMusicUrl = async ({ quality, isRefresh = false, onToggleSource, + allowToggleSource, }: { musicInfo: LX.Music.MusicInfo | LX.Download.ListItem isRefresh?: boolean quality?: LX.Quality onToggleSource?: (musicInfo?: LX.Music.MusicInfoOnline) => void + allowToggleSource?: boolean }): Promise => { if ('progress' in musicInfo) { - return getDownloadMusicUrl({ musicInfo, isRefresh, onToggleSource }) + return getDownloadMusicUrl({ musicInfo, isRefresh, onToggleSource, allowToggleSource }) } else if (musicInfo.source == 'local') { - - return getLocalMusicUrl({ musicInfo, isRefresh, onToggleSource }) + return getLocalMusicUrl({ musicInfo, isRefresh, onToggleSource, allowToggleSource }) } else { - return getOnlineMusicUrl({ musicInfo, isRefresh, quality, onToggleSource }) + return getOnlineMusicUrl({ musicInfo, isRefresh, quality, onToggleSource, allowToggleSource }) } } diff --git a/src/core/music/local.ts b/src/core/music/local.ts index a86adf7..ab5d004 100644 --- a/src/core/music/local.ts +++ b/src/core/music/local.ts @@ -66,10 +66,11 @@ const getOtherSourceByLocal = async(musicInfo: LX.Music.MusicInfoLocal, handl throw new Error('source not found') } -export const getMusicUrl = async({ musicInfo, isRefresh, onToggleSource = () => {} }: { +export const getMusicUrl = async({ musicInfo, isRefresh, allowToggleSource = true, onToggleSource = () => {} }: { musicInfo: LX.Music.MusicInfoLocal isRefresh: boolean onToggleSource?: (musicInfo?: LX.Music.MusicInfoOnline) => void + allowToggleSource?: boolean }): Promise => { if (!isRefresh) { const path = await getLocalFilePath(musicInfo) @@ -84,6 +85,8 @@ export const getMusicUrl = async({ musicInfo, isRefresh, onToggleSource = () => }) } catch {} + if (!allowToggleSource) throw new Error('failed') + onToggleSource() return getOtherSourceByLocal(musicInfo, async(otherSource) => { return getOnlineOtherSourceMusicUrl({ musicInfos: [...otherSource], onToggleSource, isRefresh }).then(({ url, quality: targetQuality, musicInfo: targetMusicInfo, isFromCache }) => { diff --git a/src/core/player/player.ts b/src/core/player/player.ts index 7698f07..306281f 100644 --- a/src/core/player/player.ts +++ b/src/core/player/player.ts @@ -25,6 +25,9 @@ import { getRandom } from '@/utils/common' import { filterList } from './utils' import BackgroundTimer from 'react-native-background-timer' import { checkIgnoringBatteryOptimization, checkNotificationPermission, debounceBackgroundTimer } from '@/utils/tools' +import { LIST_IDS } from '@/config/constant' +import { addListMusics, removeListMusics } from '@/core/list' +import { addDislikeInfo } from '@/core/dislikeList' // import { checkMusicFileAvailable } from '@renderer/utils/music' @@ -56,12 +59,16 @@ const createDelayNextTimeout = (delay: number) => { const { addDelayNextTimeout, clearDelayNextTimeout } = createDelayNextTimeout(5000) const { addDelayNextTimeout: addLoadTimeout, clearDelayNextTimeout: clearLoadTimeout } = createDelayNextTimeout(100000) +const createGettingUrlId = (musicInfo: LX.Music.MusicInfo | LX.Download.ListItem) => { + const tInfo = 'progress' in musicInfo ? musicInfo.metadata.musicInfo.meta.toggleMusicInfo : musicInfo.meta.toggleMusicInfo + return `${musicInfo.id}_${tInfo?.id ?? ''}` +} /** * 检查音乐信息是否已更改 */ const diffCurrentMusicInfo = (curMusicInfo: LX.Music.MusicInfo | LX.Download.ListItem): boolean => { // return curMusicInfo !== playerState.playMusicInfo.musicInfo || playerState.isPlay - return curMusicInfo.id != global.lx.gettingUrlId || curMusicInfo.id != playerState.playMusicInfo.musicInfo?.id || playerState.isPlay + return createGettingUrlId(curMusicInfo) != global.lx.gettingUrlId || curMusicInfo.id != playerState.playMusicInfo.musicInfo?.id || playerState.isPlay } let cancelDelayRetry: (() => void) | null = null @@ -92,14 +99,21 @@ const getMusicPlayUrl = async(musicInfo: LX.Music.MusicInfo | LX.Download.ListIt addLoadTimeout() // const type = getPlayType(settingState.setting['player.isPlayHighQuality'], musicInfo) + let toggleMusicInfo = ('progress' in musicInfo ? musicInfo.metadata.musicInfo : musicInfo).meta.toggleMusicInfo - return getMusicUrl({ - musicInfo, + return (toggleMusicInfo ? getMusicUrl({ + musicInfo: toggleMusicInfo, isRefresh, - onToggleSource(mInfo) { - if (diffCurrentMusicInfo(musicInfo)) return - setStatusText(global.i18n.t('toggle_source_try')) - }, + allowToggleSource: false, + }) : Promise.reject(new Error('not found'))).catch(async() => { + return getMusicUrl({ + musicInfo, + isRefresh, + onToggleSource(mInfo) { + if (diffCurrentMusicInfo(musicInfo)) return + setStatusText(global.i18n.t('toggle_source_try')) + }, + }) }).then(url => { if (global.lx.isPlayedStop || diffCurrentMusicInfo(musicInfo)) return null @@ -122,7 +136,7 @@ export const setMusicUrl = (musicInfo: LX.Music.MusicInfo | LX.Download.ListItem // addLoadTimeout() if (!diffCurrentMusicInfo(musicInfo)) return if (cancelDelayRetry) cancelDelayRetry() - global.lx.gettingUrlId = musicInfo.id + global.lx.gettingUrlId = createGettingUrlId(musicInfo) void getMusicPlayUrl(musicInfo, isRefresh).then((url) => { if (!url) return setResource(musicInfo, url, playerState.progress.nowPlayTime) @@ -475,7 +489,7 @@ export const playPrev = async(isAutoToggle = false): Promise => { export const play = () => { if (playerState.playMusicInfo.musicInfo == null) return if (isEmpty()) { - if (playerState.playMusicInfo.musicInfo.id != global.lx.gettingUrlId) setMusicUrl(playerState.playMusicInfo.musicInfo) + if (createGettingUrlId(playerState.playMusicInfo.musicInfo) != global.lx.gettingUrlId) setMusicUrl(playerState.playMusicInfo.musicInfo) return } void setPlay() @@ -509,3 +523,38 @@ export const togglePlay = () => { play() } } + +/** + * 收藏当前播放的歌曲 + */ +export const collectMusic = () => { + if (!playerState.playMusicInfo.musicInfo) return + void addListMusics(LIST_IDS.LOVE, [ + 'progress' in playerState.playMusicInfo.musicInfo + ? playerState.playMusicInfo.musicInfo.metadata.musicInfo + : playerState.playMusicInfo.musicInfo, + ], settingState.setting['list.addMusicLocationType']) +} + +/** + * 取消收藏当前播放的歌曲 + */ +export const uncollectMusic = () => { + if (!playerState.playMusicInfo.musicInfo) return + void removeListMusics(LIST_IDS.LOVE, [ + 'progress' in playerState.playMusicInfo.musicInfo + ? playerState.playMusicInfo.musicInfo.metadata.musicInfo.id + : playerState.playMusicInfo.musicInfo.id, + ]) +} + +/** + * 不喜欢当前播放的歌曲 + */ +export const dislikeMusic = async() => { + if (!playerState.playMusicInfo.musicInfo) return + const minfo = 'progress' in playerState.playMusicInfo.musicInfo ? playerState.playMusicInfo.musicInfo.metadata.musicInfo : playerState.playMusicInfo.musicInfo + await addDislikeInfo([{ name: minfo.name, singer: minfo.singer }]) + await playNext(true) +} + diff --git a/src/lang/en_us.json b/src/lang/en_us.json index ef1b742..feed6d7 100644 --- a/src/lang/en_us.json +++ b/src/lang/en_us.json @@ -37,6 +37,7 @@ "date_format_hour": "{num} hours ago", "date_format_minute": "{num} minutes ago", "date_format_second": "{num} seconds ago", + "deep_link__handle_error_tip": "Call failed: {message}", "delete": "Delete", "dialog_cancel": "No", "dialog_confirm": "OK", @@ -457,6 +458,7 @@ "timeout_exit_tip_max": "You can only set up to {num} minutes", "timeout_exit_tip_off": "Set timer to stop playing", "timeout_exit_tip_on": "Stop playing after {time}", + "toggle_source": "Source change", "toggle_source_failed": "Failed to change the source, please try to manually search for the song in other sources to play", "toggle_source_try": "Try switching to another source...", "understand": "Already understood 👌", diff --git a/src/lang/zh_cn.json b/src/lang/zh_cn.json index 36b6447..34a5302 100644 --- a/src/lang/zh_cn.json +++ b/src/lang/zh_cn.json @@ -37,6 +37,7 @@ "date_format_hour": "{num}小时前", "date_format_minute": "{num}分钟前", "date_format_second": "{num}秒前", + "deep_link__handle_error_tip": "调用失败:{message}", "delete": "删除", "dialog_cancel": "我不", "dialog_confirm": "好的", @@ -458,6 +459,7 @@ "timeout_exit_tip_max": "最多只能设置{num}分钟哦", "timeout_exit_tip_off": "设置定时停止播放", "timeout_exit_tip_on": "{time} 后停止播放", + "toggle_source": "歌曲换源", "toggle_source_failed": "换源失败,请尝试手动在其他源搜索该歌曲播放", "toggle_source_try": "尝试切换到其他源...", "understand": "已了解 👌", diff --git a/src/navigation/components/PactModal.tsx b/src/navigation/components/PactModal.tsx index f2648d3..5126bac 100644 --- a/src/navigation/components/PactModal.tsx +++ b/src/navigation/components/PactModal.tsx @@ -11,6 +11,7 @@ import ModalContent from './ModalContent' import { exitApp } from '@/utils/nativeModules/utils' import { updateSetting } from '@/core/common' import { checkUpdate } from '@/core/version' +import { initDeeplink } from '@/core/init/deeplink' const Content = () => { const theme = useTheme() @@ -88,6 +89,7 @@ const Footer = ({ componentId }: { componentId: string }) => { text: Buffer.from('e5a5bde79a8420284f4b29', 'hex').toString(), onPress: () => { void checkUpdate() + void initDeeplink() }, }], ) diff --git a/src/resources/fonts/icomoon.ttf b/src/resources/fonts/icomoon.ttf index 0630e3f..20a3dd2 100644 Binary files a/src/resources/fonts/icomoon.ttf and b/src/resources/fonts/icomoon.ttf differ diff --git a/src/resources/fonts/selection.json b/src/resources/fonts/selection.json index 62ab936..dc249a7 100644 --- a/src/resources/fonts/selection.json +++ b/src/resources/fonts/selection.json @@ -1 +1 @@ -{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M512 185.28c-180.135 0-326.72 146.585-326.72 326.72s146.585 326.72 326.72 326.72c180.135 0 326.72-146.585 326.72-326.72s-146.585-326.72-326.72-326.72z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["full_stop"],"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":104,"id":52,"name":"full_stop","prevSize":32,"code":59695},"setIdx":0,"setId":2,"iconIdx":0},{"icon":{"paths":["M378.5 85.333c-25.45 0-49.884 10.102-67.875 28.125l-111.833 111.833c-18.023 17.991-28.125 42.425-28.125 67.875v101.5c0.002 17.672 14.328 31.998 32 32l32 0v42.667h-32c-17.672 0.002-31.998 14.328-32 32l-0 0v320c0 64.422 52.911 117.333 117.333 117.333h448c64.422 0 117.333-52.911 117.333-117.333v-618.667c0-64.422-52.911-117.333-117.333-117.333h-357.5zM378.5 149.333h357.5c29.829 0 53.333 23.505 53.333 53.333v618.667c0 29.829-23.505 53.333-53.333 53.333h-448c-29.829 0-53.333-23.505-53.333-53.333v-288h32c17.672-0.002 31.998-14.328 32-32l0-0v-106.667c-0.002-17.672-14.328-31.998-32-32l-32-0v-69.5c0-8.512 3.376-16.595 9.375-22.583l111.875-111.875c5.988-5.999 14.071-9.375 22.583-9.375zM394.167 191.542c-17.459 0.281-31.503 14.5-31.503 31.999 0 0.161 0.001 0.323 0.004 0.483l-0-0.024v106.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-106.667c0.002-0.136 0.003-0.298 0.003-0.459 0-17.675-14.328-32.003-32.003-32.003-0.176 0-0.351 0.001-0.526 0.004l0.026-0zM500.833 191.542c-17.459 0.281-31.503 14.5-31.503 31.999 0 0.161 0.001 0.323 0.004 0.483l-0-0.024v106.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-106.667c0.002-0.136 0.003-0.298 0.003-0.459 0-17.675-14.328-32.003-32.003-32.003-0.176 0-0.351 0.001-0.526 0.004l0.026-0zM607.5 191.542c-17.459 0.281-31.503 14.5-31.503 31.999 0 0.161 0.001 0.323 0.004 0.483l-0-0.024v106.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-106.667c0.002-0.136 0.003-0.298 0.003-0.459 0-17.675-14.328-32.003-32.003-32.003-0.176 0-0.351 0.001-0.526 0.004l0.026-0zM714.167 191.542c-17.459 0.281-31.503 14.5-31.503 31.999 0 0.161 0.001 0.323 0.004 0.483l-0-0.024v106.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-106.667c0.002-0.136 0.003-0.298 0.003-0.459 0-17.675-14.328-32.003-32.003-32.003-0.176 0-0.351 0.001-0.526 0.004l0.026-0z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["sd-card"],"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":98,"id":50,"name":"sd-card","prevSize":32,"code":59696},"setIdx":0,"setId":2,"iconIdx":1},{"icon":{"paths":["M512 85.333c-235.263 0-426.667 191.404-426.667 426.667s191.404 426.667 426.667 426.667c235.263 0 426.667-191.404 426.667-426.667s-191.404-426.667-426.667-426.667zM512 149.333c200.674 0 362.667 161.992 362.667 362.667s-161.992 362.667-362.667 362.667c-200.674 0-362.667-161.992-362.667-362.667s161.992-362.667 362.667-362.667zM512 277.333c-70.312 0-128 57.688-128 128v10.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-10.667c0-35.715 28.285-64 64-64s64 28.285 64 64c0 49.939-12.984 56.197-35.75 74.083-11.383 8.943-26.292 19.254-39.042 36.625s-21.208 41.585-21.208 70.625c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024c0-18.202 3.541-25.596 8.792-32.75s14.341-14.254 26.958-24.167c25.234-19.826 60.25-57.023 60.25-124.417 0-70.312-57.688-128-128-128zM512 682.667c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667v0c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667v0z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-help"],"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":97,"id":49,"name":"help","prevSize":32,"code":59694},"setIdx":0,"setId":2,"iconIdx":2},{"icon":{"paths":["M810.667 128h-597.333c-47.36 0-85.333 37.973-85.333 85.333v597.333c0 47.128 38.205 85.333 85.333 85.333v0h597.333c47.128 0 85.333-38.205 85.333-85.333v0-597.333c0-47.36-38.4-85.333-85.333-85.333zM810.667 213.333v597.333h-597.333v-597.333h597.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["checkbox"],"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":95,"id":3,"name":"checkbox-blank-outline","prevSize":32,"code":59691},"setIdx":0,"setId":2,"iconIdx":3},{"icon":{"paths":["M426.667 725.333l-213.333-213.333 60.16-60.587 153.173 153.173 323.84-323.84 60.16 60.587zM810.667 128h-597.333c-47.36 0-85.333 37.973-85.333 85.333v597.333c0 47.128 38.205 85.333 85.333 85.333v0h597.333c47.128 0 85.333-38.205 85.333-85.333v0-597.333c0-47.36-38.4-85.333-85.333-85.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["checkbox"],"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":96,"id":4,"name":"checkbox-marked","prevSize":32,"code":59692},"setIdx":0,"setId":2,"iconIdx":4},{"icon":{"paths":["M725.333 554.667h-426.667v-85.333h426.667zM810.667 128h-597.333c-47.36 0-85.333 37.973-85.333 85.333v597.333c0 47.128 38.205 85.333 85.333 85.333v0h597.333c47.128 0 85.333-38.205 85.333-85.333v0-597.333c0-47.36-38.4-85.333-85.333-85.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["checkbox"],"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":51,"id":5,"name":"minus-box","prevSize":32,"code":59693},"setIdx":0,"setId":2,"iconIdx":5},{"icon":{"paths":["M510.718-13.119c-8.781 0.309-16.775 3.446-23.157 8.523l0.080-0.062-373.172 293.995c-47.363 37.326-75.076 94.363-75.076 154.664v501.222c0 35.802 29.837 65.639 65.639 65.639h262.559c35.802 0 65.639-29.837 65.639-65.639v-262.559c0-7.746 5.381-13.128 13.128-13.128h131.28c7.746 0 13.128 5.381 13.128 13.128v262.559c0 35.802 29.837 65.639 65.639 65.639h262.559c35.802 0 65.639-29.837 65.639-65.639v-501.222c0-60.3-27.713-117.338-75.076-154.664l-373.172-293.995c-6.644-5.286-15.157-8.48-24.416-8.48-0.431 0-0.86 0.007-1.287 0.021l0.063-0.001zM512 76.418l348.815 274.816c28.465 22.433 45.024 56.552 45.024 92.768v488.093h-236.303v-249.432c0-50.278-41.616-91.896-91.896-91.896h-131.28c-50.278 0-91.896 41.616-91.896 91.896v249.432h-236.303v-488.093c0-36.216 16.561-70.335 45.024-92.768l348.815-274.816z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-home"],"defaultCode":59690,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":52,"id":6,"name":"home","prevSize":32,"code":59690},"setIdx":0,"setId":2,"iconIdx":6},{"icon":{"paths":["M56.89 113.777h910.222c31.419 0 56.889 25.469 56.889 56.889s-25.469 56.889-56.889 56.889v0h-910.222c-31.419 0-56.889-25.469-56.889-56.889s25.469-56.889 56.889-56.889v0zM56.89 455.111h910.222c31.419 0 56.889 25.469 56.889 56.889s-25.469 56.889-56.889 56.889v0h-910.222c-31.419 0-56.889-25.469-56.889-56.889s25.469-56.889 56.889-56.889v0zM56.89 796.446h910.222c31.419 0 56.889 25.469 56.889 56.889s-25.469 56.889-56.889 56.889v0h-910.222c-31.419 0-56.889-25.469-56.889-56.889s25.469-56.889 56.889-56.889v0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["icon-menu"],"defaultCode":59680,"grid":128,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":53,"id":7,"name":"menu","prevSize":32,"code":59680},"setIdx":0,"setId":2,"iconIdx":7},{"icon":{"paths":["M69.048 478.058l388.688-388.686c18.746-18.746 49.138-18.746 67.882 0l45.334 45.334c18.714 18.714 18.75 49.044 0.080 67.802l-308.042 309.492 308.042 309.49c18.67 18.758 18.634 49.088-0.080 67.802l-45.334 45.334c-18.746 18.746-49.138 18.746-67.882 0l-388.686-388.686c-18.746-18.744-18.746-49.136-0.002-67.882z"],"width":640,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["icon-chevron-left"],"defaultCode":59664,"grid":128,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":54,"id":8,"name":"chevron-left","prevSize":32,"code":59664},"setIdx":0,"setId":2,"iconIdx":8},{"icon":{"paths":["M570.952 545.942l-388.688 388.686c-18.746 18.746-49.138 18.746-67.882 0l-45.334-45.334c-18.714-18.714-18.75-49.044-0.080-67.802l308.042-309.492-308.042-309.49c-18.67-18.758-18.634-49.088 0.080-67.802l45.334-45.334c18.746-18.746 49.138-18.746 67.882 0l388.686 388.686c18.746 18.744 18.746 49.136 0.002 67.882z"],"width":640,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["icon-chevron-right"],"defaultCode":59689,"grid":128,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":55,"id":9,"prevSize":32,"name":"chevron-right","code":59689},"setIdx":0,"setId":2,"iconIdx":9},{"icon":{"paths":["M326.352-0.185c-11.523 0.347-21.847 5.211-29.312 12.875l-284.34 284.34c-7.716 7.718-12.487 18.379-12.487 30.155s4.771 22.436 12.487 30.155l284.33 284.33c7.774 8.087 18.685 13.112 30.768 13.112 23.557 0 42.654-19.096 42.654-42.654 0-12.083-5.025-22.993-13.099-30.754l-0.015-0.013-211.526-211.526h508.353c157.526 0 284.33 126.804 284.33 284.33s-126.804 284.33-284.33 284.33h-213.248c-0.18-0.003-0.391-0.004-0.604-0.004-23.557 0-42.654 19.096-42.654 42.654s19.096 42.654 42.654 42.654c0.212 0 0.424-0.001 0.636-0.004h213.216c203.631 0 369.63-166 369.63-369.63s-166-369.63-369.63-369.63h-508.353l211.526-211.526c7.958-7.757 12.895-18.581 12.895-30.557 0-23.557-19.096-42.654-42.654-42.654-0.432 0-0.862 0.007-1.291 0.019l0.063-0.001z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-back-2"],"defaultCode":59676,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":56,"id":10,"name":"back-2","prevSize":32,"code":59676},"setIdx":0,"setId":2,"iconIdx":10},{"icon":{"paths":["M842.375 148.875c-8.79 0.214-16.67 3.94-22.323 9.823l-0.010 0.011-308.042 308.042-308.042-308.042c-5.822-5.991-13.956-9.708-22.958-9.708l-0-0c-17.672 0.004-31.995 14.331-31.995 32.003 0 9 3.715 17.133 9.696 22.948l0.007 0.007 308.042 308.042-308.042 308.042c-6.068 5.833-9.838 14.019-9.838 23.085 0 17.675 14.328 32.003 32.003 32.003 9.066 0 17.252-3.77 23.075-9.828l0.010-0.011 308.042-308.042 308.042 308.042c5.833 6.068 14.019 9.838 23.085 9.838 17.675 0 32.003-14.328 32.003-32.003 0-9.066-3.77-17.252-9.828-23.075l-0.011-0.010-308.042-308.042 308.042-308.042c6.071-5.834 9.842-14.021 9.842-23.089 0-17.675-14.328-32.003-32.003-32.003-0.266 0-0.531 0.003-0.795 0.010l0.039-0.001z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-remove"],"defaultCode":59688,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":57,"id":11,"name":"remove","prevSize":32,"code":59688},"setIdx":0,"setId":2,"iconIdx":11},{"icon":{"paths":["M735.375 63.708c-8.646 0.26-16.392 3.91-21.993 9.66l-0.007 0.007-416 416c-5.789 5.791-9.369 13.79-9.369 22.625s3.58 16.834 9.369 22.625l416 416c5.833 6.068 14.019 9.838 23.085 9.838 17.675 0 32.003-14.328 32.003-32.003 0-9.066-3.77-17.252-9.828-23.075l-0.011-0.010-393.375-393.375 393.375-393.375c5.971-5.82 9.675-13.941 9.675-22.927 0-17.675-14.328-32.003-32.003-32.003-0.324 0-0.647 0.005-0.969 0.014l0.047-0.001z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-chevron-left-2"],"defaultCode":59663,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":58,"id":12,"name":"chevron-left-2","prevSize":32,"code":59663},"setIdx":0,"setId":2,"iconIdx":12},{"icon":{"paths":["M394.333 63.667c-17.672 0.004-31.995 14.331-31.995 32.003 0 9 3.715 17.133 9.696 22.948l0.007 0.007 393.375 393.375-393.375 393.375c-6.068 5.833-9.838 14.019-9.838 23.085 0 17.675 14.328 32.003 32.003 32.003 9.066 0 17.252-3.77 23.075-9.828l0.010-0.011 416-416c5.789-5.791 9.369-13.79 9.369-22.625s-3.58-16.834-9.369-22.625l-416-416c-5.822-5.991-13.956-9.708-22.958-9.708l-0-0z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-chevron-right-2"],"defaultCode":59677,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":59,"id":13,"name":"chevron-right-2","prevSize":32,"code":59677},"setIdx":0,"setId":2,"iconIdx":13},{"icon":{"paths":["M693.333 106.667c-52.64 0-96 43.36-96 96v10.667h-480c-0.135-0.002-0.293-0.003-0.453-0.003-17.675 0-32.003 14.328-32.003 32.003s14.328 32.003 32.003 32.003c0.159 0 0.318-0.001 0.477-0.003l-0.024 0h480v10.667c0 52.64 43.36 96 96 96s96-43.36 96-96v-10.667h117.333c0.135 0.002 0.293 0.003 0.453 0.003 17.675 0 32.003-14.328 32.003-32.003s-14.328-32.003-32.003-32.003c-0.159 0-0.318 0.001-0.477 0.003l0.024-0h-117.333v-10.667c0-52.64-43.36-96-96-96zM693.333 170.667c18.059 0 32 13.941 32 32v37.417c-0.269 1.559-0.423 3.356-0.423 5.187s0.154 3.628 0.45 5.376l-0.026-0.188v37.542c0 18.059-13.941 32-32 32s-32-13.941-32-32v-37.417c0.269-1.559 0.423-3.356 0.423-5.187s-0.154-3.628-0.45-5.376l0.026 0.188v-37.542c0-18.059 13.941-32 32-32zM330.667 373.333c-52.64 0-96 43.36-96 96v10.667h-117.333c-0.135-0.002-0.293-0.003-0.453-0.003-17.675 0-32.003 14.328-32.003 32.003s14.328 32.003 32.003 32.003c0.159 0 0.318-0.001 0.477-0.003l-0.024 0h117.333v10.667c0 52.64 43.36 96 96 96s96-43.36 96-96v-10.667h480c0.135 0.002 0.293 0.003 0.453 0.003 17.675 0 32.003-14.328 32.003-32.003s-14.328-32.003-32.003-32.003c-0.159 0-0.318 0.001-0.477 0.003l0.024-0h-480v-10.667c0-52.64-43.36-96-96-96zM330.667 437.333c18.059 0 32 13.941 32 32v37.417c-0.269 1.559-0.423 3.356-0.423 5.187s0.154 3.628 0.45 5.376l-0.026-0.188v37.542c0 18.059-13.941 32-32 32s-32-13.941-32-32v-37.417c0.269-1.559 0.423-3.356 0.423-5.187s-0.154-3.628-0.45-5.376l0.026 0.188v-37.542c0-18.059 13.941-32 32-32zM650.667 640c-52.64 0-96 43.36-96 96v10.667h-437.333c-0.135-0.002-0.293-0.003-0.453-0.003-17.675 0-32.003 14.328-32.003 32.003s14.328 32.003 32.003 32.003c0.159 0 0.318-0.001 0.477-0.003l-0.024 0h437.333v10.667c0 52.64 43.36 96 96 96s96-43.36 96-96v-10.667h160c0.135 0.002 0.293 0.003 0.453 0.003 17.675 0 32.003-14.328 32.003-32.003s-14.328-32.003-32.003-32.003c-0.159 0-0.318 0.001-0.477 0.003l0.024-0h-160v-10.667c0-52.64-43.36-96-96-96zM650.667 704c18.059 0 32 13.941 32 32v37.417c-0.269 1.559-0.423 3.356-0.423 5.187s0.154 3.628 0.45 5.376l-0.026-0.188v37.542c0 18.059-13.941 32-32 32s-32-13.941-32-32v-37.417c0.269-1.559 0.423-3.356 0.423-5.187s-0.154-3.628-0.45-5.376l0.026 0.188v-37.542c0-18.059 13.941-32 32-32z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-slider"],"defaultCode":59687,"colorPermutations":{"25525525519191911":[]}},"attrs":[],"properties":{"order":60,"id":14,"name":"slider","prevSize":32,"code":59687},"setIdx":0,"setId":2,"iconIdx":14},{"icon":{"paths":["M953.53 703.521c-18.424 5.13-37.468 7.696-56.594 7.624-46.633 0-82.019-16.794-106.154-50.382s-36.204-83.451-36.206-149.587c-0.383-28.361 2.926-56.655 9.836-84.167 6.56-24.605 15.931-45.434 28.121-62.49 11.454-16.414 26.71-29.815 44.465-39.055 18.138-9.144 38.216-13.765 58.522-13.476 19.737-0.188 39.394 2.51 58.352 8.006 18.15 5.494 35.518 13.306 51.67 23.24v-68.358c-16.76-8.293-34.465-14.52-52.726-18.551-19.525-4.167-39.443-6.193-59.405-6.054-31.407 0-59.761 6.249-85.066 18.746-25.375 12.553-47.509 30.799-64.671 53.31-17.811 23.043-31.52 51.098-41.122 84.167s-14.409 70.041-14.412 110.917c0 84.359 17.4 148.087 52.197 191.181s84.652 64.639 149.568 64.637c39.94 0.084 79.414-8.581 115.646-25.386v-65.608c-16.474 9.050-33.93 16.191-52.022 21.288z","M81.72 707.623v-451.111h-63.624v510.485h264.342v-59.374h-0.007z","M565.077 549.641c-5.179-7.413-11.673-13.745-19.109-18.731l-8.622-8.648c13.226-3.886 25.788-9.788 37.223-17.525 11.983-8.146 22.452-18.326 30.931-30.073 8.395-11.742 14.752-24.812 18.806-38.666 4.284-14.652 6.415-29.847 6.328-45.109 0.223-18.642-2.685-37.195-8.607-54.876-5.47-16.104-14.752-30.645-27.065-42.375-13.575-12.459-29.713-21.792-47.278-27.339-19.217-6.506-42.18-9.762-68.895-9.764h-123.032v83.59l-259.699-260.476-43.525 43.405 303.219 304.133v339.812h62.559v-227.309h29.527c7.657-0.091 15.284 0.829 22.718 2.644l51.401 51.555c1.51 3.241 2.957 6.508 4.28 9.834l68.542 163.277h70.662l-22.372-51.635 228.306 228.994 43.525-43.407-348.903-349.953c-0.31-0.45-0.608-0.909-0.921-1.359zM418.312 315.103h59.063c27.885 0 49.502 6.77 64.853 20.309s23.026 33.977 23.023 61.319c0.243 12.767-2.086 25.451-6.854 37.297v0.005c-4.316 10.446-10.922 19.789-19.333 27.339-8.773 7.677-19.075 13.402-30.23 16.794-4.076 1.238-8.209 2.255-12.372 3.090l-78.151-78.384v-87.768z"],"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-lyric-off"],"colorPermutations":{"25525525519191911":[{},{},{}]}},"attrs":[{},{},{}],"properties":{"order":107,"id":56,"name":"lyric-off","prevSize":32,"code":59697},"setIdx":0,"setId":2,"iconIdx":15},{"icon":{"paths":["M280.698 708.793h-201.648v-453.218h-63.922v512.869h265.574v-59.653zM592.39 599.711c-8.373-19.027-17.636-35.333-28.339-50.559l0.615 0.921c-8.197-11.627-19.414-20.62-32.53-25.916l-0.492-0.174c16.178-4.134 30.373-10.673 43.015-19.32l-0.461 0.296c12.16-8.339 22.452-18.356 30.83-29.854l0.249-0.36c8.039-11.114 14.485-24.031 18.657-37.93l0.234-0.915c4.037-13.298 6.36-28.577 6.36-44.401 0-0.324-0.001-0.646-0.002-0.966v0.051c0.006-0.597 0.012-1.306 0.012-2.010 0-19.007-3.172-37.271-9.009-54.294l0.352 1.177c-5.802-16.78-15.127-31.060-27.152-42.532l-0.041-0.038c-13.172-12.122-29.052-21.535-46.601-27.218l-0.895-0.251q-28.96-9.807-69.219-9.812h-123.607v512.845h62.852v-228.369h29.664c0.325-0.003 0.709-0.005 1.089-0.005 8.468 0 16.668 1.149 24.452 3.297l-0.644-0.154c7.851 2.265 14.683 5.83 20.611 10.495l-0.128-0.098c6.832 5.546 12.631 12.020 17.287 19.296l0.193 0.323c5.745 8.903 11.078 19.163 15.449 29.915l0.453 1.258 68.861 164.037h70.992zM557.955 433.93c-4.55 10.838-11.136 20.005-19.353 27.408l-0.068 0.061c-8.479 7.451-18.622 13.234-29.784 16.715l-0.586 0.16c-11.456 3.613-24.626 5.693-38.286 5.693-0.63 0-1.263-0.004-1.894-0.013l0.097 0.001h-50.866v-169.51h59.34q42.023 0 65.156 20.402t23.13 61.606c0.011 0.544 0.019 1.182 0.019 1.824 0 12.844-2.535 25.096-7.135 36.286l0.23-0.635zM1007.199 683.285c-14.963 8.404-32.307 15.691-50.508 20.952l-1.754 0.433c-16.803 4.863-36.101 7.658-56.055 7.658-0.283 0-0.562 0-0.846-0.001h0.042q-70.279 0-106.65-50.616t-36.376-150.287c-0.020-1.313-0.031-2.861-0.031-4.415 0-28.467 3.615-56.085 10.411-82.427l-0.498 2.285q9.883-37.078 28.252-62.783c11.565-16.427 26.556-29.68 43.998-38.913l0.679-0.327c16.587-8.542 36.203-13.552 56.985-13.552 0.636 0 1.274 0.004 1.907 0.013l-0.098-0.001c0.57-0.005 1.248-0.007 1.926-0.007 20.2 0 39.718 2.943 58.141 8.42l-1.442-0.366c19.78 6.074 36.984 14.010 52.848 23.894l-0.94-0.547v-68.677c-15.213-7.722-32.895-14.138-51.415-18.338l-1.556-0.296c-17.353-3.872-37.283-6.088-57.733-6.088-0.686 0-1.369 0.002-2.055 0.006h0.103q-47.327 0-85.465 18.836c-26.035 13.060-47.76 31.136-64.652 53.123l-0.323 0.436q-26.84 34.723-41.316 84.558t-14.481 111.434q0 127.133 52.442 192.073t150.267 64.939c0.168 0 0.366 0 0.567 0 41.958 0 81.716-9.402 117.289-26.216l-1.674 0.711v-65.913z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-lyric-on"],"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":101,"id":53,"name":"lyric-on","prevSize":32,"code":59698},"setIdx":0,"setId":2,"iconIdx":16},{"icon":{"paths":["M212.62 135.003c-79.211 0-144.145 64.933-144.145 144.145v376.997c0 79.211 64.933 144.145 144.145 144.145h33.264v121.969c0 43.599 53.828 70.497 88.705 44.353l221.761-166.322h255.027c79.211 0 144.145-64.933 144.145-144.145v-376.997c0-79.211-64.933-144.145-144.145-144.145h-598.758zM212.62 201.533h598.758c43.245 0 77.617 34.371 77.617 77.617v376.997c0 43.245-34.371 77.617-77.617 77.617h-266.114c-7.531 0.003-14.476 2.51-20.050 6.731l0.084-0.060-212.884 159.651v-133.058c-0.002-18.37-14.894-33.262-33.264-33.264h-66.528c-43.245 0-77.617-34.371-77.617-77.617v-376.997c0-43.245 34.371-77.617 77.617-77.617zM323.503 356.723c-0.141-0.002-0.305-0.003-0.471-0.003-18.373 0-33.267 14.894-33.267 33.267s14.894 33.267 33.267 33.267c0.165 0 0.33-0.001 0.495-0.003h376.971c0.141 0.002 0.305 0.003 0.471 0.003 18.373 0 33.267-14.894 33.267-33.267s-14.894-33.267-33.267-33.267c-0.165 0-0.33 0.001-0.495 0.003h-376.971zM323.503 511.956c-0.141-0.002-0.305-0.003-0.471-0.003-18.373 0-33.267 14.894-33.267 33.267s14.894 33.267 33.267 33.267c0.165 0 0.33-0.001 0.495-0.003h288.265c0.141 0.002 0.305 0.003 0.471 0.003 18.373 0 33.267-14.894 33.267-33.267s-14.894-33.267-33.267-33.267c-0.165 0-0.33 0.001-0.495 0.003h-288.265z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-comment"],"defaultCode":59672,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":61,"id":15,"name":"comment","prevSize":32,"code":59672},"setIdx":0,"setId":2,"iconIdx":17},{"icon":{"paths":["M245.333 128c-64.704 0-117.333 52.629-117.333 117.333v533.333c0 64.704 52.629 117.333 117.333 117.333h533.333c64.704 0 117.333-52.629 117.333-117.333v-533.333c0-64.704-52.629-117.333-117.333-117.333h-533.333zM245.333 192h533.333c29.397 0 53.333 23.936 53.333 53.333v533.333c0 29.397-23.936 53.333-53.333 53.333h-533.333c-29.397 0-53.333-23.936-53.333-53.333v-533.333c0-29.397 23.936-53.333 53.333-53.333zM387.583 278.917l149.958 233.083-149.958 233.083h138.167l151.667-233.083-151.667-233.083h-138.167z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-playback-rate"],"defaultCode":59674,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":62,"id":16,"name":"playback-rate","prevSize":32,"code":59674},"setIdx":0,"setId":2,"iconIdx":18},{"icon":{"paths":["M559.292 130.167c-2.813-0.004-5.639 0.202-8.458 0.583-11.277 1.526-22.4 6.179-31.583 14.333-0 0.006-0 0.014-0 0.021s0 0.015 0 0.022l-0-0.001-196.75 174.875h-141.167c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h141.167l196.75 174.875c18.364 16.326 44.408 18.728 64.125 9.875s35.292-29.926 35.292-54.5v-644.5c0-24.565-15.531-45.644-35.25-54.5-7.394-3.321-15.686-5.070-24.125-5.083zM554.667 199.25v625.5l-198.75-176.667c-5.622-5.015-13.078-8.080-21.249-8.083l-153.334-0c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h153.333c8.172-0.003 15.628-3.068 21.282-8.111l-0.032 0.028 198.75-176.667zM927.708 383.542c-8.79 0.214-16.67 3.94-22.323 9.823l-0.010 0.011-73.375 73.375-73.375-73.375c-5.822-5.991-13.956-9.708-22.958-9.708l-0-0c-17.672 0.004-31.995 14.331-31.995 32.003 0 9 3.715 17.133 9.696 22.948l0.007 0.007 73.375 73.375-73.375 73.375c-6.068 5.833-9.838 14.019-9.838 23.085 0 17.675 14.328 32.003 32.003 32.003 9.066 0 17.252-3.77 23.075-9.828l0.010-0.011 73.375-73.375 73.375 73.375c5.833 6.068 14.019 9.838 23.085 9.838 17.675 0 32.003-14.328 32.003-32.003 0-9.066-3.77-17.252-9.828-23.075l-0.011-0.010-73.375-73.375 73.375-73.375c6.071-5.833 9.842-14.021 9.842-23.089 0-17.675-14.328-32.003-32.003-32.003-0.266 0-0.531 0.003-0.795 0.010l0.039-0.001z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-mute"],"defaultCode":59682,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":63,"id":17,"name":"volume-mute","prevSize":32,"code":59682},"setIdx":0,"setId":2,"iconIdx":19},{"icon":{"paths":["M687.292 130.167c-2.813-0.004-5.639 0.202-8.458 0.583-11.277 1.526-22.4 6.179-31.583 14.333-0 0.006-0 0.014-0 0.021s0 0.015 0 0.022l-0-0.001-196.75 174.875h-141.167c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h141.167l196.75 174.875c18.364 16.326 44.408 18.728 64.125 9.875s35.292-29.926 35.292-54.5v-644.5c0-24.565-15.531-45.644-35.25-54.5-7.394-3.321-15.686-5.070-24.125-5.083zM682.667 199.25v625.5l-198.75-176.667c-5.622-5.015-13.078-8.080-21.249-8.083l-153.334-0c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h153.333c8.172-0.003 15.628-3.068 21.282-8.111l-0.032 0.028 198.75-176.667z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-off"],"defaultCode":59683,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":64,"id":18,"name":"volume-off","prevSize":32,"code":59683},"setIdx":0,"setId":2,"iconIdx":20},{"icon":{"paths":["M644.625 130.167c-2.813-0.004-5.639 0.202-8.458 0.583-11.277 1.526-22.4 6.179-31.583 14.333-0 0.006-0 0.014-0 0.021s0 0.015 0 0.022l-0-0.001-196.75 174.875h-141.167c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h141.167l196.75 174.875c18.364 16.326 44.408 18.728 64.125 9.875s35.292-29.926 35.292-54.5v-644.5c0-24.565-15.531-45.644-35.25-54.5-7.394-3.321-15.686-5.070-24.125-5.083zM640 199.25v625.5l-198.75-176.667c-5.622-5.015-13.078-8.080-21.249-8.083l-153.334-0c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h153.333c8.172-0.003 15.628-3.068 21.282-8.111l-0.032 0.028 198.75-176.667zM793 362.583c-17.078 0.752-30.639 14.779-30.639 31.974 0 4.991 1.142 9.715 3.18 13.925l-0.083-0.191c32.353 70.794 32.308 136.984-0.167 207.792-1.89 3.961-2.993 8.609-2.993 13.514 0 17.675 14.328 32.003 32.003 32.003 12.893 0 24.006-7.625 29.075-18.611l0.082-0.198c39.205-85.481 39.279-175.631 0.208-261.125-5.085-11.349-16.282-19.113-29.292-19.113-0.483 0-0.964 0.011-1.442 0.032l0.068-0.002z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-low"],"defaultCode":59684,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":65,"id":19,"name":"volume-low","prevSize":32,"code":59684},"setIdx":0,"setId":2,"iconIdx":21},{"icon":{"paths":["M594.083 128.667c-4.952-0.641-10.063-0.606-15.125 0.125-10.124 1.461-20.056 5.758-28.167 13.125-0.159 0.139-0.281 0.248-0.402 0.358l0.027-0.024-180.5 169.083c-5.945 5.571-13.738 8.667-21.875 8.667h-166.708c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h166.708c8.137 0 15.93 3.096 21.875 8.667l180.5 169.083c0.094 0.085 0.216 0.194 0.339 0.302l0.036 0.031c16.222 14.734 39.769 17.16 57.458 9.333s31.75-26.876 31.75-48.792v-661.25c0-21.916-14.061-40.965-31.75-48.792-4.422-1.957-9.215-3.275-14.167-3.917zM576 205.958v612.083l-162.333-152.083c-17.778-16.659-41.25-25.958-65.625-25.958h-166.708c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h166.708c24.375 0 47.847-9.3 65.625-25.958l162.333-152.083zM837.292 246.875c-0.060-0-0.131-0.001-0.202-0.001-17.675 0-32.003 14.328-32.003 32.003 0 6.667 2.039 12.858 5.527 17.984l-0.071-0.111c40.473 61.983 64.125 135.68 64.125 215.25s-23.652 153.267-64.125 215.25c-3.584 5.097-5.727 11.433-5.727 18.27 0 17.675 14.328 32.003 32.003 32.003 11.502 0 21.587-6.068 27.228-15.177l0.079-0.137c46.951-71.905 74.542-157.917 74.542-250.208s-27.59-178.304-74.542-250.208c-5.722-8.959-15.583-14.834-26.821-14.917l-0.012-0zM746.917 346.833c-0.13-0.002-0.282-0.003-0.436-0.003-17.675 0-32.003 14.328-32.003 32.003 0 5.456 1.365 10.593 3.773 15.088l-0.084-0.172c18.144 35.641 28.5 75.635 28.5 118.25s-10.356 82.609-28.5 118.25c-2.504 4.458-3.979 9.784-3.979 15.455 0 17.675 14.328 32.003 32.003 32.003 12.741 0 23.744-7.446 28.893-18.224l0.083-0.193c22.474-44.146 35.5-94.248 35.5-147.292s-13.026-103.146-35.5-147.292c-5.268-10.538-15.902-17.689-28.225-17.875l-0.025-0z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-medium"],"defaultCode":59685,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":66,"id":20,"name":"volume-medium","prevSize":32,"code":59685},"setIdx":0,"setId":2,"iconIdx":22},{"icon":{"paths":["M516.625 130.167c-2.813-0.004-5.639 0.202-8.458 0.583-11.277 1.526-22.4 6.179-31.583 14.333-0 0.006-0 0.014-0 0.021s0 0.015 0 0.022l-0-0.001-196.75 174.875h-141.167c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h141.167l196.75 174.875c18.364 16.326 44.408 18.728 64.125 9.875s35.292-29.926 35.292-54.5v-644.5c0-24.565-15.531-45.644-35.25-54.5-7.394-3.321-15.686-5.070-24.125-5.083zM858 170.292c-17.11 0.713-30.712 14.756-30.712 31.977 0 6.070 1.69 11.746 4.625 16.582l-0.080-0.142c114.831 198.084 115.245 388.522 0.042 586.542-3.085 4.833-4.917 10.725-4.917 17.046 0 17.675 14.328 32.003 32.003 32.003 12.138 0 22.697-6.757 28.122-16.714l0.084-0.168c124.583-214.14 124.143-436.716 0.042-650.792-5.587-9.834-15.991-16.359-27.919-16.359-0.453 0-0.905 0.009-1.353 0.028l0.064-0.002zM512 199.25v625.5l-198.75-176.667c-5.622-5.015-13.078-8.080-21.249-8.083l-153.334-0c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h153.333c8.172-0.003 15.628-3.068 21.282-8.111l-0.032 0.028 198.75-176.667zM762.792 255.583c-0.039-0-0.085-0-0.131-0-17.675 0-32.003 14.328-32.003 32.003 0 5.571 1.423 10.809 3.926 15.372l-0.084-0.166c73.798 141.328 73.798 277.089 0 418.417-2.436 4.408-3.869 9.663-3.869 15.253 0 17.675 14.328 32.003 32.003 32.003 12.451 0 23.241-7.11 28.532-17.492l0.084-0.181c81.936-156.912 81.936-320.671 0-477.583-5.363-10.498-16.078-17.572-28.451-17.625l-0.007-0zM665 362.583c-17.078 0.752-30.639 14.779-30.639 31.974 0 4.991 1.142 9.715 3.18 13.925l-0.083-0.191c32.353 70.794 32.308 136.984-0.167 207.792-1.89 3.961-2.993 8.609-2.993 13.514 0 17.675 14.328 32.003 32.003 32.003 12.893 0 24.006-7.625 29.075-18.611l0.082-0.198c39.205-85.481 39.279-175.631 0.208-261.125-5.085-11.349-16.282-19.113-29.292-19.113-0.483 0-0.964 0.011-1.442 0.032l0.068-0.002z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-higt"],"defaultCode":59686,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":67,"id":21,"name":"volume-higt","prevSize":32,"code":59686},"setIdx":0,"setId":2,"iconIdx":23},{"icon":{"paths":["M995.882 547.882c37.49-37.49 37.49-98.274 0-135.764l-320-320c-37.49-37.49-98.272-37.492-135.766 0l-512 512c-37.49 37.49-37.49 98.274 0 135.764l192 192c17.373 17.372 41.374 28.118 67.884 28.118l712-0c13.254 0 24-10.746 24-24v-80c0-13.254-10.746-24-24-24h-288.234l284.116-284.118zM390.628 422.628l274.746 274.746-134.628 134.626h-229.49l-160-160 249.372-249.372z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-eraser"],"defaultCode":59671,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":68,"id":22,"name":"eraser","prevSize":32,"code":59671},"setIdx":0,"setId":2,"iconIdx":24},{"icon":{"paths":["M512 141.505c-124.939 0-235.61 62.225-302.634 157.148-3.539 4.956-5.656 11.137-5.656 17.81 0 17.056 13.823 30.878 30.878 30.878 10.383 0 19.568-5.121 25.167-12.98l0.066-0.095c55.935-79.215 147.706-131.016 252.185-131.016 166.341 0 300.996 130.715 308.062 295.278l-49.532-49.532c-5.619-5.779-13.464-9.368-22.152-9.368v0c-17.051 0.004-30.866 13.823-30.866 30.876 0 8.685 3.587 16.53 9.355 22.141l92.631 92.631c5.585 5.583 13.307 9.041 21.831 9.041s16.24-3.452 21.831-9.041l7.154-7.154c2.263-1.729 4.223-3.683 5.897-5.874l0.056-0.072 79.519-79.519c5.857-5.628 9.492-13.526 9.492-22.273 0-17.055-13.823-30.876-30.876-30.876-8.746 0-16.648 3.637-22.262 9.481l-0.011 0.012-31.239 31.239c-16.193-189.427-175.348-338.737-368.888-338.737zM182.23 429.669c-8.362 0.125-15.906 3.557-21.386 9.047l-7.035 7.035c-2.334 1.766-4.344 3.777-6.053 6.036l-0.057 0.075-79.479 79.479c-5.857 5.628-9.492 13.526-9.492 22.273 0 17.055 13.823 30.876 30.876 30.876 8.746 0 16.648-3.637 22.262-9.481l0.011-0.012 31.239-31.239c16.193 189.427 175.348 338.737 368.888 338.737 124.939 0 235.61-62.225 302.634-157.148 3.539-4.956 5.656-11.137 5.656-17.81 0-17.056-13.823-30.878-30.878-30.878-10.383 0-19.568 5.121-25.167 12.98l-0.066 0.095c-55.935 79.215-147.706 131.016-252.185 131.016-166.341 0-300.996-130.715-308.062-295.278l49.532 49.532c5.628 5.857 13.526 9.492 22.273 9.492 17.055 0 30.876-13.823 30.876-30.876 0-8.746-3.637-16.648-9.481-22.262l-0.012-0.011-92.624-92.624c-5.586-5.588-13.312-9.050-21.835-9.050-0.154 0-0.3 0.001-0.455 0.003h0.022z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["available_updates"],"defaultCode":59665,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":69,"id":23,"name":"available_updates","prevSize":32,"code":59665},"setIdx":0,"setId":2,"iconIdx":25},{"icon":{"paths":["M512 92.955c-231.063 0-419.045 187.982-419.045 419.045s187.982 419.045 419.045 419.045c11.039 0 21.862-0.797 32.697-1.634-17.366-18.376-32.24-39.139-43.99-61.792-191.152-6.030-344.891-163.022-344.891-355.611 0-196.407 159.784-356.19 356.19-356.19 192.588 0 349.581 153.752 355.611 344.891 22.674 11.75 43.422 26.596 61.792 43.99 0.841-10.832 1.634-21.651 1.634-32.697 0-231.063-187.982-419.045-419.045-419.045zM521.982 260.128c-17.144 0.276-30.937 14.239-30.937 31.432 0 0.156 0.001 0.314 0.005 0.469v-0.027 219.998h-136.192c-0.137-0.002-0.291-0.003-0.447-0.003-17.354 0-31.432 14.070-31.432 31.432s14.070 31.432 31.432 31.432c0.154 0 0.307-0.001 0.467-0.003h167.597c17.352-0.002 31.432-14.070 31.432-31.432v0-251.432c0.002-0.137 0.003-0.298 0.003-0.454 0-17.354-14.070-31.432-31.432-31.432-0.175 0-0.348 0.001-0.522 0.005h0.027zM742.477 512c-127.289 0-230.477 103.192-230.477 230.477s103.192 230.477 230.477 230.477c127.289 0 230.477-103.192 230.477-230.477s-103.192-230.477-230.477-230.477zM742.477 574.855c0.299 0 0.507 0.164 0.78 0.164 2.368 0.103 4.736 0.412 7.001 1.306l78.402 31.382c24.007 9.615 39.527 32.498 39.527 58.356v10.477c0 6.957-3.467 13.449-9.212 17.352-3.52 2.392-7.617 3.602-11.742 3.602-2.614 0-5.243-0.485-7.781-1.512l-76.037-30.403v171.184c0 3.416-0.432 5.887-1.107 7.893-5.362 25.145-35.518 44.479-72.232 44.479-40.506 0-73.338-23.449-73.338-52.386s32.832-52.386 73.338-52.386c11.299 0 21.87 1.966 31.432 5.241v-193.804c0-2.557 0.591-4.977 1.432-7.287 0.192-0.479 0.358-0.928 0.577-1.396 0.983-2.117 2.253-4.073 3.882-5.768 0.299-0.31 0.632-0.57 0.943-0.854 0.777-0.712 1.496-1.457 2.376-2.049 0.88-0.608 1.858-0.966 2.829-1.432 0.414-0.192 0.768-0.448 1.182-0.616 2.265-0.906 4.631-1.304 7.039-1.396 0.247-0.026 0.445-0.164 0.69-0.164z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["music_time"],"defaultCode":59648,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":70,"id":24,"name":"music_time","prevSize":32,"code":59648},"setIdx":0,"setId":2,"iconIdx":26},{"icon":{"paths":["M769.011 64.070c-18.539 0.005-33.566 15.036-33.566 33.572 0 9.438 3.894 17.972 10.168 24.072l76.976 76.976h-612.718c-67.808 0-123.084 55.277-123.084 123.084v361.214l67.136-67.136v-294.078c0-30.884 25.061-55.948 55.948-55.948h612.718l-76.972 76.972c-6.363 6.121-10.323 14.703-10.323 24.22 0 18.542 15.034 33.572 33.572 33.572 9.509 0 18.099-3.952 24.208-10.311l0.012-0.013 134.273-134.273c6.076-6.076 9.828-14.469 9.828-23.733s-3.756-17.662-9.828-23.733l-134.273-134.273c-6.108-6.286-14.644-10.183-24.084-10.183v0zM937.202 341.006l-67.136 67.136v294.078c0 30.884-25.061 55.948-55.948 55.948h-612.718l76.972-76.972c6.263-6.105 10.151-14.626 10.151-24.052 0-18.542-15.034-33.572-33.572-33.572-0.34 0-0.68 0.006-1.018 0.017l0.048-0.001c-9.070 0.272-17.196 4.104-23.071 10.133l-134.281 134.281c-6.076 6.076-9.828 14.469-9.828 23.733s3.756 17.662 9.828 23.733l134.273 134.273c6.121 6.363 14.703 10.323 24.22 10.323 18.542 0 33.572-15.034 33.572-33.572 0-9.509-3.952-18.099-10.311-24.208l-0.013-0.012-76.972-76.972h612.718c67.808 0 123.084-55.277 123.084-123.084v-361.214z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-list-loop"],"defaultCode":59649,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":71,"id":25,"name":"list-loop","prevSize":32,"code":59649},"setIdx":0,"setId":2,"iconIdx":27},{"icon":{"paths":["M812.371 117.66c-17.181 0.004-31.101 13.928-31.101 31.11 0 8.751 3.613 16.654 9.426 22.308l71.333 71.333h-127.421c-45.011 0-87.849 19.533-117.378 53.466l-340.347 391.422c-17.747 20.41-43.393 32.077-70.433 32.077h-119.567c-0.129-0.002-0.283-0.003-0.44-0.003-17.181 0-31.11 13.927-31.11 31.11s13.927 31.11 31.11 31.11c0.155 0 0.311-0.001 0.466-0.003h119.541c44.998 0 87.844-19.498 117.378-53.466l340.347-391.422c17.754-20.399 43.406-32.077 70.433-32.077h127.421l-71.325 71.325c-5.896 5.67-9.563 13.63-9.563 22.442 0 17.181 13.927 31.11 31.11 31.11 8.811 0 16.771-3.667 22.431-9.552l0.011-0.012 124.425-124.425c5.628-5.63 9.106-13.404 9.106-21.994s-3.478-16.364-9.106-21.994l-124.425-124.425c-5.658-5.825-13.567-9.439-22.315-9.439v0zM86.876 242.408c-17.213 0-31.106 13.893-31.106 31.106s13.893 31.106 31.106 31.106h119.646c26.958 0 52.685 11.628 70.315 32.161l111.143 127.952 41.274-47.509-105.349-121.305c-29.654-34.009-72.379-53.507-117.378-53.507h-119.646zM553.071 559.266l-41.274 47.509 105.349 121.305c29.654 34.009 72.379 53.507 117.378 53.507h127.507l-71.325 71.325c-5.896 5.67-9.563 13.63-9.563 22.442 0 17.181 13.927 31.11 31.11 31.11 8.811 0 16.771-3.667 22.431-9.552l0.011-0.012 124.425-124.425c5.628-5.63 9.106-13.404 9.106-21.994s-3.478-16.364-9.106-21.994l-124.425-124.425c-5.658-5.825-13.567-9.439-22.315-9.439v0c-17.181 0.004-31.101 13.928-31.101 31.11 0 8.751 3.613 16.654 9.426 22.308l71.333 71.333h-127.507c-26.958 0-52.685-11.628-70.315-32.161l-111.143-127.952z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-list-random"],"defaultCode":59650,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":72,"id":26,"name":"list-random","prevSize":32,"code":59650},"setIdx":0,"setId":2,"iconIdx":28},{"icon":{"paths":["M713.492 83.628c-19.45 0.31-35.103 16.154-35.103 35.656 0 0.182 0.001 0.358 0.005 0.536v-0.028 722.111l-105.523-105.523c-6.501-6.76-15.62-10.964-25.719-10.964-19.695 0-35.662 15.967-35.662 35.662 0 10.099 4.204 19.223 10.951 25.713l0.014 0.013 166.393 166.393c6.455 6.453 15.368 10.437 25.212 10.437s18.757-3.988 25.212-10.437l166.393-166.393c6.76-6.501 10.964-15.62 10.964-25.719 0-19.695-15.967-35.662-35.662-35.662-10.099 0-19.223 4.204-25.713 10.951l-0.013 0.014-105.523 105.523v-722.111c0.003-0.149 0.004-0.332 0.004-0.514 0-19.695-15.967-35.662-35.662-35.662-0.193 0-0.392 0.001-0.583 0.005h0.028zM283.215 131.815c-2.79 0.238-5.592 0.761-8.311 1.675l-71.308 23.771c-18.681 6.229-28.793 26.441-22.565 45.128s26.487 28.86 45.128 22.565l24.375-8.168v212.028c0 19.707 15.95 35.658 35.658 35.658s35.658-15.95 35.658-35.658v-261.472c0-11.46-5.518-22.22-14.813-28.922-6.989-5.031-15.439-7.295-23.817-6.592zM274.301 583.308c-63.132 0-109.64 39.984-118.48 101.903-2.778 19.495 10.733 37.562 30.223 40.343 19.467 2.804 37.562-10.705 40.343-30.223 2.665-18.563 13.134-40.719 47.913-40.719 26.216 0 47.544 21.319 47.544 47.544s-21.319 47.544-47.544 47.544c-57.236 0-118.85 40.907-118.85 130.735 0 19.707 15.977 35.658 35.658 35.658h166.393c19.707 0 35.658-15.95 35.658-35.658s-15.95-35.658-35.658-35.658h-123.397c11.247-21.559 32.216-23.771 40.204-23.771 65.533 0 118.85-53.32 118.85-118.85s-53.32-118.85-118.85-118.85z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-list-order"],"defaultCode":59651,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":73,"id":27,"name":"list-order","prevSize":32,"code":59651},"setIdx":0,"setId":2,"iconIdx":29},{"icon":{"paths":["M782.78 40.073c-19.532 0.005-35.363 15.841-35.363 35.37 0 9.945 4.104 18.935 10.714 25.362l81.101 81.101h-645.541c-71.441 0-129.678 58.238-129.678 129.678v380.564l70.733-70.733v-309.831c0-32.538 26.405-58.945 58.945-58.945h645.541l-81.095 81.095c-6.705 6.448-10.875 15.492-10.875 25.516 0 19.535 15.838 35.37 35.37 35.37 10.019 0 19.068-4.165 25.504-10.863l0.012-0.013 141.467-141.467c6.4-6.401 10.354-15.243 10.354-25.005s-3.957-18.607-10.354-25.005l-141.467-141.467c-6.435-6.622-15.427-10.729-25.374-10.729v0zM959.981 331.847l-70.733 70.733v309.831c0 32.538-26.405 58.945-58.945 58.945h-645.541l81.095-81.095c6.599-6.432 10.694-15.409 10.694-25.34 0-19.535-15.838-35.37-35.37-35.37-0.358 0-0.716 0.006-1.072 0.017l0.051-0.001c-9.556 0.287-18.117 4.323-24.307 10.676l-141.475 141.475c-6.4 6.401-10.354 15.243-10.354 25.005s3.957 18.607 10.354 25.005l141.467 141.467c6.448 6.705 15.492 10.875 25.516 10.875 19.535 0 35.37-15.838 35.37-35.37 0-10.019-4.165-19.068-10.863-25.504l-0.013-0.012-81.095-81.095h645.541c71.441 0 129.678-58.238 129.678-129.678v-380.564zM527.334 347.002c-2.311 0.196-4.617 0.675-6.863 1.429l-70.733 23.576c-15.442 5.162-23.792 21.859-18.651 37.302 5.162 15.422 21.834 23.746 37.302 18.651l31.913-10.639v230.251c0 16.268 13.203 29.471 29.471 29.471s29.471-13.202 29.471-29.52v-271.145c0-9.477-4.565-18.361-12.247-23.901-5.763-4.158-12.735-6.061-19.665-5.479z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-single-loop"],"defaultCode":59652,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":74,"id":28,"name":"single-loop","prevSize":32,"code":59652},"setIdx":0,"setId":2,"iconIdx":30},{"icon":{"paths":["M512 72c-242.617 0-440 197.383-440 440s197.383 440 440 440c242.617 0 440-197.383 440-440s-197.383-440-440-440zM512 138c91.519 0 174.114 33.962 239.037 88.303l-524.727 524.689c-54.329-64.918-88.303-147.483-88.303-238.997 0-206.939 167.060-374 374-374zM797.697 272.963c54.347 64.922 88.303 147.518 88.303 239.037 0 206.939-167.060 374-374 374-91.503 0-174.078-33.963-238.997-88.303l524.689-524.728z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-single"],"defaultCode":59673,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":75,"id":29,"name":"single","prevSize":32,"code":59673},"setIdx":0,"setId":2,"iconIdx":31},{"icon":{"paths":["M197.733 16.079c-57.158 2.263-109.626 48.892-109.626 111.719v768.402c0 83.768 93.326 138.729 166.607 98.131l693.403-384.201c75.389-41.772 75.389-154.491 0-196.264l-693.403-384.201c-18.321-10.148-37.927-14.342-56.98-13.588zM198.61 89.763c6.448-0.029 13.207 1.643 19.82 5.308l693.452 384.201c27.392 15.178 27.392 50.275 0 65.453l-693.452 384.201c-26.458 14.659-55.52-2.494-55.52-32.727v-768.402c0-15.116 7.249-26.935 17.825-33.165 5.288-3.117 11.426-4.843 17.874-4.87z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-play-outline"],"defaultCode":59681,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":76,"id":30,"name":"play-outline","prevSize":32,"code":59681},"setIdx":0,"setId":2,"iconIdx":32},{"icon":{"paths":["M469.685 572.65v-572.65h84.628v572.65zM511.999 1023.998q-104.374 0-196.76-40.198t-161.498-109.312-109.312-161.498-40.198-196.76q0-112.837 47.956-210.865t135.405-174.192l59.24 59.24q-74.754 60.651-116.364 144.573t-41.609 181.246q0 176.308 123.416 299.724t299.724 123.416 299.724-123.416 123.416-299.724q0-97.322-41.609-182.655t-113.543-143.163l60.651-59.24q84.628 71.934 131.878 172.077t47.25 212.981q0 104.374-40.198 196.76t-108.606 161.498-160.793 109.312-198.171 40.198z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-exit"],"defaultCode":59679,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":77,"id":31,"name":"exit2","prevSize":32,"code":59679},"setIdx":0,"setId":2,"iconIdx":33},{"icon":{"paths":["M86.515 1024.001q-34.039 0-59.568-25.529t-25.529-59.568v-297.839h85.097v297.839h850.97v-853.806h-850.97v300.676h-85.097v-300.676q0-34.039 25.529-59.568t59.568-25.529h850.97q34.039 0 59.568 25.529t25.529 59.568v853.806q0 34.039-25.529 59.568t-59.568 25.529zM416.975 787.148l-63.823-63.823 167.358-167.358h-519.092v-85.097h519.092l-167.358-167.358 63.823-63.823 273.729 273.729z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-exit"],"defaultCode":59678,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":78,"id":32,"name":"exit","prevSize":32,"code":59678},"setIdx":0,"setId":2,"iconIdx":34},{"icon":{"paths":["M465.902 1.102c-44.961-7.649-81.748 25.464-81.748 71.063v471.297c-26.614-9.764-55.241-15.373-85.225-15.373-136.943 0-247.961 111.022-247.961 247.97 0 136.939 111.018 247.942 247.961 247.942 78.047 0 147.539-36.165 192.953-92.542l-113.518-113.532c-34.555-34.546-26.765-66.068-21.813-78.044 4.951-11.963 21.749-39.776 70.599-39.776h41.336v-130.039c0-48.308 33.415-88.839 78.332-100.001 0.073-101.437 0.073-187.014 0.073-187.014 320.377 0 301.122 191.965 263.634 302.201-14.676 43.169-5.946 50.406 24.901 16.811 390.955-425.798-153.327-564.193-369.524-600.961z","M688.227 511.782h-116.573c-8.941 0-17.314 2.172-24.892 5.768-19.696 9.35-33.41 29.256-33.41 52.516v174.902h-86.201c-32.192 0-39.84 18.45-17.067 41.214l178.635 178.638c11.393 11.396 26.319 17.086 41.224 17.086 14.912 0 29.837-5.678 41.214-17.086l178.656-178.64c22.748-22.764 15.106-41.214-17.076-41.214h-86.205v-174.902c0.002-32.182-26.106-58.282-58.305-58.282z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-logo"],"defaultCode":59669,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":79,"id":33,"name":"logo","prevSize":32,"code":59669},"setIdx":0,"setId":2,"iconIdx":35},{"icon":{"paths":["M181.333 170.667c-52.928 0-96 43.072-96 96v490.667c0 52.928 43.072 96 96 96h309.417c-8.448-20.203-14.314-41.707-17.792-64h-291.625c-17.643 0-32-14.357-32-32v-490.667c0-17.643 14.357-32 32-32h161.125c12.459 0 24.567 4.376 34.167 12.333l104.25 86.917c5.739 4.8 12.97 7.417 20.458 7.417h341.333c17.643 0 32 14.357 32 32v127.542c23.531 12.309 45.035 27.885 64 46.125v-173.667c0-52.928-43.072-96-96-96h-329.75l-95.375-79.5c-21.056-17.515-47.713-27.167-75.083-27.167h-161.125zM746.667 512c-129.6 0-234.667 105.067-234.667 234.667s105.067 234.667 234.667 234.667c129.6 0 234.667-105.067 234.667-234.667s-105.067-234.667-234.667-234.667zM746.667 576c11.776 0 21.333 9.557 21.333 21.333v128h128c11.776 0 21.333 9.557 21.333 21.333s-9.557 21.333-21.333 21.333h-128v128c0 11.776-9.557 21.333-21.333 21.333s-21.333-9.557-21.333-21.333v-128h-128c-11.776 0-21.333-9.557-21.333-21.333s9.557-21.333 21.333-21.333h128v-128c0-11.776 9.557-21.333 21.333-21.333z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["iocn-add_folder"],"defaultCode":59666,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":80,"id":34,"name":"add_folder","prevSize":32,"code":59666},"setIdx":0,"setId":2,"iconIdx":36},{"icon":{"paths":["M964.54 573.38c17.54-29.7 27.46-61.38 27.46-99.68 0-88.030-74.436-171.16-171.64-171.16h-72.96c9.84-25.62 17.7-56.26 17.7-93.080 0-145.588-75.38-209.46-190.54-209.46-123.214 0-116.186 189.866-143.52 217.2-45.494 45.494-99.23 132.894-137.52 166.8h-197.52c-35.346 0-64 28.654-64 64v480c0 35.346 28.654 64 64 64h128c29.786 0 54.816-20.348 61.956-47.9 89.018 2.002 150.12 79.88 355.604 79.88 14.44 0 30.44 0.020 44.44 0.020 154.234 0 223.972-78.846 225.88-190.66 26.638-36.85 40.598-86.244 34.68-133.98 19.708-36.904 27.328-80.686 17.98-125.98zM841.040 681.040c25.12 42.26 2.52 98.82-27.88 115.14 15.4 97.56-35.216 131.8-106.24 131.8h-75.64c-143.278 0-236.058-75.64-343.28-75.64v-372.34h21.84c56.72 0 135.96-141.78 189.080-194.92 56.72-56.72 37.82-151.26 75.64-189.080 94.54 0 94.54 65.96 94.54 113.46 0 78.34-56.72 113.44-56.72 189.080h207.98c42.22 0 75.46 37.82 75.64 75.64 0.18 37.8-25.64 75.62-44.54 75.62 26.978 29.11 32.742 90.472-10.42 131.24zM208 864c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-thumbs-up"],"defaultCode":59675,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":81,"id":35,"name":"thumbs-up","prevSize":32,"code":59675},"setIdx":0,"setId":2,"iconIdx":37},{"icon":{"paths":["M509.272 282.5s-134.688-165.602-304.010-51.748c-151.442 165.64-64.878 386.113 304.010 579.983 46.009-18.027 94.868-36.652 94.868-36.652 40.964-13.784 60.703 44.723 34.497 56.060-59.488 25.735 12.883-8.927-129.364 60.371-628.547-297.863-457.104-653.226-347.129-722.289 187.149-142.063 349.285 21.563 349.285 21.563s125.392-130.495 301.851-49.592c224.303 126.189 137.987 349.068 97.023 422.589-19.732 32.671-85.295-8.963-68.994-34.497 43.856-81.687 98.151-231.451-53.904-323.411-151.099-64.857-278.136 77.615-278.136 77.615z","M783.097 709.401c-17.463 0.024-53.411-0.332-86.245 0-33.876 0.344-32.95 75.386 0 75.461 32.558 0.074 86.245 0 86.245 0s-0.146 92.282 0 103.49c0.448 34.415 69.558 34.046 68.994-2.156-0.156-10.021 0-101.335 0-101.335s81.947-0.069 92.712 0c33.922 0.099 32.225-73.263-2.156-73.305-10.528 0.2-90.556 0-90.556 0s-0.116-61.104 0-99.179c0.099-32.749-69.055-33.445-68.994 0 0.059 31.78-0.472 90.856 0 97.023z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-add-music"],"defaultCode":59670,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":82,"id":36,"name":"add-music","prevSize":32,"code":59670},"setIdx":0,"setId":2,"iconIdx":38},{"icon":{"paths":["M512 768.001c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128v0c-70.692 0-128-57.308-128-128v0c0-70.692 57.308-128 128-128v0zM512 384c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128v0c-70.692 0-128-57.308-128-128v0c0-70.692 57.308-128 128-128v0zM512 0c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128v0c-70.692 0-128-57.308-128-128v0c0-70.692 57.308-128 128-128v0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-dots-vertical"],"defaultCode":59667,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":83,"id":37,"name":"dots-vertical","prevSize":32,"code":59667},"setIdx":0,"setId":2,"iconIdx":39},{"icon":{"paths":["M633.703 512l365.094-365.094c33.607-33.607 33.607-88.095 0-121.698-33.607-33.607-88.091-33.607-121.698 0l-365.099 365.099-365.099-365.104c-33.607-33.607-88.091-33.607-121.698 0-33.603 33.607-33.603 88.095 0 121.698l365.099 365.094-365.099 365.099c-33.603 33.607-33.603 88.095 0 121.698 33.607 33.607 88.091 33.607 121.698 0l365.099-365.099 365.099 365.099c33.603 33.607 88.091 33.607 121.698 0s33.607-88.091 0-121.698l-365.094-365.094z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-close"],"defaultCode":59662,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":84,"id":38,"name":"close","prevSize":32,"code":59662},"setIdx":0,"setId":2,"iconIdx":40},{"icon":{"paths":["M52.504 168.606v686.806c0 93.13 61.701 168.588 137.82 168.588 76.127 0 137.865-75.462 137.865-168.588v-686.806c0-93.085-61.738-168.577-137.865-168.577-76.119-0.030-137.82 75.492-137.82 168.577z","M833.635 0c-76.112 0-137.813 75.492-137.813 168.577v686.806c0 93.13 61.701 168.558 137.813 168.558s137.861-75.433 137.861-168.558v-686.776c-0.033-93.085-61.749-168.606-137.861-168.606z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-pause"],"defaultCode":59661,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":85,"id":39,"name":"pause","prevSize":32,"code":59661},"setIdx":0,"setId":2,"iconIdx":41},{"icon":{"paths":["M217.83 22.578c-92.32-52.955-167.165-9.574-167.165 96.819v785.129c0 106.499 74.847 149.824 167.165 96.919l686.242-393.555c92.351-52.974 92.351-138.801 0-191.763l-686.242-393.549z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-play"],"defaultCode":59653,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":86,"id":40,"name":"play","prevSize":32,"code":59653},"setIdx":0,"setId":2,"iconIdx":42},{"icon":{"paths":["M96.898 152.171c-53.489 0-96.898 64.037-96.898 143.006v433.653c0 78.944 43.432 143.001 96.898 143.001 53.545 0 96.902-64.056 96.902-143.001v-119.627l352.204 201.971c67.023 38.471 121.477 8.351 123.795-67l-225.15-129.124c-44.415-25.451-69.917-63.036-69.917-103.083 0-40.084 25.502-77.637 69.917-103.134l225.15-129.073c-2.318-75.295-56.772-105.452-123.795-66.986l-352.204 201.92v-119.515c0.023-78.995-43.358-143.006-96.902-143.006z","M502.254 583.092l397.714 228.080c68.475 39.291 124.032 7.103 124.032-71.883v-454.686c0-78.94-55.557-111.137-124.032-71.832l-397.742 228.020c-68.452 39.301-68.452 103.009 0.028 142.301z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-prevMusic"],"defaultCode":59668,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":87,"id":41,"prevSize":32,"code":59668,"name":"prevMusic"},"setIdx":0,"setId":2,"iconIdx":43},{"icon":{"paths":["M927.102 871.83c53.489 0 96.898-64.037 96.898-143.006v-433.653c0-78.944-43.432-143.001-96.898-143.001-53.545 0-96.902 64.056-96.902 143.001v119.627l-352.204-201.971c-67.023-38.471-121.477-8.351-123.795 67l225.15 129.123c44.415 25.451 69.917 63.036 69.917 103.083 0 40.084-25.502 77.637-69.917 103.134l-225.15 129.072c2.318 75.295 56.772 105.452 123.795 66.986l352.204-201.92v119.515c-0.023 78.995 43.358 143.006 96.902 143.006z","M521.746 440.909l-397.714-228.080c-68.475-39.291-124.032-7.103-124.032 71.883v454.686c0 78.94 55.557 111.137 124.032 71.832l397.742-228.020c68.452-39.301 68.452-103.009-0.028-142.301z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-nextMusic"],"defaultCode":59654,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":88,"id":42,"name":"nextMusic","prevSize":32,"code":59654},"setIdx":0,"setId":2,"iconIdx":44},{"icon":{"paths":["M578.472 732.037c-121.522 0-220.036-98.514-220.036-220.036s98.514-220.036 220.036-220.036c121.522 0 220.036 98.514 220.036 220.036v0c-0.146 121.464-98.572 219.891-220.023 220.036h-0.014zM578.472 384.418c-70.462 0-127.583 57.121-127.583 127.583s57.12 127.583 127.583 127.583c70.462 0 127.583-57.12 127.583-127.583v0c-0.079-70.43-57.152-127.503-127.574-127.583h-0.008z","M1145.056 469.341l-246.423-426.682c-15.048-25.628-42.44-42.579-73.799-42.659h-492.694c-31.404 0.050-58.837 17.009-73.685 42.258l-0.218 0.401-246.329 426.682c-7.162 12.244-11.391 26.957-11.391 42.659s4.229 30.416 11.61 43.065l-0.219-0.406 246.423 426.682c15.063 25.643 42.485 42.601 73.871 42.659h492.621c31.397-0.054 58.822-17.012 73.662-42.258l0.218-0.401 246.423-426.682c7.14-12.229 11.357-26.921 11.357-42.599 0-15.727-4.242-30.462-11.645-43.125l0.219 0.405zM341.627 922.223l-236.844-410.223 236.844-410.247h473.712l236.844 410.247-236.844 410.223z"],"attrs":[{},{}],"width":1157,"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-setting"],"defaultCode":59655,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":89,"id":43,"name":"setting","prevSize":32,"code":59655},"setIdx":0,"setId":2,"iconIdx":45},{"icon":{"paths":["M974.751 1023.699h-925.525c-27.228-0.19-49.226-22.307-49.226-49.561 0-0.119 0-0.238 0.001-0.357v0.018-414.489c-0.001-0.1-0.001-0.219-0.001-0.338 0-27.254 21.999-49.371 49.208-49.561h0.018c27.228 0.19 49.226 22.307 49.226 49.561 0 0.119 0 0.238-0.001 0.357v-0.018 364.613h827.075v-365.504c0-27.193 22.044-49.237 49.237-49.237s49.237 22.044 49.237 49.237v0 415.38c0 0.007 0 0.016 0 0.025 0 13.741-5.516 26.193-14.456 35.262l0.006-0.006c-8.86 9.010-21.175 14.599-34.796 14.618h-0.004z","M512 582.502c-25.964-0.191-46.938-21.283-46.938-47.273 0-0.102 0-0.204 0.001-0.306v0.016-487.676c0-25.936 21.025-46.961 46.961-46.961s46.961 21.025 46.961 46.961v0 487.58c0.001 0.115 0.002 0.25 0.002 0.386 0 26.008-21.002 47.111-46.972 47.274h-0.016z","M512 658.628c-0.024 0-0.052 0-0.080 0-13.966 0-26.633-5.558-35.912-14.582l0.012 0.012-193.361-186.497c-8.999-8.738-14.582-20.95-14.582-34.466 0-12.694 4.925-24.238 12.969-32.824l-0.025 0.027c8.515-9.098 20.596-14.768 34.002-14.768 12.587 0 24.006 4.998 32.382 13.118l164.57 158.742 164.582-158.754c8.364-8.108 19.783-13.106 32.37-13.106 13.406 0 25.487 5.67 33.978 14.742l0.024 0.026c8.019 8.56 12.945 20.104 12.945 32.798 0 13.516-5.584 25.728-14.571 34.454l-0.012 0.011-193.385 186.521c-9.268 8.998-21.928 14.546-35.885 14.546-0.008 0-0.016 0-0.024 0h0.001zM540.755 575.109v0z"],"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-download-2"],"defaultCode":59656,"colorPermutations":{"25525525519191911":[{},{},{}]}},"attrs":[{},{},{}],"properties":{"order":90,"id":44,"name":"download-2","prevSize":32,"code":59656},"setIdx":0,"setId":2,"iconIdx":46},{"icon":{"paths":["M582.103 1023.979c-0.017 0-0.037 0-0.057 0-9.91 0-19.135-2.929-26.858-7.969l0.189 0.116-0.366-0.236c-37.014-20.47-322.334-182.265-474.13-387.408-50.491-68.21-80.819-154.003-80.819-246.879 0-19.704 1.365-39.089 4.006-58.067l-0.25 2.192c14.344-104.705 67.037-196.32 148.366-258.045 92.559-70.283 201.609-86.225 315.345-45.86 43.791 16.083 81.683 36.31 116.21 60.947l-1.48-1.003c33.048-23.634 70.939-43.86 111.372-58.853l3.359-1.091c113.788-40.337 222.838-24.422 315.37 45.86 81.33 61.829 134.022 153.471 148.366 258.045 2.401 16.818 3.771 36.242 3.771 55.986 0 92.851-30.314 178.622-81.584 247.955l0.802-1.136c-152.712 206.19-440.415 368.797-474.783 387.643-7.598 4.895-16.869 7.819-26.821 7.853h-0.009zM347.59 105.694c-43.425 0-89.994 12.46-135.593 47.117-59.054 44.892-97.349 111.588-107.794 187.813-1.757 12.365-2.76 26.646-2.76 41.16 0 68.639 22.431 132.040 60.363 183.271l-0.591-0.835c123.421 166.664 348.143 304.769 421.071 347.018 73.005-42.169 297.65-180.354 421.071-347.018 37.342-50.393 59.773-113.792 59.773-182.429 0-14.517-1.004-28.801-2.945-42.783l0.184 1.616c-10.471-76.199-48.74-142.895-107.82-187.813-159.125-120.933-330.108 28.27-337.384 34.684-8.691 7.859-20.268 12.668-32.969 12.668s-24.278-4.809-33.012-12.706l0.043 0.038c-5.052-4.555-93.553-81.801-201.634-81.801z"],"attrs":[{}],"width":1165,"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-love"],"defaultCode":59657,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":91,"id":45,"name":"love","prevSize":32,"code":59657},"setIdx":0,"setId":2,"iconIdx":47},{"icon":{"paths":["M968.343 913.191h-912.975c-30.592 0-55.393 24.8-55.393 55.393s24.8 55.393 55.393 55.393v0h912.975c30.592 0 55.393-24.8 55.393-55.393s-24.8-55.393-55.393-55.393v0z","M931.085 848.958c30.592 0 55.393-24.8 55.393-55.393v0-738.197c0-30.592-24.8-55.393-55.393-55.393s-55.393 24.8-55.393 55.393v0 738.173c0 0.007 0 0.016 0 0.024 0 30.592 24.8 55.393 55.393 55.393v0z","M511.735 848.958c30.592 0 55.393-24.8 55.393-55.393v0-504.921c0-30.592-24.8-55.393-55.393-55.393s-55.393 24.8-55.393 55.393v0 504.896c0 0.007 0 0.016 0 0.024 0 30.592 24.8 55.393 55.393 55.393v0z","M92.386 848.958c30.592 0 55.393-24.8 55.393-55.393v0-331.636c0-30.592-24.8-55.393-55.393-55.393s-55.393 24.8-55.393 55.393v0 331.612c0 0.007 0 0.016 0 0.024 0 30.592 24.8 55.393 55.393 55.393v0z"],"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-leaderboard"],"defaultCode":59658,"colorPermutations":{"25525525519191911":[{},{},{},{}]}},"attrs":[{},{},{},{}],"properties":{"order":92,"id":46,"name":"leaderboard","prevSize":32,"code":59658},"setIdx":0,"setId":2,"iconIdx":48},{"icon":{"paths":["M48.166 895.662c-26.601 0-48.166-21.564-48.166-48.166v0-799.331c0-26.601 21.564-48.166 48.166-48.166v0h755.983c26.601 0 48.166 21.564 48.166 48.166s-21.564 48.166-48.166 48.166v0h-707.816v751.165c0 26.601-21.564 48.166-48.166 48.166v0z","M975.834 1024h-736.932c-26.601 0-48.166-21.564-48.166-48.166v0-354.499c0-26.601 21.564-48.166 48.166-48.166s48.166 21.564 48.166 48.166v0 306.333h640.602v-633.858h-515.371c-26.601 0-48.166-21.564-48.166-48.166s21.564-48.166 48.166-48.166v0h563.537c26.601 0 48.166 21.564 48.166 48.166v0 730.19c0 26.601-21.564 48.166-48.166 48.166v0z","M623.744 786.76c-23.941 0-43.349-19.408-43.349-43.349v0-346.046c0-23.941 19.408-43.349 43.349-43.349s43.349 19.408 43.349 43.349v0 345.828c0 0.064 0.001 0.141 0.001 0.217 0 23.941-19.408 43.349-43.349 43.349 0 0 0 0-0.001 0v0z","M764.001 581.238c-0.010 0-0.022 0-0.034 0-11.992 0-22.847-4.869-30.695-12.739l-140.307-140.307c-7.864-7.864-12.729-18.729-12.729-30.73 0-24.001 19.457-43.458 43.458-43.458 12 0 22.865 4.864 30.73 12.729l140.306 140.33c7.964 7.864 12.896 18.781 12.896 30.851 0 23.941-19.408 43.349-43.349 43.349-0.097 0-0.195 0-0.292-0.001h0.015z","M537.239 867.414c-0.021 0-0.047 0-0.072 0-71.756 0-129.927-58.17-129.927-129.927s58.17-129.927 129.927-129.927c71.756 0 129.927 58.17 129.927 129.927v0c-0.068 71.704-58.157 129.817-129.844 129.927h-0.010zM537.239 694.498c-23.741 0-42.988 19.246-42.988 42.988s19.246 42.988 42.988 42.988c23.741 0 42.988-19.246 42.988-42.988v0c-0.027-23.73-19.257-42.96-42.985-42.988h-0.003z"],"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-album"],"defaultCode":59659,"colorPermutations":{"25525525519191911":[{},{},{},{},{}]}},"attrs":[{},{},{},{},{}],"properties":{"order":93,"id":47,"name":"album","prevSize":32,"code":59659},"setIdx":0,"setId":2,"iconIdx":49},{"icon":{"paths":["M744.005 130.752c-78.812-80.698-188.704-130.742-310.286-130.742-239.452 0-433.565 194.114-433.565 433.565s194.114 433.565 433.565 433.565c117.797 0 224.623-46.978 302.762-123.221l-0.089 0.086c81.089-78.675 131.413-188.664 131.413-310.409 0-117.972-47.254-224.906-123.865-302.909l0.063 0.064zM669.119 675.117c-60.686 59.116-143.692 95.577-235.214 95.577-186.24 0-337.217-150.977-337.217-337.217 0-186.089 150.733-336.972 336.765-337.217h0.023c0.077 0 0.168 0 0.258 0 186.24 0 337.217 150.977 337.217 337.217 0 94.682-39.020 180.25-101.858 241.499l-0.071 0.069z","M1007.3 928.945l-159.527-163.792c-10.072-10.318-24.118-16.717-39.659-16.717-30.597 0-55.4 24.804-55.4 55.4 0 15.056 6.006 28.709 15.753 38.694l-0.011-0.011 160.564 164.851c10.026 10.27 24.010 16.639 39.481 16.639 2.35 0 4.667-0.147 6.941-0.432l-0.271 0.028c10.466-1.218 19.816-5.232 27.505-11.266l-0.118 0.089c13.153-10.193 21.538-25.994 21.538-43.752 0-0.259-0.002-0.517-0.005-0.775v0.039c-0.431-15.268-6.764-28.978-16.788-38.997v0z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-search-2"],"defaultCode":59660,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":94,"id":48,"name":"search-2","prevSize":32,"code":59660},"setIdx":0,"setId":2,"iconIdx":50}],"height":1024,"metadata":{"name":"icomoon"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"icomoon","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false,"autoHost":false,"noie8":true,"ie7":false,"showSelector":false,"showMetrics":false,"showMetadata":false,"showVersion":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"icomoon"},"historySize":50,"showCodes":true,"gridSize":16,"showGrid":false,"quickUsageToken":{"UntitledProject":"N2VjNTI2ODAzZWI0N2M1NzhlMjNhYzY3OTEwMWRiMDEjMSMxNjA0MzkyNDUxIyMj"},"showLiga":false}} \ No newline at end of file +{"IcoMoonType":"selection","icons":[{"icon":{"paths":["M712.832 97.835l-60.331 60.331 97.835 97.835h-25.003c-258.688 0-469.333 210.645-469.333 469.333v42.667h85.333v-42.667c0-212.608 171.392-384 384-384h25.003l-97.835 97.835 60.331 60.331 200.832-200.832-200.832-200.832zM85.333 341.333v469.333c0 70.187 57.813 128 128 128h597.333c70.187 0 128-57.813 128-128v-85.333h-85.333v85.333c0 24.107-18.56 42.667-42.667 42.667h-597.333c-24.107 0-42.667-18.56-42.667-42.667v-469.333h-85.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["share"],"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":108,"id":57,"name":"share","prevSize":32,"code":59699},"setIdx":0,"setId":2,"iconIdx":0},{"icon":{"paths":["M512 185.28c-180.135 0-326.72 146.585-326.72 326.72s146.585 326.72 326.72 326.72c180.135 0 326.72-146.585 326.72-326.72s-146.585-326.72-326.72-326.72z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["full_stop"],"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":104,"id":52,"name":"full_stop","prevSize":32,"code":59695},"setIdx":0,"setId":2,"iconIdx":1},{"icon":{"paths":["M378.5 85.333c-25.45 0-49.884 10.102-67.875 28.125l-111.833 111.833c-18.023 17.991-28.125 42.425-28.125 67.875v101.5c0.002 17.672 14.328 31.998 32 32l32 0v42.667h-32c-17.672 0.002-31.998 14.328-32 32l-0 0v320c0 64.422 52.911 117.333 117.333 117.333h448c64.422 0 117.333-52.911 117.333-117.333v-618.667c0-64.422-52.911-117.333-117.333-117.333h-357.5zM378.5 149.333h357.5c29.829 0 53.333 23.505 53.333 53.333v618.667c0 29.829-23.505 53.333-53.333 53.333h-448c-29.829 0-53.333-23.505-53.333-53.333v-288h32c17.672-0.002 31.998-14.328 32-32l0-0v-106.667c-0.002-17.672-14.328-31.998-32-32l-32-0v-69.5c0-8.512 3.376-16.595 9.375-22.583l111.875-111.875c5.988-5.999 14.071-9.375 22.583-9.375zM394.167 191.542c-17.459 0.281-31.503 14.5-31.503 31.999 0 0.161 0.001 0.323 0.004 0.483l-0-0.024v106.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-106.667c0.002-0.136 0.003-0.298 0.003-0.459 0-17.675-14.328-32.003-32.003-32.003-0.176 0-0.351 0.001-0.526 0.004l0.026-0zM500.833 191.542c-17.459 0.281-31.503 14.5-31.503 31.999 0 0.161 0.001 0.323 0.004 0.483l-0-0.024v106.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-106.667c0.002-0.136 0.003-0.298 0.003-0.459 0-17.675-14.328-32.003-32.003-32.003-0.176 0-0.351 0.001-0.526 0.004l0.026-0zM607.5 191.542c-17.459 0.281-31.503 14.5-31.503 31.999 0 0.161 0.001 0.323 0.004 0.483l-0-0.024v106.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-106.667c0.002-0.136 0.003-0.298 0.003-0.459 0-17.675-14.328-32.003-32.003-32.003-0.176 0-0.351 0.001-0.526 0.004l0.026-0zM714.167 191.542c-17.459 0.281-31.503 14.5-31.503 31.999 0 0.161 0.001 0.323 0.004 0.483l-0-0.024v106.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-106.667c0.002-0.136 0.003-0.298 0.003-0.459 0-17.675-14.328-32.003-32.003-32.003-0.176 0-0.351 0.001-0.526 0.004l0.026-0z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["sd-card"],"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":98,"id":50,"name":"sd-card","prevSize":32,"code":59696},"setIdx":0,"setId":2,"iconIdx":2},{"icon":{"paths":["M512 85.333c-235.263 0-426.667 191.404-426.667 426.667s191.404 426.667 426.667 426.667c235.263 0 426.667-191.404 426.667-426.667s-191.404-426.667-426.667-426.667zM512 149.333c200.674 0 362.667 161.992 362.667 362.667s-161.992 362.667-362.667 362.667c-200.674 0-362.667-161.992-362.667-362.667s161.992-362.667 362.667-362.667zM512 277.333c-70.312 0-128 57.688-128 128v10.667c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024v-10.667c0-35.715 28.285-64 64-64s64 28.285 64 64c0 49.939-12.984 56.197-35.75 74.083-11.383 8.943-26.292 19.254-39.042 36.625s-21.208 41.585-21.208 70.625c-0.002 0.135-0.003 0.293-0.003 0.453 0 17.675 14.328 32.003 32.003 32.003s32.003-14.328 32.003-32.003c0-0.159-0.001-0.318-0.003-0.477l0 0.024c0-18.202 3.541-25.596 8.792-32.75s14.341-14.254 26.958-24.167c25.234-19.826 60.25-57.023 60.25-124.417 0-70.312-57.688-128-128-128zM512 682.667c-23.564 0-42.667 19.103-42.667 42.667s19.103 42.667 42.667 42.667v0c23.564 0 42.667-19.103 42.667-42.667s-19.103-42.667-42.667-42.667v0z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-help"],"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":97,"id":49,"name":"help","prevSize":32,"code":59694},"setIdx":0,"setId":2,"iconIdx":3},{"icon":{"paths":["M810.667 128h-597.333c-47.36 0-85.333 37.973-85.333 85.333v597.333c0 47.128 38.205 85.333 85.333 85.333v0h597.333c47.128 0 85.333-38.205 85.333-85.333v0-597.333c0-47.36-38.4-85.333-85.333-85.333zM810.667 213.333v597.333h-597.333v-597.333h597.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["checkbox"],"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":95,"id":3,"name":"checkbox-blank-outline","prevSize":32,"code":59691},"setIdx":0,"setId":2,"iconIdx":4},{"icon":{"paths":["M426.667 725.333l-213.333-213.333 60.16-60.587 153.173 153.173 323.84-323.84 60.16 60.587zM810.667 128h-597.333c-47.36 0-85.333 37.973-85.333 85.333v597.333c0 47.128 38.205 85.333 85.333 85.333v0h597.333c47.128 0 85.333-38.205 85.333-85.333v0-597.333c0-47.36-38.4-85.333-85.333-85.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["checkbox"],"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":96,"id":4,"name":"checkbox-marked","prevSize":32,"code":59692},"setIdx":0,"setId":2,"iconIdx":5},{"icon":{"paths":["M725.333 554.667h-426.667v-85.333h426.667zM810.667 128h-597.333c-47.36 0-85.333 37.973-85.333 85.333v597.333c0 47.128 38.205 85.333 85.333 85.333v0h597.333c47.128 0 85.333-38.205 85.333-85.333v0-597.333c0-47.36-38.4-85.333-85.333-85.333z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["checkbox"],"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":51,"id":5,"name":"minus-box","prevSize":32,"code":59693},"setIdx":0,"setId":2,"iconIdx":6},{"icon":{"paths":["M510.718-13.119c-8.781 0.309-16.775 3.446-23.157 8.523l0.080-0.062-373.172 293.995c-47.363 37.326-75.076 94.363-75.076 154.664v501.222c0 35.802 29.837 65.639 65.639 65.639h262.559c35.802 0 65.639-29.837 65.639-65.639v-262.559c0-7.746 5.381-13.128 13.128-13.128h131.28c7.746 0 13.128 5.381 13.128 13.128v262.559c0 35.802 29.837 65.639 65.639 65.639h262.559c35.802 0 65.639-29.837 65.639-65.639v-501.222c0-60.3-27.713-117.338-75.076-154.664l-373.172-293.995c-6.644-5.286-15.157-8.48-24.416-8.48-0.431 0-0.86 0.007-1.287 0.021l0.063-0.001zM512 76.418l348.815 274.816c28.465 22.433 45.024 56.552 45.024 92.768v488.093h-236.303v-249.432c0-50.278-41.616-91.896-91.896-91.896h-131.28c-50.278 0-91.896 41.616-91.896 91.896v249.432h-236.303v-488.093c0-36.216 16.561-70.335 45.024-92.768l348.815-274.816z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-home"],"defaultCode":59690,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":52,"id":6,"name":"home","prevSize":32,"code":59690},"setIdx":0,"setId":2,"iconIdx":7},{"icon":{"paths":["M56.89 113.777h910.222c31.419 0 56.889 25.469 56.889 56.889s-25.469 56.889-56.889 56.889v0h-910.222c-31.419 0-56.889-25.469-56.889-56.889s25.469-56.889 56.889-56.889v0zM56.89 455.111h910.222c31.419 0 56.889 25.469 56.889 56.889s-25.469 56.889-56.889 56.889v0h-910.222c-31.419 0-56.889-25.469-56.889-56.889s25.469-56.889 56.889-56.889v0zM56.89 796.446h910.222c31.419 0 56.889 25.469 56.889 56.889s-25.469 56.889-56.889 56.889v0h-910.222c-31.419 0-56.889-25.469-56.889-56.889s25.469-56.889 56.889-56.889v0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["icon-menu"],"defaultCode":59680,"grid":128,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":53,"id":7,"name":"menu","prevSize":32,"code":59680},"setIdx":0,"setId":2,"iconIdx":8},{"icon":{"paths":["M69.048 478.058l388.688-388.686c18.746-18.746 49.138-18.746 67.882 0l45.334 45.334c18.714 18.714 18.75 49.044 0.080 67.802l-308.042 309.492 308.042 309.49c18.67 18.758 18.634 49.088-0.080 67.802l-45.334 45.334c-18.746 18.746-49.138 18.746-67.882 0l-388.686-388.686c-18.746-18.744-18.746-49.136-0.002-67.882z"],"width":640,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["icon-chevron-left"],"defaultCode":59664,"grid":128,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":54,"id":8,"name":"chevron-left","prevSize":32,"code":59664},"setIdx":0,"setId":2,"iconIdx":9},{"icon":{"paths":["M570.952 545.942l-388.688 388.686c-18.746 18.746-49.138 18.746-67.882 0l-45.334-45.334c-18.714-18.714-18.75-49.044-0.080-67.802l308.042-309.492-308.042-309.49c-18.67-18.758-18.634-49.088 0.080-67.802l45.334-45.334c18.746-18.746 49.138-18.746 67.882 0l388.686 388.686c18.746 18.744 18.746 49.136 0.002 67.882z"],"width":640,"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"tags":["icon-chevron-right"],"defaultCode":59689,"grid":128,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":55,"id":9,"prevSize":32,"name":"chevron-right","code":59689},"setIdx":0,"setId":2,"iconIdx":10},{"icon":{"paths":["M326.352-0.185c-11.523 0.347-21.847 5.211-29.312 12.875l-284.34 284.34c-7.716 7.718-12.487 18.379-12.487 30.155s4.771 22.436 12.487 30.155l284.33 284.33c7.774 8.087 18.685 13.112 30.768 13.112 23.557 0 42.654-19.096 42.654-42.654 0-12.083-5.025-22.993-13.099-30.754l-0.015-0.013-211.526-211.526h508.353c157.526 0 284.33 126.804 284.33 284.33s-126.804 284.33-284.33 284.33h-213.248c-0.18-0.003-0.391-0.004-0.604-0.004-23.557 0-42.654 19.096-42.654 42.654s19.096 42.654 42.654 42.654c0.212 0 0.424-0.001 0.636-0.004h213.216c203.631 0 369.63-166 369.63-369.63s-166-369.63-369.63-369.63h-508.353l211.526-211.526c7.958-7.757 12.895-18.581 12.895-30.557 0-23.557-19.096-42.654-42.654-42.654-0.432 0-0.862 0.007-1.291 0.019l0.063-0.001z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-back-2"],"defaultCode":59676,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":56,"id":10,"name":"back-2","prevSize":32,"code":59676},"setIdx":0,"setId":2,"iconIdx":11},{"icon":{"paths":["M842.375 148.875c-8.79 0.214-16.67 3.94-22.323 9.823l-0.010 0.011-308.042 308.042-308.042-308.042c-5.822-5.991-13.956-9.708-22.958-9.708l-0-0c-17.672 0.004-31.995 14.331-31.995 32.003 0 9 3.715 17.133 9.696 22.948l0.007 0.007 308.042 308.042-308.042 308.042c-6.068 5.833-9.838 14.019-9.838 23.085 0 17.675 14.328 32.003 32.003 32.003 9.066 0 17.252-3.77 23.075-9.828l0.010-0.011 308.042-308.042 308.042 308.042c5.833 6.068 14.019 9.838 23.085 9.838 17.675 0 32.003-14.328 32.003-32.003 0-9.066-3.77-17.252-9.828-23.075l-0.011-0.010-308.042-308.042 308.042-308.042c6.071-5.834 9.842-14.021 9.842-23.089 0-17.675-14.328-32.003-32.003-32.003-0.266 0-0.531 0.003-0.795 0.010l0.039-0.001z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-remove"],"defaultCode":59688,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":57,"id":11,"name":"remove","prevSize":32,"code":59688},"setIdx":0,"setId":2,"iconIdx":12},{"icon":{"paths":["M735.375 63.708c-8.646 0.26-16.392 3.91-21.993 9.66l-0.007 0.007-416 416c-5.789 5.791-9.369 13.79-9.369 22.625s3.58 16.834 9.369 22.625l416 416c5.833 6.068 14.019 9.838 23.085 9.838 17.675 0 32.003-14.328 32.003-32.003 0-9.066-3.77-17.252-9.828-23.075l-0.011-0.010-393.375-393.375 393.375-393.375c5.971-5.82 9.675-13.941 9.675-22.927 0-17.675-14.328-32.003-32.003-32.003-0.324 0-0.647 0.005-0.969 0.014l0.047-0.001z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-chevron-left-2"],"defaultCode":59663,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":58,"id":12,"name":"chevron-left-2","prevSize":32,"code":59663},"setIdx":0,"setId":2,"iconIdx":13},{"icon":{"paths":["M394.333 63.667c-17.672 0.004-31.995 14.331-31.995 32.003 0 9 3.715 17.133 9.696 22.948l0.007 0.007 393.375 393.375-393.375 393.375c-6.068 5.833-9.838 14.019-9.838 23.085 0 17.675 14.328 32.003 32.003 32.003 9.066 0 17.252-3.77 23.075-9.828l0.010-0.011 416-416c5.789-5.791 9.369-13.79 9.369-22.625s-3.58-16.834-9.369-22.625l-416-416c-5.822-5.991-13.956-9.708-22.958-9.708l-0-0z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-chevron-right-2"],"defaultCode":59677,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":59,"id":13,"name":"chevron-right-2","prevSize":32,"code":59677},"setIdx":0,"setId":2,"iconIdx":14},{"icon":{"paths":["M693.333 106.667c-52.64 0-96 43.36-96 96v10.667h-480c-0.135-0.002-0.293-0.003-0.453-0.003-17.675 0-32.003 14.328-32.003 32.003s14.328 32.003 32.003 32.003c0.159 0 0.318-0.001 0.477-0.003l-0.024 0h480v10.667c0 52.64 43.36 96 96 96s96-43.36 96-96v-10.667h117.333c0.135 0.002 0.293 0.003 0.453 0.003 17.675 0 32.003-14.328 32.003-32.003s-14.328-32.003-32.003-32.003c-0.159 0-0.318 0.001-0.477 0.003l0.024-0h-117.333v-10.667c0-52.64-43.36-96-96-96zM693.333 170.667c18.059 0 32 13.941 32 32v37.417c-0.269 1.559-0.423 3.356-0.423 5.187s0.154 3.628 0.45 5.376l-0.026-0.188v37.542c0 18.059-13.941 32-32 32s-32-13.941-32-32v-37.417c0.269-1.559 0.423-3.356 0.423-5.187s-0.154-3.628-0.45-5.376l0.026 0.188v-37.542c0-18.059 13.941-32 32-32zM330.667 373.333c-52.64 0-96 43.36-96 96v10.667h-117.333c-0.135-0.002-0.293-0.003-0.453-0.003-17.675 0-32.003 14.328-32.003 32.003s14.328 32.003 32.003 32.003c0.159 0 0.318-0.001 0.477-0.003l-0.024 0h117.333v10.667c0 52.64 43.36 96 96 96s96-43.36 96-96v-10.667h480c0.135 0.002 0.293 0.003 0.453 0.003 17.675 0 32.003-14.328 32.003-32.003s-14.328-32.003-32.003-32.003c-0.159 0-0.318 0.001-0.477 0.003l0.024-0h-480v-10.667c0-52.64-43.36-96-96-96zM330.667 437.333c18.059 0 32 13.941 32 32v37.417c-0.269 1.559-0.423 3.356-0.423 5.187s0.154 3.628 0.45 5.376l-0.026-0.188v37.542c0 18.059-13.941 32-32 32s-32-13.941-32-32v-37.417c0.269-1.559 0.423-3.356 0.423-5.187s-0.154-3.628-0.45-5.376l0.026 0.188v-37.542c0-18.059 13.941-32 32-32zM650.667 640c-52.64 0-96 43.36-96 96v10.667h-437.333c-0.135-0.002-0.293-0.003-0.453-0.003-17.675 0-32.003 14.328-32.003 32.003s14.328 32.003 32.003 32.003c0.159 0 0.318-0.001 0.477-0.003l-0.024 0h437.333v10.667c0 52.64 43.36 96 96 96s96-43.36 96-96v-10.667h160c0.135 0.002 0.293 0.003 0.453 0.003 17.675 0 32.003-14.328 32.003-32.003s-14.328-32.003-32.003-32.003c-0.159 0-0.318 0.001-0.477 0.003l0.024-0h-160v-10.667c0-52.64-43.36-96-96-96zM650.667 704c18.059 0 32 13.941 32 32v37.417c-0.269 1.559-0.423 3.356-0.423 5.187s0.154 3.628 0.45 5.376l-0.026-0.188v37.542c0 18.059-13.941 32-32 32s-32-13.941-32-32v-37.417c0.269-1.559 0.423-3.356 0.423-5.187s-0.154-3.628-0.45-5.376l0.026 0.188v-37.542c0-18.059 13.941-32 32-32z"],"attrs":[],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-slider"],"defaultCode":59687,"colorPermutations":{"25525525519191911":[]}},"attrs":[],"properties":{"order":60,"id":14,"name":"slider","prevSize":32,"code":59687},"setIdx":0,"setId":2,"iconIdx":15},{"icon":{"paths":["M953.53 703.521c-18.424 5.13-37.468 7.696-56.594 7.624-46.633 0-82.019-16.794-106.154-50.382s-36.204-83.451-36.206-149.587c-0.383-28.361 2.926-56.655 9.836-84.167 6.56-24.605 15.931-45.434 28.121-62.49 11.454-16.414 26.71-29.815 44.465-39.055 18.138-9.144 38.216-13.765 58.522-13.476 19.737-0.188 39.394 2.51 58.352 8.006 18.15 5.494 35.518 13.306 51.67 23.24v-68.358c-16.76-8.293-34.465-14.52-52.726-18.551-19.525-4.167-39.443-6.193-59.405-6.054-31.407 0-59.761 6.249-85.066 18.746-25.375 12.553-47.509 30.799-64.671 53.31-17.811 23.043-31.52 51.098-41.122 84.167s-14.409 70.041-14.412 110.917c0 84.359 17.4 148.087 52.197 191.181s84.652 64.639 149.568 64.637c39.94 0.084 79.414-8.581 115.646-25.386v-65.608c-16.474 9.050-33.93 16.191-52.022 21.288z","M81.72 707.623v-451.111h-63.624v510.485h264.342v-59.374h-0.007z","M565.077 549.641c-5.179-7.413-11.673-13.745-19.109-18.731l-8.622-8.648c13.226-3.886 25.788-9.788 37.223-17.525 11.983-8.146 22.452-18.326 30.931-30.073 8.395-11.742 14.752-24.812 18.806-38.666 4.284-14.652 6.415-29.847 6.328-45.109 0.223-18.642-2.685-37.195-8.607-54.876-5.47-16.104-14.752-30.645-27.065-42.375-13.575-12.459-29.713-21.792-47.278-27.339-19.217-6.506-42.18-9.762-68.895-9.764h-123.032v83.59l-259.699-260.476-43.525 43.405 303.219 304.133v339.812h62.559v-227.309h29.527c7.657-0.091 15.284 0.829 22.718 2.644l51.401 51.555c1.51 3.241 2.957 6.508 4.28 9.834l68.542 163.277h70.662l-22.372-51.635 228.306 228.994 43.525-43.407-348.903-349.953c-0.31-0.45-0.608-0.909-0.921-1.359zM418.312 315.103h59.063c27.885 0 49.502 6.77 64.853 20.309s23.026 33.977 23.023 61.319c0.243 12.767-2.086 25.451-6.854 37.297v0.005c-4.316 10.446-10.922 19.789-19.333 27.339-8.773 7.677-19.075 13.402-30.23 16.794-4.076 1.238-8.209 2.255-12.372 3.090l-78.151-78.384v-87.768z"],"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-lyric-off"],"colorPermutations":{"25525525519191911":[{},{},{}]}},"attrs":[{},{},{}],"properties":{"order":107,"id":56,"name":"lyric-off","prevSize":32,"code":59697},"setIdx":0,"setId":2,"iconIdx":16},{"icon":{"paths":["M280.698 708.793h-201.648v-453.218h-63.922v512.869h265.574v-59.653zM592.39 599.711c-8.373-19.027-17.636-35.333-28.339-50.559l0.615 0.921c-8.197-11.627-19.414-20.62-32.53-25.916l-0.492-0.174c16.178-4.134 30.373-10.673 43.015-19.32l-0.461 0.296c12.16-8.339 22.452-18.356 30.83-29.854l0.249-0.36c8.039-11.114 14.485-24.031 18.657-37.93l0.234-0.915c4.037-13.298 6.36-28.577 6.36-44.401 0-0.324-0.001-0.646-0.002-0.966v0.051c0.006-0.597 0.012-1.306 0.012-2.010 0-19.007-3.172-37.271-9.009-54.294l0.352 1.177c-5.802-16.78-15.127-31.060-27.152-42.532l-0.041-0.038c-13.172-12.122-29.052-21.535-46.601-27.218l-0.895-0.251q-28.96-9.807-69.219-9.812h-123.607v512.845h62.852v-228.369h29.664c0.325-0.003 0.709-0.005 1.089-0.005 8.468 0 16.668 1.149 24.452 3.297l-0.644-0.154c7.851 2.265 14.683 5.83 20.611 10.495l-0.128-0.098c6.832 5.546 12.631 12.020 17.287 19.296l0.193 0.323c5.745 8.903 11.078 19.163 15.449 29.915l0.453 1.258 68.861 164.037h70.992zM557.955 433.93c-4.55 10.838-11.136 20.005-19.353 27.408l-0.068 0.061c-8.479 7.451-18.622 13.234-29.784 16.715l-0.586 0.16c-11.456 3.613-24.626 5.693-38.286 5.693-0.63 0-1.263-0.004-1.894-0.013l0.097 0.001h-50.866v-169.51h59.34q42.023 0 65.156 20.402t23.13 61.606c0.011 0.544 0.019 1.182 0.019 1.824 0 12.844-2.535 25.096-7.135 36.286l0.23-0.635zM1007.199 683.285c-14.963 8.404-32.307 15.691-50.508 20.952l-1.754 0.433c-16.803 4.863-36.101 7.658-56.055 7.658-0.283 0-0.562 0-0.846-0.001h0.042q-70.279 0-106.65-50.616t-36.376-150.287c-0.020-1.313-0.031-2.861-0.031-4.415 0-28.467 3.615-56.085 10.411-82.427l-0.498 2.285q9.883-37.078 28.252-62.783c11.565-16.427 26.556-29.68 43.998-38.913l0.679-0.327c16.587-8.542 36.203-13.552 56.985-13.552 0.636 0 1.274 0.004 1.907 0.013l-0.098-0.001c0.57-0.005 1.248-0.007 1.926-0.007 20.2 0 39.718 2.943 58.141 8.42l-1.442-0.366c19.78 6.074 36.984 14.010 52.848 23.894l-0.94-0.547v-68.677c-15.213-7.722-32.895-14.138-51.415-18.338l-1.556-0.296c-17.353-3.872-37.283-6.088-57.733-6.088-0.686 0-1.369 0.002-2.055 0.006h0.103q-47.327 0-85.465 18.836c-26.035 13.060-47.76 31.136-64.652 53.123l-0.323 0.436q-26.84 34.723-41.316 84.558t-14.481 111.434q0 127.133 52.442 192.073t150.267 64.939c0.168 0 0.366 0 0.567 0 41.958 0 81.716-9.402 117.289-26.216l-1.674 0.711v-65.913z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-lyric-on"],"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":101,"id":53,"name":"lyric-on","prevSize":32,"code":59698},"setIdx":0,"setId":2,"iconIdx":17},{"icon":{"paths":["M212.62 135.003c-79.211 0-144.145 64.933-144.145 144.145v376.997c0 79.211 64.933 144.145 144.145 144.145h33.264v121.969c0 43.599 53.828 70.497 88.705 44.353l221.761-166.322h255.027c79.211 0 144.145-64.933 144.145-144.145v-376.997c0-79.211-64.933-144.145-144.145-144.145h-598.758zM212.62 201.533h598.758c43.245 0 77.617 34.371 77.617 77.617v376.997c0 43.245-34.371 77.617-77.617 77.617h-266.114c-7.531 0.003-14.476 2.51-20.050 6.731l0.084-0.060-212.884 159.651v-133.058c-0.002-18.37-14.894-33.262-33.264-33.264h-66.528c-43.245 0-77.617-34.371-77.617-77.617v-376.997c0-43.245 34.371-77.617 77.617-77.617zM323.503 356.723c-0.141-0.002-0.305-0.003-0.471-0.003-18.373 0-33.267 14.894-33.267 33.267s14.894 33.267 33.267 33.267c0.165 0 0.33-0.001 0.495-0.003h376.971c0.141 0.002 0.305 0.003 0.471 0.003 18.373 0 33.267-14.894 33.267-33.267s-14.894-33.267-33.267-33.267c-0.165 0-0.33 0.001-0.495 0.003h-376.971zM323.503 511.956c-0.141-0.002-0.305-0.003-0.471-0.003-18.373 0-33.267 14.894-33.267 33.267s14.894 33.267 33.267 33.267c0.165 0 0.33-0.001 0.495-0.003h288.265c0.141 0.002 0.305 0.003 0.471 0.003 18.373 0 33.267-14.894 33.267-33.267s-14.894-33.267-33.267-33.267c-0.165 0-0.33 0.001-0.495 0.003h-288.265z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-comment"],"defaultCode":59672,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":61,"id":15,"name":"comment","prevSize":32,"code":59672},"setIdx":0,"setId":2,"iconIdx":18},{"icon":{"paths":["M245.333 128c-64.704 0-117.333 52.629-117.333 117.333v533.333c0 64.704 52.629 117.333 117.333 117.333h533.333c64.704 0 117.333-52.629 117.333-117.333v-533.333c0-64.704-52.629-117.333-117.333-117.333h-533.333zM245.333 192h533.333c29.397 0 53.333 23.936 53.333 53.333v533.333c0 29.397-23.936 53.333-53.333 53.333h-533.333c-29.397 0-53.333-23.936-53.333-53.333v-533.333c0-29.397 23.936-53.333 53.333-53.333zM387.583 278.917l149.958 233.083-149.958 233.083h138.167l151.667-233.083-151.667-233.083h-138.167z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-playback-rate"],"defaultCode":59674,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":62,"id":16,"name":"playback-rate","prevSize":32,"code":59674},"setIdx":0,"setId":2,"iconIdx":19},{"icon":{"paths":["M559.292 130.167c-2.813-0.004-5.639 0.202-8.458 0.583-11.277 1.526-22.4 6.179-31.583 14.333-0 0.006-0 0.014-0 0.021s0 0.015 0 0.022l-0-0.001-196.75 174.875h-141.167c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h141.167l196.75 174.875c18.364 16.326 44.408 18.728 64.125 9.875s35.292-29.926 35.292-54.5v-644.5c0-24.565-15.531-45.644-35.25-54.5-7.394-3.321-15.686-5.070-24.125-5.083zM554.667 199.25v625.5l-198.75-176.667c-5.622-5.015-13.078-8.080-21.249-8.083l-153.334-0c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h153.333c8.172-0.003 15.628-3.068 21.282-8.111l-0.032 0.028 198.75-176.667zM927.708 383.542c-8.79 0.214-16.67 3.94-22.323 9.823l-0.010 0.011-73.375 73.375-73.375-73.375c-5.822-5.991-13.956-9.708-22.958-9.708l-0-0c-17.672 0.004-31.995 14.331-31.995 32.003 0 9 3.715 17.133 9.696 22.948l0.007 0.007 73.375 73.375-73.375 73.375c-6.068 5.833-9.838 14.019-9.838 23.085 0 17.675 14.328 32.003 32.003 32.003 9.066 0 17.252-3.77 23.075-9.828l0.010-0.011 73.375-73.375 73.375 73.375c5.833 6.068 14.019 9.838 23.085 9.838 17.675 0 32.003-14.328 32.003-32.003 0-9.066-3.77-17.252-9.828-23.075l-0.011-0.010-73.375-73.375 73.375-73.375c6.071-5.833 9.842-14.021 9.842-23.089 0-17.675-14.328-32.003-32.003-32.003-0.266 0-0.531 0.003-0.795 0.010l0.039-0.001z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-mute"],"defaultCode":59682,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":63,"id":17,"name":"volume-mute","prevSize":32,"code":59682},"setIdx":0,"setId":2,"iconIdx":20},{"icon":{"paths":["M687.292 130.167c-2.813-0.004-5.639 0.202-8.458 0.583-11.277 1.526-22.4 6.179-31.583 14.333-0 0.006-0 0.014-0 0.021s0 0.015 0 0.022l-0-0.001-196.75 174.875h-141.167c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h141.167l196.75 174.875c18.364 16.326 44.408 18.728 64.125 9.875s35.292-29.926 35.292-54.5v-644.5c0-24.565-15.531-45.644-35.25-54.5-7.394-3.321-15.686-5.070-24.125-5.083zM682.667 199.25v625.5l-198.75-176.667c-5.622-5.015-13.078-8.080-21.249-8.083l-153.334-0c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h153.333c8.172-0.003 15.628-3.068 21.282-8.111l-0.032 0.028 198.75-176.667z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-off"],"defaultCode":59683,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":64,"id":18,"name":"volume-off","prevSize":32,"code":59683},"setIdx":0,"setId":2,"iconIdx":21},{"icon":{"paths":["M644.625 130.167c-2.813-0.004-5.639 0.202-8.458 0.583-11.277 1.526-22.4 6.179-31.583 14.333-0 0.006-0 0.014-0 0.021s0 0.015 0 0.022l-0-0.001-196.75 174.875h-141.167c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h141.167l196.75 174.875c18.364 16.326 44.408 18.728 64.125 9.875s35.292-29.926 35.292-54.5v-644.5c0-24.565-15.531-45.644-35.25-54.5-7.394-3.321-15.686-5.070-24.125-5.083zM640 199.25v625.5l-198.75-176.667c-5.622-5.015-13.078-8.080-21.249-8.083l-153.334-0c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h153.333c8.172-0.003 15.628-3.068 21.282-8.111l-0.032 0.028 198.75-176.667zM793 362.583c-17.078 0.752-30.639 14.779-30.639 31.974 0 4.991 1.142 9.715 3.18 13.925l-0.083-0.191c32.353 70.794 32.308 136.984-0.167 207.792-1.89 3.961-2.993 8.609-2.993 13.514 0 17.675 14.328 32.003 32.003 32.003 12.893 0 24.006-7.625 29.075-18.611l0.082-0.198c39.205-85.481 39.279-175.631 0.208-261.125-5.085-11.349-16.282-19.113-29.292-19.113-0.483 0-0.964 0.011-1.442 0.032l0.068-0.002z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-low"],"defaultCode":59684,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":65,"id":19,"name":"volume-low","prevSize":32,"code":59684},"setIdx":0,"setId":2,"iconIdx":22},{"icon":{"paths":["M594.083 128.667c-4.952-0.641-10.063-0.606-15.125 0.125-10.124 1.461-20.056 5.758-28.167 13.125-0.159 0.139-0.281 0.248-0.402 0.358l0.027-0.024-180.5 169.083c-5.945 5.571-13.738 8.667-21.875 8.667h-166.708c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h166.708c8.137 0 15.93 3.096 21.875 8.667l180.5 169.083c0.094 0.085 0.216 0.194 0.339 0.302l0.036 0.031c16.222 14.734 39.769 17.16 57.458 9.333s31.75-26.876 31.75-48.792v-661.25c0-21.916-14.061-40.965-31.75-48.792-4.422-1.957-9.215-3.275-14.167-3.917zM576 205.958v612.083l-162.333-152.083c-17.778-16.659-41.25-25.958-65.625-25.958h-166.708c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h166.708c24.375 0 47.847-9.3 65.625-25.958l162.333-152.083zM837.292 246.875c-0.060-0-0.131-0.001-0.202-0.001-17.675 0-32.003 14.328-32.003 32.003 0 6.667 2.039 12.858 5.527 17.984l-0.071-0.111c40.473 61.983 64.125 135.68 64.125 215.25s-23.652 153.267-64.125 215.25c-3.584 5.097-5.727 11.433-5.727 18.27 0 17.675 14.328 32.003 32.003 32.003 11.502 0 21.587-6.068 27.228-15.177l0.079-0.137c46.951-71.905 74.542-157.917 74.542-250.208s-27.59-178.304-74.542-250.208c-5.722-8.959-15.583-14.834-26.821-14.917l-0.012-0zM746.917 346.833c-0.13-0.002-0.282-0.003-0.436-0.003-17.675 0-32.003 14.328-32.003 32.003 0 5.456 1.365 10.593 3.773 15.088l-0.084-0.172c18.144 35.641 28.5 75.635 28.5 118.25s-10.356 82.609-28.5 118.25c-2.504 4.458-3.979 9.784-3.979 15.455 0 17.675 14.328 32.003 32.003 32.003 12.741 0 23.744-7.446 28.893-18.224l0.083-0.193c22.474-44.146 35.5-94.248 35.5-147.292s-13.026-103.146-35.5-147.292c-5.268-10.538-15.902-17.689-28.225-17.875l-0.025-0z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-medium"],"defaultCode":59685,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":66,"id":20,"name":"volume-medium","prevSize":32,"code":59685},"setIdx":0,"setId":2,"iconIdx":23},{"icon":{"paths":["M516.625 130.167c-2.813-0.004-5.639 0.202-8.458 0.583-11.277 1.526-22.4 6.179-31.583 14.333-0 0.006-0 0.014-0 0.021s0 0.015 0 0.022l-0-0.001-196.75 174.875h-141.167c-52.64 0-96 43.36-96 96v192c0 52.64 43.36 96 96 96h141.167l196.75 174.875c18.364 16.326 44.408 18.728 64.125 9.875s35.292-29.926 35.292-54.5v-644.5c0-24.565-15.531-45.644-35.25-54.5-7.394-3.321-15.686-5.070-24.125-5.083zM858 170.292c-17.11 0.713-30.712 14.756-30.712 31.977 0 6.070 1.69 11.746 4.625 16.582l-0.080-0.142c114.831 198.084 115.245 388.522 0.042 586.542-3.085 4.833-4.917 10.725-4.917 17.046 0 17.675 14.328 32.003 32.003 32.003 12.138 0 22.697-6.757 28.122-16.714l0.084-0.168c124.583-214.14 124.143-436.716 0.042-650.792-5.587-9.834-15.991-16.359-27.919-16.359-0.453 0-0.905 0.009-1.353 0.028l0.064-0.002zM512 199.25v625.5l-198.75-176.667c-5.622-5.015-13.078-8.080-21.249-8.083l-153.334-0c-18.059 0-32-13.941-32-32v-192c0-18.059 13.941-32 32-32h153.333c8.172-0.003 15.628-3.068 21.282-8.111l-0.032 0.028 198.75-176.667zM762.792 255.583c-0.039-0-0.085-0-0.131-0-17.675 0-32.003 14.328-32.003 32.003 0 5.571 1.423 10.809 3.926 15.372l-0.084-0.166c73.798 141.328 73.798 277.089 0 418.417-2.436 4.408-3.869 9.663-3.869 15.253 0 17.675 14.328 32.003 32.003 32.003 12.451 0 23.241-7.11 28.532-17.492l0.084-0.181c81.936-156.912 81.936-320.671 0-477.583-5.363-10.498-16.078-17.572-28.451-17.625l-0.007-0zM665 362.583c-17.078 0.752-30.639 14.779-30.639 31.974 0 4.991 1.142 9.715 3.18 13.925l-0.083-0.191c32.353 70.794 32.308 136.984-0.167 207.792-1.89 3.961-2.993 8.609-2.993 13.514 0 17.675 14.328 32.003 32.003 32.003 12.893 0 24.006-7.625 29.075-18.611l0.082-0.198c39.205-85.481 39.279-175.631 0.208-261.125-5.085-11.349-16.282-19.113-29.292-19.113-0.483 0-0.964 0.011-1.442 0.032l0.068-0.002z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-volume-higt"],"defaultCode":59686,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":67,"id":21,"name":"volume-higt","prevSize":32,"code":59686},"setIdx":0,"setId":2,"iconIdx":24},{"icon":{"paths":["M995.882 547.882c37.49-37.49 37.49-98.274 0-135.764l-320-320c-37.49-37.49-98.272-37.492-135.766 0l-512 512c-37.49 37.49-37.49 98.274 0 135.764l192 192c17.373 17.372 41.374 28.118 67.884 28.118l712-0c13.254 0 24-10.746 24-24v-80c0-13.254-10.746-24-24-24h-288.234l284.116-284.118zM390.628 422.628l274.746 274.746-134.628 134.626h-229.49l-160-160 249.372-249.372z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-eraser"],"defaultCode":59671,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":68,"id":22,"name":"eraser","prevSize":32,"code":59671},"setIdx":0,"setId":2,"iconIdx":25},{"icon":{"paths":["M512 141.505c-124.939 0-235.61 62.225-302.634 157.148-3.539 4.956-5.656 11.137-5.656 17.81 0 17.056 13.823 30.878 30.878 30.878 10.383 0 19.568-5.121 25.167-12.98l0.066-0.095c55.935-79.215 147.706-131.016 252.185-131.016 166.341 0 300.996 130.715 308.062 295.278l-49.532-49.532c-5.619-5.779-13.464-9.368-22.152-9.368v0c-17.051 0.004-30.866 13.823-30.866 30.876 0 8.685 3.587 16.53 9.355 22.141l92.631 92.631c5.585 5.583 13.307 9.041 21.831 9.041s16.24-3.452 21.831-9.041l7.154-7.154c2.263-1.729 4.223-3.683 5.897-5.874l0.056-0.072 79.519-79.519c5.857-5.628 9.492-13.526 9.492-22.273 0-17.055-13.823-30.876-30.876-30.876-8.746 0-16.648 3.637-22.262 9.481l-0.011 0.012-31.239 31.239c-16.193-189.427-175.348-338.737-368.888-338.737zM182.23 429.669c-8.362 0.125-15.906 3.557-21.386 9.047l-7.035 7.035c-2.334 1.766-4.344 3.777-6.053 6.036l-0.057 0.075-79.479 79.479c-5.857 5.628-9.492 13.526-9.492 22.273 0 17.055 13.823 30.876 30.876 30.876 8.746 0 16.648-3.637 22.262-9.481l0.011-0.012 31.239-31.239c16.193 189.427 175.348 338.737 368.888 338.737 124.939 0 235.61-62.225 302.634-157.148 3.539-4.956 5.656-11.137 5.656-17.81 0-17.056-13.823-30.878-30.878-30.878-10.383 0-19.568 5.121-25.167 12.98l-0.066 0.095c-55.935 79.215-147.706 131.016-252.185 131.016-166.341 0-300.996-130.715-308.062-295.278l49.532 49.532c5.628 5.857 13.526 9.492 22.273 9.492 17.055 0 30.876-13.823 30.876-30.876 0-8.746-3.637-16.648-9.481-22.262l-0.012-0.011-92.624-92.624c-5.586-5.588-13.312-9.050-21.835-9.050-0.154 0-0.3 0.001-0.455 0.003h0.022z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["available_updates"],"defaultCode":59665,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":69,"id":23,"name":"available_updates","prevSize":32,"code":59665},"setIdx":0,"setId":2,"iconIdx":26},{"icon":{"paths":["M512 92.955c-231.063 0-419.045 187.982-419.045 419.045s187.982 419.045 419.045 419.045c11.039 0 21.862-0.797 32.697-1.634-17.366-18.376-32.24-39.139-43.99-61.792-191.152-6.030-344.891-163.022-344.891-355.611 0-196.407 159.784-356.19 356.19-356.19 192.588 0 349.581 153.752 355.611 344.891 22.674 11.75 43.422 26.596 61.792 43.99 0.841-10.832 1.634-21.651 1.634-32.697 0-231.063-187.982-419.045-419.045-419.045zM521.982 260.128c-17.144 0.276-30.937 14.239-30.937 31.432 0 0.156 0.001 0.314 0.005 0.469v-0.027 219.998h-136.192c-0.137-0.002-0.291-0.003-0.447-0.003-17.354 0-31.432 14.070-31.432 31.432s14.070 31.432 31.432 31.432c0.154 0 0.307-0.001 0.467-0.003h167.597c17.352-0.002 31.432-14.070 31.432-31.432v0-251.432c0.002-0.137 0.003-0.298 0.003-0.454 0-17.354-14.070-31.432-31.432-31.432-0.175 0-0.348 0.001-0.522 0.005h0.027zM742.477 512c-127.289 0-230.477 103.192-230.477 230.477s103.192 230.477 230.477 230.477c127.289 0 230.477-103.192 230.477-230.477s-103.192-230.477-230.477-230.477zM742.477 574.855c0.299 0 0.507 0.164 0.78 0.164 2.368 0.103 4.736 0.412 7.001 1.306l78.402 31.382c24.007 9.615 39.527 32.498 39.527 58.356v10.477c0 6.957-3.467 13.449-9.212 17.352-3.52 2.392-7.617 3.602-11.742 3.602-2.614 0-5.243-0.485-7.781-1.512l-76.037-30.403v171.184c0 3.416-0.432 5.887-1.107 7.893-5.362 25.145-35.518 44.479-72.232 44.479-40.506 0-73.338-23.449-73.338-52.386s32.832-52.386 73.338-52.386c11.299 0 21.87 1.966 31.432 5.241v-193.804c0-2.557 0.591-4.977 1.432-7.287 0.192-0.479 0.358-0.928 0.577-1.396 0.983-2.117 2.253-4.073 3.882-5.768 0.299-0.31 0.632-0.57 0.943-0.854 0.777-0.712 1.496-1.457 2.376-2.049 0.88-0.608 1.858-0.966 2.829-1.432 0.414-0.192 0.768-0.448 1.182-0.616 2.265-0.906 4.631-1.304 7.039-1.396 0.247-0.026 0.445-0.164 0.69-0.164z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["music_time"],"defaultCode":59648,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":70,"id":24,"name":"music_time","prevSize":32,"code":59648},"setIdx":0,"setId":2,"iconIdx":27},{"icon":{"paths":["M769.011 64.070c-18.539 0.005-33.566 15.036-33.566 33.572 0 9.438 3.894 17.972 10.168 24.072l76.976 76.976h-612.718c-67.808 0-123.084 55.277-123.084 123.084v361.214l67.136-67.136v-294.078c0-30.884 25.061-55.948 55.948-55.948h612.718l-76.972 76.972c-6.363 6.121-10.323 14.703-10.323 24.22 0 18.542 15.034 33.572 33.572 33.572 9.509 0 18.099-3.952 24.208-10.311l0.012-0.013 134.273-134.273c6.076-6.076 9.828-14.469 9.828-23.733s-3.756-17.662-9.828-23.733l-134.273-134.273c-6.108-6.286-14.644-10.183-24.084-10.183v0zM937.202 341.006l-67.136 67.136v294.078c0 30.884-25.061 55.948-55.948 55.948h-612.718l76.972-76.972c6.263-6.105 10.151-14.626 10.151-24.052 0-18.542-15.034-33.572-33.572-33.572-0.34 0-0.68 0.006-1.018 0.017l0.048-0.001c-9.070 0.272-17.196 4.104-23.071 10.133l-134.281 134.281c-6.076 6.076-9.828 14.469-9.828 23.733s3.756 17.662 9.828 23.733l134.273 134.273c6.121 6.363 14.703 10.323 24.22 10.323 18.542 0 33.572-15.034 33.572-33.572 0-9.509-3.952-18.099-10.311-24.208l-0.013-0.012-76.972-76.972h612.718c67.808 0 123.084-55.277 123.084-123.084v-361.214z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-list-loop"],"defaultCode":59649,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":71,"id":25,"name":"list-loop","prevSize":32,"code":59649},"setIdx":0,"setId":2,"iconIdx":28},{"icon":{"paths":["M812.371 117.66c-17.181 0.004-31.101 13.928-31.101 31.11 0 8.751 3.613 16.654 9.426 22.308l71.333 71.333h-127.421c-45.011 0-87.849 19.533-117.378 53.466l-340.347 391.422c-17.747 20.41-43.393 32.077-70.433 32.077h-119.567c-0.129-0.002-0.283-0.003-0.44-0.003-17.181 0-31.11 13.927-31.11 31.11s13.927 31.11 31.11 31.11c0.155 0 0.311-0.001 0.466-0.003h119.541c44.998 0 87.844-19.498 117.378-53.466l340.347-391.422c17.754-20.399 43.406-32.077 70.433-32.077h127.421l-71.325 71.325c-5.896 5.67-9.563 13.63-9.563 22.442 0 17.181 13.927 31.11 31.11 31.11 8.811 0 16.771-3.667 22.431-9.552l0.011-0.012 124.425-124.425c5.628-5.63 9.106-13.404 9.106-21.994s-3.478-16.364-9.106-21.994l-124.425-124.425c-5.658-5.825-13.567-9.439-22.315-9.439v0zM86.876 242.408c-17.213 0-31.106 13.893-31.106 31.106s13.893 31.106 31.106 31.106h119.646c26.958 0 52.685 11.628 70.315 32.161l111.143 127.952 41.274-47.509-105.349-121.305c-29.654-34.009-72.379-53.507-117.378-53.507h-119.646zM553.071 559.266l-41.274 47.509 105.349 121.305c29.654 34.009 72.379 53.507 117.378 53.507h127.507l-71.325 71.325c-5.896 5.67-9.563 13.63-9.563 22.442 0 17.181 13.927 31.11 31.11 31.11 8.811 0 16.771-3.667 22.431-9.552l0.011-0.012 124.425-124.425c5.628-5.63 9.106-13.404 9.106-21.994s-3.478-16.364-9.106-21.994l-124.425-124.425c-5.658-5.825-13.567-9.439-22.315-9.439v0c-17.181 0.004-31.101 13.928-31.101 31.11 0 8.751 3.613 16.654 9.426 22.308l71.333 71.333h-127.507c-26.958 0-52.685-11.628-70.315-32.161l-111.143-127.952z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-list-random"],"defaultCode":59650,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":72,"id":26,"name":"list-random","prevSize":32,"code":59650},"setIdx":0,"setId":2,"iconIdx":29},{"icon":{"paths":["M713.492 83.628c-19.45 0.31-35.103 16.154-35.103 35.656 0 0.182 0.001 0.358 0.005 0.536v-0.028 722.111l-105.523-105.523c-6.501-6.76-15.62-10.964-25.719-10.964-19.695 0-35.662 15.967-35.662 35.662 0 10.099 4.204 19.223 10.951 25.713l0.014 0.013 166.393 166.393c6.455 6.453 15.368 10.437 25.212 10.437s18.757-3.988 25.212-10.437l166.393-166.393c6.76-6.501 10.964-15.62 10.964-25.719 0-19.695-15.967-35.662-35.662-35.662-10.099 0-19.223 4.204-25.713 10.951l-0.013 0.014-105.523 105.523v-722.111c0.003-0.149 0.004-0.332 0.004-0.514 0-19.695-15.967-35.662-35.662-35.662-0.193 0-0.392 0.001-0.583 0.005h0.028zM283.215 131.815c-2.79 0.238-5.592 0.761-8.311 1.675l-71.308 23.771c-18.681 6.229-28.793 26.441-22.565 45.128s26.487 28.86 45.128 22.565l24.375-8.168v212.028c0 19.707 15.95 35.658 35.658 35.658s35.658-15.95 35.658-35.658v-261.472c0-11.46-5.518-22.22-14.813-28.922-6.989-5.031-15.439-7.295-23.817-6.592zM274.301 583.308c-63.132 0-109.64 39.984-118.48 101.903-2.778 19.495 10.733 37.562 30.223 40.343 19.467 2.804 37.562-10.705 40.343-30.223 2.665-18.563 13.134-40.719 47.913-40.719 26.216 0 47.544 21.319 47.544 47.544s-21.319 47.544-47.544 47.544c-57.236 0-118.85 40.907-118.85 130.735 0 19.707 15.977 35.658 35.658 35.658h166.393c19.707 0 35.658-15.95 35.658-35.658s-15.95-35.658-35.658-35.658h-123.397c11.247-21.559 32.216-23.771 40.204-23.771 65.533 0 118.85-53.32 118.85-118.85s-53.32-118.85-118.85-118.85z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-list-order"],"defaultCode":59651,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":73,"id":27,"name":"list-order","prevSize":32,"code":59651},"setIdx":0,"setId":2,"iconIdx":30},{"icon":{"paths":["M782.78 40.073c-19.532 0.005-35.363 15.841-35.363 35.37 0 9.945 4.104 18.935 10.714 25.362l81.101 81.101h-645.541c-71.441 0-129.678 58.238-129.678 129.678v380.564l70.733-70.733v-309.831c0-32.538 26.405-58.945 58.945-58.945h645.541l-81.095 81.095c-6.705 6.448-10.875 15.492-10.875 25.516 0 19.535 15.838 35.37 35.37 35.37 10.019 0 19.068-4.165 25.504-10.863l0.012-0.013 141.467-141.467c6.4-6.401 10.354-15.243 10.354-25.005s-3.957-18.607-10.354-25.005l-141.467-141.467c-6.435-6.622-15.427-10.729-25.374-10.729v0zM959.981 331.847l-70.733 70.733v309.831c0 32.538-26.405 58.945-58.945 58.945h-645.541l81.095-81.095c6.599-6.432 10.694-15.409 10.694-25.34 0-19.535-15.838-35.37-35.37-35.37-0.358 0-0.716 0.006-1.072 0.017l0.051-0.001c-9.556 0.287-18.117 4.323-24.307 10.676l-141.475 141.475c-6.4 6.401-10.354 15.243-10.354 25.005s3.957 18.607 10.354 25.005l141.467 141.467c6.448 6.705 15.492 10.875 25.516 10.875 19.535 0 35.37-15.838 35.37-35.37 0-10.019-4.165-19.068-10.863-25.504l-0.013-0.012-81.095-81.095h645.541c71.441 0 129.678-58.238 129.678-129.678v-380.564zM527.334 347.002c-2.311 0.196-4.617 0.675-6.863 1.429l-70.733 23.576c-15.442 5.162-23.792 21.859-18.651 37.302 5.162 15.422 21.834 23.746 37.302 18.651l31.913-10.639v230.251c0 16.268 13.203 29.471 29.471 29.471s29.471-13.202 29.471-29.52v-271.145c0-9.477-4.565-18.361-12.247-23.901-5.763-4.158-12.735-6.061-19.665-5.479z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-single-loop"],"defaultCode":59652,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":74,"id":28,"name":"single-loop","prevSize":32,"code":59652},"setIdx":0,"setId":2,"iconIdx":31},{"icon":{"paths":["M512 72c-242.617 0-440 197.383-440 440s197.383 440 440 440c242.617 0 440-197.383 440-440s-197.383-440-440-440zM512 138c91.519 0 174.114 33.962 239.037 88.303l-524.727 524.689c-54.329-64.918-88.303-147.483-88.303-238.997 0-206.939 167.060-374 374-374zM797.697 272.963c54.347 64.922 88.303 147.518 88.303 239.037 0 206.939-167.060 374-374 374-91.503 0-174.078-33.963-238.997-88.303l524.689-524.728z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-single"],"defaultCode":59673,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":75,"id":29,"name":"single","prevSize":32,"code":59673},"setIdx":0,"setId":2,"iconIdx":32},{"icon":{"paths":["M197.733 16.079c-57.158 2.263-109.626 48.892-109.626 111.719v768.402c0 83.768 93.326 138.729 166.607 98.131l693.403-384.201c75.389-41.772 75.389-154.491 0-196.264l-693.403-384.201c-18.321-10.148-37.927-14.342-56.98-13.588zM198.61 89.763c6.448-0.029 13.207 1.643 19.82 5.308l693.452 384.201c27.392 15.178 27.392 50.275 0 65.453l-693.452 384.201c-26.458 14.659-55.52-2.494-55.52-32.727v-768.402c0-15.116 7.249-26.935 17.825-33.165 5.288-3.117 11.426-4.843 17.874-4.87z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-play-outline"],"defaultCode":59681,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":76,"id":30,"name":"play-outline","prevSize":32,"code":59681},"setIdx":0,"setId":2,"iconIdx":33},{"icon":{"paths":["M469.685 572.65v-572.65h84.628v572.65zM511.999 1023.998q-104.374 0-196.76-40.198t-161.498-109.312-109.312-161.498-40.198-196.76q0-112.837 47.956-210.865t135.405-174.192l59.24 59.24q-74.754 60.651-116.364 144.573t-41.609 181.246q0 176.308 123.416 299.724t299.724 123.416 299.724-123.416 123.416-299.724q0-97.322-41.609-182.655t-113.543-143.163l60.651-59.24q84.628 71.934 131.878 172.077t47.25 212.981q0 104.374-40.198 196.76t-108.606 161.498-160.793 109.312-198.171 40.198z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-exit"],"defaultCode":59679,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":77,"id":31,"name":"exit2","prevSize":32,"code":59679},"setIdx":0,"setId":2,"iconIdx":34},{"icon":{"paths":["M86.515 1024.001q-34.039 0-59.568-25.529t-25.529-59.568v-297.839h85.097v297.839h850.97v-853.806h-850.97v300.676h-85.097v-300.676q0-34.039 25.529-59.568t59.568-25.529h850.97q34.039 0 59.568 25.529t25.529 59.568v853.806q0 34.039-25.529 59.568t-59.568 25.529zM416.975 787.148l-63.823-63.823 167.358-167.358h-519.092v-85.097h519.092l-167.358-167.358 63.823-63.823 273.729 273.729z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-exit"],"defaultCode":59678,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":78,"id":32,"name":"exit","prevSize":32,"code":59678},"setIdx":0,"setId":2,"iconIdx":35},{"icon":{"paths":["M465.902 1.102c-44.961-7.649-81.748 25.464-81.748 71.063v471.297c-26.614-9.764-55.241-15.373-85.225-15.373-136.943 0-247.961 111.022-247.961 247.97 0 136.939 111.018 247.942 247.961 247.942 78.047 0 147.539-36.165 192.953-92.542l-113.518-113.532c-34.555-34.546-26.765-66.068-21.813-78.044 4.951-11.963 21.749-39.776 70.599-39.776h41.336v-130.039c0-48.308 33.415-88.839 78.332-100.001 0.073-101.437 0.073-187.014 0.073-187.014 320.377 0 301.122 191.965 263.634 302.201-14.676 43.169-5.946 50.406 24.901 16.811 390.955-425.798-153.327-564.193-369.524-600.961z","M688.227 511.782h-116.573c-8.941 0-17.314 2.172-24.892 5.768-19.696 9.35-33.41 29.256-33.41 52.516v174.902h-86.201c-32.192 0-39.84 18.45-17.067 41.214l178.635 178.638c11.393 11.396 26.319 17.086 41.224 17.086 14.912 0 29.837-5.678 41.214-17.086l178.656-178.64c22.748-22.764 15.106-41.214-17.076-41.214h-86.205v-174.902c0.002-32.182-26.106-58.282-58.305-58.282z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-logo"],"defaultCode":59669,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":79,"id":33,"name":"logo","prevSize":32,"code":59669},"setIdx":0,"setId":2,"iconIdx":36},{"icon":{"paths":["M181.333 170.667c-52.928 0-96 43.072-96 96v490.667c0 52.928 43.072 96 96 96h309.417c-8.448-20.203-14.314-41.707-17.792-64h-291.625c-17.643 0-32-14.357-32-32v-490.667c0-17.643 14.357-32 32-32h161.125c12.459 0 24.567 4.376 34.167 12.333l104.25 86.917c5.739 4.8 12.97 7.417 20.458 7.417h341.333c17.643 0 32 14.357 32 32v127.542c23.531 12.309 45.035 27.885 64 46.125v-173.667c0-52.928-43.072-96-96-96h-329.75l-95.375-79.5c-21.056-17.515-47.713-27.167-75.083-27.167h-161.125zM746.667 512c-129.6 0-234.667 105.067-234.667 234.667s105.067 234.667 234.667 234.667c129.6 0 234.667-105.067 234.667-234.667s-105.067-234.667-234.667-234.667zM746.667 576c11.776 0 21.333 9.557 21.333 21.333v128h128c11.776 0 21.333 9.557 21.333 21.333s-9.557 21.333-21.333 21.333h-128v128c0 11.776-9.557 21.333-21.333 21.333s-21.333-9.557-21.333-21.333v-128h-128c-11.776 0-21.333-9.557-21.333-21.333s9.557-21.333 21.333-21.333h128v-128c0-11.776 9.557-21.333 21.333-21.333z"],"attrs":[{"fill":"rgb(91, 91, 91)"}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["iocn-add_folder"],"defaultCode":59666,"colorPermutations":{"25525525519191911":[{"f":0}]}},"attrs":[{"fill":"rgb(91, 91, 91)"}],"properties":{"order":80,"id":34,"name":"add_folder","prevSize":32,"code":59666},"setIdx":0,"setId":2,"iconIdx":37},{"icon":{"paths":["M964.54 573.38c17.54-29.7 27.46-61.38 27.46-99.68 0-88.030-74.436-171.16-171.64-171.16h-72.96c9.84-25.62 17.7-56.26 17.7-93.080 0-145.588-75.38-209.46-190.54-209.46-123.214 0-116.186 189.866-143.52 217.2-45.494 45.494-99.23 132.894-137.52 166.8h-197.52c-35.346 0-64 28.654-64 64v480c0 35.346 28.654 64 64 64h128c29.786 0 54.816-20.348 61.956-47.9 89.018 2.002 150.12 79.88 355.604 79.88 14.44 0 30.44 0.020 44.44 0.020 154.234 0 223.972-78.846 225.88-190.66 26.638-36.85 40.598-86.244 34.68-133.98 19.708-36.904 27.328-80.686 17.98-125.98zM841.040 681.040c25.12 42.26 2.52 98.82-27.88 115.14 15.4 97.56-35.216 131.8-106.24 131.8h-75.64c-143.278 0-236.058-75.64-343.28-75.64v-372.34h21.84c56.72 0 135.96-141.78 189.080-194.92 56.72-56.72 37.82-151.26 75.64-189.080 94.54 0 94.54 65.96 94.54 113.46 0 78.34-56.72 113.44-56.72 189.080h207.98c42.22 0 75.46 37.82 75.64 75.64 0.18 37.8-25.64 75.62-44.54 75.62 26.978 29.11 32.742 90.472-10.42 131.24zM208 864c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-thumbs-up"],"defaultCode":59675,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":81,"id":35,"name":"thumbs-up","prevSize":32,"code":59675},"setIdx":0,"setId":2,"iconIdx":38},{"icon":{"paths":["M509.272 282.5s-134.688-165.602-304.010-51.748c-151.442 165.64-64.878 386.113 304.010 579.983 46.009-18.027 94.868-36.652 94.868-36.652 40.964-13.784 60.703 44.723 34.497 56.060-59.488 25.735 12.883-8.927-129.364 60.371-628.547-297.863-457.104-653.226-347.129-722.289 187.149-142.063 349.285 21.563 349.285 21.563s125.392-130.495 301.851-49.592c224.303 126.189 137.987 349.068 97.023 422.589-19.732 32.671-85.295-8.963-68.994-34.497 43.856-81.687 98.151-231.451-53.904-323.411-151.099-64.857-278.136 77.615-278.136 77.615z","M783.097 709.401c-17.463 0.024-53.411-0.332-86.245 0-33.876 0.344-32.95 75.386 0 75.461 32.558 0.074 86.245 0 86.245 0s-0.146 92.282 0 103.49c0.448 34.415 69.558 34.046 68.994-2.156-0.156-10.021 0-101.335 0-101.335s81.947-0.069 92.712 0c33.922 0.099 32.225-73.263-2.156-73.305-10.528 0.2-90.556 0-90.556 0s-0.116-61.104 0-99.179c0.099-32.749-69.055-33.445-68.994 0 0.059 31.78-0.472 90.856 0 97.023z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-add-music"],"defaultCode":59670,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":82,"id":36,"name":"add-music","prevSize":32,"code":59670},"setIdx":0,"setId":2,"iconIdx":39},{"icon":{"paths":["M512 768.001c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128v0c-70.692 0-128-57.308-128-128v0c0-70.692 57.308-128 128-128v0zM512 384c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128v0c-70.692 0-128-57.308-128-128v0c0-70.692 57.308-128 128-128v0zM512 0c70.692 0 128 57.308 128 128v0c0 70.692-57.308 128-128 128v0c-70.692 0-128-57.308-128-128v0c0-70.692 57.308-128 128-128v0z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-dots-vertical"],"defaultCode":59667,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":83,"id":37,"name":"dots-vertical","prevSize":32,"code":59667},"setIdx":0,"setId":2,"iconIdx":40},{"icon":{"paths":["M633.703 512l365.094-365.094c33.607-33.607 33.607-88.095 0-121.698-33.607-33.607-88.091-33.607-121.698 0l-365.099 365.099-365.099-365.104c-33.607-33.607-88.091-33.607-121.698 0-33.603 33.607-33.603 88.095 0 121.698l365.099 365.094-365.099 365.099c-33.603 33.607-33.603 88.095 0 121.698 33.607 33.607 88.091 33.607 121.698 0l365.099-365.099 365.099 365.099c33.603 33.607 88.091 33.607 121.698 0s33.607-88.091 0-121.698l-365.094-365.094z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-close"],"defaultCode":59662,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":84,"id":38,"name":"close","prevSize":32,"code":59662},"setIdx":0,"setId":2,"iconIdx":41},{"icon":{"paths":["M52.504 168.606v686.806c0 93.13 61.701 168.588 137.82 168.588 76.127 0 137.865-75.462 137.865-168.588v-686.806c0-93.085-61.738-168.577-137.865-168.577-76.119-0.030-137.82 75.492-137.82 168.577z","M833.635 0c-76.112 0-137.813 75.492-137.813 168.577v686.806c0 93.13 61.701 168.558 137.813 168.558s137.861-75.433 137.861-168.558v-686.776c-0.033-93.085-61.749-168.606-137.861-168.606z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-pause"],"defaultCode":59661,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":85,"id":39,"name":"pause","prevSize":32,"code":59661},"setIdx":0,"setId":2,"iconIdx":42},{"icon":{"paths":["M217.83 22.578c-92.32-52.955-167.165-9.574-167.165 96.819v785.129c0 106.499 74.847 149.824 167.165 96.919l686.242-393.555c92.351-52.974 92.351-138.801 0-191.763l-686.242-393.549z"],"attrs":[{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-play"],"defaultCode":59653,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":86,"id":40,"name":"play","prevSize":32,"code":59653},"setIdx":0,"setId":2,"iconIdx":43},{"icon":{"paths":["M96.898 152.171c-53.489 0-96.898 64.037-96.898 143.006v433.653c0 78.944 43.432 143.001 96.898 143.001 53.545 0 96.902-64.056 96.902-143.001v-119.627l352.204 201.971c67.023 38.471 121.477 8.351 123.795-67l-225.15-129.124c-44.415-25.451-69.917-63.036-69.917-103.083 0-40.084 25.502-77.637 69.917-103.134l225.15-129.073c-2.318-75.295-56.772-105.452-123.795-66.986l-352.204 201.92v-119.515c0.023-78.995-43.358-143.006-96.902-143.006z","M502.254 583.092l397.714 228.080c68.475 39.291 124.032 7.103 124.032-71.883v-454.686c0-78.94-55.557-111.137-124.032-71.832l-397.742 228.020c-68.452 39.301-68.452 103.009 0.028 142.301z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-prevMusic"],"defaultCode":59668,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":87,"id":41,"prevSize":32,"code":59668,"name":"prevMusic"},"setIdx":0,"setId":2,"iconIdx":44},{"icon":{"paths":["M927.102 871.83c53.489 0 96.898-64.037 96.898-143.006v-433.653c0-78.944-43.432-143.001-96.898-143.001-53.545 0-96.902 64.056-96.902 143.001v119.627l-352.204-201.971c-67.023-38.471-121.477-8.351-123.795 67l225.15 129.123c44.415 25.451 69.917 63.036 69.917 103.083 0 40.084-25.502 77.637-69.917 103.134l-225.15 129.072c2.318 75.295 56.772 105.452 123.795 66.986l352.204-201.92v119.515c-0.023 78.995 43.358 143.006 96.902 143.006z","M521.746 440.909l-397.714-228.080c-68.475-39.291-124.032-7.103-124.032 71.883v454.686c0 78.94 55.557 111.137 124.032 71.832l397.742-228.020c68.452-39.301 68.452-103.009-0.028-142.301z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-nextMusic"],"defaultCode":59654,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":88,"id":42,"name":"nextMusic","prevSize":32,"code":59654},"setIdx":0,"setId":2,"iconIdx":45},{"icon":{"paths":["M578.472 732.037c-121.522 0-220.036-98.514-220.036-220.036s98.514-220.036 220.036-220.036c121.522 0 220.036 98.514 220.036 220.036v0c-0.146 121.464-98.572 219.891-220.023 220.036h-0.014zM578.472 384.418c-70.462 0-127.583 57.121-127.583 127.583s57.12 127.583 127.583 127.583c70.462 0 127.583-57.12 127.583-127.583v0c-0.079-70.43-57.152-127.503-127.574-127.583h-0.008z","M1145.056 469.341l-246.423-426.682c-15.048-25.628-42.44-42.579-73.799-42.659h-492.694c-31.404 0.050-58.837 17.009-73.685 42.258l-0.218 0.401-246.329 426.682c-7.162 12.244-11.391 26.957-11.391 42.659s4.229 30.416 11.61 43.065l-0.219-0.406 246.423 426.682c15.063 25.643 42.485 42.601 73.871 42.659h492.621c31.397-0.054 58.822-17.012 73.662-42.258l0.218-0.401 246.423-426.682c7.14-12.229 11.357-26.921 11.357-42.599 0-15.727-4.242-30.462-11.645-43.125l0.219 0.405zM341.627 922.223l-236.844-410.223 236.844-410.247h473.712l236.844 410.247-236.844 410.223z"],"attrs":[{},{}],"width":1157,"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-setting"],"defaultCode":59655,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":89,"id":43,"name":"setting","prevSize":32,"code":59655},"setIdx":0,"setId":2,"iconIdx":46},{"icon":{"paths":["M974.751 1023.699h-925.525c-27.228-0.19-49.226-22.307-49.226-49.561 0-0.119 0-0.238 0.001-0.357v0.018-414.489c-0.001-0.1-0.001-0.219-0.001-0.338 0-27.254 21.999-49.371 49.208-49.561h0.018c27.228 0.19 49.226 22.307 49.226 49.561 0 0.119 0 0.238-0.001 0.357v-0.018 364.613h827.075v-365.504c0-27.193 22.044-49.237 49.237-49.237s49.237 22.044 49.237 49.237v0 415.38c0 0.007 0 0.016 0 0.025 0 13.741-5.516 26.193-14.456 35.262l0.006-0.006c-8.86 9.010-21.175 14.599-34.796 14.618h-0.004z","M512 582.502c-25.964-0.191-46.938-21.283-46.938-47.273 0-0.102 0-0.204 0.001-0.306v0.016-487.676c0-25.936 21.025-46.961 46.961-46.961s46.961 21.025 46.961 46.961v0 487.58c0.001 0.115 0.002 0.25 0.002 0.386 0 26.008-21.002 47.111-46.972 47.274h-0.016z","M512 658.628c-0.024 0-0.052 0-0.080 0-13.966 0-26.633-5.558-35.912-14.582l0.012 0.012-193.361-186.497c-8.999-8.738-14.582-20.95-14.582-34.466 0-12.694 4.925-24.238 12.969-32.824l-0.025 0.027c8.515-9.098 20.596-14.768 34.002-14.768 12.587 0 24.006 4.998 32.382 13.118l164.57 158.742 164.582-158.754c8.364-8.108 19.783-13.106 32.37-13.106 13.406 0 25.487 5.67 33.978 14.742l0.024 0.026c8.019 8.56 12.945 20.104 12.945 32.798 0 13.516-5.584 25.728-14.571 34.454l-0.012 0.011-193.385 186.521c-9.268 8.998-21.928 14.546-35.885 14.546-0.008 0-0.016 0-0.024 0h0.001zM540.755 575.109v0z"],"attrs":[{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-download-2"],"defaultCode":59656,"colorPermutations":{"25525525519191911":[{},{},{}]}},"attrs":[{},{},{}],"properties":{"order":90,"id":44,"name":"download-2","prevSize":32,"code":59656},"setIdx":0,"setId":2,"iconIdx":47},{"icon":{"paths":["M582.103 1023.979c-0.017 0-0.037 0-0.057 0-9.91 0-19.135-2.929-26.858-7.969l0.189 0.116-0.366-0.236c-37.014-20.47-322.334-182.265-474.13-387.408-50.491-68.21-80.819-154.003-80.819-246.879 0-19.704 1.365-39.089 4.006-58.067l-0.25 2.192c14.344-104.705 67.037-196.32 148.366-258.045 92.559-70.283 201.609-86.225 315.345-45.86 43.791 16.083 81.683 36.31 116.21 60.947l-1.48-1.003c33.048-23.634 70.939-43.86 111.372-58.853l3.359-1.091c113.788-40.337 222.838-24.422 315.37 45.86 81.33 61.829 134.022 153.471 148.366 258.045 2.401 16.818 3.771 36.242 3.771 55.986 0 92.851-30.314 178.622-81.584 247.955l0.802-1.136c-152.712 206.19-440.415 368.797-474.783 387.643-7.598 4.895-16.869 7.819-26.821 7.853h-0.009zM347.59 105.694c-43.425 0-89.994 12.46-135.593 47.117-59.054 44.892-97.349 111.588-107.794 187.813-1.757 12.365-2.76 26.646-2.76 41.16 0 68.639 22.431 132.040 60.363 183.271l-0.591-0.835c123.421 166.664 348.143 304.769 421.071 347.018 73.005-42.169 297.65-180.354 421.071-347.018 37.342-50.393 59.773-113.792 59.773-182.429 0-14.517-1.004-28.801-2.945-42.783l0.184 1.616c-10.471-76.199-48.74-142.895-107.82-187.813-159.125-120.933-330.108 28.27-337.384 34.684-8.691 7.859-20.268 12.668-32.969 12.668s-24.278-4.809-33.012-12.706l0.043 0.038c-5.052-4.555-93.553-81.801-201.634-81.801z"],"attrs":[{}],"width":1165,"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-love"],"defaultCode":59657,"colorPermutations":{"25525525519191911":[{}]}},"attrs":[{}],"properties":{"order":91,"id":45,"name":"love","prevSize":32,"code":59657},"setIdx":0,"setId":2,"iconIdx":48},{"icon":{"paths":["M968.343 913.191h-912.975c-30.592 0-55.393 24.8-55.393 55.393s24.8 55.393 55.393 55.393v0h912.975c30.592 0 55.393-24.8 55.393-55.393s-24.8-55.393-55.393-55.393v0z","M931.085 848.958c30.592 0 55.393-24.8 55.393-55.393v0-738.197c0-30.592-24.8-55.393-55.393-55.393s-55.393 24.8-55.393 55.393v0 738.173c0 0.007 0 0.016 0 0.024 0 30.592 24.8 55.393 55.393 55.393v0z","M511.735 848.958c30.592 0 55.393-24.8 55.393-55.393v0-504.921c0-30.592-24.8-55.393-55.393-55.393s-55.393 24.8-55.393 55.393v0 504.896c0 0.007 0 0.016 0 0.024 0 30.592 24.8 55.393 55.393 55.393v0z","M92.386 848.958c30.592 0 55.393-24.8 55.393-55.393v0-331.636c0-30.592-24.8-55.393-55.393-55.393s-55.393 24.8-55.393 55.393v0 331.612c0 0.007 0 0.016 0 0.024 0 30.592 24.8 55.393 55.393 55.393v0z"],"attrs":[{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-leaderboard"],"defaultCode":59658,"colorPermutations":{"25525525519191911":[{},{},{},{}]}},"attrs":[{},{},{},{}],"properties":{"order":92,"id":46,"name":"leaderboard","prevSize":32,"code":59658},"setIdx":0,"setId":2,"iconIdx":49},{"icon":{"paths":["M48.166 895.662c-26.601 0-48.166-21.564-48.166-48.166v0-799.331c0-26.601 21.564-48.166 48.166-48.166v0h755.983c26.601 0 48.166 21.564 48.166 48.166s-21.564 48.166-48.166 48.166v0h-707.816v751.165c0 26.601-21.564 48.166-48.166 48.166v0z","M975.834 1024h-736.932c-26.601 0-48.166-21.564-48.166-48.166v0-354.499c0-26.601 21.564-48.166 48.166-48.166s48.166 21.564 48.166 48.166v0 306.333h640.602v-633.858h-515.371c-26.601 0-48.166-21.564-48.166-48.166s21.564-48.166 48.166-48.166v0h563.537c26.601 0 48.166 21.564 48.166 48.166v0 730.19c0 26.601-21.564 48.166-48.166 48.166v0z","M623.744 786.76c-23.941 0-43.349-19.408-43.349-43.349v0-346.046c0-23.941 19.408-43.349 43.349-43.349s43.349 19.408 43.349 43.349v0 345.828c0 0.064 0.001 0.141 0.001 0.217 0 23.941-19.408 43.349-43.349 43.349 0 0 0 0-0.001 0v0z","M764.001 581.238c-0.010 0-0.022 0-0.034 0-11.992 0-22.847-4.869-30.695-12.739l-140.307-140.307c-7.864-7.864-12.729-18.729-12.729-30.73 0-24.001 19.457-43.458 43.458-43.458 12 0 22.865 4.864 30.73 12.729l140.306 140.33c7.964 7.864 12.896 18.781 12.896 30.851 0 23.941-19.408 43.349-43.349 43.349-0.097 0-0.195 0-0.292-0.001h0.015z","M537.239 867.414c-0.021 0-0.047 0-0.072 0-71.756 0-129.927-58.17-129.927-129.927s58.17-129.927 129.927-129.927c71.756 0 129.927 58.17 129.927 129.927v0c-0.068 71.704-58.157 129.817-129.844 129.927h-0.010zM537.239 694.498c-23.741 0-42.988 19.246-42.988 42.988s19.246 42.988 42.988 42.988c23.741 0 42.988-19.246 42.988-42.988v0c-0.027-23.73-19.257-42.96-42.985-42.988h-0.003z"],"attrs":[{},{},{},{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-album"],"defaultCode":59659,"colorPermutations":{"25525525519191911":[{},{},{},{},{}]}},"attrs":[{},{},{},{},{}],"properties":{"order":93,"id":47,"name":"album","prevSize":32,"code":59659},"setIdx":0,"setId":2,"iconIdx":50},{"icon":{"paths":["M744.005 130.752c-78.812-80.698-188.704-130.742-310.286-130.742-239.452 0-433.565 194.114-433.565 433.565s194.114 433.565 433.565 433.565c117.797 0 224.623-46.978 302.762-123.221l-0.089 0.086c81.089-78.675 131.413-188.664 131.413-310.409 0-117.972-47.254-224.906-123.865-302.909l0.063 0.064zM669.119 675.117c-60.686 59.116-143.692 95.577-235.214 95.577-186.24 0-337.217-150.977-337.217-337.217 0-186.089 150.733-336.972 336.765-337.217h0.023c0.077 0 0.168 0 0.258 0 186.24 0 337.217 150.977 337.217 337.217 0 94.682-39.020 180.25-101.858 241.499l-0.071 0.069z","M1007.3 928.945l-159.527-163.792c-10.072-10.318-24.118-16.717-39.659-16.717-30.597 0-55.4 24.804-55.4 55.4 0 15.056 6.006 28.709 15.753 38.694l-0.011-0.011 160.564 164.851c10.026 10.27 24.010 16.639 39.481 16.639 2.35 0 4.667-0.147 6.941-0.432l-0.271 0.028c10.466-1.218 19.816-5.232 27.505-11.266l-0.118 0.089c13.153-10.193 21.538-25.994 21.538-43.752 0-0.259-0.002-0.517-0.005-0.775v0.039c-0.431-15.268-6.764-28.978-16.788-38.997v0z"],"attrs":[{},{}],"isMulticolor":false,"isMulticolor2":false,"grid":128,"tags":["icon-search-2"],"defaultCode":59660,"colorPermutations":{"25525525519191911":[{},{}]}},"attrs":[{},{}],"properties":{"order":94,"id":48,"name":"search-2","prevSize":32,"code":59660},"setIdx":0,"setId":2,"iconIdx":51}],"height":1024,"metadata":{"name":"icomoon"},"preferences":{"showGlyphs":true,"showQuickUse":true,"showQuickUse2":true,"showSVGs":true,"fontPref":{"prefix":"icon-","metadata":{"fontFamily":"icomoon","majorVersion":1,"minorVersion":0},"metrics":{"emSize":1024,"baseline":6.25,"whitespace":50},"embed":false,"autoHost":false,"noie8":true,"ie7":false,"showSelector":false,"showMetrics":false,"showMetadata":false,"showVersion":false},"imagePref":{"prefix":"icon-","png":true,"useClassSelector":true,"color":0,"bgColor":16777215,"classSelector":".icon","name":"icomoon"},"historySize":50,"showCodes":true,"gridSize":16,"showGrid":false,"quickUsageToken":{"UntitledProject":"N2VjNTI2ODAzZWI0N2M1NzhlMjNhYzY3OTEwMWRiMDEjMSMxNjA0MzkyNDUxIyMj"},"showLiga":false}} \ No newline at end of file diff --git a/src/screens/Home/Views/Mylist/MusicList/ListMenu.tsx b/src/screens/Home/Views/Mylist/MusicList/ListMenu.tsx index 4b4b641..f04df2b 100644 --- a/src/screens/Home/Views/Mylist/MusicList/ListMenu.tsx +++ b/src/screens/Home/Views/Mylist/MusicList/ListMenu.tsx @@ -21,6 +21,8 @@ export interface ListMenuProps { onEditMetadata: (selectInfo: SelectInfo) => void onCopyName: (selectInfo: SelectInfo) => void onChangePosition: (selectInfo: SelectInfo) => void + onToggleSource: (selectInfo: SelectInfo) => void + onMusicSourceDetail: (selectInfo: SelectInfo) => void onDislikeMusic: (selectInfo: SelectInfo) => void onRemove: (selectInfo: SelectInfo) => void onDownload: (selectInfo: SelectInfo) => void @@ -66,6 +68,8 @@ export default forwardRef((props, ref) => { { action: 'download', label: '下载' }, { action: 'add', label: t('add_to') }, { action: 'move', label: t('move_to') }, + { action: 'changePosition', label: t('change_position') }, + { action: 'toggleSource', label: t('toggle_source') }, { action: 'copyName', label: t('copy_name') }, { action: 'changePosition', label: t('change_position') }, { action: 'dislike', disabled: hasDislike(musicInfo), label: t('dislike') }, @@ -133,6 +137,14 @@ export default forwardRef((props, ref) => { props.onChangePosition(selectInfo) // setVIsibleMusicPosition(true) break + case 'toggleSource': + props.onToggleSource(selectInfo) + // setVIsibleMusicPosition(true) + break + case 'musicSourceDetail': + props.onMusicSourceDetail(selectInfo) + // setVIsibleMusicPosition(true) + break case 'dislike': props.onDislikeMusic(selectInfo) break diff --git a/src/screens/Home/Views/Mylist/MusicList/MusicToggleModal.tsx b/src/screens/Home/Views/Mylist/MusicList/MusicToggleModal.tsx new file mode 100644 index 0000000..29320cf --- /dev/null +++ b/src/screens/Home/Views/Mylist/MusicList/MusicToggleModal.tsx @@ -0,0 +1,529 @@ +import { useRef, useImperativeHandle, forwardRef, useState, useCallback, memo, useEffect } from 'react' +import Text from '@/components/common/Text' +import { createStyle } from '@/utils/tools' +import Dialog, { type DialogType } from '@/components/common/Dialog' +import { FlatList, ScrollView, TouchableOpacity, View, type FlatListProps as _FlatListProps } from 'react-native' +import { scaleSizeH } from '@/utils/pixelRatio' +import { useTheme } from '@/store/theme/hook' +import { Icon } from '@/components/common/Icon' +import { useHorizontalMode, useUnmounted } from '@/utils/hooks' +import { useI18n } from '@/lang' +import Button from '@/components/common/Button' +import { useSourceListI18n } from '@/components/SourceSelector' +import { searchMusic } from '@/utils/musicSdk' +import { toNewMusicInfo } from '@/utils' +import { handleShowMusicSourceDetail, handleToggleSource } from './listAction' +import { BorderRadius, BorderWidths } from '@/theme' + +type FlatListProps = _FlatListProps +const ITEM_HEIGHT = scaleSizeH(56) + + +const Tabs = ({ list, source, onChangeSource }: { + list: T[] + source: T | '' + onChangeSource: (source: T) => void +}) => { + const list_t = useSourceListI18n(list) + const theme = useTheme() + const scrollViewRef = useRef(null) + + return ( + + { + list_t.map(s => ( + { + onChangeSource(s.action as T) + }} + key={s.action} + > + {s.label} + + )) + } + + ) +} + +const Empty = ({ loading, error, onReload }: { loading: boolean, error: boolean, onReload: () => void }) => { + const theme = useTheme() + const t = useI18n() + const label = loading + ? t('list_loading') + : error + ? t('list_error') + : t('no_item') + return ( + + { + error ? ( + {label} + ) : ( + {label} + ) + } + + ) +} + +const ListItem = memo(({ info, onToggleSource, onOpenDetail }: { + info: LX.Music.MusicInfoOnline + onToggleSource: (info: LX.Music.MusicInfoOnline) => void + onOpenDetail: (info: LX.Music.MusicInfoOnline) => void +}) => { + const theme = useTheme() + + return ( + true}> + {/* + {info.index + 1} + */} + + {info.name} + + + {info.singer} + { + info.meta.albumName ? ( + ({info.meta.albumName}) + ) : null + } + + + + + {/* { info.source } */} + {info.interval} + + + + + + + ) +}, (prevProps, nextProps) => { + return prevProps.info === nextProps.info +}) + +const List = ({ source, lists, onToggleSource }: { + source: LX.OnlineSource | '' + lists: Partial> + onToggleSource: (info?: LX.Music.MusicInfoOnline | null) => void +}) => { + const [list, setList] = useState([]) + const isFirstRef = useRef(true) + useEffect(() => { + if (isFirstRef.current) { + setList(lists[source as LX.OnlineSource] ?? []) + isFirstRef.current = false + return + } + requestAnimationFrame(() => { + setList(lists[source as LX.OnlineSource] ?? []) + }) + }, [lists, source]) + + const openDetail = useCallback((musicInfo: LX.Music.MusicInfoOnline) => { + void handleShowMusicSourceDetail(musicInfo) + }, []) + + const renderItem = useCallback(({ item }: { item: LX.Music.MusicInfoOnline, index: number }) => { + return + }, [onToggleSource, openDetail]) + const getkey = useCallback>(item => item.id, []) + const getItemLayout = useCallback>((data, index) => { + return { length: ITEM_HEIGHT, offset: ITEM_HEIGHT * index, index } + }, []) + + return ( + + ) +} + +const SourceDetail = ({ info, onToggleSource }: { info: LX.Music.MusicInfo, onToggleSource: (info?: LX.Music.MusicInfoOnline | null) => void }) => { + const theme = useTheme() + const isHorizontalMode = useHorizontalMode() + + const cleanToggle = useCallback(() => { + onToggleSource(null) + }, [onToggleSource]) + + const toggleSource = info.meta.toggleMusicInfo + return isHorizontalMode ? ( + + + + + + {info.name} + + {info.source} + {info.interval} + + + + {info.singer} + { + info.meta.albumName ? ( + ({info.meta.albumName}) + ) : null + } + + + + { + toggleSource ? ( + <> + + + + + {toggleSource.name} + + {toggleSource.source} + {toggleSource.interval} + + + + {toggleSource.singer} + { + toggleSource.meta.albumName ? ( + ({toggleSource.meta.albumName}) + ) : null + } + + + + + ) : null + } + + + + ) : ( + + + + + + {info.name} + + {info.source} + {info.interval} + + + + {info.singer} + { + info.meta.albumName ? ( + ({info.meta.albumName}) + ) : null + } + + + + { + toggleSource ? ( + <> + + + + + {toggleSource.name} + + {toggleSource.source} + {toggleSource.interval} + + + + {toggleSource.singer} + { + toggleSource.meta.albumName ? ( + ({toggleSource.meta.albumName}) + ) : null + } + + + + + ) : null + } + + + + ) +} + + +interface ModalType { + show: (info: SelectInfo) => void +} +const initInfo = {} + +const Modal = forwardRef((props, ref) => { + const [info, setInfo] = useState(initInfo as SelectInfo) + const [sourceInfo, setSourceInfo] = useState<{ + sourceInfo: LX.OnlineSource[] + lists: Partial> + loading: boolean + error: boolean + }>({ sourceInfo: [], lists: {}, loading: false, error: false }) + const [source, setSource] = useState('') + const dialogRef = useRef(null) + const isUnmountedRef = useUnmounted() + + const loadData = useCallback((selectInfo: SelectInfo = info) => { + setSourceInfo({ sourceInfo: [], lists: {}, loading: true, error: false }) + searchMusic({ + name: selectInfo.musicInfo.name, + singer: selectInfo.musicInfo.singer, + source: '', + }).then((result: Array<{ source: LX.OnlineSource, list: LX.Music.MusicInfoOnline[] }>) => { + if (isUnmountedRef.current) return + const tags: LX.OnlineSource[] = [] + const lists: Partial> = {} + for (const s of result) { + tags.push(s.source) + lists[s.source] = s.list.map(s => toNewMusicInfo(s) as LX.Music.MusicInfoOnline) + } + setSourceInfo({ sourceInfo: tags, lists, loading: false, error: false }) + if (tags.length) setSource(tags[0]) + }).catch(() => { + if (isUnmountedRef.current) return + setSourceInfo({ ...sourceInfo, error: true }) + }) + }, [info, isUnmountedRef, sourceInfo]) + useImperativeHandle(ref, () => ({ + show(info) { + setInfo(info) + setSource('') + loadData(info) + requestAnimationFrame(() => { + dialogRef.current?.setVisible(true) + }) + }, + })) + + const toggleSource = useCallback((musicInfo?: LX.Music.MusicInfoOnline | null) => { + const newInfo = handleToggleSource(info.listId, info.musicInfo, musicInfo) + if (newInfo) { + setInfo({ ...info, musicInfo: newInfo }) + } else dialogRef.current?.setVisible(false) + }, [info]) + + return ( + + + { + sourceInfo.sourceInfo.length + ? (<> + + + ) + : + } + + + + ) +}) + +export interface SelectInfo { + musicInfo: LX.Music.MusicInfo + listId: string +} +export interface MusicToggleModalType { + show: (listInfo: SelectInfo) => void +} + +export default forwardRef((props, ref) => { + const musicAddModalRef = useRef(null) + const [visible, setVisible] = useState(false) + + useImperativeHandle(ref, () => ({ + show(musicInfo) { + if (visible) musicAddModalRef.current?.show(musicInfo) + else { + setVisible(true) + requestAnimationFrame(() => { + musicAddModalRef.current?.show(musicInfo) + }) + } + }, + })) + + return ( + visible + ? + : null + ) +}) + + +const styles = createStyle({ + container: { + flexGrow: 1, + flexShrink: 1, + width: 600, + maxWidth: '100%', + }, + tabContainer: { + flexGrow: 0, + flexShrink: 0, + // paddingLeft: 5, + // paddingRight: 5, + paddingVertical: 6, + }, + tabButton: { + // height: 38, + // lineHeight: 38, + justifyContent: 'center', + paddingHorizontal: 6, + // width: 80, + // backgroundColor: 'rgba(0,0,0,0.1)', + borderBottomWidth: BorderWidths.normal3, + }, + tabButtonText: { + // height: 38, + // lineHeight: 38, + textAlign: 'center', + paddingHorizontal: 2, + paddingVertical: 5, + }, + list: { + flexGrow: 1, + flexShrink: 1, + }, + listItem: { + flexDirection: 'row', + flexWrap: 'nowrap', + alignItems: 'center', + }, + // sn: { + // width: 38, + // // fontSize: 12, + // textAlign: 'center', + // // backgroundColor: 'rgba(0,0,0,0.2)', + // paddingLeft: 3, + // paddingRight: 3, + // }, + listItemInfo: { + flexGrow: 1, + flexShrink: 1, + // backgroundColor: 'rgba(0,0,0,0.2)', + paddingLeft: 15, + paddingRight: 5, + }, + listItemAlbum: { + flexDirection: 'row', + marginTop: 3, + }, + listItemLabel: { + flex: 0, + }, + listItemLabelText: { + paddingHorizontal: 5, + }, + listItemBtns: { + flex: 0, + flexDirection: 'row', + gap: 5, + paddingHorizontal: 8, + }, + listItemBtn: { + padding: 8, + }, + + detailContainer: { + flexDirection: 'row', + gap: 5, + alignItems: 'center', + paddingHorizontal: 10, + paddingVertical: 10, + }, + detailContainerY: { + flexDirection: 'column', + flexGrow: 1, + flexShrink: 1, + gap: 5, + }, + detailContainerX: { + flexDirection: 'row', + flexGrow: 1, + flexShrink: 1, + gap: 5, + alignItems: 'center', + }, + detailInfo: { + flexGrow: 0, + flexShrink: 1, + flexDirection: 'column', + // width: '50%', + justifyContent: 'center', + }, + detailInfoName: { + gap: 5, + flexDirection: 'row', + flexGrow: 0, + flexShrink: 1, + // backgroundColor: 'rgba(0,0,0,0.2)', + }, + detailInfoNameText: { + // backgroundColor: 'rgba(0,0,0,0.2)', + flexShrink: 1, + flexGrow: 0, + }, + detailInfoLabelText: { + // backgroundColor: 'rgba(0,0,0,0.2)', + }, + noitem: { + flexGrow: 1, + flexShrink: 1, + alignItems: 'center', + justifyContent: 'center', + }, + button: { + borderRadius: BorderRadius.normal, + paddingHorizontal: 10, + paddingVertical: 8, + alignItems: 'center', + }, +}) + + diff --git a/src/screens/Home/Views/Mylist/MusicList/index.tsx b/src/screens/Home/Views/Mylist/MusicList/index.tsx index 6023b1b..48ef1da 100644 --- a/src/screens/Home/Views/Mylist/MusicList/index.tsx +++ b/src/screens/Home/Views/Mylist/MusicList/index.tsx @@ -15,6 +15,7 @@ import ListMusicSearch, { type ListMusicSearchType } from './ListMusicSearch' import MusicPositionModal, { type MusicPositionModalType } from './MusicPositionModal' import MusicDownloadModal, { type MusicDownloadModalType } from './MusicDownloadModal' import MetadataEditModal, { type MetadataEditType, type MetadataEditProps } from '@/components/MetadataEditModal' +import MusicToggleModal, { type MusicToggleModalType } from './MusicToggleModal' export default () => { @@ -30,6 +31,7 @@ export default () => { const musicDownloadModalRef = useRef(null) const metadataEditTypeRef = useRef(null) const listMenuRef = useRef(null) + const musicToggleModalRef = useRef(null) const layoutHeightRef = useRef(0) const isShowMultipleModeBar = useRef(false) const isShowSearchBarModeBar = useRef(false) @@ -165,11 +167,13 @@ export default () => { onMove={handleMoveMusic} onEditMetadata={handleEditMetadata} onChangePosition={info => musicPositionModalRef.current?.show(info)} + onToggleSource={info => musicToggleModalRef.current?.show(info)} /> + ) } diff --git a/src/screens/Home/Views/Mylist/MusicList/listAction.ts b/src/screens/Home/Views/Mylist/MusicList/listAction.ts index 07be6dd..49be359 100644 --- a/src/screens/Home/Views/Mylist/MusicList/listAction.ts +++ b/src/screens/Home/Views/Mylist/MusicList/listAction.ts @@ -10,9 +10,8 @@ import playerState from '@/store/player/state' import RNFetchBlob from 'rn-fetch-blob' import type { SelectInfo } from './ListMenu' import { type Metadata } from '@/components/MetadataEditModal' -import { getMusicUrl } from '@/core/music' -import log from '@/plugins/sync/log' -import { setStatusText } from '@/core/player/playStatus' +import musicSdk from '@/utils/musicSdk' +import { getListMusicSync } from '@/utils/listManage' export const handlePlay = (listId: SelectInfo['listId'], index: SelectInfo['index']) => { void playList(listId, index) @@ -168,3 +167,28 @@ export const handleDislikeMusic = async (musicInfo: SelectInfo['musicInfo']) => void playNext(true) } } + + +export const handleToggleSource = (listId: string, musicInfo: LX.Music.MusicInfo, toggleMusicInfo?: LX.Music.MusicInfoOnline | null) => { + const list = getListMusicSync(listId) + const idx = list.findIndex(m => m.id == musicInfo.id) + if (idx < 0) return null + musicInfo.meta.toggleMusicInfo = toggleMusicInfo + const newInfo = { + ...musicInfo, + meta: { + ...musicInfo.meta, + toggleMusicInfo, + }, + } + void updateListMusics([ + { + id: listId, + musicInfo: newInfo as LX.Music.MusicInfo, + }, + ]) + if (!!toggleMusicInfo || (playerState.playMusicInfo.listId == listId && playerState.playMusicInfo.musicInfo?.id == musicInfo.id)) { + void playList(listId, idx) + } + return newInfo as LX.Music.MusicInfo +} diff --git a/src/types/music.d.ts b/src/types/music.d.ts index 3b206a0..af312b5 100644 --- a/src/types/music.d.ts +++ b/src/types/music.d.ts @@ -22,6 +22,7 @@ declare namespace LX { songId: string | number // 歌曲ID,mg源为copyrightId,local为文件路径 albumName: string // 歌曲专辑名称 picUrl?: string | null // 歌曲图片链接 + toggleMusicInfo?: MusicInfoOnline | null } interface MusicInfoMeta_online extends MusicInfoMetaBase { diff --git a/src/utils/musicSdk/index.js b/src/utils/musicSdk/index.js index 7fdb03f..9ef975a 100644 --- a/src/utils/musicSdk/index.js +++ b/src/utils/musicSdk/index.js @@ -49,10 +49,24 @@ export const init = () => { return Promise.all(tasks) } + +export const searchMusic = async({ name, singer, source: s, limit = 25 }) => { + const trimStr = str => typeof str == 'string' ? str.trim() : str + const musicName = trimStr(name) + const tasks = [] + const excludeSource = ['xm'] + for (const source of sources.sources) { + if (!sources[source.id].musicSearch || source.id == s || excludeSource.includes(source.id)) continue + tasks.push(sources[source.id].musicSearch.search(`${musicName} ${singer || ''}`.trim(), 1, limit).catch(_ => null)) + } + return (await Promise.all(tasks)).filter(s => s) +} + export const findMusic = async(musicInfo) => { const { name, singer, albumName, interval, source: s } = musicInfo - const tasks = [] + const lists = await searchMusic({ name, singer, source: s, limit: 25 }) + const singersRxp = /、|&|;|;|\/|,|,|\|/ const sortSingle = singer => singersRxp.test(singer) ? singer.split(singersRxp).sort((a, b) => a.localeCompare(b)).join('、') @@ -78,44 +92,39 @@ export const findMusic = async(musicInfo) => { const sortedSinger = filterStr(String(sortSingle(singer)).toLowerCase()) const lowerCaseName = filterStr(String(musicName).toLowerCase()) const lowerCaseAlbumName = filterStr(String(albumName).toLowerCase()) - const excludeSource = ['xm'] - for (const source of sources.sources) { - if (!sources[source.id].musicSearch || source.id == s || excludeSource.includes(source.id)) continue - tasks.push(sources[source.id].musicSearch.search(`${musicName} ${singer || ''}`.trim(), 1, 25).then(res => { - for (const item of res.list) { - item.name = trimStr(item.name) - item.sortedSinger = filterStr(String(sortSingle(item.singer)).toLowerCase()) - item.lowerCaseName = filterStr(String(item.name ?? '').toLowerCase()) - item.lowerCaseAlbumName = filterStr(String(item.albumName ?? '').toLowerCase()) - // console.log(lowerCaseName, item.lowerCaseName, item.source) - if ( + const result = lists.map(source => { + for (const item of source.list) { + item.name = trimStr(item.name) + item.sortedSinger = filterStr(String(sortSingle(item.singer)).toLowerCase()) + item.lowerCaseName = filterStr(String(item.name ?? '').toLowerCase()) + item.lowerCaseAlbumName = filterStr(String(item.albumName ?? '').toLowerCase()) + // console.log(lowerCaseName, item.lowerCaseName, item.source) + if ( + ( + item.sortedSinger == sortedSinger && item.lowerCaseName == lowerCaseName + ) || ( - item.sortedSinger == sortedSinger && item.lowerCaseName == lowerCaseName + (interval ? item.interval == interval : true) && item.lowerCaseName == lowerCaseName && + (item.sortedSinger.includes(sortedSinger) || sortedSinger.includes(item.sortedSinger)) ) || - ( - (interval ? item.interval == interval : true) && item.lowerCaseName == lowerCaseName && - (item.sortedSinger.includes(sortedSinger) || sortedSinger.includes(item.sortedSinger)) - ) || - ( - item.lowerCaseName == lowerCaseName && (lowerCaseAlbumName ? item.lowerCaseAlbumName == lowerCaseAlbumName : true) && - (interval ? item.interval == interval : true) - ) || - ( - item.lowerCaseName == lowerCaseName && (lowerCaseAlbumName ? item.lowerCaseAlbumName == lowerCaseAlbumName : true) && - (item.sortedSinger.includes(sortedSinger) || sortedSinger.includes(item.sortedSinger)) - ) - ) { - return item - } - if (!singer) { - if (item.lowerCaseName == lowerCaseName && (interval ? item.interval == interval : true)) return item - } + ( + item.lowerCaseName == lowerCaseName && (lowerCaseAlbumName ? item.lowerCaseAlbumName == lowerCaseAlbumName : true) && + (interval ? item.interval == interval : true) + ) || + ( + item.lowerCaseName == lowerCaseName && (lowerCaseAlbumName ? item.lowerCaseAlbumName == lowerCaseAlbumName : true) && + (item.sortedSinger.includes(sortedSinger) || sortedSinger.includes(item.sortedSinger)) + ) + ) { + return item } - return null - }).catch(_ => null)) - } - const result = (await Promise.all(tasks)).filter(s => s) + if (!singer) { + if (item.lowerCaseName == lowerCaseName && (interval ? item.interval == interval : true)) return item + } + } + return null + }).filter(s => s) const newResult = [] if (result.length) { newResult.push(...sortMusic(result, item => item.sortedSinger == sortedSinger && item.lowerCaseName == lowerCaseName && item.interval == interval)) diff --git a/src/utils/tools.ts b/src/utils/tools.ts index 8ecb017..52c7fb3 100644 --- a/src/utils/tools.ts +++ b/src/utils/tools.ts @@ -549,7 +549,7 @@ export const cheatTip = async() => { title: '提示', message: `本项目是对LX Music的二次开发,请勿将本项目用于商业用途,否则后果自负。如有疑问,请加入QQ群:690309707。`, btnText: '我知道了 (Close)', - bgClose: false, + bgClose: true, }).then(() => { void saveData(storageDataPrefix.cheatTip, true) }) diff --git a/src/utils/version.js b/src/utils/version.js index 22fe17d..88d2d5a 100644 --- a/src/utils/version.js +++ b/src/utils/version.js @@ -15,10 +15,10 @@ const abis = [ const address = [ [`https://raw.githubusercontent.com/${author.name}/${name}/master/publish/version.json`, 'direct'], ['https://registry.npmjs.org/lx-music-mobile-version-info/latest', 'npm'], - ['https://registry.npmmirror.com/lx-music-mobile-version-info/latest', 'npm'], [`https://cdn.jsdelivr.net/gh/${author.name}/${name}/publish/version.json`, 'direct'], [`https://fastly.jsdelivr.net/gh/${author.name}/${name}/publish/version.json`, 'direct'], [`https://gcore.jsdelivr.net/gh/${author.name}/${name}/publish/version.json`, 'direct'], + ['https://registry.npmmirror.com/lx-music-mobile-version-info/latest', 'npm'], ['https://gitee.com/lyswhut/lx-music-mobile-versions/raw/master/version.json', 'direct'], ['http://cdn.stsky.cn/lx-music/mobile/version.json', 'direct'], ]