|
|
|
@ -124,7 +124,26 @@ private class QQMusicSearchHandler(private val context: Context?) : FunctionHand |
|
|
|
qqMusicSingleton.searchSongs(keyword) { searchResult -> |
|
|
|
val result = if (searchResult.isSuccess) { |
|
|
|
val songs = searchResult.getOrNull() ?: emptyList() |
|
|
|
|
|
|
|
var playError: Throwable? = null |
|
|
|
if (songs.isNotEmpty()) { |
|
|
|
// 从搜索结果中提取歌曲MID列表 |
|
|
|
val songMids = songs.mapNotNull { song -> |
|
|
|
val songMap = song as Map<String, Any?> |
|
|
|
songMap["mid"] as? String |
|
|
|
}.filter { it.isNotEmpty() } |
|
|
|
|
|
|
|
if (songMids.isNotEmpty()) { |
|
|
|
// 播放搜索到的歌曲列表,从第一首开始播放 |
|
|
|
qqMusicSingleton.playSongs(songMids, 0) { playResult -> |
|
|
|
Log.d("QQMusicSearchHandler", "播放结果: ${playResult.isSuccess}") |
|
|
|
if (!playResult.isSuccess) { |
|
|
|
playError = playResult.exceptionOrNull() |
|
|
|
// Log.e("QQMusicSearchHandler", "播放失败: ${playError?.message}") |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 根据搜索类型处理结果 |
|
|
|
val processedSongs = when (searchType) { |
|
|
|
0 -> { // 歌曲搜索,返回所有结果 |
|
|
|
@ -148,7 +167,18 @@ private class QQMusicSearchHandler(private val context: Context?) : FunctionHand |
|
|
|
val duration = songMap["duration"] ?: 0 |
|
|
|
"{\"mid\": \"$mid\", \"name\": \"$name\", \"artist\": \"$artist\", \"album\": \"$album\", \"duration\":$duration,\"pic\": \"$pic\"}" |
|
|
|
} |
|
|
|
"{\"success\": true,\"iscard\": true, \"broadcast\": false, \"message\": \"搜索成功,正在播放\", \"data\": [$songsJson]}" |
|
|
|
|
|
|
|
if (songs.isNotEmpty()) { |
|
|
|
if (playError == null){ |
|
|
|
"{\"success\": true, \"iscard\": true, \"broadcast\": false, \"message\": \"搜索成功,正在播放\", \"data\": [$songsJson]}" |
|
|
|
}else{ |
|
|
|
Log.e("QQMusicSearchHandler", "播放失败: ${playError?.message}") |
|
|
|
"{\"success\": false, \"iscard\": true, \"broadcast\": true, \"message\": \"${playError?.message}\", \"data\": [$songsJson]}" |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
"{\"success\": false, \"message\": \"未找到相关歌曲\"}" |
|
|
|
} |
|
|
|
} else { |
|
|
|
val error = searchResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"搜索失败: ${error?.message}\"}" |
|
|
|
@ -163,59 +193,6 @@ private class QQMusicSearchHandler(private val context: Context?) : FunctionHand |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
//private class QQMusicSearchHandler(private val context: Context?) : FunctionHandler { |
|
|
|
// override suspend fun handle(arguments: Map<String, Any>): String { |
|
|
|
// return try { |
|
|
|
// val keyword = arguments["keyword"] as? String ?: return "{\"success\": false, \"message\": \"缺少搜索关键词\"}" |
|
|
|
// val searchType = arguments["searchType"] as? Int ?: 0 // 默认搜索歌曲 |
|
|
|
// val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
// var result = "" |
|
|
|
// |
|
|
|
// // 直接调用搜索,内部会自动处理登录检查 |
|
|
|
// qqMusicSingleton.searchSongs(keyword) { searchResult -> |
|
|
|
// result = if (searchResult.isSuccess) { |
|
|
|
// val songs = searchResult.getOrNull() ?: emptyList() |
|
|
|
// |
|
|
|
// // 根据搜索类型处理结果 |
|
|
|
// val processedSongs = when (searchType) { |
|
|
|
// 0 -> { // 歌曲搜索,只返回第一个结果 |
|
|
|
//// if (songs.isNotEmpty()) listOf(songs.first()) else emptyList() |
|
|
|
// songs |
|
|
|
// } |
|
|
|
// else -> { // 专辑、歌手等其他类型,返回所有结果 |
|
|
|
// songs |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// val songsJson = processedSongs.joinToString(",") { song -> |
|
|
|
// val songMap = song as Map<String, Any?> |
|
|
|
// // 添加调试日志 |
|
|
|
// Log.d("QQMusicSearchHandler", "原始数据: $songMap") |
|
|
|
// // 修正字段名映射 |
|
|
|
// val mid = songMap["mid"] ?: "unknown" |
|
|
|
// val name = songMap["name"] ?: "unknown" |
|
|
|
// val artist = songMap["singer"] ?: "unknown" |
|
|
|
// val album = songMap["album"] ?: "" |
|
|
|
// val pic = songMap["pic"] ?: "" |
|
|
|
// val duration = songMap["duration"] ?: 0 |
|
|
|
// "{\"mid\": \"$mid\", \"name\": \"$name\", \"artist\": \"$artist\", \"album\": \"$album\", \"duration\":$duration,\"pic\": \"$pic\"}" |
|
|
|
// } |
|
|
|
// "{\"success\": true, \"broadcast\": false, \"message\": \"搜索成功,增在播放\", \"data\": [$songsJson]}" |
|
|
|
// } else { |
|
|
|
// val error = searchResult.exceptionOrNull() |
|
|
|
// "{\"success\": false, \"message\": \"搜索失败: ${error?.message}\"}" |
|
|
|
// } |
|
|
|
// } |
|
|
|
// |
|
|
|
// // 等待回调完成 |
|
|
|
// delay(5000) |
|
|
|
// result.ifEmpty { "{\"success\": false, \"message\": \"搜索超时\"}" } |
|
|
|
// } catch (e: Exception) { |
|
|
|
// Log.e("QQMusicSearchHandler", "QQ音乐搜索失败", e) |
|
|
|
// "{\"success\": false, \"message\": \"搜索异常: ${e.message}\"}" |
|
|
|
// } |
|
|
|
// } |
|
|
|
//} |
|
|
|
|
|
|
|
private class QQMusicPlaySongsHandler(private val context: Context?) : FunctionHandler { |
|
|
|
override suspend fun handle(arguments: Map<String, Any>): String { |
|
|
|
|