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:
Kingkor Roy Tirtho 2022-09-09 13:36:49 +06:00
parent d9addcda8e
commit 56ed536130
9 changed files with 57 additions and 36 deletions

View File

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

View File

@ -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(
return playLocalTracks(
playback,
tracks,
currentTrack: track,
);
} else {
playback.stop();
}
}
},
);
},

View File

@ -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,

View File

@ -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),

View File

@ -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}",
);

View File

@ -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;
}

View File

@ -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"))

View File

@ -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"

View File

@ -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"