mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-12 23:45:18 +00:00
chore: remove old logger
This commit is contained in:
parent
15211123aa
commit
86ee64c606
@ -6,7 +6,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:spotube/collections/routes.dart';
|
||||
import 'package:spotube/modules/player/player_controls.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
import 'package:spotube/pages/home/home.dart';
|
||||
import 'package:spotube/pages/library/library.dart';
|
||||
import 'package:spotube/pages/lyrics/lyrics.dart';
|
||||
@ -21,8 +20,6 @@ class PlayPauseIntent extends Intent {
|
||||
}
|
||||
|
||||
class PlayPauseAction extends Action<PlayPauseIntent> {
|
||||
final logger = getLogger(PlayPauseAction);
|
||||
|
||||
@override
|
||||
invoke(intent) async {
|
||||
if (PlayerControls.focusNode.canRequestFocus) {
|
||||
|
@ -1,99 +0,0 @@
|
||||
import 'package:collection/collection.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
|
||||
final logger = getLogger("List");
|
||||
|
||||
extension MultiSortListMap on List<Map> {
|
||||
/// [preference] - List of properties in which you want to sort the list
|
||||
/// i.e.
|
||||
/// ```
|
||||
/// List<String> preference = ['property1','property2'];
|
||||
/// ```
|
||||
/// This will first sort the list by property1 then by property2
|
||||
///
|
||||
/// [criteria] - List of booleans that specifies the criteria of sort
|
||||
/// i.e., For ascending order `true` and for descending order `false`.
|
||||
/// ```
|
||||
/// List<bool> criteria = [true. false];
|
||||
/// ```
|
||||
List<Map> sortByProperties(List<bool> criteria, List<String> preference) {
|
||||
if (preference.isEmpty || criteria.isEmpty || isEmpty) {
|
||||
return this;
|
||||
}
|
||||
if (preference.length != criteria.length) {
|
||||
logger.d('Criteria length is not equal to preference');
|
||||
return this;
|
||||
}
|
||||
|
||||
int compare(int i, Map a, Map b) {
|
||||
if (a[preference[i]] == b[preference[i]]) {
|
||||
return 0;
|
||||
} else if (a[preference[i]] > b[preference[i]]) {
|
||||
return criteria[i] ? 1 : -1;
|
||||
} else {
|
||||
return criteria[i] ? -1 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
int sortAll(Map a, Map b) {
|
||||
int i = 0;
|
||||
int result = 0;
|
||||
while (i < preference.length) {
|
||||
result = compare(i, a, b);
|
||||
if (result != 0) break;
|
||||
i++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
return sorted((a, b) => sortAll(a, b));
|
||||
}
|
||||
}
|
||||
|
||||
extension MultiSortListTupleMap<V> on List<(Map, V)> {
|
||||
/// [preference] - List of properties in which you want to sort the list
|
||||
/// i.e.
|
||||
/// ```
|
||||
/// List<String> preference = ['property1','property2'];
|
||||
/// ```
|
||||
/// This will first sort the list by property1 then by property2
|
||||
///
|
||||
/// [criteria] - List of booleans that specifies the criteria of sort
|
||||
/// i.e., For ascending order `true` and for descending order `false`.
|
||||
/// ```
|
||||
/// List<bool> criteria = [true. false];
|
||||
/// ```
|
||||
List<(Map, V)> sortByProperties(
|
||||
List<bool> criteria, List<String> preference) {
|
||||
if (preference.isEmpty || criteria.isEmpty || isEmpty) {
|
||||
return this;
|
||||
}
|
||||
if (preference.length != criteria.length) {
|
||||
logger.d('Criteria length is not equal to preference');
|
||||
return this;
|
||||
}
|
||||
|
||||
int compare(int i, (Map, V) a, (Map, V) b) {
|
||||
if (a.$1[preference[i]] == b.$1[preference[i]]) {
|
||||
return 0;
|
||||
} else if (a.$1[preference[i]] > b.$1[preference[i]]) {
|
||||
return criteria[i] ? 1 : -1;
|
||||
} else {
|
||||
return criteria[i] ? -1 : 1;
|
||||
}
|
||||
}
|
||||
|
||||
int sortAll((Map, V) a, (Map, V) b) {
|
||||
int i = 0;
|
||||
int result = 0;
|
||||
while (i < preference.length) {
|
||||
result = compare(i, a, b);
|
||||
if (result != 0) break;
|
||||
i++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
return sorted((a, b) => sortAll(a, b));
|
||||
}
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:logger/logger.dart';
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:spotube/utils/platform.dart';
|
||||
|
||||
final _loggerFactory = SpotubeLogger();
|
||||
final logEnv = {
|
||||
if (!kIsWeb) ...Platform.environment,
|
||||
};
|
||||
|
||||
SpotubeLogger getLogger<T>(T owner) {
|
||||
_loggerFactory.owner = owner is String ? owner : owner.toString();
|
||||
return _loggerFactory;
|
||||
}
|
||||
|
||||
Future<File> getLogsPath() async {
|
||||
String dir = (await getApplicationDocumentsDirectory()).path;
|
||||
if (kIsAndroid) {
|
||||
dir = (await getExternalStorageDirectory())?.path ?? "";
|
||||
}
|
||||
|
||||
if (kIsMacOS) {
|
||||
dir = path.join((await getLibraryDirectory()).path, "Logs");
|
||||
}
|
||||
final file = File(path.join(dir, ".spotube_logs"));
|
||||
if (!await file.exists()) {
|
||||
await file.create(recursive: true);
|
||||
}
|
||||
return file;
|
||||
}
|
||||
|
||||
class SpotubeLogger extends Logger {
|
||||
String? owner;
|
||||
SpotubeLogger([this.owner]) : super(filter: _SpotubeLogFilter());
|
||||
|
||||
@override
|
||||
void log(Level level, dynamic message,
|
||||
{Object? error, StackTrace? stackTrace, DateTime? time}) async {
|
||||
if (!kIsWeb) {
|
||||
if (level == Level.error) {
|
||||
String dir = (await getApplicationDocumentsDirectory()).path;
|
||||
|
||||
if (kIsAndroid) {
|
||||
dir = (await getExternalStorageDirectory())?.path ?? "";
|
||||
}
|
||||
|
||||
if (kIsMacOS) {
|
||||
dir = path.join((await getLibraryDirectory()).path, "Logs");
|
||||
}
|
||||
|
||||
await File(path.join(dir, ".spotube_logs")).writeAsString(
|
||||
"[${DateTime.now()}]\n$message\n$stackTrace",
|
||||
mode: FileMode.writeOnlyAppend);
|
||||
}
|
||||
}
|
||||
|
||||
super.log(level, "[$owner] $message", error: error, stackTrace: stackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
class _SpotubeLogFilter extends DevelopmentFilter {
|
||||
@override
|
||||
bool shouldLog(LogEvent event) {
|
||||
if ((logEnv["DEBUG"] == "true" && event.level == Level.debug) ||
|
||||
(logEnv["VERBOSE"] == "true" && event.level == Level.trace) ||
|
||||
(logEnv["ERROR"] == "true" && event.level == Level.error)) {
|
||||
return true;
|
||||
}
|
||||
return super.shouldLog(event);
|
||||
}
|
||||
}
|
@ -3,18 +3,16 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:spotify/spotify.dart';
|
||||
import 'package:spotube/components/horizontal_playbutton_card_view/horizontal_playbutton_card_view.dart';
|
||||
import 'package:spotube/extensions/context.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
import 'package:spotube/provider/spotify/spotify.dart';
|
||||
|
||||
class ArtistAlbumList extends HookConsumerWidget {
|
||||
final String artistId;
|
||||
ArtistAlbumList(
|
||||
|
||||
const ArtistAlbumList(
|
||||
this.artistId, {
|
||||
super.key,
|
||||
});
|
||||
|
||||
final logger = getLogger(ArtistAlbumList);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, ref) {
|
||||
final albumsQuery = ref.watch(artistAlbumsProvider(artistId));
|
||||
|
@ -11,7 +11,6 @@ import 'package:spotube/extensions/artist_simple.dart';
|
||||
import 'package:spotube/extensions/context.dart';
|
||||
import 'package:spotube/extensions/duration.dart';
|
||||
import 'package:spotube/models/local_track.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
import 'package:spotube/provider/download_manager_provider.dart';
|
||||
import 'package:spotube/provider/authentication/authentication.dart';
|
||||
import 'package:spotube/provider/audio_player/audio_player.dart';
|
||||
@ -22,14 +21,14 @@ class PlayerActions extends HookConsumerWidget {
|
||||
final bool floatingQueue;
|
||||
final bool showQueue;
|
||||
final List<Widget>? extraActions;
|
||||
PlayerActions({
|
||||
|
||||
const PlayerActions({
|
||||
this.mainAxisAlignment = MainAxisAlignment.center,
|
||||
this.floatingQueue = true,
|
||||
this.showQueue = true,
|
||||
this.extraActions,
|
||||
super.key,
|
||||
});
|
||||
final logger = getLogger(PlayerActions);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, ref) {
|
||||
|
@ -10,7 +10,6 @@ import 'package:spotube/collections/intents.dart';
|
||||
import 'package:spotube/extensions/context.dart';
|
||||
import 'package:spotube/extensions/duration.dart';
|
||||
import 'package:spotube/modules/player/use_progress.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
import 'package:spotube/provider/audio_player/audio_player.dart';
|
||||
import 'package:spotube/provider/audio_player/querying_track_info.dart';
|
||||
import 'package:spotube/services/audio_player/audio_player.dart';
|
||||
@ -19,14 +18,12 @@ class PlayerControls extends HookConsumerWidget {
|
||||
final PaletteGenerator? palette;
|
||||
final bool compact;
|
||||
|
||||
PlayerControls({
|
||||
const PlayerControls({
|
||||
this.palette,
|
||||
this.compact = false,
|
||||
super.key,
|
||||
});
|
||||
|
||||
final logger = getLogger(PlayerControls);
|
||||
|
||||
static FocusNode focusNode = FocusNode();
|
||||
|
||||
@override
|
||||
|
@ -16,7 +16,6 @@ import 'package:spotube/extensions/constrains.dart';
|
||||
import 'package:spotube/extensions/context.dart';
|
||||
import 'package:spotube/extensions/image.dart';
|
||||
import 'package:spotube/hooks/utils/use_brightness_value.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:spotube/provider/authentication/authentication.dart';
|
||||
import 'package:spotube/provider/audio_player/audio_player.dart';
|
||||
@ -27,9 +26,8 @@ import 'package:spotube/utils/platform.dart';
|
||||
import 'package:window_manager/window_manager.dart';
|
||||
|
||||
class BottomPlayer extends HookConsumerWidget {
|
||||
BottomPlayer({super.key});
|
||||
const BottomPlayer({super.key});
|
||||
|
||||
final logger = getLogger(BottomPlayer);
|
||||
@override
|
||||
Widget build(BuildContext context, ref) {
|
||||
final auth = ref.watch(authenticationProvider);
|
||||
|
@ -7,7 +7,7 @@ import 'package:skeletonizer/skeletonizer.dart';
|
||||
import 'package:spotube/components/titlebar/titlebar.dart';
|
||||
import 'package:spotube/modules/artist/artist_album_list.dart';
|
||||
import 'package:spotube/extensions/context.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
|
||||
import 'package:spotube/pages/artist/section/footer.dart';
|
||||
import 'package:spotube/pages/artist/section/header.dart';
|
||||
import 'package:spotube/pages/artist/section/related_artists.dart';
|
||||
@ -18,8 +18,7 @@ class ArtistPage extends HookConsumerWidget {
|
||||
static const name = "artist";
|
||||
|
||||
final String artistId;
|
||||
final logger = getLogger(ArtistPage);
|
||||
ArtistPage(this.artistId, {super.key});
|
||||
const ArtistPage(this.artistId, {super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, ref) {
|
||||
|
@ -8,7 +8,7 @@ import 'package:spotube/modules/settings/section_card_with_heading.dart';
|
||||
import 'package:spotube/components/inter_scrollbar/inter_scrollbar.dart';
|
||||
import 'package:spotube/components/titlebar/titlebar.dart';
|
||||
import 'package:spotube/extensions/context.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
import 'package:spotube/services/logger/logger.dart';
|
||||
|
||||
class LogsPage extends HookWidget {
|
||||
static const name = "logs";
|
||||
@ -61,7 +61,7 @@ class LogsPage extends HookWidget {
|
||||
|
||||
useEffect(() {
|
||||
final timer = Timer.periodic(const Duration(seconds: 5), (t) async {
|
||||
path.value ??= await getLogsPath();
|
||||
path.value ??= await AppLogger.getLogsPath();
|
||||
final raw = await path.value!.readAsString();
|
||||
final hasChanged = rawLogs.value != raw;
|
||||
rawLogs.value = raw;
|
||||
|
@ -7,7 +7,7 @@ import 'package:spotube/services/logger/logger.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
import 'package:spotify/spotify.dart' hide Playlist;
|
||||
import 'package:spotube/models/connect/connect.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
|
||||
import 'package:spotube/provider/connect/clients.dart';
|
||||
import 'package:web_socket_channel/web_socket_channel.dart';
|
||||
import 'package:web_socket_channel/status.dart' as status;
|
||||
@ -46,8 +46,6 @@ final volumeProvider = StateProvider<double>(
|
||||
(ref) => 1.0,
|
||||
);
|
||||
|
||||
final logger = getLogger('ConnectNotifier');
|
||||
|
||||
class ConnectNotifier extends AsyncNotifier<WebSocketChannel?> {
|
||||
@override
|
||||
build() async {
|
||||
@ -58,7 +56,7 @@ class ConnectNotifier extends AsyncNotifier<WebSocketChannel?> {
|
||||
|
||||
final service = connectClients.asData!.value.resolvedService!;
|
||||
|
||||
logger.t(
|
||||
AppLogger.log.t(
|
||||
'♾️ Connecting to ${service.name}: ws://${service.host}:${service.port}/ws',
|
||||
);
|
||||
|
||||
@ -68,7 +66,7 @@ class ConnectNotifier extends AsyncNotifier<WebSocketChannel?> {
|
||||
|
||||
await channel.ready;
|
||||
|
||||
logger.t(
|
||||
AppLogger.log.t(
|
||||
'✅ Connected to ${service.name}: ws://${service.host}:${service.port}/ws',
|
||||
);
|
||||
|
||||
|
@ -7,7 +7,7 @@ import 'package:shelf/shelf.dart';
|
||||
import 'package:shelf_web_socket/shelf_web_socket.dart';
|
||||
import 'package:spotify/spotify.dart';
|
||||
import 'package:spotube/models/connect/connect.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
|
||||
import 'package:spotube/provider/history/history.dart';
|
||||
import 'package:spotube/provider/audio_player/audio_player.dart';
|
||||
import 'package:spotube/provider/volume_provider.dart';
|
||||
@ -25,11 +25,9 @@ class ServerConnectRoutes {
|
||||
final Ref ref;
|
||||
final StreamController<String> _connectClientStreamController;
|
||||
final List<StreamSubscription> subscriptions;
|
||||
final SpotubeLogger logger;
|
||||
ServerConnectRoutes(this.ref)
|
||||
: _connectClientStreamController = StreamController<String>.broadcast(),
|
||||
subscriptions = [],
|
||||
logger = getLogger('ConnectServer') {
|
||||
subscriptions = [] {
|
||||
ref.onDispose(() {
|
||||
_connectClientStreamController.close();
|
||||
for (final subscription in subscriptions) {
|
||||
@ -193,7 +191,7 @@ class ServerConnectRoutes {
|
||||
}
|
||||
},
|
||||
onDone: () {
|
||||
logger.i('Connection closed');
|
||||
AppLogger.log.i('Connection closed');
|
||||
},
|
||||
),
|
||||
]);
|
||||
|
@ -5,7 +5,6 @@ import 'dart:io';
|
||||
import 'package:args/args.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:package_info_plus/package_info_plus.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
|
||||
Future<ArgResults> startCLI(List<String> args) async {
|
||||
final parser = ArgParser();
|
||||
@ -15,13 +14,6 @@ Future<ArgResults> startCLI(List<String> args) async {
|
||||
abbr: 'v',
|
||||
help: 'Verbose mode',
|
||||
defaultsTo: !kReleaseMode,
|
||||
callback: (verbose) {
|
||||
if (verbose) {
|
||||
logEnv['VERBOSE'] = 'true';
|
||||
logEnv['DEBUG'] = 'true';
|
||||
logEnv['ERROR'] = 'true';
|
||||
}
|
||||
},
|
||||
);
|
||||
parser.addFlag(
|
||||
"version",
|
||||
|
@ -2,9 +2,6 @@ import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
|
||||
final logger = getLogger("ChunkedDownload");
|
||||
|
||||
/// Downloading by spiting as file in chunks
|
||||
extension ChunkDownload on Dio {
|
||||
@ -69,11 +66,7 @@ extension ChunkDownload on Dio {
|
||||
}
|
||||
await raf.close();
|
||||
|
||||
logger.d("Downloaded file path: ${headFile.path}");
|
||||
|
||||
headFile = await headFile.rename(savePath);
|
||||
|
||||
logger.d("Renamed file path: ${headFile.path}");
|
||||
}
|
||||
|
||||
final firstResponse = await downloadChunk(
|
||||
|
@ -1,18 +1,18 @@
|
||||
import 'dart:async';
|
||||
import 'dart:collection';
|
||||
import 'dart:io';
|
||||
import 'package:spotube/services/logger/logger.dart';
|
||||
import 'package:collection/collection.dart';
|
||||
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:path/path.dart' as path;
|
||||
import 'package:path_provider/path_provider.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
|
||||
import 'package:spotube/services/download_manager/chunked_download.dart';
|
||||
import 'package:spotube/services/download_manager/download_request.dart';
|
||||
import 'package:spotube/services/download_manager/download_status.dart';
|
||||
import 'package:spotube/services/download_manager/download_task.dart';
|
||||
import 'package:spotube/services/logger/logger.dart';
|
||||
import 'package:spotube/utils/primitive_utils.dart';
|
||||
|
||||
export './download_request.dart';
|
||||
@ -25,7 +25,6 @@ typedef DownloadStatusEvent = ({
|
||||
});
|
||||
|
||||
class DownloadManager {
|
||||
final logger = getLogger("DownloadManager");
|
||||
final Map<String, DownloadTask> _cache = <String, DownloadTask>{};
|
||||
final Queue<DownloadRequest> _queue = Queue();
|
||||
var dio = Dio();
|
||||
@ -77,7 +76,6 @@ class DownloadManager {
|
||||
}
|
||||
setStatus(task, DownloadStatus.downloading);
|
||||
|
||||
logger.d("[DownloadManager] $url");
|
||||
final file = File(savePath.toString());
|
||||
|
||||
await Directory(path.dirname(savePath)).create(recursive: true);
|
||||
@ -99,11 +97,8 @@ class DownloadManager {
|
||||
final partialFileExist = await partialFile.exists();
|
||||
|
||||
if (fileExist) {
|
||||
logger.d("[DownloadManager] File Exists");
|
||||
setStatus(task, DownloadStatus.completed);
|
||||
} else if (partialFileExist) {
|
||||
logger.d("[DownloadManager] Partial File Exists");
|
||||
|
||||
final partialFileLength = await partialFile.length();
|
||||
|
||||
final response = await dio.download(
|
||||
@ -225,7 +220,6 @@ class DownloadManager {
|
||||
}
|
||||
|
||||
Future<void> pauseDownload(String url) async {
|
||||
logger.d("[DownloadManager] Pause Download");
|
||||
var task = getDownload(url)!;
|
||||
setStatus(task, DownloadStatus.paused);
|
||||
task.request.cancelToken.cancel();
|
||||
@ -234,7 +228,6 @@ class DownloadManager {
|
||||
}
|
||||
|
||||
Future<void> cancelDownload(String url) async {
|
||||
logger.d("[DownloadManager] Cancel Download");
|
||||
var task = getDownload(url)!;
|
||||
setStatus(task, DownloadStatus.canceled);
|
||||
_queue.remove(task.request);
|
||||
@ -242,7 +235,6 @@ class DownloadManager {
|
||||
}
|
||||
|
||||
Future<void> resumeDownload(String url) async {
|
||||
logger.d("[DownloadManager] Resume Download");
|
||||
var task = getDownload(url)!;
|
||||
setStatus(task, DownloadStatus.downloading);
|
||||
task.request.cancelToken = CancelToken();
|
||||
@ -405,7 +397,6 @@ class DownloadManager {
|
||||
|
||||
while (_queue.isNotEmpty && runningTasks < maxConcurrentTasks) {
|
||||
runningTasks++;
|
||||
logger.d('Concurrent workers: $runningTasks');
|
||||
var currentRequest = _queue.removeFirst();
|
||||
|
||||
await download(
|
||||
|
@ -4,7 +4,7 @@ import 'package:html/dom.dart' hide Text;
|
||||
import 'package:spotify/spotify.dart';
|
||||
import 'package:spotube/modules/library/user_local_tracks.dart';
|
||||
import 'package:spotube/modules/root/update_dialog.dart';
|
||||
import 'package:spotube/models/logger.dart';
|
||||
|
||||
import 'package:spotube/models/lyrics.dart';
|
||||
import 'package:spotube/provider/database/database.dart';
|
||||
import 'package:spotube/services/dio/dio.dart';
|
||||
@ -24,8 +24,6 @@ import 'package:spotube/collections/env.dart';
|
||||
import 'package:version/version.dart';
|
||||
|
||||
abstract class ServiceUtils {
|
||||
static final logger = getLogger("ServiceUtils");
|
||||
|
||||
static final _englishMatcherRegex = RegExp(
|
||||
"^[a-zA-Z0-9\\s!\"#\$%&\\'()*+,-.\\/:;<=>?@\\[\\]^_`{|}~]*\$",
|
||||
);
|
||||
@ -194,8 +192,6 @@ abstract class ServiceUtils {
|
||||
artists: artistNames,
|
||||
);
|
||||
|
||||
logger.v("[Searching Subtitle] $query");
|
||||
|
||||
final searchUri = Uri.parse("$baseUri/subtitles4songs.aspx").replace(
|
||||
queryParameters: {"q": query},
|
||||
);
|
||||
@ -227,7 +223,6 @@ abstract class ServiceUtils {
|
||||
|
||||
// not result was found at all
|
||||
if (rateSortedResults.first["points"] == 0) {
|
||||
logger.e("[Subtitle not found] ${track.name}");
|
||||
return Future.error("Subtitle lookup failed", StackTrace.current);
|
||||
}
|
||||
|
||||
@ -235,8 +230,6 @@ abstract class ServiceUtils {
|
||||
final subtitleUri =
|
||||
Uri.parse("$baseUri/${topResult.attributes["href"]}&type=lrc");
|
||||
|
||||
logger.v("[Selected subtitle] ${topResult.text} | $subtitleUri");
|
||||
|
||||
final lrcDocument = parser.parse((await globalDio.getUri(
|
||||
subtitleUri,
|
||||
options: Options(responseType: ResponseType.plain),
|
||||
|
Loading…
Reference in New Issue
Block a user