public static StreamParams ParseFromUrl(string url, ILibraryManager libraryManager, IMediaSourceManager mediaSourceManager) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } var request = new StreamParams { ItemId = GetItemId(url) }; Guid parsedId; if (string.IsNullOrWhiteSpace(request.ItemId) || !Guid.TryParse(request.ItemId, out parsedId)) { return(request); } var index = url.IndexOf('?'); if (index == -1) { return(request); } var query = url.Substring(index + 1); QueryParamCollection values = MyHttpUtility.ParseQueryString(query); request.DeviceProfileId = values.Get("DeviceProfileId"); request.DeviceId = values.Get("DeviceId"); request.MediaSourceId = values.Get("MediaSourceId"); request.LiveStreamId = values.Get("LiveStreamId"); request.IsDirectStream = string.Equals("true", values.Get("Static"), StringComparison.OrdinalIgnoreCase); request.AudioStreamIndex = GetIntValue(values, "AudioStreamIndex"); request.SubtitleStreamIndex = GetIntValue(values, "SubtitleStreamIndex"); request.StartPositionTicks = GetLongValue(values, "StartPositionTicks"); request.Item = string.IsNullOrEmpty(request.ItemId) ? null : libraryManager.GetItemById(parsedId); request._mediaSourceManager = mediaSourceManager; return(request); }
private static long GetLongValue(QueryParamCollection values, string name) { var value = values.Get(name); if (long.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result)) { return(result); } return(0); }
private static int?GetIntValue(QueryParamCollection values, string name) { var value = values.Get(name); if (int.TryParse(value, NumberStyles.Integer, CultureInfo.InvariantCulture, out var result)) { return(result); } return(null); }