Skip to content

Commit 9c3ca06

Browse files
committed
Refactor and clean up media manager methods
Simplified `SetMetadata` in `Metadata.macios.cs` by removing a null check for `artwork` before checking if it is a `UIImage`. Cleaned up `Dispose` in `MediaManager.android.cs` by removing redundant empty lines. Streamlined `StopService` in `MediaManager.android.cs` by removing `HttpClient` usage and `GetBytesFromMetadataArtworkUrl` method. Updated `Dispose` in `MediaManager.macios.cs` to change `SetPoster` return type from `Task` to `ValueTask`. Refactored `UpdateMetadata` in `MediaManager.windows.cs` to handle different `MetadataArtworkSource` types explicitly and removed redundant `ArtworkUrl` method. Cleaned up `OnPlaybackSessionPlaybackStateChanged` in `MediaManager.windows.cs` by removing the now redundant `ArtworkUrl` method.
1 parent c370fe0 commit 9c3ca06

File tree

4 files changed

+35
-59
lines changed

4 files changed

+35
-59
lines changed

src/CommunityToolkit.Maui.MediaElement/Primitives/Metadata.macios.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public async Task SetMetadata(AVPlayerItem? playerItem, IMediaElement? mediaElem
7979
ClearNowPlaying();
8080
var artwork = await MetadataArtworkUrl(mediaElement.MetadataArtworkSource).ConfigureAwait(false);
8181

82-
if (artwork is not null && artwork is UIImage image)
82+
if (artwork is UIImage image)
8383
{
8484
NowPlayingInfo.Artwork = new(boundsSize: new(320, 240), requestHandler: _ => image);
8585
}

src/CommunityToolkit.Maui.MediaElement/Views/MediaManager.android.cs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -505,8 +505,6 @@ protected override void Dispose(bool disposing)
505505
}
506506
}
507507

508-
509-
510508
[MemberNotNull(nameof(connection))]
511509
void StartService()
512510
{
@@ -597,7 +595,6 @@ void StopService(in BoundServiceConnection boundServiceConnection)
597595
{
598596
if (mediaSource is null)
599597
{
600-
System.Diagnostics.Trace.TraceInformation("Atwork MediaSource is null");
601598
return null;
602599
}
603600
var artworkUrl = mediaSource;
@@ -609,7 +606,6 @@ void StopService(in BoundServiceConnection boundServiceConnection)
609606
System.Diagnostics.Trace.TraceInformation("Arkwork Uri is null or empty");
610607
return null;
611608
}
612-
using var client = new HttpClient();
613609
return await client.GetByteArrayAsync(uri, cancellationToken).ConfigureAwait(false);
614610
}
615611
else if (artworkUrl is FileMediaSource fileMediaSource)
@@ -635,31 +631,13 @@ void StopService(in BoundServiceConnection boundServiceConnection)
635631
}
636632
return null;
637633
}
638-
639-
static async Task<byte[]?> GetBytesFromMetadataArtworkUrl(string? url, CancellationToken cancellationToken = default)
640-
{
641-
var response = await client.GetAsync(url, cancellationToken).ConfigureAwait(false);
642-
var stream = response.IsSuccessStatusCode ? await response.Content.ReadAsStreamAsync(cancellationToken).ConfigureAwait(false) : null;
643-
644-
if (stream is null)
645-
{
646-
System.Diagnostics.Trace.TraceInformation("Arkwork Url stream is null");
647-
return null;
648-
}
649-
650-
using var memoryStream = new MemoryStream();
651-
await stream.CopyToAsync(memoryStream, cancellationToken).ConfigureAwait(false);
652-
var bytes = memoryStream.ToArray();
653-
return bytes;
654-
}
655634

656635
static async Task<byte[]?> GetByteArrayFromResource(string resource)
657636
{
658637
// Android file system does not report size of file so we need to use a buffer for the stream.
659638
using var stream = await FileSystem.Current.OpenAppPackageFileAsync(resource);
660639
if(stream is null)
661640
{
662-
System.Diagnostics.Trace.TraceInformation("Arkwork Resource stream is null");
663641
return null;
664642
}
665643
using var memoryStream = new MemoryStream();

src/CommunityToolkit.Maui.MediaElement/Views/MediaManager.macios.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -497,7 +497,7 @@ protected virtual void Dispose(bool disposing)
497497
}
498498
}
499499

