mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
fix: local track not working and images of local not showing up
This commit is contained in:
parent
c615d48e27
commit
5add53e269
@ -74,6 +74,7 @@ class TrackTile extends HookConsumerWidget {
|
|||||||
|
|
||||||
final isSelected = isPlaying || isLoading.value;
|
final isSelected = isPlaying || isLoading.value;
|
||||||
|
|
||||||
|
print('track.album.images: ${track.album.images}');
|
||||||
final imageProvider = useMemoized(
|
final imageProvider = useMemoized(
|
||||||
() => UniversalImage.imageProvider(
|
() => UniversalImage.imageProvider(
|
||||||
(track.album.images).smallest(ImagePlaceholder.albumArt),
|
(track.album.images).smallest(ImagePlaceholder.albumArt),
|
||||||
|
@ -60,6 +60,14 @@ class SpotubeTrackObject with _$SpotubeTrackObject {
|
|||||||
],
|
],
|
||||||
releaseDate:
|
releaseDate:
|
||||||
metadata?.year != null ? "${metadata!.year}-01-01" : "1970-01-01",
|
metadata?.year != null ? "${metadata!.year}-01-01" : "1970-01-01",
|
||||||
|
images: [
|
||||||
|
if (art != null)
|
||||||
|
SpotubeImageObject(
|
||||||
|
url: art,
|
||||||
|
width: 300,
|
||||||
|
height: 300,
|
||||||
|
),
|
||||||
|
],
|
||||||
),
|
),
|
||||||
durationMs: metadata?.durationMs?.toInt() ?? 0,
|
durationMs: metadata?.durationMs?.toInt() ?? 0,
|
||||||
path: file.path,
|
path: file.path,
|
||||||
|
@ -39,8 +39,9 @@ class TrackSourceQuery with _$TrackSourceQuery {
|
|||||||
/// Parses [SpotubeMedia]'s [uri] property to create a [TrackSourceQuery].
|
/// Parses [SpotubeMedia]'s [uri] property to create a [TrackSourceQuery].
|
||||||
factory TrackSourceQuery.parseUri(String url) {
|
factory TrackSourceQuery.parseUri(String url) {
|
||||||
final uri = Uri.parse(url);
|
final uri = Uri.parse(url);
|
||||||
|
final isLocal = uri.queryParameters.isEmpty;
|
||||||
return TrackSourceQuery(
|
return TrackSourceQuery(
|
||||||
id: uri.pathSegments.last,
|
id: isLocal ? uri.path : uri.pathSegments.last,
|
||||||
title: uri.queryParameters['title'] ?? '',
|
title: uri.queryParameters['title'] ?? '',
|
||||||
artists: uri.queryParameters['artists']?.split(',') ?? [],
|
artists: uri.queryParameters['artists']?.split(',') ?? [],
|
||||||
album: uri.queryParameters['album'] ?? '',
|
album: uri.queryParameters['album'] ?? '',
|
||||||
|
@ -11,10 +11,15 @@ final queryingTrackInfoProvider = Provider<bool>((ref) {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (audioPlayer.activeTrack is! SpotubeFullTrackObject) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
return ref
|
return ref
|
||||||
.watch(trackSourcesProvider(
|
.watch(trackSourcesProvider(
|
||||||
TrackSourceQuery.fromTrack(
|
TrackSourceQuery.fromTrack(
|
||||||
audioPlayer.activeTrack! as SpotubeFullTrackObject),
|
audioPlayer.activeTrack! as SpotubeFullTrackObject,
|
||||||
|
),
|
||||||
))
|
))
|
||||||
.isLoading;
|
.isLoading;
|
||||||
});
|
});
|
||||||
|
@ -80,13 +80,16 @@ Future<void> _sendActiveTrack(SpotubeTrackObject? track) async {
|
|||||||
|
|
||||||
final jsonTrack = track.toJson();
|
final jsonTrack = track.toJson();
|
||||||
|
|
||||||
final image = track.album?.images.first;
|
final image = track.album.images.firstOrNull;
|
||||||
final cachedImage = await DefaultCacheManager().getSingleFile(image!.url);
|
final cachedImage = image == null
|
||||||
|
? null
|
||||||
|
: await DefaultCacheManager().getSingleFile(image.url);
|
||||||
final data = {
|
final data = {
|
||||||
...jsonTrack,
|
...jsonTrack,
|
||||||
"album": {
|
"album": {
|
||||||
...jsonTrack["album"],
|
...jsonTrack["album"],
|
||||||
"images": [
|
"images": [
|
||||||
|
if (cachedImage != null && image != null)
|
||||||
{
|
{
|
||||||
...image.toJson(),
|
...image.toJson(),
|
||||||
"path": cachedImage.path,
|
"path": cachedImage.path,
|
||||||
|
@ -35,6 +35,12 @@ const imgMimeToExt = {
|
|||||||
"image/gif": ".gif",
|
"image/gif": ".gif",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
typedef MetadataFile = ({
|
||||||
|
Metadata? metadata,
|
||||||
|
File file,
|
||||||
|
String? art,
|
||||||
|
});
|
||||||
|
|
||||||
final localTracksProvider =
|
final localTracksProvider =
|
||||||
FutureProvider<Map<String, List<SpotubeLocalTrackObject>>>((ref) async {
|
FutureProvider<Map<String, List<SpotubeLocalTrackObject>>>((ref) async {
|
||||||
try {
|
try {
|
||||||
@ -89,7 +95,7 @@ final localTracksProvider =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final List<Map<dynamic, dynamic>> filesWithMetadata = await Future.wait(
|
final List<MetadataFile> filesWithMetadata = await Future.wait(
|
||||||
entities.map((file) async {
|
entities.map((file) async {
|
||||||
try {
|
try {
|
||||||
final metadata = await MetadataGod.readMetadata(file: file.path);
|
final metadata = await MetadataGod.readMetadata(file: file.path);
|
||||||
@ -111,10 +117,10 @@ final localTracksProvider =
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return {"metadata": metadata, "file": file, "art": imageFile.path};
|
return (metadata: metadata, file: file, art: imageFile.path);
|
||||||
} catch (e, stack) {
|
} catch (e, stack) {
|
||||||
if (e case FrbException() || TimeoutException()) {
|
if (e case FrbException() || TimeoutException()) {
|
||||||
return {"file": file};
|
return (file: file, metadata: null, art: null);
|
||||||
}
|
}
|
||||||
AppLogger.reportError(e, stack);
|
AppLogger.reportError(e, stack);
|
||||||
return null;
|
return null;
|
||||||
@ -125,9 +131,9 @@ final localTracksProvider =
|
|||||||
final tracksFromMetadata = filesWithMetadata
|
final tracksFromMetadata = filesWithMetadata
|
||||||
.map(
|
.map(
|
||||||
(fileWithMetadata) => SpotubeTrackObject.localTrackFromFile(
|
(fileWithMetadata) => SpotubeTrackObject.localTrackFromFile(
|
||||||
fileWithMetadata["file"] as File,
|
fileWithMetadata.file,
|
||||||
metadata: fileWithMetadata["metadata"] as Metadata?,
|
metadata: fileWithMetadata.metadata,
|
||||||
art: fileWithMetadata["art"] as String?,
|
art: fileWithMetadata.art,
|
||||||
) as SpotubeLocalTrackObject,
|
) as SpotubeLocalTrackObject,
|
||||||
)
|
)
|
||||||
.toList();
|
.toList();
|
||||||
|
35
pubspec.lock
35
pubspec.lock
@ -670,10 +670,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: ffi
|
name: ffi
|
||||||
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.1.4"
|
||||||
file:
|
file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -795,10 +795,11 @@ packages:
|
|||||||
flutter_discord_rpc:
|
flutter_discord_rpc:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: flutter_discord_rpc
|
path: "packages/flutter_discord_rpc"
|
||||||
sha256: "9363a803863d56fd89c0a21639c70b126245fcbafaeb0a3d091e7ac06951d03f"
|
ref: HEAD
|
||||||
url: "https://pub.dev"
|
resolved-ref: "4896f78d32eab4d2508e914ad80a9537f035e407"
|
||||||
source: hosted
|
url: "https://github.com/KRTirtho/frb_plugins.git"
|
||||||
|
source: git
|
||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
flutter_displaymode:
|
flutter_displaymode:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
@ -983,10 +984,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: flutter_rust_bridge
|
name: flutter_rust_bridge
|
||||||
sha256: "0ad5079de35d317650fec59b26cb4d0c116ebc2ce703a29f9367513b8a91c287"
|
sha256: "37ef40bc6f863652e865f0b2563ea07f0d3c58d8efad803cc01933a4b2ee067e"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.5.0"
|
version: "2.11.1"
|
||||||
flutter_secure_storage:
|
flutter_secure_storage:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -1638,10 +1639,11 @@ packages:
|
|||||||
metadata_god:
|
metadata_god:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: metadata_god
|
path: "packages/metadata_god"
|
||||||
sha256: "025d8149059f62f44108ab9d74ebd77aa8f0af98b238f3f25121a4711ee3e5d0"
|
ref: HEAD
|
||||||
url: "https://pub.dev"
|
resolved-ref: "4896f78d32eab4d2508e914ad80a9537f035e407"
|
||||||
source: hosted
|
url: "https://github.com/KRTirtho/frb_plugins.git"
|
||||||
|
source: git
|
||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
mime:
|
mime:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
@ -2260,10 +2262,11 @@ packages:
|
|||||||
smtc_windows:
|
smtc_windows:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
name: smtc_windows
|
path: "packages/smtc_windows"
|
||||||
sha256: "80f7c10867da485ffdf87f842bf27e6763589933c18c11af5dc1cd1e158c3154"
|
ref: HEAD
|
||||||
url: "https://pub.dev"
|
resolved-ref: "4896f78d32eab4d2508e914ad80a9537f035e407"
|
||||||
source: hosted
|
url: "https://github.com/KRTirtho/frb_plugins.git"
|
||||||
|
source: git
|
||||||
version: "1.0.0"
|
version: "1.0.0"
|
||||||
source_gen:
|
source_gen:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
|
15
pubspec.yaml
15
pubspec.yaml
@ -52,7 +52,10 @@ dependencies:
|
|||||||
url: https://github.com/KRTirtho/flutter_broadcasts.git
|
url: https://github.com/KRTirtho/flutter_broadcasts.git
|
||||||
ref: 63931dfe06733d4fb7452e9981e1f0b23414d97a
|
ref: 63931dfe06733d4fb7452e9981e1f0b23414d97a
|
||||||
flutter_cache_manager: ^3.3.0
|
flutter_cache_manager: ^3.3.0
|
||||||
flutter_discord_rpc: ^1.0.0
|
flutter_discord_rpc:
|
||||||
|
git:
|
||||||
|
url: https://github.com/KRTirtho/frb_plugins.git
|
||||||
|
path: packages/flutter_discord_rpc
|
||||||
flutter_displaymode: ^0.6.0
|
flutter_displaymode: ^0.6.0
|
||||||
flutter_feather_icons: ^2.0.0+1
|
flutter_feather_icons: ^2.0.0+1
|
||||||
flutter_form_builder: ^9.6.0
|
flutter_form_builder: ^9.6.0
|
||||||
@ -87,7 +90,10 @@ dependencies:
|
|||||||
lrc: ^1.0.2
|
lrc: ^1.0.2
|
||||||
media_kit: ^1.1.10+1
|
media_kit: ^1.1.10+1
|
||||||
media_kit_libs_audio: ^1.0.4
|
media_kit_libs_audio: ^1.0.4
|
||||||
metadata_god: ^1.0.0
|
metadata_god:
|
||||||
|
git:
|
||||||
|
url: https://github.com/KRTirtho/frb_plugins.git
|
||||||
|
path: packages/metadata_god
|
||||||
mime: ^2.0.0
|
mime: ^2.0.0
|
||||||
open_file: ^3.5.10
|
open_file: ^3.5.10
|
||||||
package_info_plus: ^6.0.0
|
package_info_plus: ^6.0.0
|
||||||
@ -111,7 +117,10 @@ dependencies:
|
|||||||
skeletonizer: ^2.1.0+1
|
skeletonizer: ^2.1.0+1
|
||||||
sliding_up_panel: ^2.0.0+1
|
sliding_up_panel: ^2.0.0+1
|
||||||
sliver_tools: ^0.2.12
|
sliver_tools: ^0.2.12
|
||||||
smtc_windows: ^1.0.0
|
smtc_windows:
|
||||||
|
git:
|
||||||
|
url: https://github.com/KRTirtho/frb_plugins.git
|
||||||
|
path: packages/smtc_windows
|
||||||
sqlite3: ^2.4.3
|
sqlite3: ^2.4.3
|
||||||
sqlite3_flutter_libs: ^0.5.23
|
sqlite3_flutter_libs: ^0.5.23
|
||||||
stroke_text: ^0.0.2
|
stroke_text: ^0.0.2
|
||||||
|
Loading…
Reference in New Issue
Block a user