From f69ebda850de4a61a58aa6778edfc495c4e751ee Mon Sep 17 00:00:00 2001 From: Valeri Gokadze Date: Mon, 31 Mar 2025 22:58:44 +0400 Subject: [PATCH] refactor: move playlist validators into utils --- lib/API/musify.dart | 21 ++------------------- lib/utilities/utils.dart | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/lib/API/musify.dart b/lib/API/musify.dart index b3e77a5e..12b6e258 100644 --- a/lib/API/musify.dart +++ b/lib/API/musify.dart @@ -36,6 +36,7 @@ import 'package:musify/services/lyrics_manager.dart'; import 'package:musify/services/settings_manager.dart'; import 'package:musify/utilities/flutter_toast.dart'; import 'package:musify/utilities/formatter.dart'; +import 'package:musify/utilities/utils.dart'; import 'package:youtube_explode_dart/youtube_explode_dart.dart'; final _yt = YoutubeExplode(); @@ -200,29 +201,11 @@ Future> getUserPlaylists() async { return playlistsByUser; } -bool youtubeValidate(String url) { - final regExp = RegExp( - r'^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.be)\/.*(list=([a-zA-Z0-9_-]+)).*$', - ); - return regExp.hasMatch(url); -} - -String? youtubePlaylistParser(String url) { - if (!youtubeValidate(url)) { - return null; - } - - final regExp = RegExp('[&?]list=([a-zA-Z0-9_-]+)'); - final match = regExp.firstMatch(url); - - return match?.group(1); -} - Future addUserPlaylist(String input, BuildContext context) async { String? playlistId = input; if (input.startsWith('http://') || input.startsWith('https://')) { - playlistId = youtubePlaylistParser(input); + playlistId = extractYoutubePlaylistId(input); if (playlistId == null) { return '${context.l10n!.notYTlist}!'; diff --git a/lib/utilities/utils.dart b/lib/utilities/utils.dart index be735ffd..f14d13b3 100644 --- a/lib/utilities/utils.dart +++ b/lib/utilities/utils.dart @@ -47,3 +47,23 @@ Locale getLocaleFromLanguageCode(String? languageCode) { // Default fallback return const Locale('en'); } + +/// Validates if a URL is a YouTube playlist URL +bool isYoutubePlaylistUrl(String url) { + final playlistRegExp = RegExp( + r'^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.be)\/.*(list=([a-zA-Z0-9_-]+)).*$', + ); + return playlistRegExp.hasMatch(url); +} + +/// Extracts the playlist ID from a YouTube playlist URL +String? extractYoutubePlaylistId(String url) { + if (!isYoutubePlaylistUrl(url)) { + return null; + } + + final playlistIdRegExp = RegExp('[&?]list=([a-zA-Z0-9_-]+)'); + final match = playlistIdRegExp.firstMatch(url); + + return match?.group(1); +}