chore: update app summary

This commit is contained in:
Kingkor Roy Tirtho 2023-03-12 09:20:22 +06:00
parent eeb8cabf49
commit dcdb16676d
12 changed files with 44 additions and 66 deletions

View File

@ -1,5 +1,5 @@
pkgbase = spotube-bin 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 pkgver = 2.3.0
pkgrel = 1 pkgrel = 1
url = https://github.com/KRTirtho/spotube/ url = https://github.com/KRTirtho/spotube/

View File

@ -3,7 +3,7 @@ pkgname=spotube-bin
pkgver=%{{SPOTUBE_VERSION}}% pkgver=%{{SPOTUBE_VERSION}}%
pkgrel=%{{PKGREL}}% pkgrel=%{{PKGREL}}%
epoch= 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) arch=(x86_64)
url="https://github.com/KRTirtho/spotube/" url="https://github.com/KRTirtho/spotube/"
license=('BSD-4-Clause') license=('BSD-4-Clause')

View File

@ -22,7 +22,7 @@
<docsUrl>https://github.com/KRTirtho/spotube#readme</docsUrl> <docsUrl>https://github.com/KRTirtho/spotube#readme</docsUrl>
<bugTrackerUrl>https://github.com/KRTirtho/spotube/issues/new</bugTrackerUrl> <bugTrackerUrl>https://github.com/KRTirtho/spotube/issues/new</bugTrackerUrl>
<tags>spotube music audio spotify youtube flutter</tags> <tags>spotube music audio spotify youtube flutter</tags>
<summary>A lightweight free Spotify 🎧 crossplatform-client 🖥📱 which handles playback manually, streams music using Youtube &amp; no Spotify premium account is needed 😱</summary> <summary>Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop &amp; mobile!</summary>
<description> <description>
Spotube is a Flutter based lightweight spotify client. It utilizes the power Spotube is a Flutter based lightweight spotify client. It utilizes the power
of Spotify &amp; Youtube's public API &amp; creates a hazardless, performant &amp; resource of Spotify &amp; Youtube's public API &amp; creates a hazardless, performant &amp; resource

View File

