diff --git a/lib/provider/download_manager_provider.dart b/lib/provider/download_manager_provider.dart index b5c4a0e75..66a2b30d0 100644 --- a/lib/provider/download_manager_provider.dart +++ b/lib/provider/download_manager_provider.dart @@ -14,6 +14,7 @@ import 'package:spotube/provider/user_preferences_provider.dart'; import 'package:spotube/provider/youtube_provider.dart'; import 'package:spotube/services/download_manager/download_manager.dart'; import 'package:spotube/services/youtube/youtube.dart'; +import 'package:spotube/utils/primitive_utils.dart'; import 'package:spotube/utils/type_conversion_utils.dart'; class DownloadManagerProvider extends ChangeNotifier { @@ -130,7 +131,7 @@ class DownloadManagerProvider extends ChangeNotifier { String getTrackFileUrl(Track track) { final name = "${track.name} - ${TypeConversionUtils.artists_X_String(track.artists ?? [])}.m4a"; - return join(downloadDirectory, name); + return join(downloadDirectory, PrimitiveUtils.toSafeFileName(name)); } bool isActive(Track track) { diff --git a/lib/utils/primitive_utils.dart b/lib/utils/primitive_utils.dart index 2298f14f5..a0e54430c 100644 --- a/lib/utils/primitive_utils.dart +++ b/lib/utils/primitive_utils.dart @@ -57,4 +57,8 @@ abstract class PrimitiveUtils { }), ); } + + static String toSafeFileName(String str) { + return str.replaceAll(RegExp(r'[^\w\s\.\-_]'), "_"); + } } diff --git a/pubspec.lock b/pubspec.lock index 0e2986161..6aa7b9cb5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -1090,10 +1090,10 @@ packages: dependency: "direct main" description: name: media_kit_libs_android_audio - sha256: "767a93c44da73b7103a1fcbe2346f7211b7c44fa727f359410e690a156f630c5" + sha256: f16e67d4c5a85cb603290da253456bc8ea3d85d932c778e3afd11195db2dc26d url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" media_kit_libs_ios_audio: dependency: "direct main" description: