Esempio n. 1
0
        private async Task <SongInfo> ResolveWithYtDl(string query)
        {
            string[] data;
            try
            {
                bool tryForBestAudio = true;
                var  ytdl            = new YtdlOperation();
                data = (await ytdl.GetDataAsync(query, tryForBestAudio).ConfigureAwait(false)).Split('\n');
                if (data.Length < 6)
                {
                    // try without best audio flag as it might be youtube stream
                    // which does not have bestaudio stream
                    _log.Info("Trying to request stream without bestaudio flag.");
                    tryForBestAudio = false;
                    data            = (await ytdl.GetDataAsync(query, tryForBestAudio).ConfigureAwait(false)).Split('\n');
                }

                if (data.Length < 6)
                {
                    _log.Info("No song found. Data less than 6");
                    return(null);
                }

                if (!TimeSpan.TryParseExact(data[4], new[] { "ss", "m\\:ss", "mm\\:ss", "h\\:mm\\:ss", "hh\\:mm\\:ss", "hhh\\:mm\\:ss" }, CultureInfo.InvariantCulture, out var time))
                {
                    time = TimeSpan.MaxValue;
                }

                return(new SongInfo()
                {
                    Title = data[0],
                    VideoId = data[1],
                    Uri = async() =>
                    {
                        var ytdlo = new YtdlOperation();
                        data = (await ytdlo.GetDataAsync(query, tryForBestAudio).ConfigureAwait(false)).Split('\n');
                        if (data.Length < 6)
                        {
                            _log.Info("No song found. Data less than 6");
                            return null;
                        }
                        return data[2];
                    },
                    Thumbnail = data[3],
                    TotalTime = time,
                    Provider = "YouTube",
                    ProviderType = MusicType.YouTube,
                    Query = "https://youtube.com/watch?v=" + data[1],
                });
            }
            catch (Exception ex)
            {
                _log.Warn(ex);
                return(null);
            }
        }
        public async Task <SongInfo> ResolveSong(string query)
        {
            _log.Info("Getting link");
            string[] data;
            try
            {
                using (var ytdl = new YtdlOperation())
                {
                    data = (await ytdl.GetDataAsync(query)).Split('\n');
                }

                if (data.Length < 6)
                {
                    _log.Info("No song found. Data less than 6");
                    return(null);
                }

                if (!TimeSpan.TryParseExact(data[4], new[] { "ss", "m\\:ss", "mm\\:ss", "h\\:mm\\:ss", "hh\\:mm\\:ss", "hhh\\:mm\\:ss" }, CultureInfo.InvariantCulture, out var time))
                {
                    time = TimeSpan.FromHours(24);
                }

                return(new SongInfo()
                {
                    Title = data[0],
                    VideoId = data[1],
                    Uri = async() =>
                    {
                        using (var ytdl = new YtdlOperation())
                        {
                            data = (await ytdl.GetDataAsync(query)).Split('\n');
                        }
                        if (data.Length < 6)
                        {
                            _log.Info("No song found. Data less than 6");
                            return null;
                        }
                        return data[2];
                    },
                    Thumbnail = data[3],
                    TotalTime = time,
                    Provider = "YouTube",
                    ProviderType = MusicType.YouTube,
                    Query = "https://youtube.com/watch?v=" + data[1],
                });
            }
            catch (Exception ex)
            {
                _log.Warn(ex);
                return(null);
            }
        }