500-
async Task SetPoster(CancellationToken cancellationToken = default)
500+
async ValueTask SetPoster(CancellationToken cancellationToken = default)
501501
{
502502
if (PlayerItem is null || metaData is null || MediaElement is null)
503503
{

src/CommunityToolkit.Maui.MediaElement/Views/MediaManager.windows.cs

Lines changed: 33 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -362,30 +362,45 @@ async ValueTask UpdateMetadata()
362362
return;
363363
}
364364

365-
var artwork = ArtworkUrl(MediaElement.MetadataArtworkSource);
366-
if(string.IsNullOrEmpty(artwork))
365+
if (MediaElement.MetadataArtworkSource is UriMediaSource uriMediaSource)
367366
{
368-
return;
367+
var artwork = uriMediaSource.Uri?.AbsoluteUri ?? string.Empty;
368+
var file = RandomAccessStreamReference.CreateFromUri(new Uri(artwork));
369+
if (file is not null)
370+
{
371+
systemMediaControls.DisplayUpdater.Thumbnail = file;
372+
systemMediaControls.DisplayUpdater.Update();
373+
Uri uri = new(artwork);
374+
Dispatcher.Dispatch(() => Player.PosterSource = new BitmapImage(uri));
375+
}
369376
}
370-
371-
var file = RandomAccessStreamReference.CreateFromUri(new Uri(artwork));
372-
if (file is not null)
377+
378+
if (MediaElement.MetadataArtworkSource is FileMediaSource fileMediaSource)
373379
{
374-
systemMediaControls.DisplayUpdater.Thumbnail = file;
375-
systemMediaControls.DisplayUpdater.Update();
376-
Uri uri = new(artwork);
377-
Dispatcher.Dispatch(() => Player.PosterSource = new BitmapImage(uri));
380+
var artwork = fileMediaSource.Path;
381+
if (File.Exists(artwork))
382+
{
383+
StorageFile ImageFile = await StorageFile.GetFileFromPathAsync(artwork);
384+
Dispatcher.Dispatch(async () =>
385+
{
386+
var bitmap = await LoadBitmapImageAsync(ImageFile);
387+
Player.PosterSource = bitmap;
388+
});
389+
systemMediaControls.DisplayUpdater.Thumbnail = RandomAccessStreamReference.CreateFromFile(ImageFile);
390+
391+
}
378392
}
379-
380-
if (File.Exists(artwork))
393+
if (MediaElement.MetadataArtworkSource is ResourceMediaSource resourceMediaSource)
381394
{
382-
StorageFile ImageFile = await StorageFile.GetFileFromPathAsync(artwork);
383-
Dispatcher.Dispatch(async () =>
395+
var artwork = "ms-appx:///" + resourceMediaSource.Path;
396+
var file = RandomAccessStreamReference.CreateFromUri(new Uri(artwork));
397+
if (file is not null)
384398
{
385-
var bitmap = await LoadBitmapImageAsync(ImageFile);
386-
Player.PosterSource = bitmap;
387-
});
388-
systemMediaControls.DisplayUpdater.Thumbnail = RandomAccessStreamReference.CreateFromFile(ImageFile);
399+
systemMediaControls.DisplayUpdater.Thumbnail = file;
400+
systemMediaControls.DisplayUpdater.Update();
401+
Uri uri = new(artwork);
402+
Dispatcher.Dispatch(() => Player.PosterSource = new BitmapImage(uri));
403+
}
389404
}
390405

391406
systemMediaControls.DisplayUpdater.Type = MediaPlaybackType.Music;
@@ -514,23 +529,6 @@ void OnPlaybackSessionPlaybackStateChanged(MediaPlaybackSession sender, object a
514529
});
515530
}
516531
}
517-
518-
static string ArtworkUrl(MediaSource? artwork)
519-
{
520-
if (artwork is UriMediaSource uriMediaSource)
521-
{
522-
return uriMediaSource.Uri?.AbsoluteUri ?? string.Empty;
523-
}
524-
else if (artwork is FileMediaSource fileMediaSource)
525-
{
526-
return fileMediaSource.Path ?? string.Empty;
527-
}
528-
else if (artwork is ResourceMediaSource resourceMediaSource)
529-
{
530-
return "ms-appx:///" + resourceMediaSource.Path;
531-
}
532-
return string.Empty;
533-
}
534532

535533
void OnPlaybackSessionSeekCompleted(MediaPlaybackSession sender, object args)
536534
{

0 commit comments

Comments
 (0)