diff --git a/TwitchDownloaderCore/ClipDownloader.cs b/TwitchDownloaderCore/ClipDownloader.cs index 882d29e7..428a990b 100644 --- a/TwitchDownloaderCore/ClipDownloader.cs +++ b/TwitchDownloaderCore/ClipDownloader.cs @@ -92,7 +92,7 @@ void DownloadProgressHandler(StreamCopyProgress streamProgress) private async Task GetDownloadUrl() { var listLinks = await TwitchHelper.GetClipLinks(downloadOptions.Id); - var clip = listLinks[0].data.clip; + var clip = listLinks.data.clip; if (clip.playbackAccessToken is null) { diff --git a/TwitchDownloaderCore/TwitchHelper.cs b/TwitchDownloaderCore/TwitchHelper.cs index b73686a7..fc24b40f 100644 --- a/TwitchDownloaderCore/TwitchHelper.cs +++ b/TwitchDownloaderCore/TwitchHelper.cs @@ -116,22 +116,22 @@ public static async Task GetClipInfo(object clipId) return await response.Content.ReadFromJsonAsync(); } - public static async Task GetClipLinks(string clipId) + public static async Task GetClipLinks(string clipId) { var request = new HttpRequestMessage() { RequestUri = new Uri("https://gql.twitch.tv/gql"), Method = HttpMethod.Post, - Content = new StringContent("[{\"operationName\":\"VideoAccessToken_Clip\",\"variables\":{\"slug\":\"" + clipId + "\"},\"extensions\":{\"persistedQuery\":{\"version\":1,\"sha256Hash\":\"36b89d2507fce29e5ca551df756d27c1cfe079e2609642b4390aa4c35796eb11\"}}}]", Encoding.UTF8, "application/json") + Content = new StringContent("{\"operationName\":\"VideoAccessToken_Clip\",\"variables\":{\"slug\":\"" + clipId + "\"},\"extensions\":{\"persistedQuery\":{\"version\":1,\"sha256Hash\":\"36b89d2507fce29e5ca551df756d27c1cfe079e2609642b4390aa4c35796eb11\"}}}", Encoding.UTF8, "application/json") }; request.Headers.Add("Client-ID", "kimne78kx3ncx6brgo4mv6wki5h1ko"); using var response = await httpClient.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); response.EnsureSuccessStatusCode(); - var gqlClipTokenResponses = await response.Content.ReadFromJsonAsync(); - if (gqlClipTokenResponses[0].data.clip.videoQualities is { Length: > 0}) + var gqlClipTokenResponses = await response.Content.ReadFromJsonAsync(); + if (gqlClipTokenResponses.data.clip.videoQualities is { Length: > 0 }) { - Array.Sort(gqlClipTokenResponses[0].data.clip.videoQualities, new ClipQualityComparer()); + Array.Sort(gqlClipTokenResponses.data.clip.videoQualities, new ClipQualityComparer()); } return gqlClipTokenResponses; diff --git a/TwitchDownloaderWPF/PageClipDownload.xaml.cs b/TwitchDownloaderWPF/PageClipDownload.xaml.cs index b5ce848b..fa05269a 100644 --- a/TwitchDownloaderWPF/PageClipDownload.xaml.cs +++ b/TwitchDownloaderWPF/PageClipDownload.xaml.cs @@ -55,7 +55,7 @@ private async Task GetClipInfo() btnGetInfo.IsEnabled = false; comboQuality.Items.Clear(); Task taskClipInfo = TwitchHelper.GetClipInfo(clipId); - Task taskLinks = TwitchHelper.GetClipLinks(clipId); + Task taskLinks = TwitchHelper.GetClipLinks(clipId); await Task.WhenAll(taskClipInfo, taskLinks); GqlClipResponse clipData = taskClipInfo.Result; @@ -78,7 +78,7 @@ private async Task GetClipInfo() viewCount = taskClipInfo.Result.data.clip.viewCount; game = taskClipInfo.Result.data.clip.game?.displayName ?? "Unknown"; - foreach (var quality in taskLinks.Result[0].data.clip.videoQualities) + foreach (var quality in taskLinks.Result.data.clip.videoQualities) { comboQuality.Items.Add(new TwitchClip(quality.quality, Math.Round(quality.frameRate).ToString("F0"), quality.sourceURL)); }