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"