improved error handling
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user