Skip to content

Commit d493324

Browse files
authored
always set media type whenever possible (#347)
1 parent f4a825c commit d493324

5 files changed

Lines changed: 32 additions & 31 deletions

File tree

Screenbox.Core/Helpers/FilesHelpers.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using System.Collections.Immutable;
1+
using Screenbox.Core.Enums;
2+
using System.Collections.Immutable;
23
using Windows.Storage;
34

45
namespace Screenbox.Core.Helpers;
@@ -23,4 +24,13 @@ public static class FilesHelpers
2324
public static bool IsSupportedPlaylist(this IStorageFile file) => SupportedPlaylistFormats.Contains(file.FileType.ToLowerInvariant());
2425
public static bool IsSupported(this IStorageFile file) => SupportedFormats.Contains(file.FileType.ToLowerInvariant());
2526
public static bool IsSupportedSubtitle(this IStorageFile file) => SupportedSubtitleFormats.Contains(file.FileType.ToLowerInvariant());
27+
28+
public static MediaPlaybackType GetMediaTypeForFile(IStorageFile file)
29+
{
30+
if (file.IsSupportedVideo()) return MediaPlaybackType.Video;
31+
if (file.IsSupportedAudio()) return MediaPlaybackType.Music;
32+
if (file.ContentType.StartsWith("image")) return MediaPlaybackType.Image;
33+
if (file.IsSupportedPlaylist()) return MediaPlaybackType.Playlist;
34+
return MediaPlaybackType.Unknown;
35+
}
2636
}

Screenbox.Core/Models/MediaInfo.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,17 @@ public sealed class MediaInfo
99
{
1010
public MediaPlaybackType MediaType { get; set; }
1111

12-
public VideoInfo VideoProperties { get; set; }
12+
public VideoInfo VideoProperties { get; }
1313

14-
public MusicInfo MusicProperties { get; set; }
14+
public MusicInfo MusicProperties { get; }
1515

16-
public ulong Size { get; set; }
16+
public ulong Size { get; }
1717

18-
public DateTimeOffset DateModified { get; set; }
18+
public DateTimeOffset DateModified { get; }
1919

20-
public MediaInfo()
20+
public MediaInfo(MediaPlaybackType mediaType)
2121
{
22+
MediaType = mediaType;
2223
VideoProperties = new VideoInfo();
2324
MusicProperties = new MusicInfo();
2425
}

Screenbox.Core/Services/FilesService.cs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -191,12 +191,12 @@ public void AddToRecent(IStorageItem item)
191191

192192
public async Task<MediaInfo> GetMediaInfoAsync(StorageFile file)
193193
{
194-
if (!file.IsAvailable) return new MediaInfo();
194+
MediaPlaybackType mediaType = FilesHelpers.GetMediaTypeForFile(file);
195+
if (!file.IsAvailable) return new MediaInfo(mediaType);
195196

196197
try
197198
{
198199
BasicProperties basicProperties = await file.GetBasicPropertiesAsync();
199-
MediaPlaybackType mediaType = GetMediaTypeForFile(file);
200200
switch (mediaType)
201201
{
202202
case MediaPlaybackType.Video:
@@ -214,7 +214,7 @@ public async Task<MediaInfo> GetMediaInfoAsync(StorageFile file)
214214
LogService.Log(e);
215215
}
216216

217-
return new MediaInfo();
217+
return new MediaInfo(mediaType);
218218
}
219219

220220
private FileOpenPicker GetFilePickerForFormats(IReadOnlyCollection<string> formats)
@@ -239,14 +239,5 @@ private FileOpenPicker GetFilePickerForFormats(IReadOnlyCollection<string> forma
239239

240240
return picker;
241241
}
242-
243-
private static MediaPlaybackType GetMediaTypeForFile(IStorageFile file)
244-
{
245-
if (file.IsSupportedVideo()) return MediaPlaybackType.Video;
246-
if (file.IsSupportedAudio()) return MediaPlaybackType.Music;
247-
if (file.ContentType.StartsWith("image")) return MediaPlaybackType.Image;
248-
if (file.IsSupportedPlaylist()) return MediaPlaybackType.Playlist;
249-
return MediaPlaybackType.Unknown;
250-
}
251242
}
252243
}

Screenbox.Core/ViewModels/MediaViewModel.cs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using LibVLCSharp.Shared;
66
using Screenbox.Core.Enums;
77
using Screenbox.Core.Factories;
8+
using Screenbox.Core.Helpers;
89
using Screenbox.Core.Messages;
910
using Screenbox.Core.Models;
1011
using Screenbox.Core.Playback;
@@ -91,32 +92,35 @@ public MediaViewModel(MediaViewModel source)
9192
Source = source.Source;
9293
}
9394

