import 'package:didvan/models/requests/studio.dart'; import 'package:didvan/models/studio_details_data.dart'; import 'package:didvan/services/network/request.dart'; import 'package:didvan/services/network/request_helper.dart'; import 'package:flutter/foundation.dart'; import 'package:image_picker/image_picker.dart'; import 'package:just_audio/just_audio.dart'; class MediaService { static final AudioPlayer audioPlayer = AudioPlayer(); static String? audioPlayerTag; static StudioDetailsData? currentPodcast; static StudioRequestArgs? podcastPlaylistArgs; static void init() { audioPlayer.positionStream.listen((event) { if (audioPlayer.duration != null && audioPlayer.duration! < event) { audioPlayer.stop(); audioPlayer.seek(const Duration(seconds: 0)); } }); } static Future handleAudioPlayback({ required dynamic audioSource, bool isVoiceMessage = true, }) async { bool isNetworkAudio = audioSource.runtimeType == String; String tag; if (isNetworkAudio) { tag = audioSource; } else { tag = audioSource.path; } if (audioPlayerTag == tag) { if (audioPlayer.playing) { await audioPlayer.pause(); } else { await audioPlayer.play(); } } else { await audioPlayer.stop(); audioPlayerTag = tag; if (isNetworkAudio) { await audioPlayer.setUrl( isVoiceMessage ? (RequestHelper.baseUrl + audioSource + '?accessToken=${RequestService.token}') : audioSource, ); } else { if (kIsWeb) { await audioPlayer .setUrl(audioSource!.uri.path.replaceAll('%3A', ':')); } else { await audioPlayer.setFilePath(audioSource.path); } } audioPlayer.play(); } } static Future resetAudioPlayer() async { audioPlayerTag = null; currentPodcast = null; podcastPlaylistArgs = null; MediaService.audioPlayer.stop(); } static Future pickImage({required ImageSource source}) async { final imagePicker = ImagePicker(); final XFile? pickedFile = await imagePicker.pickImage(source: source); return pickedFile; } }