mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-13 07:55:18 +00:00
chore: disable reading/writing audiotags in macOS for as unsupported platform for metadata_god
build: bump version to 2.4.0 for next release fix: playlist view, album view, local track view play another track of already playing album/playlist behavior
This commit is contained in:
parent
d9addcda8e
commit
56ed536130
@ -75,6 +75,14 @@ class AlbumView extends HookConsumerWidget {
|
||||
onPlay: ([track]) {
|
||||
if (tracksSnapshot.asData?.value != null) {
|
||||
if (!isAlbumPlaying) {
|
||||
playPlaylist(
|
||||
playback,
|
||||
tracksSnapshot.asData!.value
|
||||
.map((track) =>
|
||||
TypeConversionUtils.simpleTrack_X_Track(track, album))
|
||||
.toList(),
|
||||
);
|
||||
} else if (isAlbumPlaying && track != null) {
|
||||
playPlaylist(
|
||||
playback,
|
||||
tracksSnapshot.asData!.value
|
||||
|
@ -13,6 +13,7 @@ import 'package:spotube/models/CurrentPlaylist.dart';
|
||||
import 'package:spotube/models/Logger.dart';
|
||||
import 'package:spotube/provider/Playback.dart';
|
||||
import 'package:spotube/provider/UserPreferences.dart';
|
||||
import 'package:spotube/utils/platform.dart';
|
||||
import 'package:spotube/utils/primitive_utils.dart';
|
||||
import 'package:spotube/utils/type_conversion_utils.dart';
|
||||
|
||||
@ -44,6 +45,17 @@ final localTracksProvider = FutureProvider<List<Track>>((ref) async {
|
||||
}
|
||||
final entities = downloadDir.listSync(recursive: true);
|
||||
|
||||
// TODO: Add MacOS audiotag reading support
|
||||
if (kIsMacOS) {
|
||||
return entities
|
||||
.map(
|
||||
(entity) => TypeConversionUtils.localTrack_X_Track(
|
||||
File(entity.path),
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
}
|
||||
|
||||
final filesWithMetadata = (await Future.wait(
|
||||
entities.map((e) => File(e.path)).where((file) {
|
||||
final mimetype = lookupMimeType(file.path);
|
||||
@ -81,9 +93,9 @@ final localTracksProvider = FutureProvider<List<Track>>((ref) async {
|
||||
final tracks = filesWithMetadata
|
||||
.map(
|
||||
(fileWithMetadata) => TypeConversionUtils.localTrack_X_Track(
|
||||
fileWithMetadata["metadata"] as Metadata,
|
||||
fileWithMetadata["file"] as File,
|
||||
fileWithMetadata["art"] as String?,
|
||||
fileWithMetadata["file"],
|
||||
metadata: fileWithMetadata["metadata"],
|
||||
art: fileWithMetadata["art"],
|
||||
),
|
||||
)
|
||||
.toList();
|
||||
@ -184,17 +196,11 @@ class UserLocalTracks extends HookConsumerWidget {
|
||||
: "assets/album-placeholder.png",
|
||||
isLocal: true,
|
||||
onTrackPlayButtonPressed: (currentTrack) {
|
||||
if (tracks.isNotEmpty) {
|
||||
if (!isPlaylistPlaying) {
|
||||
playLocalTracks(
|
||||
playback,
|
||||
tracks,
|
||||
currentTrack: track,
|
||||
);
|
||||
} else {
|
||||
playback.stop();
|
||||
}
|
||||
}
|
||||
return playLocalTracks(
|
||||
playback,
|
||||
tracks,
|
||||
currentTrack: track,
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
|
@ -84,6 +84,11 @@ class PlaylistView extends HookConsumerWidget {
|
||||
onPlay: ([track]) {
|
||||
if (tracksSnapshot.asData?.value != null) {
|
||||
if (!isPlaylistPlaying) {
|
||||
playPlaylist(
|
||||
playback,
|
||||
tracksSnapshot.asData!.value,
|
||||
);
|
||||
} else if (isPlaylistPlaying && track != null) {
|
||||
playPlaylist(
|
||||
playback,
|
||||
tracksSnapshot.asData!.value,
|
||||
|
@ -26,7 +26,7 @@ class About extends HookWidget {
|
||||
final info = usePackageInfo(
|
||||
appName: "Spotube",
|
||||
packageName: "oss.krtirtho.Spotube",
|
||||
version: "2.3.0");
|
||||
version: "2.4.0");
|
||||
|
||||
return ListTile(
|
||||
leading: Icon(Icons.info_outline_rounded),
|
||||
|
@ -13,6 +13,7 @@ import 'package:spotube/models/SpotubeTrack.dart';
|
||||
import 'package:spotube/provider/Playback.dart';
|
||||
import 'package:spotube/provider/UserPreferences.dart';
|
||||
import 'package:spotube/provider/YouTube.dart';
|
||||
import 'package:spotube/utils/platform.dart';
|
||||
import 'package:spotube/utils/type_conversion_utils.dart';
|
||||
import 'package:youtube_explode_dart/youtube_explode_dart.dart' hide Comment;
|
||||
|
||||
@ -93,6 +94,9 @@ class Downloader with ChangeNotifier {
|
||||
"[addToQueue] Download of ${file.path} is done successfully",
|
||||
);
|
||||
|
||||
// TODO: Add MacOS audiotag writing support
|
||||
if (kIsMacOS) return;
|
||||
|
||||
logger.v(
|
||||
"[addToQueue] Writing metadata to ${file.path}",
|
||||
);
|
||||
|
@ -107,15 +107,15 @@ abstract class TypeConversionUtils {
|
||||
}
|
||||
|
||||
static SpotubeTrack localTrack_X_Track(
|
||||
Metadata metadata,
|
||||
File file,
|
||||
File file, {
|
||||
Metadata? metadata,
|
||||
String? art,
|
||||
) {
|
||||
}) {
|
||||
final track = SpotubeTrack(
|
||||
Video(
|
||||
VideoId("dQw4w9WgXcQ"),
|
||||
basenameWithoutExtension(file.path),
|
||||
metadata.artist ?? "",
|
||||
metadata?.artist ?? "",
|
||||
ChannelId(
|
||||
"https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
|
||||
),
|
||||
@ -123,8 +123,8 @@ abstract class TypeConversionUtils {
|
||||
"",
|
||||
DateTime.now(),
|
||||
"",
|
||||
Duration(milliseconds: metadata.durationMs?.toInt() ?? 0),
|
||||
ThumbnailSet(metadata.title ?? ""),
|
||||
Duration(milliseconds: metadata?.durationMs?.toInt() ?? 0),
|
||||
ThumbnailSet(metadata?.title ?? ""),
|
||||
[],
|
||||
const Engagement(0, 0, 0),
|
||||
false,
|
||||
@ -133,28 +133,28 @@ abstract class TypeConversionUtils {
|
||||
[],
|
||||
);
|
||||
track.album = Album()
|
||||
..name = metadata.album ?? "Spotube"
|
||||
..name = metadata?.album ?? "Spotube"
|
||||
..images = [if (art != null) Image()..url = art]
|
||||
..genres = [if (metadata.genre != null) metadata.genre!]
|
||||
..genres = [if (metadata?.genre != null) metadata!.genre!]
|
||||
..artists = [
|
||||
Artist()
|
||||
..name = metadata.albumArtist ?? "Spotube"
|
||||
..id = metadata.albumArtist ?? "Spotube"
|
||||
..name = metadata?.albumArtist ?? "Spotube"
|
||||
..id = metadata?.albumArtist ?? "Spotube"
|
||||
..type = "artist",
|
||||
]
|
||||
..id = metadata.album
|
||||
..releaseDate = metadata.year?.toString();
|
||||
..id = metadata?.album
|
||||
..releaseDate = metadata?.year?.toString();
|
||||
track.artists = [
|
||||
Artist()
|
||||
..name = metadata.artist ?? "Spotube"
|
||||
..id = metadata.artist ?? "Spotube"
|
||||
..name = metadata?.artist ?? "Spotube"
|
||||
..id = metadata?.artist ?? "Spotube"
|
||||
];
|
||||
|
||||
track.id = metadata.title ?? basenameWithoutExtension(file.path);
|
||||
track.name = metadata.title ?? basenameWithoutExtension(file.path);
|
||||
track.id = metadata?.title ?? basenameWithoutExtension(file.path);
|
||||
track.name = metadata?.title ?? basenameWithoutExtension(file.path);
|
||||
track.type = "track";
|
||||
track.uri = file.path;
|
||||
track.durationMs = metadata.durationMs?.toInt();
|
||||
track.durationMs = metadata?.durationMs?.toInt();
|
||||
|
||||
return track;
|
||||
}
|
||||
|
@ -9,7 +9,6 @@ import audio_service
|
||||
import audio_session
|
||||
import audioplayers_darwin
|
||||
import bitsdojo_window_macos
|
||||
import metadata_god
|
||||
import package_info_plus_macos
|
||||
import path_provider_macos
|
||||
import shared_preferences_macos
|
||||
@ -21,7 +20,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin"))
|
||||
AudioplayersDarwinPlugin.register(with: registry.registrar(forPlugin: "AudioplayersDarwinPlugin"))
|
||||
BitsdojoWindowPlugin.register(with: registry.registrar(forPlugin: "BitsdojoWindowPlugin"))
|
||||
MetadataGodPlugin.register(with: registry.registrar(forPlugin: "MetadataGodPlugin"))
|
||||
FLTPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FLTPackageInfoPlusPlugin"))
|
||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
|
@ -723,7 +723,7 @@ packages:
|
||||
description:
|
||||
path: "."
|
||||
ref: HEAD
|
||||
resolved-ref: "4801fcfc690203871b9ee2d3bf1b9c32ce52a7ca"
|
||||
resolved-ref: "7f7e4d8edecc194ca0c7a265f8aa273cd7a22022"
|
||||
url: "https://github.com/KRTirtho/metadata_god.git"
|
||||
source: git
|
||||
version: "0.0.1"
|
||||
|
@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
|
||||
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
|
||||
# Read more about iOS versioning at
|
||||
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
|
||||
version: 2.3.0+12
|
||||
version: 2.4.0+13
|
||||
|
||||
environment:
|
||||
sdk: ">=2.17.0 <3.0.0"
|
||||
|
Loading…
Reference in New Issue
Block a user