🐛 Bug fixes of querying backend
This commit is contained in:
parent
499bca5b1c
commit
222d50d80d
@ -2,6 +2,8 @@
|
|||||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
<plist version="1.0">
|
<plist version="1.0">
|
||||||
<dict>
|
<dict>
|
||||||
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
|
<false/>
|
||||||
<key>CADisableMinimumFrameDurationOnPhone</key>
|
<key>CADisableMinimumFrameDurationOnPhone</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>CFBundleDevelopmentRegion</key>
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
@ -82,7 +82,8 @@ class _PlayerScreenState extends State<PlayerScreen> {
|
|||||||
padding: const EdgeInsets.symmetric(vertical: 24),
|
padding: const EdgeInsets.symmetric(vertical: 24),
|
||||||
children: [
|
children: [
|
||||||
Obx(
|
Obx(
|
||||||
() => LimitedBox(
|
() => Center(
|
||||||
|
child: LimitedBox(
|
||||||
maxHeight: maxAlbumSize,
|
maxHeight: maxAlbumSize,
|
||||||
maxWidth: maxAlbumSize,
|
maxWidth: maxAlbumSize,
|
||||||
child: Hero(
|
child: Hero(
|
||||||
@ -90,13 +91,15 @@ class _PlayerScreenState extends State<PlayerScreen> {
|
|||||||
child: AspectRatio(
|
child: AspectRatio(
|
||||||
aspectRatio: 1,
|
aspectRatio: 1,
|
||||||
child: ClipRRect(
|
child: ClipRRect(
|
||||||
borderRadius:
|
borderRadius: const BorderRadius.all(
|
||||||
const BorderRadius.all(Radius.circular(16)),
|
Radius.circular(16),
|
||||||
|
),
|
||||||
child: _albumArt != null
|
child: _albumArt != null
|
||||||
? AutoCacheImage(
|
? AutoCacheImage(
|
||||||
_albumArt!,
|
_albumArt!,
|
||||||
width: albumSize,
|
width: albumSize,
|
||||||
height: albumSize,
|
height: albumSize,
|
||||||
|
fit: BoxFit.cover,
|
||||||
)
|
)
|
||||||
: Container(
|
: Container(
|
||||||
color: Theme.of(context)
|
color: Theme.of(context)
|
||||||
@ -113,6 +116,7 @@ class _PlayerScreenState extends State<PlayerScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
),
|
||||||
const Gap(24),
|
const Gap(24),
|
||||||
Obx(
|
Obx(
|
||||||
() => Row(
|
() => Row(
|
||||||
|
@ -167,8 +167,11 @@ class NeteaseSourcedTrack extends SourcedTrack {
|
|||||||
final query = SourcedTrack.getSearchTerm(track);
|
final query = SourcedTrack.getSearchTerm(track);
|
||||||
|
|
||||||
final client = getClient();
|
final client = getClient();
|
||||||
final resp =
|
final resp = await client.get(
|
||||||
await client.get('/search?keywords=${Uri.encodeComponent(query)}');
|
'/search?keywords=${Uri.encodeComponent(query)}&realIP=${NeteaseSourcedTrack.lookupRealIp()}',
|
||||||
|
);
|
||||||
|
if (resp.body?['code'] == 405) throw TrackNotFoundError(track);
|
||||||
|
print(resp.body);
|
||||||
final results = resp.body['result']['songs'];
|
final results = resp.body['result']['songs'];
|
||||||
|
|
||||||
// We can just trust netease music for now
|
// We can just trust netease music for now
|
||||||
@ -239,11 +242,10 @@ class NeteaseSourcedTrack extends SourcedTrack {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static SiblingType toSiblingType(dynamic item) {
|
static NeteaseSourceInfo toSourceInfo(dynamic item) {
|
||||||
final firstArtist = item['ar'] != null ? item['ar'][0] : item['artists'][0];
|
final firstArtist = item['ar'] != null ? item['ar'][0] : item['artists'][0];
|
||||||
|
|
||||||
final SiblingType sibling = (
|
return NeteaseSourceInfo(
|
||||||
info: NeteaseSourceInfo(
|
|
||||||
id: item['id'].toString(),
|
id: item['id'].toString(),
|
||||||
artist: item['ar'] != null
|
artist: item['ar'] != null
|
||||||
? item['ar'].map((x) => x['name']).join(',')
|
? item['ar'].map((x) => x['name']).join(',')
|
||||||
@ -257,7 +259,12 @@ class NeteaseSourcedTrack extends SourcedTrack {
|
|||||||
? Duration(milliseconds: item['dt'])
|
? Duration(milliseconds: item['dt'])
|
||||||
: Duration(milliseconds: item['duration']),
|
: Duration(milliseconds: item['duration']),
|
||||||
album: item['al']?['name'],
|
album: item['al']?['name'],
|
||||||
),
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static SiblingType toSiblingType(dynamic item) {
|
||||||
|
final SiblingType sibling = (
|
||||||
|
info: toSourceInfo(item),
|
||||||
source: toSourceMap(item),
|
source: toSourceMap(item),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -69,6 +69,7 @@ class YoutubeSourcedTrack extends SourcedTrack {
|
|||||||
sourceId: siblings.first.info.id,
|
sourceId: siblings.first.info.id,
|
||||||
sourceType: const Value(SourceType.youtube),
|
sourceType: const Value(SourceType.youtube),
|
||||||
),
|
),
|
||||||
|
mode: InsertMode.insertOrReplace,
|
||||||
);
|
);
|
||||||
|
|
||||||
return YoutubeSourcedTrack(
|
return YoutubeSourcedTrack(
|
||||||
|
@ -5,8 +5,10 @@ import 'package:rhythm_box/platform.dart';
|
|||||||
class AutoCacheImage extends StatelessWidget {
|
class AutoCacheImage extends StatelessWidget {
|
||||||
final String url;
|
final String url;
|
||||||
final double? width, height;
|
final double? width, height;
|
||||||
|
final BoxFit? fit;
|
||||||
|
|
||||||
const AutoCacheImage(this.url, {super.key, this.width, this.height});
|
const AutoCacheImage(this.url,
|
||||||
|
{super.key, this.width, this.height, this.fit});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -15,12 +17,14 @@ class AutoCacheImage extends StatelessWidget {
|
|||||||
imageUrl: url,
|
imageUrl: url,
|
||||||
width: width,
|
width: width,
|
||||||
height: height,
|
height: height,
|
||||||
|
fit: fit,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return Image.network(
|
return Image.network(
|
||||||
url,
|
url,
|
||||||
width: width,
|
width: width,
|
||||||
height: height,
|
height: height,
|
||||||
|
fit: fit,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -116,11 +116,10 @@ class _SiblingTracksState extends State<SiblingTracks> {
|
|||||||
);
|
);
|
||||||
} else if (preferences.audioSource == AudioSource.netease) {
|
} else if (preferences.audioSource == AudioSource.netease) {
|
||||||
final client = NeteaseSourcedTrack.getClient();
|
final client = NeteaseSourcedTrack.getClient();
|
||||||
final resp = await client
|
final resp = await client.get(
|
||||||
.get('/search?keywords=${Uri.encodeComponent(searchTerm)}');
|
'/search?keywords=${Uri.encodeComponent(searchTerm)}&realIP=${NeteaseSourcedTrack.lookupRealIp()}');
|
||||||
final searchResults = resp.body['result']['songs']
|
final searchResults = resp.body['result']['songs']
|
||||||
.map(NeteaseSourcedTrack.toSiblingType)
|
.map(NeteaseSourcedTrack.toSourceInfo)
|
||||||
.map((x) => x.info)
|
|
||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
final activeSourceInfo = (_activeTrack! as SourcedTrack).sourceInfo;
|
final activeSourceInfo = (_activeTrack! as SourcedTrack).sourceInfo;
|
||||||
|
@ -28,6 +28,8 @@
|
|||||||
<string>MainMenu</string>
|
<string>MainMenu</string>
|
||||||
<key>LSApplicationCategoryType</key>
|
<key>LSApplicationCategoryType</key>
|
||||||
<string>public.app-category.music</string>
|
<string>public.app-category.music</string>
|
||||||
|
<key>ITSAppUsesNonExemptEncryption</key>
|
||||||
|
<false/>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
<string>NSApplication</string>
|
<string>NSApplication</string>
|
||||||
</dict>
|
</dict>
|
||||||
|
Loading…
Reference in New Issue
Block a user