diff --git a/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QQMusicSingleton.kt b/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QQMusicSingleton.kt index 4e371876a..5c87e6c94 100644 --- a/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QQMusicSingleton.kt +++ b/local_plugins/qq_music/android/src/main/kotlin/com/yunqiinnovation/qq_music/QQMusicSingleton.kt @@ -423,52 +423,83 @@ class QQMusicSingleton private constructor() { action: (QQMusicManager, QQMusicManager.SearchCallback) -> Unit ): (callback: (Result>>) -> Unit) -> Unit { return lambda@{ callback -> - + if (!isQQMusicInstalled()){ callback(Result.failure(Exception("未安装QQ音乐软件,请先安装QQ音乐软件"))) return@lambda } - + val currentActivity = context if (currentActivity == null) { callback(Result.failure(Exception("Activity not available"))) return@lambda } - Log.d(TAG, "开始 ${actionName}") - ensureMusicManager(currentActivity,object: QQMusicManager. BindCallback{ - override fun onSuccess(){ - action(musicManager!!, object : QQMusicManager.SearchCallback { - override fun onSuccess(songs: List>) { - Log.d(TAG, "${actionName} 成功") - handler.post { - callback(Result.success(songs)) - } - } - - override fun onError(errorCode: Int, errorMessage: String) { - Log.d(TAG, "失败 ${actionName} 成功") - if (allagain > 0 && curragain < allagain){ //重试机制 - executeSearchbackAction(actionName,curragain+1,allagain,action) - }else{ - handler.post { - callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) - } - } - } - }) + + // 添加登录状态检查 + if (!isLoggedIn()) { + Log.d(TAG, "用户未登录,开始自动登录") + login { loginResult -> + if (loginResult.isSuccess) { + Log.d(TAG, "自动登录成功,继续执行 ${actionName}") + // 登录成功后继续执行原操作 + executeSearchAction(actionName, curragain, allagain, action, callback) + } else { + Log.e(TAG, "自动登录失败: ${loginResult.exceptionOrNull()?.message}") + callback(Result.failure(Exception("用户未登录且自动登录失败: ${loginResult.exceptionOrNull()?.message}"))) + } } - override fun onError(errorCode: Int, errorMessage: String) { - if (allagain > 0 && curragain < allagain){ //重试机制 - executeSearchbackAction(actionName,curragain+1,allagain,action) - }else{ + return@lambda + } + + // 用户已登录,直接执行搜索操作 + executeSearchAction(actionName, curragain, allagain, action, callback) + } + } + + // 提取搜索执行逻辑为独立方法 + private fun executeSearchAction( + actionName: String, + curragain: Int, + allagain: Int, + action: (QQMusicManager, QQMusicManager.SearchCallback) -> Unit, + callback: (Result>>) -> Unit + ) { + Log.d(TAG, "开始 ${actionName}") + ensureMusicManager(context!!, object: QQMusicManager.BindCallback{ + override fun onSuccess(){ + action(musicManager!!, object : QQMusicManager.SearchCallback { + override fun onSuccess(songs: List>) { + Log.d(TAG, "${actionName} 成功") handler.post { - callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) + callback(Result.success(songs)) + } + } + + override fun onError(errorCode: Int, errorMessage: String) { + Log.d(TAG, "失败 ${actionName} errorCode: $errorCode errorMessage:$errorMessage 当前重试${curragain}/${allagain}") + if (allagain > 0 && curragain < allagain){ //重试机制 + Log.d(TAG, "重试 ${actionName} 当前重试${curragain+1}/${allagain}") + executeSearchbackAction(actionName,curragain+1,allagain,action)(callback) + }else{ + handler.post { + callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) + } } } + }) + } + override fun onError(errorCode: Int, errorMessage: String) { + Log.d(TAG, "失败 ${actionName} errorCode: $errorCode errorMessage:$errorMessage 当前重试${curragain}/${allagain}") + if (allagain > 0 && curragain < allagain){ //重试机制 + Log.d(TAG, "重试 ${actionName} 当前重试${curragain+1}/${allagain}") + executeSearchbackAction(actionName,curragain+1,allagain,action)(callback) + }else{ + handler.post { + callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) + } } - }) - - } + } + }) } @@ -491,49 +522,80 @@ class QQMusicSingleton private constructor() { callback(Result.failure(Exception("Activity not available"))) return@lambda } - Log.d(TAG, "开始 ${actionName}") - ensureMusicManager(currentActivity,object: QQMusicManager. BindCallback{ - override fun onSuccess(){ - action(musicManager!!, object : QQMusicManager.PlayCallback { - override fun onSuccess() { - Log.d(TAG, "${actionName}成功") - handler.post { - callback(Result.success(Unit)) - } + + // 添加登录状态检查 + if (!isLoggedIn()) { + Log.d(TAG, "用户未登录,开始自动登录") + login { loginResult -> + if (loginResult.isSuccess) { + Log.d(TAG, "自动登录成功,继续执行 ${actionName}") + // 登录成功后继续执行原操作 + executePlayAction(actionName, curragain, allagain, action, callback) + } else { + Log.e(TAG, "自动登录失败: ${loginResult.exceptionOrNull()?.message}") + callback(Result.failure(Exception("用户未登录且自动登录失败: ${loginResult.exceptionOrNull()?.message}"))) + } + } + return@lambda + } + + // 用户已登录,直接执行搜索操作 + executePlayAction(actionName, curragain, allagain, action, callback) + + } + } + + private fun executePlayAction( + actionName: String, + curragain:Int, + allagain:Int, + action: (QQMusicManager, QQMusicManager.PlayCallback) -> Unit, + callback: (Result) -> Unit + ) { + Log.d(TAG, "开始 ${actionName}") + ensureMusicManager(context!!,object: QQMusicManager. BindCallback{ + override fun onSuccess(){ + action(musicManager!!, object : QQMusicManager.PlayCallback { + override fun onSuccess() { + Log.d(TAG, "${actionName}成功") + handler.post { + callback(Result.success(Unit)) } + } - override fun onError(errorCode: Int, errorMessage: String) { - if (allagain > 0 && curragain < allagain){ //重试机制 - executePlaybackAction(actionName,curragain+1,allagain,action) - }else{ - handler.post { - Log.e(TAG, "${actionName}失败: $errorCode $errorMessage") - if (errorCode == -1){ - musicManager?.bindQQMusicApiService() - callback(Result.failure(Exception("播放失败: $errorMessage"))) - } else if (errorCode == 1030) { - callback(Result.success(Unit)) - }else{ - callback(Result.failure(Exception("播放失败: $errorMessage"))) - } + override fun onError(errorCode: Int, errorMessage: String) { + if (allagain > 0 && curragain < allagain){ //重试机制 + executePlaybackAction(actionName,curragain+1,allagain,action)(callback) + }else{ + handler.post { + Log.e(TAG, "${actionName}失败: $errorCode $errorMessage") + if (errorCode == -1){ + musicManager?.bindQQMusicApiService() + callback(Result.failure(Exception("播放失败: $errorMessage"))) + } else if (errorCode == 1030) { + callback(Result.success(Unit)) + }else{ + callback(Result.failure(Exception("播放失败: $errorMessage"))) } } } - }) - } - override fun onError(errorCode: Int, errorMessage: String) { - Log.e(TAG, "${actionName}失败: $errorCode $errorMessage") - if (allagain > 0 && curragain < allagain){ //重试机制 - executePlaybackAction(actionName,curragain+1,allagain,action) - }else{ - callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) } + }) + } + override fun onError(errorCode: Int, errorMessage: String) { + Log.e(TAG, "${actionName}失败: $errorCode $errorMessage") + if (allagain > 0 && curragain < allagain){ //重试机制 + executePlaybackAction(actionName,curragain+1,allagain,action)(callback) + }else{ + callback(Result.failure(Exception("$actionName 失败: $errorMessage"))) } - }) + } + }) - } } - + + + private fun executeInfoAction( actionName: String, action: (QQMusicManager, QQMusicManager.InfoCallback) -> Unit