improved error handling

This commit is contained in:
2024-10-08 14:59:05 -04:00
parent a41dec33d3
commit 93075b9d72
5 changed files with 57 additions and 28 deletions

View File

@@ -3,27 +3,33 @@ import 'dart:io' show Platform;
import 'package:audio_service/audio_service.dart';
import 'package:audio_session/audio_session.dart';
import 'package:audioplayers/audioplayers.dart';
import 'package:http/http.dart' as http;
import 'package:flutter/foundation.dart' show kIsWeb;
import 'package:http/http.dart' as http;
import 'ListenHandler.dart';
late final ListenHandler _listenHandler;
late final AudioSession _session;
const String _fallback =
"https://generic.ything.app/music/separation-185196.mp3";
final _fallbackSource =
Uri.parse("https://generic.ything.app/music/fallback.url");
final _urlSource = Uri.parse("https://generic.ything.app/music/player.url");
late final String _radioUrl;
Future<void> loadCurrentUrl() async {
final resp = await http.get(_urlSource);
if (resp.statusCode == 200) {
_radioUrl = resp.body.trim();
print('Loaded remote url');
} else {
_radioUrl = _fallback;
print('Request for current streaming url failed, using fallback url');
Future<String?> loadStringFromUrl(Uri remote) async {
try {
final resp = await http.get(remote);
if (resp.statusCode == 200) {
var ret = resp.body.trim();
print('Loaded remote url: $remote - $ret');
return ret;
} else {
print(
'Request to load remote url: $remote - failed - Status Code: ${resp.statusCode} - Body: ${resp.body}');
return null;
}
} catch (e) {
print("Exception - unable to load remote url: $remote - $e");
return null;
}
}
@@ -35,21 +41,21 @@ final _urlAbout =
final _urlAboutIOS =
Uri.parse("https://generic.ything.app/ything_radio/about_ios.txt");
late final String _remoteAbout;
late final String _displayAbout;
Future<void> loadAboutUrl() async {
final resp = await http.get(kIsWeb || !Platform.isIOS ? _urlAbout : _urlAboutIOS);
final reqUrl = kIsWeb || !Platform.isIOS ? _urlAbout : _urlAboutIOS;
if (resp.statusCode == 200) {
_remoteAbout = resp.body;
print('Loaded remote about');
var about = await loadStringFromUrl(reqUrl);
if (about != null) {
_displayAbout = about;
} else {
_remoteAbout = _fallbackAbout;
print('Request for remote about failed, using fallback about');
_displayAbout = _fallbackAbout;
}
}
String getAboutText() => _remoteAbout;
String getAboutText() => _displayAbout;
Future<void> setupListenHandler() async {
_listenHandler = await AudioService.init(
@@ -96,10 +102,20 @@ Future<void> setupListenHandler() async {
ListenHandler getListenHandlder() => _listenHandler;
UrlSource getUrlSource() {
return UrlSource(_radioUrl, mimeType: "audio/mpeg");
Future<Source> getSource({bool fallback = false}) async {
var radioUrl = fallback == false
? await loadStringFromUrl(_urlSource)
: await loadStringFromUrl(_fallbackSource);
if (radioUrl != null) {
return UrlSource(radioUrl, mimeType: "audio/mpeg");
} else {
return getInternetError();
}
}
Source getInternetError() =>
AssetSource("audio/internet_error.mp3", mimeType: "audio/mpeg");
Future<bool> startAudioSession() async {
return await _session.setActive(true);
}