94-
private MediaViewModel(object source, LibVlcService libVlcService)
95+
private MediaViewModel(object source, MediaInfo mediaInfo, LibVlcService libVlcService)
9596
{
9697
_libVlcService = libVlcService;
9798
Source = source;
9899
Location = string.Empty;
99100
_name = string.Empty;
100-
_mediaInfo = new MediaInfo();
101+
_mediaInfo = mediaInfo;
101102
_artists = Array.Empty<ArtistViewModel>();
102103
_options = new List<string>();
103104
Options = new ReadOnlyCollection<string>(_options);
104105
}
105106

106-
public MediaViewModel(LibVlcService libVlcService, StorageFile file) : this(file, libVlcService)
107+
public MediaViewModel(LibVlcService libVlcService, StorageFile file)
108+
: this(file, new MediaInfo(FilesHelpers.GetMediaTypeForFile(file)), libVlcService)
107109
{
108110
Location = file.Path;
109111
_name = file.DisplayName;
110112
_altCaption = file.Name;
111113
}
112114

113-
public MediaViewModel(LibVlcService libVlcService, Uri uri) : this(uri, libVlcService)
115+
public MediaViewModel(LibVlcService libVlcService, Uri uri)
116+
: this(uri, new MediaInfo(MediaPlaybackType.Unknown), libVlcService)
114117
{
115118
Location = uri.OriginalString;
116119
_name = uri.Segments.Length > 0 ? Uri.UnescapeDataString(uri.Segments.Last()) : string.Empty;
117120
}
118121

119-
public MediaViewModel(LibVlcService libVlcService, Media media) : this(media, libVlcService)
122+
public MediaViewModel(LibVlcService libVlcService, Media media)
123+
: this(media, new MediaInfo(MediaPlaybackType.Unknown), libVlcService)
120124
{
121125
Location = media.Mrl;
122126

@@ -205,7 +209,7 @@ public async Task LoadDetailsAsync(IFilesService filesService)
205209

206210
switch (MediaType)
207211
{
208-
case MediaPlaybackType.Unknown when _item is { VideoTracks.Count: 0 }:
212+
case MediaPlaybackType.Unknown when _item is { VideoTracks.Count: 0, Media.IsParsed: true }:
209213
// Update media type when it was previously set Unknown. Usually when source is a URI.
210214
// We don't want to init PlaybackItem just for this.
211215
MediaInfo.MediaType = MediaPlaybackType.Music;

Screenbox.Core/ViewModels/PlayerPageViewModel.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,13 @@ public sealed partial class PlayerPageViewModel : ObservableRecipient,
4343
[ObservableProperty] private bool _isPlaying;
4444
[ObservableProperty] private bool _isPlayingBadge;
4545
[ObservableProperty] private bool _isOpening;
46+
[ObservableProperty] private bool _audioOnly;
4647
[ObservableProperty] private bool _showPlayPauseBadge;
4748
[ObservableProperty] private WindowViewMode _viewMode;
4849
[ObservableProperty] private NavigationViewDisplayMode _navigationViewDisplayMode;
4950
[ObservableProperty] private MediaViewModel? _media;
5051
[ObservableProperty] private ElementTheme _actualTheme;
5152

52-
[ObservableProperty]
53-
[NotifyPropertyChangedFor(nameof(AudioOnly))]
54-
private MediaPlaybackType _mediaType;
55-
5653
[ObservableProperty]
5754
[NotifyPropertyChangedRecipients]
5855
private PlayerVisibilityState _playerVisibility;
@@ -63,8 +60,6 @@ public sealed partial class PlayerPageViewModel : ObservableRecipient,
6360

6461
public bool SeekBarPointerInteracting { get; set; }
6562

66-
public bool AudioOnly => MediaType == MediaPlaybackType.Music;
67-
6863
private readonly DispatcherQueue _dispatcherQueue;
6964
private readonly DispatcherQueueTimer _openingTimer;
7065
private readonly DispatcherQueueTimer _controlsVisibilityTimer;
@@ -589,7 +584,7 @@ private async void ProcessOpeningMedia(MediaViewModel? current)
589584
{
590585
await current.LoadDetailsAsync(_filesService);
591586
await current.LoadThumbnailAsync(_filesService);
592-
MediaType = current.MediaType;
587+
AudioOnly = current.MediaType == MediaPlaybackType.Music;
593588
bool shouldBeVisible = _settingsService.PlayerAutoResize == PlayerAutoResizeOption.Always && !AudioOnly;
594589
if (PlayerVisibility != PlayerVisibilityState.Visible)
595590
{

0 commit comments

Comments
 (0)