@@ -8,18 +8,17 @@ namespace MediaManager.Media
8
8
{
9
9
public abstract class MediaExtractorBase : IMediaExtractor
10
10
{
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 )
12
14
{
13
15
var mediaItem = new MediaItem ( url ) ;
14
- mediaItem . MediaLocation = GetMediaLocation ( mediaItem ) ;
15
- return await ExtractMetadata ( mediaItem ) . ConfigureAwait ( false ) ;
16
+ return CreateMediaItem ( mediaItem ) ;
16
17
}
17
18
18
- public virtual async Task < IMediaItem > CreateMediaItem ( FileInfo file )
19
+ public virtual Task < IMediaItem > CreateMediaItem ( FileInfo file )
19
20
{
20
- var mediaItem = new MediaItem ( file . FullName ) ;
21
- mediaItem . MediaLocation = GetMediaLocation ( mediaItem ) ;
22
- return await ExtractMetadata ( mediaItem ) . ConfigureAwait ( false ) ;
21
+ return CreateMediaItem ( file . FullName ) ;
23
22
}
24
23
25
24
public virtual async Task < IMediaItem > CreateMediaItem ( IMediaItem mediaItem )
@@ -28,23 +27,41 @@ public virtual async Task<IMediaItem> CreateMediaItem(IMediaItem mediaItem)
28
27
return await ExtractMetadata ( mediaItem ) . ConfigureAwait ( false ) ;
29
28
}
30
29
31
- public virtual Task < object > RetrieveMediaItemArt ( IMediaItem mediaItem )
32
- {
33
- return null ;
34
- }
30
+ public abstract Task < object > RetrieveMediaItemArt ( IMediaItem mediaItem ) ;
35
31
36
32
public abstract Task < IMediaItem > ExtractMetadata ( IMediaItem mediaItem ) ;
37
33
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
+
38
45
public virtual MediaLocation GetMediaLocation ( IMediaItem mediaItem )
39
46
{
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
+ }
43
62
}
44
63
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 ] == ':' )
48
65
{
49
66
return MediaLocation . FileSystem ;
50
67
}
0 commit comments