|
|
|
@ -6,6 +6,7 @@ import kotlinx.coroutines.delay |
|
|
|
import com.yunqiinnovation.qq_music.QQMusicSingleton |
|
|
|
import kotlin.coroutines.suspendCoroutine |
|
|
|
import kotlin.coroutines.resume |
|
|
|
import kotlinx.coroutines.CompletableDeferred |
|
|
|
/** |
|
|
|
* QQ音乐系统功能处理器 |
|
|
|
* 负责注册QQ音乐相关的MCP函数 |
|
|
|
@ -211,7 +212,8 @@ private class QQMusicPlaySongsHandler(private val context: Context?) : FunctionH |
|
|
|
val index = (arguments["index"] as? Number)?.toInt() ?: 0 |
|
|
|
val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
var result = "" |
|
|
|
|
|
|
|
// 创建一个CompletableDeferred用于等待回调结果 |
|
|
|
val deferred = CompletableDeferred<String>() |
|
|
|
qqMusicSingleton.playSongs(songMids, index) { playResult -> |
|
|
|
result = if (playResult.isSuccess) { |
|
|
|
"{\"broadcast\": false, \"success\": true, \"message\": \"开始播放歌曲列表\"}" |
|
|
|
@ -219,11 +221,12 @@ private class QQMusicPlaySongsHandler(private val context: Context?) : FunctionH |
|
|
|
val error = playResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"播放失败: ${error?.message}\"}" |
|
|
|
} |
|
|
|
// 回调完成,唤醒挂起的协程 |
|
|
|
deferred.complete(result) |
|
|
|
} |
|
|
|
|
|
|
|
// 等待回调完成 十秒 |
|
|
|
delay(10000) |
|
|
|
result.ifEmpty { "{\"nocard\": false,\"broadcast\": true, \"success\": false, \"message\": \"播放超时\"}" } |
|
|
|
// 挂起等待回调结果(无超时,直到回调触发) |
|
|
|
deferred.await() |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e("QQMusicPlaySongsHandler", "QQ音乐播放歌曲失败", e) |
|
|
|
"{\"nocard\": true, \"success\": false, \"message\": \"播放异常: ${e.message}\"}" |
|
|
|
@ -236,7 +239,8 @@ private class QQMusicPlayHandler(private val context: Context?) : FunctionHandle |
|
|
|
return try { |
|
|
|
val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
var result = "" |
|
|
|
|
|
|
|
// 创建一个CompletableDeferred用于等待回调结果 |
|
|
|
val deferred = CompletableDeferred<String>() |
|
|
|
qqMusicSingleton.playMusic { playResult -> |
|
|
|
result = if (playResult.isSuccess) { |
|
|
|
"{\"broadcast\": false, \"success\": true, \"message\": \"开始播放\"}" |
|
|
|
@ -244,10 +248,12 @@ private class QQMusicPlayHandler(private val context: Context?) : FunctionHandle |
|
|
|
val error = playResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"播放失败: ${error?.message}\"}" |
|
|
|
} |
|
|
|
// 回调完成,唤醒挂起的协程 |
|
|
|
deferred.complete(result) |
|
|
|
} |
|
|
|
|
|
|
|
delay(10000) |
|
|
|
result.ifEmpty { "{\"success\": false, \"message\": \"播放超时\"}" } |
|
|
|
// 挂起等待回调结果(无超时,直到回调触发) |
|
|
|
deferred.await() |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e("QQMusicPlayHandler", "QQ音乐播放失败", e) |
|
|
|
"{\"success\": false, \"message\": \"播放异常: ${e.message}\"}" |
|
|
|
@ -260,7 +266,8 @@ private class QQMusicPauseHandler(private val context: Context?) : FunctionHandl |
|
|
|
return try { |
|
|
|
val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
var result = "" |
|
|
|
|
|
|
|
// 创建一个CompletableDeferred用于等待回调结果 |
|
|
|
val deferred = CompletableDeferred<String>() |
|
|
|
qqMusicSingleton.pauseMusic { pauseResult -> |
|
|
|
result = if (pauseResult.isSuccess) { |
|
|
|
"{\"broadcast\": false, \"success\": true, \"message\": \"暂停播放\"}" |
|
|
|
@ -268,10 +275,12 @@ private class QQMusicPauseHandler(private val context: Context?) : FunctionHandl |
|
|
|
val error = pauseResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"暂停失败: ${error?.message}\"}" |
|
|
|
} |
|
|
|
// 回调完成,唤醒挂起的协程 |
|
|
|
deferred.complete(result) |
|
|
|
} |
|
|
|
|
|
|
|
delay(2000) |
|
|
|
result.ifEmpty { "{\"success\": false, \"message\": \"暂停超时\"}" } |
|
|
|
// 挂起等待回调结果(无超时,直到回调触发) |
|
|
|
deferred.await() |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e("QQMusicPauseHandler", "QQ音乐暂停失败", e) |
|
|
|
"{\"success\": false, \"message\": \"暂停异常: ${e.message}\"}" |
|
|
|
@ -284,7 +293,8 @@ private class QQMusicResumeHandler(private val context: Context?) : FunctionHand |
|
|
|
return try { |
|
|
|
val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
var result = "" |
|
|
|
|
|
|
|
// 创建一个CompletableDeferred用于等待回调结果 |
|
|
|
val deferred = CompletableDeferred<String>() |
|
|
|
qqMusicSingleton.resumeMusic { resumeResult -> |
|
|
|
result = if (resumeResult.isSuccess) { |
|
|
|
"{\"broadcast\": false, \"success\": true, \"message\": \"恢复播放\"}" |
|
|
|
@ -292,10 +302,12 @@ private class QQMusicResumeHandler(private val context: Context?) : FunctionHand |
|
|
|
val error = resumeResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"恢复播放失败: ${error?.message}\"}" |
|
|
|
} |
|
|
|
// 回调完成,唤醒挂起的协程 |
|
|
|
deferred.complete(result) |
|
|
|
} |
|
|
|
|
|
|
|
delay(2000) |
|
|
|
result.ifEmpty { "{\"success\": false, \"message\": \"恢复播放超时\"}" } |
|
|
|
// 挂起等待回调结果(无超时,直到回调触发) |
|
|
|
deferred.await() |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e("QQMusicResumeHandler", "QQ音乐恢复播放失败", e) |
|
|
|
"{\"success\": false, \"message\": \"恢复播放异常: ${e.message}\"}" |
|
|
|
@ -308,7 +320,8 @@ private class QQMusicStopHandler(private val context: Context?) : FunctionHandle |
|
|
|
return try { |
|
|
|
val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
var result = "" |
|
|
|
|
|
|
|
// 创建一个CompletableDeferred用于等待回调结果 |
|
|
|
val deferred = CompletableDeferred<String>() |
|
|
|
qqMusicSingleton.stopMusic { stopResult -> |
|
|
|
result = if (stopResult.isSuccess) { |
|
|
|
"{\"broadcast\": false, \"success\": true, \"message\": \"停止播放\"}" |
|
|
|
@ -316,10 +329,12 @@ private class QQMusicStopHandler(private val context: Context?) : FunctionHandle |
|
|
|
val error = stopResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"停止失败: ${error?.message}\"}" |
|
|
|
} |
|
|
|
// 回调完成,唤醒挂起的协程 |
|
|
|
deferred.complete(result) |
|
|
|
} |
|
|
|
|
|
|
|
delay(2000) |
|
|
|
result.ifEmpty { "{\"success\": false, \"message\": \"停止超时\"}" } |
|
|
|
// 挂起等待回调结果(无超时,直到回调触发) |
|
|
|
deferred.await() |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e("QQMusicStopHandler", "QQ音乐停止失败", e) |
|
|
|
"{\"success\": false, \"message\": \"停止异常: ${e.message}\"}" |
|
|
|
@ -332,7 +347,8 @@ private class QQMusicNextHandler(private val context: Context?) : FunctionHandle |
|
|
|
return try { |
|
|
|
val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
var result = "" |
|
|
|
|
|
|
|
// 创建一个CompletableDeferred用于等待回调结果 |
|
|
|
val deferred = CompletableDeferred<String>() |
|
|
|
qqMusicSingleton.skipToNext { nextResult -> |
|
|
|
result = if (nextResult.isSuccess) { |
|
|
|
"{\"broadcast\": false, \"success\": true, \"message\": \"切换到下一首\"}" |
|
|
|
@ -340,10 +356,12 @@ private class QQMusicNextHandler(private val context: Context?) : FunctionHandle |
|
|
|
val error = nextResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"切换失败: ${error?.message}\"}" |
|
|
|
} |
|
|
|
// 回调完成,唤醒挂起的协程 |
|
|
|
deferred.complete(result) |
|
|
|
} |
|
|
|
|
|
|
|
delay(2000) |
|
|
|
result.ifEmpty { "{\"success\": false, \"message\": \"切换超时\"}" } |
|
|
|
// 挂起等待回调结果(无超时,直到回调触发) |
|
|
|
deferred.await() |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e("QQMusicNextHandler", "QQ音乐下一首失败", e) |
|
|
|
"{\"success\": false, \"message\": \"切换异常: ${e.message}\"}" |
|
|
|
@ -356,7 +374,8 @@ private class QQMusicPreviousHandler(private val context: Context?) : FunctionHa |
|
|
|
return try { |
|
|
|
val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
var result = "" |
|
|
|
|
|
|
|
// 创建一个CompletableDeferred用于等待回调结果 |
|
|
|
val deferred = CompletableDeferred<String>() |
|
|
|
qqMusicSingleton.skipToPrevious { previousResult -> |
|
|
|
result = if (previousResult.isSuccess) { |
|
|
|
"{\"broadcast\": false, \"success\": true, \"message\": \"切换到上一首\"}" |
|
|
|
@ -364,10 +383,12 @@ private class QQMusicPreviousHandler(private val context: Context?) : FunctionHa |
|
|
|
val error = previousResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"切换失败: ${error?.message}\"}" |
|
|
|
} |
|
|
|
// 回调完成,唤醒挂起的协程 |
|
|
|
deferred.complete(result) |
|
|
|
} |
|
|
|
|
|
|
|
delay(2000) |
|
|
|
result.ifEmpty { "{\"success\": false, \"message\": \"切换超时\"}" } |
|
|
|
// 挂起等待回调结果(无超时,直到回调触发) |
|
|
|
deferred.await() |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e("QQMusicPreviousHandler", "QQ音乐上一首失败", e) |
|
|
|
"{\"success\": false, \"message\": \"切换异常: ${e.message}\"}" |
|
|
|
@ -380,7 +401,8 @@ private class QQMusicGetPlaybackStateHandler(private val context: Context?) : Fu |
|
|
|
return try { |
|
|
|
val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
var result = "" |
|
|
|
|
|
|
|
// 创建一个CompletableDeferred用于等待回调结果 |
|
|
|
val deferred = CompletableDeferred<String>() |
|
|
|
qqMusicSingleton.getPlaybackState { stateResult -> |
|
|
|
result = if (stateResult.isSuccess) { |
|
|
|
val state = stateResult.getOrNull() ?: emptyMap() |
|
|
|
@ -392,10 +414,12 @@ private class QQMusicGetPlaybackStateHandler(private val context: Context?) : Fu |
|
|
|
val error = stateResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"获取播放状态失败: ${error?.message}\"}" |
|
|
|
} |
|
|
|
// 回调完成,唤醒挂起的协程 |
|
|
|
deferred.complete(result) |
|
|
|
} |
|
|
|
|
|
|
|
delay(2000) |
|
|
|
result.ifEmpty { "{\"success\": false, \"message\": \"获取播放状态超时\"}" } |
|
|
|
// 挂起等待回调结果(无超时,直到回调触发) |
|
|
|
deferred.await() |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e("CahtApi", "获取QQ音乐播放状态失败", e) |
|
|
|
"{\"success\": false, \"message\": \"获取播放状态异常: ${e.message}\"}" |
|
|
|
@ -408,7 +432,8 @@ private class QQMusicGetCurrentSongHandler(private val context: Context?) : Func |
|
|
|
return try { |
|
|
|
val qqMusicSingleton = QQMusicSingleton.getInstance() |
|
|
|
var result = "" |
|
|
|
|
|
|
|
// 创建一个CompletableDeferred用于等待回调结果 |
|
|
|
val deferred = CompletableDeferred<String>() |
|
|
|
qqMusicSingleton.getCurrentSong { songResult -> |
|
|
|
result = if (songResult.isSuccess) { |
|
|
|
val song = songResult.getOrNull() ?: emptyMap() |
|
|
|
@ -420,10 +445,12 @@ private class QQMusicGetCurrentSongHandler(private val context: Context?) : Func |
|
|
|
val error = songResult.exceptionOrNull() |
|
|
|
"{\"success\": false, \"message\": \"获取当前歌曲失败: ${error?.message}\"}" |
|
|
|
} |
|
|
|
// 回调完成,唤醒挂起的协程 |
|
|
|
deferred.complete(result) |
|
|
|
} |
|
|
|
|
|
|
|
delay(2000) |
|
|
|
result.ifEmpty { "{\"success\": false, \"message\": \"获取当前歌曲超时\"}" } |
|
|
|
// 挂起等待回调结果(无超时,直到回调触发) |
|
|
|
deferred.await() |
|
|
|
} catch (e: Exception) { |
|
|
|
Log.e("QQMusicLoginHandler", "获取QQ音乐当前歌曲失败", e) |
|
|
|
"{\"success\": false, \"message\": \"获取当前歌曲异常: ${e.message}\"}" |
|
|
|
|