Skip to content

Commit c8be760

Browse files
authored
Allow trimming clip chats (#1167)
1 parent e3dcb20 commit c8be760

File tree

2 files changed

+38
-33
lines changed

2 files changed

+38
-33
lines changed

TwitchDownloaderCore/ChatDownloader.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -370,16 +370,12 @@ private async Task DownloadAsyncImpl(FileInfo outputFileInfo, FileStream outputF
370370
}
371371

372372
videoId = clipInfoResponse.data.clip.video.id;
373-
downloadOptions.TrimBeginning = true;
374-
downloadOptions.TrimBeginningTime = (int)clipInfoResponse.data.clip.videoOffsetSeconds;
375-
downloadOptions.TrimEnding = true;
376-
downloadOptions.TrimEndingTime = downloadOptions.TrimBeginningTime + clipInfoResponse.data.clip.durationSeconds;
377373
chatRoot.streamer.name = clipInfoResponse.data.clip.broadcaster.displayName;
378374
chatRoot.streamer.id = int.Parse(clipInfoResponse.data.clip.broadcaster.id);
379375
chatRoot.video.title = clipInfoResponse.data.clip.title;
380376
chatRoot.video.created_at = clipInfoResponse.data.clip.createdAt;
381-
chatRoot.video.start = (int)clipInfoResponse.data.clip.videoOffsetSeconds;
382-
chatRoot.video.end = (int)clipInfoResponse.data.clip.videoOffsetSeconds + clipInfoResponse.data.clip.durationSeconds;
377+
chatRoot.video.start = (double)clipInfoResponse.data.clip.videoOffsetSeconds + (downloadOptions.TrimBeginning ? downloadOptions.TrimBeginningTime : 0);
378+
chatRoot.video.end = (double)clipInfoResponse.data.clip.videoOffsetSeconds + (downloadOptions.TrimEnding ? downloadOptions.TrimEndingTime : clipInfoResponse.data.clip.durationSeconds);
383379
chatRoot.video.length = clipInfoResponse.data.clip.durationSeconds;
384380
chatRoot.video.viewCount = clipInfoResponse.data.clip.viewCount;
385381
chatRoot.video.game = clipInfoResponse.data.clip.game?.displayName ?? "Unknown";

TwitchDownloaderWPF/PageChatDownload.xaml.cs

Lines changed: 36 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public PageChatDownload()
4343

4444
private void Page_Initialized(object sender, EventArgs e)
4545
{
46-
SetEnabled(false, false);
46+
SetEnabled(false);
4747
SetEnabledTrimStart(false);
4848
SetEnabledTrimEnd(false);
4949
checkEmbed.IsChecked = Settings.Default.ChatEmbedEmotes;
@@ -73,10 +73,10 @@ private void Page_Initialized(object sender, EventArgs e)
7373
};
7474
}
7575

76-
private void SetEnabled(bool isEnabled, bool isClip)
76+
private void SetEnabled(bool isEnabled)
7777
{
78-
CheckTrimStart.IsEnabled = isEnabled & !isClip;
79-
CheckTrimEnd.IsEnabled = isEnabled & !isClip;
78+
CheckTrimStart.IsEnabled = isEnabled;
79+
CheckTrimEnd.IsEnabled = isEnabled;
8080
radioTimestampRelative.IsEnabled = isEnabled;
8181
radioTimestampUTC.IsEnabled = isEnabled;
8282
radioTimestampNone.IsEnabled = isEnabled;
@@ -147,6 +147,9 @@ private async Task GetVideoInfo()
147147
streamerId = int.Parse(videoInfo.data.video.owner.id);
148148
viewCount = videoInfo.data.video.viewCount;
149149
game = videoInfo.data.video.game?.displayName ?? Translations.Strings.UnknownGame;
150+
151+
numStartHour.Maximum = (int)vodLength.TotalHours;
152+
numStartMinute.Maximum = 60;
150153
var urlTimeCodeMatch = TwitchRegex.UrlTimeCode.Match(textUrl.Text);
151154
if (urlTimeCodeMatch.Success)
152155
{
@@ -162,14 +165,14 @@ private async Task GetVideoInfo()
162165
numStartMinute.Value = 0;
163166
numStartSecond.Value = 0;
164167
}
165-
numStartHour.Maximum = (int)vodLength.TotalHours;
166168

167-
numEndHour.Value = (int)vodLength.TotalHours;
168169
numEndHour.Maximum = (int)vodLength.TotalHours;
170+
numEndHour.Value = (int)vodLength.TotalHours;
171+
numEndMinute.Maximum = 60;
169172
numEndMinute.Value = vodLength.Minutes;
170173
numEndSecond.Value = vodLength.Seconds;
171174
labelLength.Text = vodLength.ToString("c");
172-
SetEnabled(true, false);
175+
SetEnabled(true);
173176
}
174177
else if (downloadType == DownloadType.Clip)
175178
{
@@ -184,17 +187,27 @@ private async Task GetVideoInfo()
184187
}
185188
imgThumbnail.Source = image;
186189

