Browse Source

Merge branch 'new_dev' of github.com:deepcloud2048/deep_voice into new_dev

weicu
lxm 1 year ago
parent
commit
ee95ecb85e
  1. 81
      lib/data/services/qq_music.dart
  2. 5
      lib/modules/qqmusic/controllers/qqmusic_playlist_controller.dart

81
lib/data/services/qq_music.dart

@ -1,5 +1,4 @@
import 'dart:async';
import 'dart:ffi';
import 'package:get/get.dart';
import 'package:qq_music/qq_music.dart';
import '../models/song_model.dart';
@ -17,36 +16,10 @@ class QqMusicService extends GetxService {
final currentPosition = 0.obs; // 毫秒
final totalDuration = 0.obs; // 毫秒
final currentSong = Rxn<SongModel>();
// final playlist = <SongModel>[].obs;
// final currentIndex = 0.obs;
// 状态监听定时器
Timer? _stateMonitorTimer;
// 监听器列表 - 用于通知页面状态变化
final List<Function()> _listeners = [];
/// 初始化插件并尝试自动登录
Future<void> initializePlugin() async {
try {
// 先触发插件注册
// await _qqMusic.getPlatformVersion();
// 尝试自动登录
final result = await _qqMusic.login();
if (result['success'] == true) {
print('QQ音乐自动登录成功: ${result['openId']}');
Future.delayed(Duration(milliseconds: 1000), () {
syncCurrentPlayInfo();
});
} else {
print('QQ音乐自动登录失败: ${result['error']}');
}
} catch (e) {
print('QQ音乐插件初始化失败: $e');
}
}
@override
void onInit() {
super.onInit();
@ -58,32 +31,11 @@ class QqMusicService extends GetxService {
@override
void onClose() {
_stateMonitorTimer?.cancel();
_listeners.clear();
print('🎵 [QQMusicService] 全局音乐服务销毁');
super.onClose();
}
/// 添加状态监听器
void addListener(Function() listener) {
_listeners.add(listener);
}
/// 移除状态监听器
void removeListener(Function() listener) {
_listeners.remove(listener);
}
/// 通知所有监听器
void _notifyListeners() {
for (final listener in _listeners) {
try {
listener();
} catch (e) {
print('🔥 [QQMusicService] 监听器回调异常: $e');
}
}
}
/// 启动播放状态监控
void startPlaybackStateMonitor() {
// 取消之前的定时器
@ -141,7 +93,6 @@ class QqMusicService extends GetxService {
if (wasPlaying && !newIsPlaying) {
print('⏹️ [QQMusicService] 检测到播放停止,自动停止全局监听');
stopPlaybackStateMonitor();
_notifyListeners();
return;
}
@ -149,7 +100,6 @@ class QqMusicService extends GetxService {
if (!newIsPlaying) {
print('⏸️ [QQMusicService] 当前未在播放,停止全局监听以节省资源');
stopPlaybackStateMonitor();
_notifyListeners();
return;
}
@ -185,9 +135,6 @@ class QqMusicService extends GetxService {
currentSong.value = newSong;
}
}
// 通知所有监听器
_notifyListeners();
} else {
// 同步失败时停止监听
print('❌ [QQMusicService] 全局同步失败,停止监听');
@ -276,7 +223,6 @@ class QqMusicService extends GetxService {
Future.delayed(Duration(seconds: 1), () {
syncCurrentPlayInfo();
});
_notifyListeners();
} else {
isPlaying.value = false;
currentPosition.value = 0;
@ -300,8 +246,6 @@ class QqMusicService extends GetxService {
Future.delayed(Duration(milliseconds: 500), () {
syncCurrentPlayInfo();
});
_notifyListeners();
}
return result;
} catch (e) {
@ -315,7 +259,6 @@ class QqMusicService extends GetxService {
final result = await _qqMusic.pauseMusic();
if (result['success'] == true) {
isPlaying.value = false;
_notifyListeners();
}
return result;
} catch (e) {
@ -330,7 +273,6 @@ class QqMusicService extends GetxService {
if (result['success'] == true) {
isPlaying.value = true;
startPlaybackStateMonitor();
_notifyListeners();
}
return result;
} catch (e) {
@ -346,7 +288,6 @@ class QqMusicService extends GetxService {
isPlaying.value = false;
currentPosition.value = 0;
stopPlaybackStateMonitor();
_notifyListeners();
}
return result;
} catch (e) {
@ -358,14 +299,7 @@ class QqMusicService extends GetxService {
Future<Map<String, dynamic>> skipToNext() async {
try {
final result = await _qqMusic.skipToNext();
if (result['success'] == true) {
// 更新当前索引
// if (currentIndex.value < playlist.length - 1) {
// currentIndex.value++;
// currentSong.value = playlist[currentIndex.value];
// }
_notifyListeners();
}
if (result['success'] == true) {}
return result;
} catch (e) {
return {'success': false, 'error': '下一首失败: ${e.toString()}'};
@ -376,14 +310,7 @@ class QqMusicService extends GetxService {
Future<Map<String, dynamic>> skipToPrevious() async {
try {
final result = await _qqMusic.skipToPrevious();
if (result['success'] == true) {
// 更新当前索引
// if (currentIndex.value > 0) {
// currentIndex.value--;
// currentSong.value = playlist[currentIndex.value];
// }
_notifyListeners();
}
if (result['success'] == true) {}
return result;
} catch (e) {
return {'success': false, 'error': '上一首失败: ${e.toString()}'};
@ -480,8 +407,6 @@ class QqMusicService extends GetxService {
});
}
}
// 通知所有监听器
_notifyListeners();
}
return result;

5
lib/modules/qqmusic/controllers/qqmusic_playlist_controller.dart

@ -49,10 +49,6 @@ class QQMusicPlaylistController extends GetxController {
Logger.w('QQMusicPlaylist', '未接收到播放列表参数');
_setDefaultDisplayState();
}
// 添加状态监听器
_qqMusicService.addListener(_onMusicStateChanged);
// 界面初始化时同步播放状态和进度
_qqMusicService.syncCurrentPlayInfo();
}
@ -117,7 +113,6 @@ class QQMusicPlaylistController extends GetxController {
@override
void onClose() {
// 移除状态监听器
_qqMusicService.removeListener(_onMusicStateChanged);
super.onClose();
}

Loading…
Cancel
Save