protected override void Write(M3UFileInfo fileInfo, string value, LineReader reader) { if (fileInfo.MediaFiles == null) { fileInfo.MediaFiles = new List <M3UMediaInfo>(); } var m3UmediaInfo = new M3UMediaInfo(); var strArray = value.Split(new char[1] { ',' }, StringSplitOptions.RemoveEmptyEntries); if (strArray.Length != 0) { m3UmediaInfo.Duration = To.Value <float>(strArray[0]); m3UmediaInfo.Title = strArray.Length > 1 ? strArray[1].Trim() : string.Empty; } if (!reader.MoveNext()) { throw new InvalidDataException("Invalid M3U file. Missing a media URI."); } var relativeUri = new Uri(reader.Current.Trim(), UriKind.RelativeOrAbsolute); if (!relativeUri.IsAbsoluteUri && !relativeUri.IsWellFormedOriginalString()) { throw new InvalidDataException("Invalid M3U file. Include a invalid media URI.", new UriFormatException(reader.Current)); } if (!relativeUri.IsAbsoluteUri) { var baseUri = Configuration.Default.BaseUri; if (baseUri == null && reader.Adapter is NetworkAdapter adapter) { baseUri = new Uri( adapter.Uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.SafeUnescaped), UriKind.Absolute); } if (baseUri != null) { m3UmediaInfo.Uri = new Uri(baseUri, relativeUri); } } if (m3UmediaInfo.Uri == null) { m3UmediaInfo.Uri = relativeUri; } fileInfo.MediaFiles.Add(m3UmediaInfo); }
protected override void Write(M3UFileInfo fileInfo, string value, LineReader reader) { if (fileInfo.MediaFiles == null) { fileInfo.MediaFiles = new List <M3UMediaInfo>(); } var media = new M3UMediaInfo(); var attrs = value.Split(new[] { M3UAttributes.AttributeSeparator }, StringSplitOptions.RemoveEmptyEntries); if (attrs.Length > 0) { media.Duration = To.Value <float>(attrs[0]); media.Title = attrs.Length > 1 ? attrs[1].Trim() : string.Empty; } if (!reader.MoveNext()) { throw new InvalidDataException("Invalid M3U file. Missing a media URI."); } var mediaUri = new Uri(reader.Current.Trim(), UriKind.RelativeOrAbsolute); if (!mediaUri.IsAbsoluteUri && !mediaUri.IsWellFormedOriginalString()) { throw new InvalidDataException("Invalid M3U file. Include a invalid media URI.", innerException: new UriFormatException(reader.Current)); } if (!mediaUri.IsAbsoluteUri) { var baseUri = Configuration.Default.BaseUri; if (baseUri == null && reader.Adapter is NetworkAdapter adapter) { var uri = adapter.Uri; var components = UriComponents.SchemeAndServer | UriComponents.UserInfo; baseUri = new Uri(uri.GetComponents(components, UriFormat.SafeUnescaped), UriKind.Absolute); } if (baseUri != null) { media.Uri = new Uri(baseUri, mediaUri); } } if (media.Uri == null) { media.Uri = mediaUri; } fileInfo.MediaFiles.Add(media); }