chore: remove old logger

This commit is contained in:
Kingkor Roy Tirtho 2024-07-06 22:02:31 +06:00
parent 15211123aa
commit 86ee64c606
15 changed files with 19 additions and 239 deletions

View File

@ -6,7 +6,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:spotube/collections/routes.dart'; import 'package:spotube/collections/routes.dart';
import 'package:spotube/modules/player/player_controls.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/home/home.dart';
import 'package:spotube/pages/library/library.dart'; import 'package:spotube/pages/library/library.dart';
import 'package:spotube/pages/lyrics/lyrics.dart'; import 'package:spotube/pages/lyrics/lyrics.dart';
@ -21,8 +20,6 @@ class PlayPauseIntent extends Intent {
} }
class PlayPauseAction extends Action<PlayPauseIntent> { class PlayPauseAction extends Action<PlayPauseIntent> {
final logger = getLogger(PlayPauseAction);
@override @override
invoke(intent) async { invoke(intent) async {
if (PlayerControls.focusNode.canRequestFocus) { if (PlayerControls.focusNode.canRequestFocus) {

View File

@ -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));
}
}

View File

@ -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);
}
}

View File

@ -3,18 +3,16 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/components/horizontal_playbutton_card_view/horizontal_playbutton_card_view.dart'; import 'package:spotube/components/horizontal_playbutton_card_view/horizontal_playbutton_card_view.dart';
import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/context.dart';
import 'package:spotube/models/logger.dart';
import 'package:spotube/provider/spotify/spotify.dart'; import 'package:spotube/provider/spotify/spotify.dart';
class ArtistAlbumList extends HookConsumerWidget { class ArtistAlbumList extends HookConsumerWidget {
final String artistId; final String artistId;
ArtistAlbumList(
const ArtistAlbumList(
this.artistId, { this.artistId, {
super.key, super.key,
}); });
final logger = getLogger(ArtistAlbumList);
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final albumsQuery = ref.watch(artistAlbumsProvider(artistId)); final albumsQuery = ref.watch(artistAlbumsProvider(artistId));

View File

@ -11,7 +11,6 @@ import 'package:spotube/extensions/artist_simple.dart';
import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/duration.dart'; import 'package:spotube/extensions/duration.dart';
import 'package:spotube/models/local_track.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/download_manager_provider.dart';
import 'package:spotube/provider/authentication/authentication.dart'; import 'package:spotube/provider/authentication/authentication.dart';
import 'package:spotube/provider/audio_player/audio_player.dart'; import 'package:spotube/provider/audio_player/audio_player.dart';
@ -22,14 +21,14 @@ class PlayerActions extends HookConsumerWidget {
final bool floatingQueue; final bool floatingQueue;
final bool showQueue; final bool showQueue;
final List<Widget>? extraActions; final List<Widget>? extraActions;
PlayerActions({
const PlayerActions({
this.mainAxisAlignment = MainAxisAlignment.center, this.mainAxisAlignment = MainAxisAlignment.center,
this.floatingQueue = true, this.floatingQueue = true,
this.showQueue = true, this.showQueue = true,
this.extraActions, this.extraActions,
super.key, super.key,
}); });
final logger = getLogger(PlayerActions);
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {

View File

@ -10,7 +10,6 @@ import 'package:spotube/collections/intents.dart';
import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/duration.dart'; import 'package:spotube/extensions/duration.dart';
import 'package:spotube/modules/player/use_progress.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/audio_player.dart';
import 'package:spotube/provider/audio_player/querying_track_info.dart'; import 'package:spotube/provider/audio_player/querying_track_info.dart';
import 'package:spotube/services/audio_player/audio_player.dart'; import 'package:spotube/services/audio_player/audio_player.dart';
@ -19,14 +18,12 @@ class PlayerControls extends HookConsumerWidget {
final PaletteGenerator? palette; final PaletteGenerator? palette;
final bool compact; final bool compact;
PlayerControls({ const PlayerControls({
this.palette, this.palette,
this.compact = false, this.compact = false,
super.key, super.key,
}); });
final logger = getLogger(PlayerControls);
static FocusNode focusNode = FocusNode(); static FocusNode focusNode = FocusNode();
@override @override

View File

@ -16,7 +16,6 @@ import 'package:spotube/extensions/constrains.dart';
import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/context.dart';
import 'package:spotube/extensions/image.dart'; import 'package:spotube/extensions/image.dart';
import 'package:spotube/hooks/utils/use_brightness_value.dart'; import 'package:spotube/hooks/utils/use_brightness_value.dart';
import 'package:spotube/models/logger.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:spotube/provider/authentication/authentication.dart'; import 'package:spotube/provider/authentication/authentication.dart';
import 'package:spotube/provider/audio_player/audio_player.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'; import 'package:window_manager/window_manager.dart';
class BottomPlayer extends HookConsumerWidget { class BottomPlayer extends HookConsumerWidget {
BottomPlayer({super.key}); const BottomPlayer({super.key});
final logger = getLogger(BottomPlayer);
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final auth = ref.watch(authenticationProvider); final auth = ref.watch(authenticationProvider);

View File

@ -7,7 +7,7 @@ import 'package:skeletonizer/skeletonizer.dart';
import 'package:spotube/components/titlebar/titlebar.dart'; import 'package:spotube/components/titlebar/titlebar.dart';
import 'package:spotube/modules/artist/artist_album_list.dart'; import 'package:spotube/modules/artist/artist_album_list.dart';
import 'package:spotube/extensions/context.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/footer.dart';
import 'package:spotube/pages/artist/section/header.dart'; import 'package:spotube/pages/artist/section/header.dart';
import 'package:spotube/pages/artist/section/related_artists.dart'; import 'package:spotube/pages/artist/section/related_artists.dart';
@ -18,8 +18,7 @@ class ArtistPage extends HookConsumerWidget {
static const name = "artist"; static const name = "artist";
final String artistId; final String artistId;
final logger = getLogger(ArtistPage); const ArtistPage(this.artistId, {super.key});
ArtistPage(this.artistId, {super.key});
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {

View File

@ -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/inter_scrollbar/inter_scrollbar.dart';
import 'package:spotube/components/titlebar/titlebar.dart'; import 'package:spotube/components/titlebar/titlebar.dart';
import 'package:spotube/extensions/context.dart'; import 'package:spotube/extensions/context.dart';
import 'package:spotube/models/logger.dart'; import 'package:spotube/services/logger/logger.dart';
class LogsPage extends HookWidget { class LogsPage extends HookWidget {
static const name = "logs"; static const name = "logs";
@ -61,7 +61,7 @@ class LogsPage extends HookWidget {
useEffect(() { useEffect(() {
final timer = Timer.periodic(const Duration(seconds: 5), (t) async { 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 raw = await path.value!.readAsString();
final hasChanged = rawLogs.value != raw; final hasChanged = rawLogs.value != raw;
rawLogs.value = raw; rawLogs.value = raw;

View File

@ -7,7 +7,7 @@ import 'package:spotube/services/logger/logger.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:spotify/spotify.dart' hide Playlist; import 'package:spotify/spotify.dart' hide Playlist;
import 'package:spotube/models/connect/connect.dart'; import 'package:spotube/models/connect/connect.dart';
import 'package:spotube/models/logger.dart';
import 'package:spotube/provider/connect/clients.dart'; import 'package:spotube/provider/connect/clients.dart';
import 'package:web_socket_channel/web_socket_channel.dart'; import 'package:web_socket_channel/web_socket_channel.dart';
import 'package:web_socket_channel/status.dart' as status; import 'package:web_socket_channel/status.dart' as status;
@ -46,8 +46,6 @@ final volumeProvider = StateProvider<double>(
(ref) => 1.0, (ref) => 1.0,
); );
final logger = getLogger('ConnectNotifier');
class ConnectNotifier extends AsyncNotifier<WebSocketChannel?> { class ConnectNotifier extends AsyncNotifier<WebSocketChannel?> {
@override @override
build() async { build() async {
@ -58,7 +56,7 @@ class ConnectNotifier extends AsyncNotifier<WebSocketChannel?> {
final service = connectClients.asData!.value.resolvedService!; final service = connectClients.asData!.value.resolvedService!;
logger.t( AppLogger.log.t(
'♾️ Connecting to ${service.name}: ws://${service.host}:${service.port}/ws', '♾️ Connecting to ${service.name}: ws://${service.host}:${service.port}/ws',
); );
@ -68,7 +66,7 @@ class ConnectNotifier extends AsyncNotifier<WebSocketChannel?> {
await channel.ready; await channel.ready;
logger.t( AppLogger.log.t(
'✅ Connected to ${service.name}: ws://${service.host}:${service.port}/ws', '✅ Connected to ${service.name}: ws://${service.host}:${service.port}/ws',
); );

View File

@ -7,7 +7,7 @@ import 'package:shelf/shelf.dart';
import 'package:shelf_web_socket/shelf_web_socket.dart'; import 'package:shelf_web_socket/shelf_web_socket.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/models/connect/connect.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/history/history.dart';
import 'package:spotube/provider/audio_player/audio_player.dart'; import 'package:spotube/provider/audio_player/audio_player.dart';
import 'package:spotube/provider/volume_provider.dart'; import 'package:spotube/provider/volume_provider.dart';
@ -25,11 +25,9 @@ class ServerConnectRoutes {
final Ref ref; final Ref ref;
final StreamController<String> _connectClientStreamController; final StreamController<String> _connectClientStreamController;
final List<StreamSubscription> subscriptions; final List<StreamSubscription> subscriptions;
final SpotubeLogger logger;
ServerConnectRoutes(this.ref) ServerConnectRoutes(this.ref)
: _connectClientStreamController = StreamController<String>.broadcast(), : _connectClientStreamController = StreamController<String>.broadcast(),
subscriptions = [], subscriptions = [] {
logger = getLogger('ConnectServer') {
ref.onDispose(() { ref.onDispose(() {
_connectClientStreamController.close(); _connectClientStreamController.close();
for (final subscription in subscriptions) { for (final subscription in subscriptions) {
@ -193,7 +191,7 @@ class ServerConnectRoutes {
} }
}, },
onDone: () { onDone: () {
logger.i('Connection closed'); AppLogger.log.i('Connection closed');
}, },
), ),
]); ]);

View File

@ -5,7 +5,6 @@ import 'dart:io';
import 'package:args/args.dart'; import 'package:args/args.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:package_info_plus/package_info_plus.dart'; import 'package:package_info_plus/package_info_plus.dart';
import 'package:spotube/models/logger.dart';
Future<ArgResults> startCLI(List<String> args) async { Future<ArgResults> startCLI(List<String> args) async {
final parser = ArgParser(); final parser = ArgParser();
@ -15,13 +14,6 @@ Future<ArgResults> startCLI(List<String> args) async {
abbr: 'v', abbr: 'v',
help: 'Verbose mode', help: 'Verbose mode',
defaultsTo: !kReleaseMode, defaultsTo: !kReleaseMode,
callback: (verbose) {
if (verbose) {
logEnv['VERBOSE'] = 'true';
logEnv['DEBUG'] = 'true';
logEnv['ERROR'] = 'true';
}
},
); );
parser.addFlag( parser.addFlag(
"version", "version",

View File

@ -2,9 +2,6 @@ import 'dart:async';
import 'dart:io'; import 'dart:io';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:spotube/models/logger.dart';
final logger = getLogger("ChunkedDownload");
/// Downloading by spiting as file in chunks /// Downloading by spiting as file in chunks
extension ChunkDownload on Dio { extension ChunkDownload on Dio {
@ -69,11 +66,7 @@ extension ChunkDownload on Dio {
} }
await raf.close(); await raf.close();
logger.d("Downloaded file path: ${headFile.path}");
headFile = await headFile.rename(savePath); headFile = await headFile.rename(savePath);
logger.d("Renamed file path: ${headFile.path}");
} }
final firstResponse = await downloadChunk( final firstResponse = await downloadChunk(

View File

@ -1,18 +1,18 @@
import 'dart:async'; import 'dart:async';
import 'dart:collection'; import 'dart:collection';
import 'dart:io'; import 'dart:io';
import 'package:spotube/services/logger/logger.dart';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:path/path.dart' as path; import 'package:path/path.dart' as path;
import 'package:path_provider/path_provider.dart'; 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/chunked_download.dart';
import 'package:spotube/services/download_manager/download_request.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_status.dart';
import 'package:spotube/services/download_manager/download_task.dart'; import 'package:spotube/services/download_manager/download_task.dart';
import 'package:spotube/services/logger/logger.dart';
import 'package:spotube/utils/primitive_utils.dart'; import 'package:spotube/utils/primitive_utils.dart';
export './download_request.dart'; export './download_request.dart';
@ -25,7 +25,6 @@ typedef DownloadStatusEvent = ({
}); });
class DownloadManager { class DownloadManager {
final logger = getLogger("DownloadManager");
final Map<String, DownloadTask> _cache = <String, DownloadTask>{}; final Map<String, DownloadTask> _cache = <String, DownloadTask>{};
final Queue<DownloadRequest> _queue = Queue(); final Queue<DownloadRequest> _queue = Queue();
var dio = Dio(); var dio = Dio();
@ -77,7 +76,6 @@ class DownloadManager {
} }
setStatus(task, DownloadStatus.downloading); setStatus(task, DownloadStatus.downloading);
logger.d("[DownloadManager] $url");
final file = File(savePath.toString()); final file = File(savePath.toString());
await Directory(path.dirname(savePath)).create(recursive: true); await Directory(path.dirname(savePath)).create(recursive: true);
@ -99,11 +97,8 @@ class DownloadManager {
final partialFileExist = await partialFile.exists(); final partialFileExist = await partialFile.exists();
if (fileExist) { if (fileExist) {
logger.d("[DownloadManager] File Exists");
setStatus(task, DownloadStatus.completed); setStatus(task, DownloadStatus.completed);
} else if (partialFileExist) { } else if (partialFileExist) {
logger.d("[DownloadManager] Partial File Exists");
final partialFileLength = await partialFile.length(); final partialFileLength = await partialFile.length();
final response = await dio.download( final response = await dio.download(
@ -225,7 +220,6 @@ class DownloadManager {
} }
Future<void> pauseDownload(String url) async { Future<void> pauseDownload(String url) async {
logger.d("[DownloadManager] Pause Download");
var task = getDownload(url)!; var task = getDownload(url)!;
setStatus(task, DownloadStatus.paused); setStatus(task, DownloadStatus.paused);
task.request.cancelToken.cancel(); task.request.cancelToken.cancel();
@ -234,7 +228,6 @@ class DownloadManager {
} }
Future<void> cancelDownload(String url) async { Future<void> cancelDownload(String url) async {
logger.d("[DownloadManager] Cancel Download");
var task = getDownload(url)!; var task = getDownload(url)!;
setStatus(task, DownloadStatus.canceled); setStatus(task, DownloadStatus.canceled);
_queue.remove(task.request); _queue.remove(task.request);
@ -242,7 +235,6 @@ class DownloadManager {
} }
Future<void> resumeDownload(String url) async { Future<void> resumeDownload(String url) async {
logger.d("[DownloadManager] Resume Download");
var task = getDownload(url)!; var task = getDownload(url)!;
setStatus(task, DownloadStatus.downloading); setStatus(task, DownloadStatus.downloading);
task.request.cancelToken = CancelToken(); task.request.cancelToken = CancelToken();
@ -405,7 +397,6 @@ class DownloadManager {
while (_queue.isNotEmpty && runningTasks < maxConcurrentTasks) { while (_queue.isNotEmpty && runningTasks < maxConcurrentTasks) {
runningTasks++; runningTasks++;
logger.d('Concurrent workers: $runningTasks');
var currentRequest = _queue.removeFirst(); var currentRequest = _queue.removeFirst();
await download( await download(

View File

@ -4,7 +4,7 @@ import 'package:html/dom.dart' hide Text;
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/modules/library/user_local_tracks.dart'; import 'package:spotube/modules/library/user_local_tracks.dart';
import 'package:spotube/modules/root/update_dialog.dart'; import 'package:spotube/modules/root/update_dialog.dart';
import 'package:spotube/models/logger.dart';
import 'package:spotube/models/lyrics.dart'; import 'package:spotube/models/lyrics.dart';
import 'package:spotube/provider/database/database.dart'; import 'package:spotube/provider/database/database.dart';
import 'package:spotube/services/dio/dio.dart'; import 'package:spotube/services/dio/dio.dart';
@ -24,8 +24,6 @@ import 'package:spotube/collections/env.dart';
import 'package:version/version.dart'; import 'package:version/version.dart';
abstract class ServiceUtils { abstract class ServiceUtils {
static final logger = getLogger("ServiceUtils");
static final _englishMatcherRegex = RegExp( static final _englishMatcherRegex = RegExp(
"^[a-zA-Z0-9\\s!\"#\$%&\\'()*+,-.\\/:;<=>?@\\[\\]^_`{|}~]*\$", "^[a-zA-Z0-9\\s!\"#\$%&\\'()*+,-.\\/:;<=>?@\\[\\]^_`{|}~]*\$",
); );
@ -194,8 +192,6 @@ abstract class ServiceUtils {
artists: artistNames, artists: artistNames,
); );
logger.v("[Searching Subtitle] $query");
final searchUri = Uri.parse("$baseUri/subtitles4songs.aspx").replace( final searchUri = Uri.parse("$baseUri/subtitles4songs.aspx").replace(
queryParameters: {"q": query}, queryParameters: {"q": query},
); );
@ -227,7 +223,6 @@ abstract class ServiceUtils {
// not result was found at all // not result was found at all
if (rateSortedResults.first["points"] == 0) { if (rateSortedResults.first["points"] == 0) {
logger.e("[Subtitle not found] ${track.name}");
return Future.error("Subtitle lookup failed", StackTrace.current); return Future.error("Subtitle lookup failed", StackTrace.current);
} }
@ -235,8 +230,6 @@ abstract class ServiceUtils {
final subtitleUri = final subtitleUri =
Uri.parse("$baseUri/${topResult.attributes["href"]}&type=lrc"); Uri.parse("$baseUri/${topResult.attributes["href"]}&type=lrc");
logger.v("[Selected subtitle] ${topResult.text} | $subtitleUri");
final lrcDocument = parser.parse((await globalDio.getUri( final lrcDocument = parser.parse((await globalDio.getUri(
subtitleUri, subtitleUri,
options: Options(responseType: ResponseType.plain), options: Options(responseType: ResponseType.plain),