diff --git a/aur-struct/.SRCINFO b/aur-struct/.SRCINFO index f94159ca..0b59d626 100644 --- a/aur-struct/.SRCINFO +++ b/aur-struct/.SRCINFO @@ -1,5 +1,5 @@ pkgbase = spotube-bin - pkgdesc = A lightweight free Spotify crossplatform-client which handles playback manually, streams music using Youtube & no Spotify premium account is needed + pkgdesc = Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! pkgver = 2.3.0 pkgrel = 1 url = https://github.com/KRTirtho/spotube/ diff --git a/aur-struct/PKGBUILD b/aur-struct/PKGBUILD index 20a29b95..dd6575ea 100644 --- a/aur-struct/PKGBUILD +++ b/aur-struct/PKGBUILD @@ -3,7 +3,7 @@ pkgname=spotube-bin pkgver=%{{SPOTUBE_VERSION}}% pkgrel=%{{PKGREL}}% epoch= -pkgdesc="A lightweight free Spotify crossplatform-client which handles playback manually, streams music using Youtube & no Spotify premium account is needed" +pkgdesc="Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile!" arch=(x86_64) url="https://github.com/KRTirtho/spotube/" license=('BSD-4-Clause') diff --git a/choco-struct/spotube.nuspec b/choco-struct/spotube.nuspec index 0f09c391..dfc3a2e8 100644 --- a/choco-struct/spotube.nuspec +++ b/choco-struct/spotube.nuspec @@ -22,7 +22,7 @@ https://github.com/KRTirtho/spotube#readme https://github.com/KRTirtho/spotube/issues/new spotube music audio spotify youtube flutter - A lightweight free Spotify 🎧 crossplatform-client 🖥📱 which handles playback manually, streams music using Youtube & no Spotify premium account is needed 😱 + Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! Spotube is a Flutter based lightweight spotify client. It utilizes the power of Spotify & Youtube's public API & creates a hazardless, performant & resource diff --git a/lib/components/genre/category_card.dart b/lib/components/genre/category_card.dart index bcb5afc4..42654ed9 100644 --- a/lib/components/genre/category_card.dart +++ b/lib/components/genre/category_card.dart @@ -44,7 +44,7 @@ class CategoryCard extends HookConsumerWidget { children: [ Text( category.name!, - style: Theme.of(context).textTheme.titleLarge, + style: Theme.of(context).textTheme.titleMedium, ), ScrollConfiguration( behavior: ScrollConfiguration.of(context).copyWith( diff --git a/lib/components/library/user_playlists.dart b/lib/components/library/user_playlists.dart index d87a2da9..840dee3d 100644 --- a/lib/components/library/user_playlists.dart +++ b/lib/components/library/user_playlists.dart @@ -6,7 +6,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotify/spotify.dart'; import 'package:spotube/collections/spotube_icons.dart'; -import 'package:spotube/components/playlist/playlist_create_dialog.dart'; import 'package:spotube/components/shared/shimmers/shimmer_playbutton_card.dart'; import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart'; import 'package:spotube/components/playlist/playlist_card.dart'; @@ -34,6 +33,7 @@ class UserPlaylists extends HookConsumerWidget { final likedTracksPlaylist = useMemoized( () => PlaylistSimple() ..name = "Liked Tracks" + ..description = "All your liked tracks" ..type = "playlist" ..collaborative = false ..public = false @@ -75,42 +75,32 @@ class UserPlaylists extends HookConsumerWidget { return const AnonymousFallback(); } - final children = [ - const PlaylistCreateDialog(), - ...playlists.map((playlist) => PlaylistCard(playlist)).toList(), - ]; return RefreshIndicator( onRefresh: playlistsQuery.refresh, child: SingleChildScrollView( physics: const AlwaysScrollableScrollPhysics(), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: SafeArea( - child: Column( - children: [ - TextField( - onChanged: (value) => searchText.value = value, - decoration: const InputDecoration( - hintText: "Filter your playlists...", - prefixIcon: Icon(SpotubeIcons.filter), - ), + padding: const EdgeInsets.all(8.0), + child: SafeArea( + child: Column( + children: [ + TextField( + onChanged: (value) => searchText.value = value, + decoration: const InputDecoration( + hintText: "Filter your playlists...", + prefixIcon: Icon(SpotubeIcons.filter), ), - const SizedBox(height: 20), - if (playlistsQuery.isLoading || !playlistsQuery.hasData) - const Center(child: ShimmerPlaybuttonCard(count: 7)) - else - Center( - child: Wrap( - spacing: spacing, // gap between adjacent chips - runSpacing: 20, // gap between lines - alignment: breakpoint.isSm - ? WrapAlignment.center - : WrapAlignment.start, - children: children, - ), - ), - ], - ), + ), + const SizedBox(height: 20), + if (playlistsQuery.isLoading || !playlistsQuery.hasData) + const Center(child: ShimmerPlaybuttonCard(count: 7)) + else + Wrap( + runSpacing: 10, + children: playlists + .map((playlist) => PlaylistCard(playlist)) + .toList(), + ), + ], ), ), ), diff --git a/lib/components/playlist/playlist_card.dart b/lib/components/playlist/playlist_card.dart index 487bb401..50320df3 100644 --- a/lib/components/playlist/playlist_card.dart +++ b/lib/components/playlist/playlist_card.dart @@ -4,7 +4,6 @@ import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:spotify/spotify.dart'; import 'package:spotube/components/shared/playbutton_card.dart'; -import 'package:spotube/hooks/use_breakpoint_value.dart'; import 'package:spotube/provider/playlist_queue_provider.dart'; import 'package:spotube/provider/spotify_provider.dart'; import 'package:spotube/services/queries/queries.dart'; @@ -34,14 +33,11 @@ class PlaylistCard extends HookConsumerWidget { [playlistNotifier, tracks.value, query?.data], ); - final int marginH = - useBreakpointValue(sm: 10, md: 15, lg: 20, xl: 20, xxl: 20); - final updating = useState(false); final spotify = ref.watch(spotifyProvider); return PlaybuttonCard( - margin: EdgeInsets.symmetric(horizontal: marginH.toDouble()), + margin: const EdgeInsets.symmetric(horizontal: 10), title: playlist.name!, description: playlist.description, imageUrl: TypeConversionUtils.image_X_UrlString( diff --git a/lib/components/root/spotube_navigation_bar.dart b/lib/components/root/spotube_navigation_bar.dart index 8469c864..be9762a5 100644 --- a/lib/components/root/spotube_navigation_bar.dart +++ b/lib/components/root/spotube_navigation_bar.dart @@ -24,6 +24,7 @@ class SpotubeNavigationBar extends HookConsumerWidget { @override Widget build(BuildContext context, ref) { + final theme = Theme.of(context); final downloadCount = ref.watch( downloaderProvider.select((s) => s.currentlyRunning), ); @@ -34,8 +35,8 @@ class SpotubeNavigationBar extends HookConsumerWidget { final insideSelectedIndex = useState(selectedIndex); final buttonColor = useBrightnessValue( - Theme.of(context).colorScheme.inversePrimary, - Theme.of(context).colorScheme.primary.withOpacity(0.2), + theme.colorScheme.inversePrimary, + theme.colorScheme.primary.withOpacity(0.2), ); useEffect(() { @@ -51,12 +52,10 @@ class SpotubeNavigationBar extends HookConsumerWidget { child: BackdropFilter( filter: ImageFilter.blur(sigmaX: 15, sigmaY: 15), child: CurvedNavigationBar( - backgroundColor: Theme.of(context) - .colorScheme - .secondaryContainer - .withOpacity(0.72), + backgroundColor: + theme.colorScheme.secondaryContainer.withOpacity(0.72), buttonBackgroundColor: buttonColor, - color: Theme.of(context).colorScheme.background, + color: theme.colorScheme.background, height: 50, items: [ ...navbarTileList.map( @@ -64,18 +63,11 @@ class SpotubeNavigationBar extends HookConsumerWidget { return MouseRegion( cursor: SystemMouseCursors.click, child: Badge( - backgroundColor: Theme.of(context).primaryColor, isLabelVisible: e.title == "Library" && downloadCount > 0, - label: Text( - downloadCount.toString(), - style: const TextStyle( - color: Colors.white, - fontSize: 10, - ), - ), + label: Text(downloadCount.toString()), child: Icon( e.icon, - color: Theme.of(context).colorScheme.primary, + color: theme.colorScheme.primary, ), ), ); diff --git a/lib/components/shared/playbutton_card.dart b/lib/components/shared/playbutton_card.dart index aa604970..c36e1fe4 100644 --- a/lib/components/shared/playbutton_card.dart +++ b/lib/components/shared/playbutton_card.dart @@ -99,7 +99,7 @@ class PlaybuttonCard extends HookWidget { Positioned.directional( textDirection: TextDirection.ltr, end: end, - bottom: -5, + bottom: -size * .15, child: Column( mainAxisSize: MainAxisSize.min, children: [ diff --git a/lib/services/queries/category.dart b/lib/services/queries/category.dart index 04f4c2d3..b23436fc 100644 --- a/lib/services/queries/category.dart +++ b/lib/services/queries/category.dart @@ -15,7 +15,10 @@ class CategoryQueries { "category-playlists", (pageParam, spotify) async { final categories = await spotify.categories - .list(country: recommendationMarket) + .list( + country: recommendationMarket, + locale: 'en_US', + ) .getPage(15, pageParam); return categories; @@ -44,7 +47,7 @@ class CategoryQueries { (pageParam, spotify) async { final playlists = await Pages( spotify, - "v1/browse/categories/$category/playlists", + "v1/browse/categories/$category/playlists?country=US&locale=en_US", (json) => json == null ? null : PlaylistSimple.fromJson(json), 'playlists', (json) => PlaylistsFeatured.fromJson(json), diff --git a/linux/com.github.KRTirtho.Spotube.appdata.xml b/linux/com.github.KRTirtho.Spotube.appdata.xml index 5fde9939..9a9f94e5 100644 --- a/linux/com.github.KRTirtho.Spotube.appdata.xml +++ b/linux/com.github.KRTirtho.Spotube.appdata.xml @@ -3,8 +3,7 @@ com.github.KRTirtho.Spotube Spotube - A lightweight free Spotify crossplatform-client which handles playback manually, streams music - using Youtube & no Spotify premium account is needed + Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! CC0-1.0 BSD-4-Clause diff --git a/metadata/en-US/full_description.txt b/metadata/en-US/full_description.txt index 353eb3a5..228f7952 100644 --- a/metadata/en-US/full_description.txt +++ b/metadata/en-US/full_description.txt @@ -1,4 +1,4 @@ -A lightweight free Spotify crossplatform-client (desktop: Mac, Linux, Windows, mobile: Android) which handles playback manually, streams music using Youtube & no Spotify premium account is needed +Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! Features: diff --git a/pubspec.yaml b/pubspec.yaml index c65e0abb..b94489fd 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,5 @@ name: spotube -description: A lightweight free Spotify crossplatform-client which handles - playback manually, streams music using Youtube & no Spotify premium account is - needed +description: Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile! publish_to: "none"