diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..ad8dfa872 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +POCKETBASE_URL= +USERNAME= +PASSWORD= \ No newline at end of file diff --git a/README.md b/README.md index 5b51d7855..14ac5697f 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,3 @@ - -# 🚨 DO NOT INSTALL Spotube FROM `PLAY STORE` -## There's an unofficial + `illegal` clone/copycat of Spotube available on `Play Store` that is full of malware, ads and trackers. To help take down this illegal copycat/clone, please FOLLOW THIS GUIDE : [wiki/Report-Spotube-Copycat-on-PlayStore](https://github.com/KRTirtho/spotube/wiki/Report-Spotube-Copycat-on-Playstore) - -Follow this issue thread to get updates on the progress of the legal action against the illegal copycat/clone: https://github.com/KRTirtho/spotube/issues/448 - -

Spotube Logo

diff --git a/lib/collections/routes.dart b/lib/collections/routes.dart index 353d4e5c8..3b0dfccf8 100644 --- a/lib/collections/routes.dart +++ b/lib/collections/routes.dart @@ -17,7 +17,6 @@ import 'package:spotube/pages/lyrics/lyrics.dart'; import 'package:spotube/pages/player/player.dart'; import 'package:spotube/pages/playlist/playlist.dart'; import 'package:spotube/pages/root/root_app.dart'; -// import 'package:spotube/pages/search/search.dart'; import 'package:spotube/pages/settings/settings.dart'; import 'package:spotube/pages/mobile_login/mobile_login.dart'; diff --git a/lib/components/library/user_local_tracks.dart b/lib/components/library/user_local_tracks.dart index 65778fce0..bd0df9a43 100644 --- a/lib/components/library/user_local_tracks.dart +++ b/lib/components/library/user_local_tracks.dart @@ -77,18 +77,18 @@ final localTracksProvider = FutureProvider>((ref) async { }).map( (f) async { try { - final metadata = await MetadataGod.getMetadata(f.path); + final metadata = await MetadataGod.readMetadata(file: f.path); final imageFile = File(join( (await getTemporaryDirectory()).path, "spotube", basenameWithoutExtension(f.path) + - imgMimeToExt[metadata?.picture?.mimeType ?? "image/jpeg"]!, + imgMimeToExt[metadata.picture?.mimeType ?? "image/jpeg"]!, )); - if (!await imageFile.exists() && metadata?.picture != null) { + if (!await imageFile.exists() && metadata.picture != null) { await imageFile.create(recursive: true); await imageFile.writeAsBytes( - metadata?.picture?.data ?? [], + metadata.picture?.data ?? [], mode: FileMode.writeOnly, ); } diff --git a/lib/main.dart b/lib/main.dart index 92a72c1ea..01787e8b0 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -10,6 +10,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:metadata_god/metadata_god.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:spotube/collections/cache_keys.dart'; @@ -69,6 +70,7 @@ void main(List rawArgs) async { WidgetsFlutterBinding.ensureInitialized(); await SystemTheme.accentColor.load(); + MetadataGod.initialize(); await QueryClient.initialize(cachePrefix: "oss.krtirtho.spotube"); Hive.registerAdapter(CacheTrackAdapter()); Hive.registerAdapter(CacheTrackEngagementAdapter()); diff --git a/lib/provider/downloader_provider.dart b/lib/provider/downloader_provider.dart index eeceacb95..c12ec6447 100644 --- a/lib/provider/downloader_provider.dart +++ b/lib/provider/downloader_provider.dart @@ -108,8 +108,8 @@ class Downloader with ChangeNotifier { final response = await get(Uri.parse(imageUri)); await MetadataGod.writeMetadata( - file.path, - Metadata( + file: file.path, + metadata: Metadata( title: track.name, artist: track.artists?.map((a) => a.name).join(", "), album: track.album?.name, @@ -123,7 +123,7 @@ class Downloader with ChangeNotifier { fileSize: file.lengthSync(), trackTotal: track.album?.tracks?.length, picture: response.headers['content-type'] != null - ? Image( + ? Picture( data: response.bodyBytes, mimeType: response.headers['content-type']!, ) diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index f0ef6709e..27cb2b9c9 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -22,9 +21,6 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) catcher_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "CatcherPlugin"); catcher_plugin_register_with_registrar(catcher_registrar); - g_autoptr(FlPluginRegistrar) metadata_god_registrar = - fl_plugin_registry_get_registrar_for_plugin(registry, "MetadataGodPlugin"); - metadata_god_plugin_register_with_registrar(metadata_god_registrar); g_autoptr(FlPluginRegistrar) screen_retriever_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "ScreenRetrieverPlugin"); screen_retriever_plugin_register_with_registrar(screen_retriever_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index d47b37c9d..0ca5171f1 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -5,7 +5,6 @@ list(APPEND FLUTTER_PLUGIN_LIST audioplayers_linux catcher - metadata_god screen_retriever system_theme url_launcher_linux @@ -14,6 +13,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST + metadata_god ) set(PLUGIN_BUNDLED_LIBRARIES) diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 57de7f06f..3605b2f78 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -10,7 +10,6 @@ import audio_session import audioplayers_darwin import catcher import device_info_plus -import metadata_god import package_info_plus import path_provider_foundation import screen_retriever @@ -27,7 +26,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin")) CatcherPlugin.register(with: registry.registrar(forPlugin: "CatcherPlugin")) DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin")) - MetadataGodPlugin.register(with: registry.registrar(forPlugin: "MetadataGodPlugin")) FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin")) PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) ScreenRetrieverPlugin.register(with: registry.registrar(forPlugin: "ScreenRetrieverPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 97589595d..8f06a2b43 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -699,10 +699,10 @@ packages: dependency: transitive description: name: flutter_rust_bridge - sha256: aedbf045f72c7ed778d1cfc8bff0ceae28519d258e3f477abd70ce375ae8cdda + sha256: "34f5becca2df35955b2ec5e875349028ea609a826de7aade4de80534cf876b27" url: "https://pub.dev" source: hosted - version: "1.62.1" + version: "1.72.1" flutter_svg: dependency: "direct main" description: @@ -965,10 +965,10 @@ packages: dependency: "direct main" description: name: metadata_god - sha256: a2a54285d363f15baa261abc16eb5f1b95397c7838a29c9c98d2a684e6fe052c + sha256: "02de939fc2dcfdc959ed34768eecc97038b6e95ebaa3415f9f7582d71a2ad047" url: "https://pub.dev" source: hosted - version: "0.3.2" + version: "0.4.1" mime: dependency: "direct main" description: @@ -1777,5 +1777,5 @@ packages: source: hosted version: "1.12.3" sdks: - dart: ">=2.19.0 <3.0.0" - flutter: ">=3.3.0" + dart: ">=2.19.2 <3.0.0" + flutter: ">=3.7.0" diff --git a/pubspec.yaml b/pubspec.yaml index 5d009fda2..294373b04 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -49,7 +49,7 @@ dependencies: json_annotation: ^4.8.0 json_serializable: ^6.6.0 logger: ^1.1.0 - metadata_god: ^0.3.2 + metadata_god: ^0.4.1 mime: ^1.0.2 package_info_plus: ^3.0.2 palette_generator: ^0.3.3 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index b6e567c05..68536c15e 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -8,7 +8,6 @@ #include #include -#include #include #include #include @@ -21,8 +20,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin")); CatcherPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("CatcherPlugin")); - MetadataGodPluginCApiRegisterWithRegistrar( - registry->GetRegistrarForPlugin("MetadataGodPluginCApi")); PermissionHandlerWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("PermissionHandlerWindowsPlugin")); ScreenRetrieverPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 2a1df701e..1fc23cc85 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -5,7 +5,6 @@ list(APPEND FLUTTER_PLUGIN_LIST audioplayers_windows catcher - metadata_god permission_handler_windows screen_retriever system_theme @@ -15,6 +14,7 @@ list(APPEND FLUTTER_PLUGIN_LIST ) list(APPEND FLUTTER_FFI_PLUGIN_LIST + metadata_god ) set(PLUGIN_BUNDLED_LIBRARIES)