187-
TimeSpan clipLength = TimeSpan.FromSeconds(clipInfo.data.clip.durationSeconds);
190+
vodLength = TimeSpan.FromSeconds(clipInfo.data.clip.durationSeconds);
188191
textStreamer.Text = clipInfo.data.clip.broadcaster?.displayName ?? Translations.Strings.UnknownUser;
189192
var clipCreatedAt = clipInfo.data.clip.createdAt;
190193
textCreatedAt.Text = Settings.Default.UTCVideoTime ? clipCreatedAt.ToString(CultureInfo.CurrentCulture) : clipCreatedAt.ToLocalTime().ToString(CultureInfo.CurrentCulture);
191194
currentVideoTime = Settings.Default.UTCVideoTime ? clipCreatedAt : clipCreatedAt.ToLocalTime();
192195
textTitle.Text = clipInfo.data.clip.title;
193196
streamerId = int.Parse(clipInfo.data.clip.broadcaster?.id ?? "-1");
194-
labelLength.Text = clipLength.ToString("c");
195-
SetEnabled(true, true);
196-
SetEnabledTrimStart(false);
197-
SetEnabledTrimEnd(false);
197+
labelLength.Text = vodLength.ToString("c");
198+
SetEnabled(true);
199+
200+
numStartHour.Maximum = 0;
201+
numStartHour.Value = 0;
202+
numStartMinute.Maximum = vodLength.Minutes;
203+
numStartMinute.Value = 0;
204+
numStartSecond.Value = 0;
205+
206+
numEndHour.Maximum = 0;
207+
numEndHour.Value = 0;
208+
numEndMinute.Maximum = vodLength.Minutes;
209+
numEndMinute.Value = vodLength.Minutes;
210+
numEndSecond.Value = vodLength.Seconds;
198211
}
199212

200213
btnGetInfo.IsEnabled = true;
@@ -268,22 +281,18 @@ public ChatDownloadOptions GetOptions(string filename)
268281
else if (radioCompressionGzip.IsChecked == true)
269282
options.Compression = ChatCompression.Gzip;
270283

271-
// TODO: Enable trimming clip chats
272-
if (downloadType is DownloadType.Video)
284+
if (CheckTrimStart.IsChecked == true)
273285
{
274-
if (CheckTrimStart.IsChecked == true)
275-
{
276-
options.TrimBeginning = true;
277-
TimeSpan start = new TimeSpan((int)numStartHour.Value, (int)numStartMinute.Value, (int)numStartSecond.Value);
278-
options.TrimBeginningTime = (int)start.TotalSeconds;
279-
}
286+
options.TrimBeginning = true;
287+
TimeSpan start = new TimeSpan((int)numStartHour.Value, (int)numStartMinute.Value, (int)numStartSecond.Value);
288+
options.TrimBeginningTime = (int)start.TotalSeconds;
289+
}
280290

281-
if (CheckTrimEnd.IsChecked == true)
282-
{
283-
options.TrimEnding = true;
284-
TimeSpan end = new TimeSpan((int)numEndHour.Value, (int)numEndMinute.Value, (int)numEndSecond.Value);
285-
options.TrimEndingTime = (int)end.TotalSeconds;
286-
}
291+
if (CheckTrimEnd.IsChecked == true)
292+
{
293+
options.TrimEnding = true;
294+
TimeSpan end = new TimeSpan((int)numEndHour.Value, (int)numEndMinute.Value, (int)numEndSecond.Value);
295+
options.TrimEndingTime = (int)end.TotalSeconds;
287296
}
288297

289298
if (radioTimestampUTC.IsChecked == true)
@@ -532,7 +541,7 @@ private async void SplitBtnDownload_Click(object sender, RoutedEventArgs e)
532541
var currentDownload = new ChatDownloader(downloadOptions, downloadProgress);
533542

534543
btnGetInfo.IsEnabled = false;
535-
SetEnabled(false, false);
544+
SetEnabled(false);
536545

537546
SetImage("Images/ppOverheat.gif", true);
538547
statusMessage.Text = Translations.Strings.StatusDownloading;

0 commit comments

Comments
 (0)