Skip to content

Commit c541587

Browse files
committed
Clean extractor up some more
1 parent 3cf608b commit c541587

File tree

7 files changed

+65
-61
lines changed

7 files changed

+65
-61
lines changed

MediaManager/Media/IMediaExtractor.cs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1-
using System.IO;
1+
using System.Collections.Generic;
2+
using System.IO;
23
using System.Threading.Tasks;
34

45
namespace MediaManager.Media
56
{
67
public interface IMediaExtractor
78
{
9+
IList<string> RemotePrefixes { get; }
10+
IList<string> FilePrefixes { get; }
11+
812
Task<IMediaItem> CreateMediaItem(string url);
913

1014
Task<IMediaItem> CreateMediaItem(FileInfo file);
1115

1216
Task<IMediaItem> CreateMediaItem(IMediaItem mediaItem);
1317

1418
Task<object> RetrieveMediaItemArt(IMediaItem mediaItem);
19+
20+
MediaLocation GetMediaLocation(IMediaItem mediaItem);
1521
}
1622
}

MediaManager/Media/MediaExtractorBase.cs

+34-17
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,17 @@ namespace MediaManager.Media
88
{
99
public abstract class MediaExtractorBase : IMediaExtractor
1010
{
11-
public virtual async Task<IMediaItem> CreateMediaItem(string url)
11+
protected Dictionary<string, string> RequestHeaders => CrossMediaManager.Current.RequestHeaders;
12+
13+
public virtual Task<IMediaItem> CreateMediaItem(string url)
1214
{
1315
var mediaItem = new MediaItem(url);
14-
mediaItem.MediaLocation = GetMediaLocation(mediaItem);
15-
return await ExtractMetadata(mediaItem).ConfigureAwait(false);
16+
return CreateMediaItem(mediaItem);
1617
}
1718

18-
public virtual async Task<IMediaItem> CreateMediaItem(FileInfo file)
19+
public virtual Task<IMediaItem> CreateMediaItem(FileInfo file)
1920
{
20-
var mediaItem = new MediaItem(file.FullName);
21-
mediaItem.MediaLocation = GetMediaLocation(mediaItem);
22-
return await ExtractMetadata(mediaItem).ConfigureAwait(false);
21+
return CreateMediaItem(file.FullName);
2322
}
2423

2524
public virtual async Task<IMediaItem> CreateMediaItem(IMediaItem mediaItem)
@@ -28,23 +27,41 @@ public virtual async Task<IMediaItem> CreateMediaItem(IMediaItem mediaItem)
2827
return await ExtractMetadata(mediaItem).ConfigureAwait(false);
2928
}
3029

31-
public virtual Task<object> RetrieveMediaItemArt(IMediaItem mediaItem)
32-
{
33-
return null;
34-
}
30+
public abstract Task<object> RetrieveMediaItemArt(IMediaItem mediaItem);
3531

3632
public abstract Task<IMediaItem> ExtractMetadata(IMediaItem mediaItem);
3733

34+
public IList<string> RemotePrefixes { get; } = new List<string>() {
35+
"http",
36+
"udp",
37+
"rtp"
38+
};
39+
40+
public IList<string> FilePrefixes { get; } = new List<string>() {
41+
"file",
42+
"/"
43+
};
44+
3845
public virtual MediaLocation GetMediaLocation(IMediaItem mediaItem)
3946
{
40-
if (mediaItem.MediaUri.StartsWith("http"))
41-
{
42-
return MediaLocation.Remote;
47+
var url = mediaItem.MediaUri.ToLower();
48+
foreach (var item in RemotePrefixes)
49+
{
50+
if (url.StartsWith(item))
51+
{
52+
return MediaLocation.Remote;
53+
}
54+
}
55+
56+
foreach (var item in FilePrefixes)
57+
{
58+
if (url.StartsWith(item))
59+
{
60+
return MediaLocation.FileSystem;
61+
}
4362
}
4463

45-
if (mediaItem.MediaUri.StartsWith("file")
46-
|| mediaItem.MediaUri.StartsWith("/")
47-
|| (mediaItem.MediaUri.Length > 1 && mediaItem.MediaUri[1] == ':'))
64+
if (url.Length > 1 && url[1] == ':')
4865
{
4966
return MediaLocation.FileSystem;
5067
}

MediaManager/Platforms/Android/Media/MediaExtractor.cs

+5-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ public class MediaExtractor : MediaExtractorBase, IMediaExtractor
1313
{
1414
protected MediaManagerImplementation MediaManager => CrossMediaManager.Android;
1515
protected Resources Resources => Resources.System;
16-
protected Dictionary<string, string> RequestHeaders => MediaManager.RequestHeaders;
1716

1817
public MediaExtractor()
1918
{
@@ -164,5 +163,10 @@ protected virtual string GetCurrentSongFolder(IMediaItem currentFile)
164163

165164
return System.IO.Path.GetDirectoryName(currentFile.MediaUri);
166165
}
166+
167+
public override Task<object> RetrieveMediaItemArt(IMediaItem mediaItem)
168+
{
169+
return null;
170+
}
167171
}
168172
}

MediaManager/Platforms/Apple/Media/AppleMediaExtractor.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,6 @@ namespace MediaManager.Platforms.Apple
1212
{
1313
public class AppleMediaExtractor : MediaExtractorBase, IMediaExtractor
1414
{
15-
protected Dictionary<string, string> RequestHeaders => CrossMediaManager.Current.RequestHeaders;
16-
1715
public AppleMediaExtractor()
1816
{
1917
}
@@ -65,5 +63,10 @@ public static NSUrl GetUrlFor(IMediaItem mediaItem)
6563

6664
return url;
6765
}
66+
67+
public override Task<object> RetrieveMediaItemArt(IMediaItem mediaItem)
68+
{
69+
return null;
70+
}
6871
}
6972
}

MediaManager/Platforms/Tizen/Media/MediaExtractor.cs

+6-18
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,23 @@
77

88
namespace MediaManager.Platforms.Tizen
99
{
10-
public class MediaExtractor : IMediaExtractor
10+
public class MediaExtractor : MediaExtractorBase, IMediaExtractor
1111
{
1212
protected MediaManagerImplementation MediaManager => CrossMediaManager.Tizen;
1313

14-
public Task<IMediaItem> CreateMediaItem(string url)
14+
public override Task<IMediaItem> ExtractMetadata(IMediaItem mediaItem)
1515
{
16-
IMediaItem mediaItem = new MediaItem(url);
17-
18-
var extractor = new MetadataExtractor(url);
16+
var extractor = new MetadataExtractor(mediaItem.MediaUri);
1917
SetMetadata(mediaItem, extractor);
2018
return Task.FromResult(mediaItem);
2119
}
2220

23-
public Task<IMediaItem> CreateMediaItem(FileInfo file)
24-
{
25-
return null;
26-
}
27-
28-
public Task<IMediaItem> CreateMediaItem(IMediaItem mediaItem)
29-
{
30-
return null;
31-
}
32-
33-
public Task<object> RetrieveMediaItemArt(IMediaItem mediaItem)
21+
public override Task<object> RetrieveMediaItemArt(IMediaItem mediaItem)
3422
{
3523
return null;
3624
}
3725

38-
private void SetMetadata(IMediaItem mediaItem, MetadataExtractor extractor)
26+
protected virtual void SetMetadata(IMediaItem mediaItem, MetadataExtractor extractor)
3927
{
4028
Metadata metadata = extractor.GetMetadata();
4129
mediaItem.Title = metadata.Title;
@@ -59,7 +47,7 @@ private void SetMetadata(IMediaItem mediaItem, MetadataExtractor extractor)
5947
}
6048
}
6149

62-
private void SetMetadata(IMediaItem mediaItem, StreamInfo streamInfo)
50+
protected virtual void SetMetadata(IMediaItem mediaItem, StreamInfo streamInfo)
6351
{
6452
mediaItem.Title = streamInfo.GetMetadata(StreamMetadataKey.Title);
6553
mediaItem.Artist = streamInfo.GetMetadata(StreamMetadataKey.Artist);

MediaManager/Platforms/Uap/Media/MediaExtractor.cs

+5-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ namespace MediaManager.Platforms.Uap
1111
{
1212
public class MediaExtractor : MediaExtractorBase, IMediaExtractor
1313
{
14-
protected Dictionary<string, string> RequestHeaders => CrossMediaManager.Current.RequestHeaders;
15-
1614
public MediaExtractor()
1715
{
1816
}
@@ -71,5 +69,10 @@ private async Task SetAlbumArt(IStorageItemProperties file, IMediaItem mediaItem
7169
mediaItem.AlbumArt = bitmap;
7270
}
7371
}
72+
73+
public override Task<object> RetrieveMediaItemArt(IMediaItem mediaItem)
74+
{
75+
return null;
76+
}
7477
}
7578
}

MediaManager/Platforms/Wpf/Media/MediaExtractor.cs

+3-20
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,14 @@
77

88
namespace MediaManager.Platforms.Wpf.Media
99
{
10-
public class MediaExtractor : IMediaExtractor
10+
public class MediaExtractor : MediaExtractorBase, IMediaExtractor
1111
{
12-
protected Dictionary<string, string> RequestHeaders => CrossMediaManager.Current.RequestHeaders;
13-
14-
public MediaExtractor()
15-
{
16-
}
17-
18-
public Task<IMediaItem> CreateMediaItem(string url)
19-
{
20-
IMediaItem mediaItem = new MediaItem(url);
21-
return Task.FromResult(mediaItem);
22-
}
23-
24-
public Task<IMediaItem> CreateMediaItem(FileInfo file)
25-
{
26-
return null;
27-
}
28-
29-
public Task<IMediaItem> CreateMediaItem(IMediaItem mediaItem)
12+
public override Task<IMediaItem> ExtractMetadata(IMediaItem mediaItem)
3013
{
3114
return Task.FromResult(mediaItem);
3215
}
3316

34-
public Task<object> RetrieveMediaItemArt(IMediaItem mediaItem)
17+
public override Task<object> RetrieveMediaItemArt(IMediaItem mediaItem)
3518
{
3619
return null;
3720
}

0 commit comments

Comments
 (0)