@ -44,7 +44,7 @@ class CategoryCard extends HookConsumerWidget {
children: [ children: [
Text( Text(
category.name!, category.name!,
style: Theme.of(context).textTheme.titleLarge, style: Theme.of(context).textTheme.titleMedium,
), ),
ScrollConfiguration( ScrollConfiguration(
behavior: ScrollConfiguration.of(context).copyWith( behavior: ScrollConfiguration.of(context).copyWith(

View File

@ -6,7 +6,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/collections/spotube_icons.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/shimmers/shimmer_playbutton_card.dart';
import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart'; import 'package:spotube/components/shared/fallbacks/anonymous_fallback.dart';
import 'package:spotube/components/playlist/playlist_card.dart'; import 'package:spotube/components/playlist/playlist_card.dart';
@ -34,6 +33,7 @@ class UserPlaylists extends HookConsumerWidget {
final likedTracksPlaylist = useMemoized( final likedTracksPlaylist = useMemoized(
() => PlaylistSimple() () => PlaylistSimple()
..name = "Liked Tracks" ..name = "Liked Tracks"
..description = "All your liked tracks"
..type = "playlist" ..type = "playlist"
..collaborative = false ..collaborative = false
..public = false ..public = false
@ -75,15 +75,10 @@ class UserPlaylists extends HookConsumerWidget {
return const AnonymousFallback(); return const AnonymousFallback();
} }
final children = [
const PlaylistCreateDialog(),
...playlists.map((playlist) => PlaylistCard(playlist)).toList(),
];
return RefreshIndicator( return RefreshIndicator(
onRefresh: playlistsQuery.refresh, onRefresh: playlistsQuery.refresh,
child: SingleChildScrollView( child: SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(), physics: const AlwaysScrollableScrollPhysics(),
child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: SafeArea( child: SafeArea(
child: Column( child: Column(
@ -99,21 +94,16 @@ class UserPlaylists extends HookConsumerWidget {
if (playlistsQuery.isLoading || !playlistsQuery.hasData) if (playlistsQuery.isLoading || !playlistsQuery.hasData)
const Center(child: ShimmerPlaybuttonCard(count: 7)) const Center(child: ShimmerPlaybuttonCard(count: 7))
else else
Center( Wrap(
child: Wrap( runSpacing: 10,
spacing: spacing, // gap between adjacent chips children: playlists
runSpacing: 20, // gap between lines .map((playlist) => PlaylistCard(playlist))
alignment: breakpoint.isSm .toList(),
? WrapAlignment.center
: WrapAlignment.start,
children: children,
),
), ),
], ],
), ),
), ),
), ),
),
); );
} }
} }

View File

@ -4,7 +4,6 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:spotify/spotify.dart'; import 'package:spotify/spotify.dart';
import 'package:spotube/components/shared/playbutton_card.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/playlist_queue_provider.dart';
import 'package:spotube/provider/spotify_provider.dart'; import 'package:spotube/provider/spotify_provider.dart';
import 'package:spotube/services/queries/queries.dart'; import 'package:spotube/services/queries/queries.dart';
@ -34,14 +33,11 @@ class PlaylistCard extends HookConsumerWidget {
[playlistNotifier, tracks.value, query?.data], [playlistNotifier, tracks.value, query?.data],
); );
final int marginH =
useBreakpointValue(sm: 10, md: 15, lg: 20, xl: 20, xxl: 20);
final updating = useState(false); final updating = useState(false);
final spotify = ref.watch(spotifyProvider); final spotify = ref.watch(spotifyProvider);
return PlaybuttonCard( return PlaybuttonCard(
margin: EdgeInsets.symmetric(horizontal: marginH.toDouble()), margin: const EdgeInsets.symmetric(horizontal: 10),
title: playlist.name!, title: playlist.name!,
description: playlist.description, description: playlist.description,
imageUrl: TypeConversionUtils.image_X_UrlString( imageUrl: TypeConversionUtils.image_X_UrlString(

View File

@ -24,6 +24,7 @@ class SpotubeNavigationBar extends HookConsumerWidget {
@override @override
Widget build(BuildContext context, ref) { Widget build(BuildContext context, ref) {
final theme = Theme.of(context);
final downloadCount = ref.watch( final downloadCount = ref.watch(
downloaderProvider.select((s) => s.currentlyRunning), downloaderProvider.select((s) => s.currentlyRunning),
); );
@ -34,8 +35,8 @@ class SpotubeNavigationBar extends HookConsumerWidget {
final insideSelectedIndex = useState<int>(selectedIndex); final insideSelectedIndex = useState<int>(selectedIndex);
final buttonColor = useBrightnessValue( final buttonColor = useBrightnessValue(
Theme.of(context).colorScheme.inversePrimary, theme.colorScheme.inversePrimary,
Theme.of(context).colorScheme.primary.withOpacity(0.2), theme.colorScheme.primary.withOpacity(0.2),
); );
useEffect(() { useEffect(() {
@ -51,12 +52,10 @@ class SpotubeNavigationBar extends HookConsumerWidget {
child: BackdropFilter( child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 15, sigmaY: 15), filter: ImageFilter.blur(sigmaX: 15, sigmaY: 15),
child: CurvedNavigationBar( child: CurvedNavigationBar(
backgroundColor: Theme.of(context) backgroundColor:
.colorScheme theme.colorScheme.secondaryContainer.withOpacity(0.72),
.secondaryContainer
.withOpacity(0.72),
buttonBackgroundColor: buttonColor, buttonBackgroundColor: buttonColor,
color: Theme.of(context).colorScheme.background, color: theme.colorScheme.background,
height: 50, height: 50,
items: [ items: [
...navbarTileList.map( ...navbarTileList.map(
@ -64,18 +63,11 @@ class SpotubeNavigationBar extends HookConsumerWidget {
return MouseRegion( return MouseRegion(
cursor: SystemMouseCursors.click, cursor: SystemMouseCursors.click,
child: Badge( child: Badge(
backgroundColor: Theme.of(context).primaryColor,
isLabelVisible: e.title == "Library" && downloadCount > 0, isLabelVisible: e.title == "Library" && downloadCount > 0,
label: Text( label: Text(downloadCount.toString()),
downloadCount.toString(),
style: const TextStyle(
color: Colors.white,
fontSize: 10,
),
),
child: Icon( child: Icon(
e.icon, e.icon,
color: Theme.of(context).colorScheme.primary, color: theme.colorScheme.primary,
), ),
), ),
); );

View File

@ -99,7 +99,7 @@ class PlaybuttonCard extends HookWidget {
Positioned.directional( Positioned.directional(
textDirection: TextDirection.ltr, textDirection: TextDirection.ltr,
end: end, end: end,
bottom: -5, bottom: -size * .15,
child: Column( child: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [

View File

@ -15,7 +15,10 @@ class CategoryQueries {
"category-playlists", "category-playlists",
(pageParam, spotify) async { (pageParam, spotify) async {
final categories = await spotify.categories final categories = await spotify.categories
.list(country: recommendationMarket) .list(
country: recommendationMarket,
locale: 'en_US',
)
.getPage(15, pageParam); .getPage(15, pageParam);
return categories; return categories;
@ -44,7 +47,7 @@ class CategoryQueries {
(pageParam, spotify) async { (pageParam, spotify) async {
final playlists = await Pages<PlaylistSimple?>( final playlists = await Pages<PlaylistSimple?>(
spotify, spotify,
"v1/browse/categories/$category/playlists", "v1/browse/categories/$category/playlists?country=US&locale=en_US",
(json) => json == null ? null : PlaylistSimple.fromJson(json), (json) => json == null ? null : PlaylistSimple.fromJson(json),
'playlists', 'playlists',
(json) => PlaylistsFeatured.fromJson(json), (json) => PlaylistsFeatured.fromJson(json),

View File

@ -3,8 +3,7 @@
<id>com.github.KRTirtho.Spotube</id> <id>com.github.KRTirtho.Spotube</id>
<name>Spotube</name> <name>Spotube</name>
<summary> <summary>
A lightweight free Spotify crossplatform-client which handles playback manually, streams music Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop &amp; mobile!
using Youtube &amp; no Spotify premium account is needed
</summary> </summary>
<metadata_license>CC0-1.0</metadata_license> <metadata_license>CC0-1.0</metadata_license>
<project_license>BSD-4-Clause</project_license> <project_license>BSD-4-Clause</project_license>

View File

@ -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: Features:

View File

@ -1,7 +1,5 @@
name: spotube name: spotube
description: A lightweight free Spotify crossplatform-client which handles description: Open source Spotify client that doesn't require Premium nor uses Electron! Available for both desktop & mobile!
playback manually, streams music using Youtube & no Spotify premium account is
needed
publish_to: "none" publish_to: "none"