This commit is contained in:
ikun0014 2025-01-01 12:58:34 +08:00
parent c1a7533edd
commit 80201c4a74
No known key found for this signature in database
GPG Key ID: CB646D33779F3C89
31 changed files with 240694 additions and 162 deletions

View File

@ -10,7 +10,7 @@ body:
options:
- label: 我已阅读 [常见问题](https://lyswhut.github.io/lx-music-doc/mobile/faq),但没有找到解决方案。
required: true
- label: 我已搜索 [Issue 列表](https://github.com/lyswhut/lx-music-mobile/issues?q=is%3Aissue+),但没有发现类似的问题。
- label: 我已搜索 [Issue 列表](https://github.com/ikunshare/ikun-music-mobile/issues?q=is%3Aissue+),但没有发现类似的问题。
required: true
- type: textarea
id: expected-behavior

View File

@ -10,7 +10,7 @@ body:
options:
- label: 我已阅读 [常见问题](https://lyswhut.github.io/lx-music-doc/mobile/faq),但没有找到解决方案。
required: true
- label: 我已搜索 [Issue 列表](https://github.com/lyswhut/lx-music-mobile/issues?q=is%3Aissue+),但没有发现类似的问题。
- label: 我已搜索 [Issue 列表](https://github.com/ikunshare/ikun-music-mobile/issues?q=is%3Aissue+),但没有发现类似的问题。
required: true
- type: textarea
id: problem-description

View File

@ -1,15 +1,15 @@
<p align="center"><a href="https://github.com/lyswhut/lx-music-mobile"><img width="200" src="https://github.com/lyswhut/lx-music-mobile/blob/master/doc/images/icon.png" alt="lx-music logo"></a></p>
<p align="center"><a href="https://github.com/ikunshare/ikun-music-mobile"><img width="200" src="https://github.com/ikunshare/ikun-music-mobile/blob/master/doc/images/icon.png" alt="lx-music logo"></a></p>
<h1 align="center">LX Music 移动版</h1>
<p align="center">
<a href="https://github.com/lyswhut/lx-music-mobile/releases"><img src="https://img.shields.io/github/release/lyswhut/lx-music-mobile" alt="Release version"></a>
<a href="https://github.com/lyswhut/lx-music-mobile/actions/workflows/release.yml"><img src="https://github.com/lyswhut/lx-music-mobile/workflows/Build/badge.svg" alt="Build status"></a>
<a href="https://github.com/lyswhut/lx-music-mobile/actions/workflows/beta-pack.yml"><img src="https://github.com/lyswhut/lx-music-mobile/workflows/Build%20Beta/badge.svg" alt="Build status"></a>
<a href="https://github.com/facebook/react-native"><img src="https://img.shields.io/github/package-json/dependency-version/lyswhut/lx-music-mobile/react-native/master" alt="React native version"></a>
<!-- <a href="https://github.com/lyswhut/lx-music-mobile/releases"><img src="https://img.shields.io/github/downloads/lyswhut/lx-music-mobile/latest/total" alt="Downloads"></a> -->
<a href="https://github.com/lyswhut/lx-music-mobile/tree/dev"><img src="https://img.shields.io/github/package-json/v/lyswhut/lx-music-mobile/dev" alt="Dev branch version"></a>
<!-- <a href="https://github.com/lyswhut/lx-music-mobile/blob/master/LICENSE"><img src="https://img.shields.io/github/license/lyswhut/lx-music-mobile" alt="License"></a> -->
<a href="https://github.com/ikunshare/ikun-music-mobile/releases"><img src="https://img.shields.io/github/release/ikunshare/ikun-music-mobile" alt="Release version"></a>
<a href="https://github.com/ikunshare/ikun-music-mobile/actions/workflows/release.yml"><img src="https://github.com/ikunshare/ikun-music-mobile/workflows/Build/badge.svg" alt="Build status"></a>
<a href="https://github.com/ikunshare/ikun-music-mobile/actions/workflows/beta-pack.yml"><img src="https://github.com/ikunshare/ikun-music-mobile/workflows/Build%20Beta/badge.svg" alt="Build status"></a>
<a href="https://github.com/facebook/react-native"><img src="https://img.shields.io/github/package-json/dependency-version/ikunshare/ikun-music-mobile/react-native/master" alt="React native version"></a>
<!-- <a href="https://github.com/ikunshare/ikun-music-mobile/releases"><img src="https://img.shields.io/github/downloads/ikunshare/ikun-music-mobile/latest/total" alt="Downloads"></a> -->
<a href="https://github.com/ikunshare/ikun-music-mobile/tree/dev"><img src="https://img.shields.io/github/package-json/v/ikunshare/ikun-music-mobile/dev" alt="Dev branch version"></a>
<!-- <a href="https://github.com/ikunshare/ikun-music-mobile/blob/master/LICENSE"><img src="https://img.shields.io/github/license/ikunshare/ikun-music-mobile" alt="License"></a> -->
</p>
<p align="center">一个基于 React Native 开发的音乐软件</p>
@ -23,13 +23,13 @@
*注:由于没有相关开发环境及证书,所以 **没有计划支持 iOS**。*<br>
*桌面版项目地址:<https://github.com/lyswhut/lx-music-desktop>*
软件变化请查看 [更新日志](https://github.com/lyswhut/lx-music-mobile/blob/master/CHANGELOG.md)。
软件变化请查看 [更新日志](https://github.com/ikunshare/ikun-music-mobile/blob/master/CHANGELOG.md)。
软件下载请查看 [GitHub Releases](https://github.com/lyswhut/lx-music-mobile/releases)。
软件下载请查看 [GitHub Releases](https://github.com/ikunshare/ikun-music-mobile/releases)。
使用常见问题请参阅 [常见问题](https://lyswhut.github.io/lx-music-doc/mobile/faq)。
目前本项目的原始发布地址只有 [**GitHub Releases**](https://github.com/lyswhut/lx-music-mobile/releases),其他渠道均为第三方转载发布,与本项目无关!
目前本项目的原始发布地址只有 [**GitHub Releases**](https://github.com/ikunshare/ikun-music-mobile/releases),其他渠道均为第三方转载发布,与本项目无关!
为了提高使用门槛本软件内的默认设置、UI 操作不以新手友好为目标,所以使用前建议先根据你的喜好浏览调整一遍软件设置,阅读一遍 [音乐播放列表机制](https://lyswhut.github.io/lx-music-doc/mobile/faq/playlist)。
@ -54,11 +54,11 @@
<!--
## 用户界面
<p><a href="https://github.com/lyswhut/lx-music-mobile"><img width="100%" src="https://github.com/lyswhut/lx-music-mobile/blob/master/doc/images/app.png" alt="lx-music mobile UI"></a></p> -->
<p><a href="https://github.com/ikunshare/ikun-music-mobile"><img width="100%" src="https://github.com/ikunshare/ikun-music-mobile/blob/master/doc/images/app.png" alt="lx-music mobile UI"></a></p> -->
## 项目协议
本项目基于 [Apache License 2.0](https://github.com/lyswhut/lx-music-mobile/blob/master/LICENSE) 许可证发行,以下协议是对于 Apache License 2.0 的补充,如有冲突,以以下协议为准。
本项目基于 [Apache License 2.0](https://github.com/ikunshare/ikun-music-mobile/blob/master/LICENSE) 许可证发行,以下协议是对于 Apache License 2.0 的补充,如有冲突,以以下协议为准。
---

240610
index.android.bundle Normal file

File diff suppressed because one or more lines are too long

View File

@ -64,9 +64,9 @@
"react-native-pager-view": "6.6.1",
"react-native-quick-base64": "^2.1.2",
"react-native-quick-md5": "^3.0.6",
"rn-fetch-blob": "^0.12.0",
"react-native-track-player": "github:lyswhut/react-native-track-player#57eeeba57e28702fa931d4aeb753da225b6fcf6c",
"react-native-vector-icons": "^10.2.0"
"react-native-vector-icons": "^10.2.0",
"rn-fetch-blob": "^0.12.0"
},
"devDependencies": {
"@babel/core": "^7.26.0",

Binary file not shown.

After

Width:  |  Height:  |  Size: 609 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 187 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 266 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 797 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 KiB

Binary file not shown.

View File

@ -2,7 +2,7 @@ const defaultSetting: LX.AppSetting = {
version: '2.0',
'common.isAutoTheme': false,
'common.langId': null,
'common.apiSource': 'ikun_zj',
'common.apiSource': 'ikun',
'common.sourceNameType': 'alias',
'common.shareType': 'system',
'common.isAgreePact': false,

View File

@ -1,4 +1,4 @@
import { memo } from 'react'
import React, { memo } from 'react'
import { View, TouchableOpacity } from 'react-native'
import Section from '../components/Section'
@ -42,13 +42,14 @@ export default memo(() => {
// fontSize: 14,
} as const
return (
<Section title={t('setting_about')}>
<View style={styles.part}>
<Text style={styles.text} ></Text>
<Text style={styles.text}></Text>
<TouchableOpacity onPress={openHomePage}>
<Text style={textLinkStyle}>https://github.com/ikunshare/ikun-music-mobile</Text>
<Text style={textLinkStyle}>
https://github.com/ikunshare/ikun-music-mobile
</Text>
</TouchableOpacity>
</View>
<View style={styles.part}>
@ -58,13 +59,18 @@ export default memo(() => {
</TouchableOpacity>
</View>
<View style={styles.part}>
<Text style={styles.text} ></Text>
<Text style={styles.text}></Text>
<TouchableOpacity onPress={openFAQPage}>
<Text style={textLinkStyle}></Text>
</TouchableOpacity>
</View>
<View style={styles.part}>
<Text style={styles.text}><Text style={styles.boldText}></Text>使<Text style={styles.boldText} ></Text></Text>
<Text style={styles.text}>
<Text style={styles.boldText}></Text>
使
<Text style={styles.boldText}></Text>
</Text>
<Text style={styles.text}> GitHub </Text>
<TouchableOpacity onPress={openIssuePage}>
<Text style={textLinkStyle}>Issue</Text>
@ -72,30 +78,49 @@ export default memo(() => {
<Text style={styles.text}></Text>
</View>
<View style={styles.part}>
<Text style={styles.text}></Text>
<Text style={styles.text}>
</Text>
</View>
<View style={styles.part}>
<Text style={styles.text}><Text style={styles.boldText}> GitHub, Telegram</Text></Text>
<Text style={styles.text}>
<Text> GitHub </Text>
<TouchableOpacity onPress={goToTGGroup}>
<Text style={textLinkStyle}>Telegram</Text>
</TouchableOpacity>
</Text>
</View>
<View style={styles.part}>
<Text style={styles.text}><Text style={styles.boldText}>vivo </Text></Text>
<Text style={styles.text}>
<Text style={styles.boldText}>
vivo
</Text>
</Text>
</View>
<View style={styles.part}>
<Text style={styles.text}>使<Text style={styles.boldText}>广</Text><Text style={styles.boldText}></Text>使</Text>
<Text style={styles.text}>
使<Text style={styles.boldText}>广</Text>
<Text style={styles.boldText}></Text>
使
</Text>
</View>
<View style={styles.part}>
<Text style={styles.text}><Text style={styles.boldText}></Text><Text style={styles.boldText}></Text><Text style={styles.boldText}></Text></Text>
<Text style={styles.text}>
<Text style={styles.boldText}></Text>
<Text style={styles.boldText}></Text>
<Text style={styles.boldText}></Text>
</Text>
</View>
<View style={styles.part}>
<Text style={styles.text}></Text>
<TouchableOpacity onPress={openPactModal}><Text style={styles.text} color={theme['c-primary-font']}></Text></TouchableOpacity>
<Text style={styles.text}>线</Text>
<TouchableOpacity onPress={openPartPage}><Text style={textLinkStyle}></Text></TouchableOpacity>
<Text style={styles.text}></Text>
</View>
<View style={styles.part}>
<Text style={styles.text}>By: </Text>
<Text style={styles.text}></Text>
<TouchableOpacity onPress={showPactModal}>
<Text style={styles.text} color={theme['c-primary-font']}>
</Text>
</TouchableOpacity>
</View>
</Section>
)

View File

@ -7,7 +7,7 @@ const sources: Array<{
supportQualitys: Partial<Record<LX.OnlineSource, LX.Quality[]>>
}> = [
{
id: 'ikun_zj',
id: 'ikun',
name: 'ikun公益音源',
disabled: false,
supportQualitys: {
@ -17,16 +17,6 @@ const sources: Array<{
wy: ['128k', '320k', 'flac', 'flac24bit', 'master'],
},
},
// {
// id: 'ikun_cf',
// name: 'ikun公益音源美国Cloudflare节点',
// disabled: false,
// supportQualitys: {
// kg: ['128k', '320k', 'flac', 'flac24bit', 'master'],
// tx: ['128k', '320k', 'flac', 'flac24bit', 'master'],
// wy: ['128k', '320k', 'flac', 'flac24bit', 'master'],
// },
// },
]
export default sources

View File

@ -1,24 +1,18 @@
import apiSourceInfo from './api-source-info'
import ikun_zj_api_kg from './kg/api-ikun'
import ikun_zj_api_kw from './kw/api-ikun'
import ikun_zj_api_tx from './tx/api-ikun'
import ikun_zj_api_wy from './wy/api-ikun'
// import ikun_zj_api_mg from './mg/api-ikun'
// import ikun_cf_api_kg from './kg/api-ikun_us'
// import ikun_cf_api_tx from './tx/api-ikun_us'
// import ikun_cf_api_wy from './wy/api-ikun_us'
import ikun_api_kg from './kg/api-ikun'
import ikun_api_kw from './kw/api-ikun'
import ikun_api_tx from './tx/api-ikun'
import ikun_api_wy from './wy/api-ikun'
import ikun_api_mg from './mg/api-ikun'
import settingState from '@/store/setting/state'
const apiList = {
ikun_zj_api_kg,
ikun_zj_api_kw,
ikun_zj_api_tx,
ikun_zj_api_wy,
// ikun_zj_api_mg,
// ikun_cf_api_tx,
// ikun_cf_api_wy,
// ikun_cf_api_kg,
ikun_api_kg,
ikun_api_kw,
ikun_api_tx,
ikun_api_wy,
ikun_api_mg,
}
const supportQuality = {}

View File

@ -3,7 +3,7 @@ import { requestMsg } from '../../message'
import { headers, timeout } from '../options'
import { dnsLookup } from '../utils'
const api_ikun_zj = {
const api_ikun = {
getMusicUrl(songInfo, type) {
const requestObj = httpFetch(`https://lxmusic.ikunshare.com/url/kg/${songInfo._types[type].hash}/${type}`, {
method: 'get',
@ -25,4 +25,4 @@ const api_ikun_zj = {
},
}
export default api_ikun_zj
export default api_ikun

View File

@ -1,28 +0,0 @@
import { httpFetch } from '../../request'
import { requestMsg } from '../../message'
import { headers, timeout } from '../options'
import { dnsLookup } from '../utils'
const api_ikun_cf = {
getMusicUrl(songInfo, type) {
const requestObj = httpFetch(`https://lxmusic.ikunshare.com/url/kg/${songInfo._types[type].hash}/${type}`, {
method: 'get',
timeout,
headers,
lookup: dnsLookup,
family: 4,
})
requestObj.promise = requestObj.promise.then(({ statusCode, body }) => {
if (statusCode == 429) return Promise.reject(new Error(requestMsg.tooManyRequests))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 1: return Promise.reject(new Error(requestMsg.ipblock))
case 2: return Promise.reject(new Error(requestMsg.fail))
case 5: return Promise.reject(new Error(requestMsg.ohh))
}
})
return requestObj
},
}
export default api_ikun_cf

View File

@ -3,7 +3,7 @@ import { requestMsg } from '../../message'
import { headers, timeout } from '../options'
import { dnsLookup } from '../utils'
const api_ikun_zj = {
const api_ikun = {
getMusicUrl(songInfo, type) {
const requestObj = httpFetch(`https://lxmusic.ikunshare.com/url/kw/${songInfo.songmid}/${type}`, {
method: 'get',
@ -25,4 +25,4 @@ const api_ikun_zj = {
},
}
export default api_ikun_zj
export default api_ikun

View File

@ -3,7 +3,7 @@ import { requestMsg } from '../../message'
import { headers, timeout } from '../options'
import { dnsLookup } from '../utils'
const api_ikun_zj = {
const api_ikun = {
getMusicUrl(songInfo, type) {
const requestObj = httpFetch(`https://lxmusic.ikunshare.com/url/mg/${songInfo.copyrightId}/${type}`, {
method: 'get',
@ -25,4 +25,4 @@ const api_ikun_zj = {
},
}
export default api_ikun_zj
export default api_ikun

View File

@ -3,7 +3,7 @@ import { requestMsg } from '../../message'
import { headers, timeout } from '../options'
import { dnsLookup } from '../utils'
const api_ikun_zj = {
const api_ikun = {
getMusicUrl(songInfo, type) {
const requestObj = httpFetch(`https://lxmusic.ikunshare.com/url/tx/${songInfo.songmid}/${type}`, {
method: 'get',
@ -28,4 +28,4 @@ const api_ikun_zj = {
},
}
export default api_ikun_zj
export default api_ikun

View File

@ -1,31 +0,0 @@
import { httpFetch } from '../../request'
import { requestMsg } from '../../message'
import { headers, timeout } from '../options'
import { dnsLookup } from '../utils'
const api_ikun_cf = {
getMusicUrl(songInfo, type) {
const requestObj = httpFetch(`https://lxmusic.ikunshare.com/url/tx/${songInfo.songmid}/${type}`, {
method: 'get',
timeout,
headers,
lookup: dnsLookup,
family: 4,
})
requestObj.promise = requestObj.promise.then(({ statusCode, body }) => {
if (statusCode == 429) return Promise.reject(new Error(requestMsg.tooManyRequests))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 1: return Promise.reject(new Error(requestMsg.ipblock))
case 2: return Promise.reject(new Error(requestMsg.fail))
case 5: return Promise.reject(new Error(requestMsg.ohh))
}
})
return requestObj
},
getPic(songInfo) {
return Promise.resolve(`https://y.gtimg.cn/music/photo_new/T002R500x500M000${songInfo.albumId}.jpg`)
},
}
export default api_ikun_cf

View File

@ -3,7 +3,7 @@ import { requestMsg } from '../../message'
import { headers, timeout } from '../options'
import { dnsLookup } from '../utils'
const api_ikun_zj = {
const api_ikun = {
getMusicUrl(songInfo, type) {
const requestObj = httpFetch(`https://lxmusic.ikunshare.com/url/wy/${songInfo.songmid}/${type}`, {
method: 'get',
@ -25,4 +25,4 @@ const api_ikun_zj = {
},
}
export default api_ikun_zj
export default api_ikun

View File

@ -1,28 +0,0 @@
import { httpFetch } from '../../request'
import { requestMsg } from '../../message'
import { headers, timeout } from '../options'
import { dnsLookup } from '../utils'
const api_ikun_cf = {
getMusicUrl(songInfo, type) {
const requestObj = httpFetch(`https://lxmusic.ikunshare.com/url/wy/${songInfo.songmid}/${type}`, {
method: 'get',
timeout,
headers,
lookup: dnsLookup,
family: 4,
})
requestObj.promise = requestObj.promise.then(({ statusCode, body }) => {
if (statusCode == 429) return Promise.reject(new Error(requestMsg.tooManyRequests))
switch (body.code) {
case 0: return Promise.resolve({ type, url: body.data })
case 1: return Promise.reject(new Error(requestMsg.ipblock))
case 2: return Promise.reject(new Error(requestMsg.fail))
case 5: return Promise.reject(new Error(requestMsg.ohh))
}
})
return requestObj
},
}
export default api_ikun_cf

View File

@ -247,7 +247,7 @@ const parseTools = {
// return requestObj
// }
// https://github.com/lyswhut/lx-music-mobile/issues/370
// https://github.com/ikunshare/ikun-music-mobile/issues/370
const fixTimeLabel = (lrc, tlrc, romalrc) => {
if (lrc) {
let newLrc = lrc.replace(/\[(\d{2}:\d{2}):(\d{2})]/g, '[$1.$2]')