public async Task ExecuteServiceAsync(string subtitleFile, CancellationToken stoppingToken) { try { _logger.LogInformation($"Processing {subtitleFile}"); await ConfirmFileTransferCompleteAsync(subtitleFile); string fileContent = GetFileContents(subtitleFile); SubtitleInputDto subtitleInputDto = new SubtitleInputDto(fileContent, Path.GetFileName(subtitleFile)); if (subtitleInputDto.IsValidSrtSubtitleFile() == false) { _logger.LogError($"{subtitleFile} is not in a valid format"); return; } SubtitleOutputDto transcriptOutput = CleanSubtitle(subtitleInputDto); SaveSubtitleFile(transcriptOutput, _uploadDirectory); ArchiveSubtitleFile(subtitleFile, _uploadDirectory); _logger.LogInformation($"Finished processing {subtitleFile}"); } catch (Exception ex) { _logger.LogError(ex.InnerException, ex.Message); } }
public static bool IsValidSrtSubtitleFile(this SubtitleInputDto inputDto) { if (string.IsNullOrEmpty(inputDto.Input)) { return(false); } string[] inputLines = inputDto.Input.Split('\n'); return(inputLines[0].StartsWith("1") == true && inputLines[1].StartsWith("00:") == true); }
public async Task <IActionResult> CleanSubtitle(SubtitleInputDto inputDto) { if (inputDto.IsValidSrtSubtitleFile() == false) { return(BadRequest("Input is not in a valid format")); } var subtitle = await Task.Run(() => _subtitleService.CleanSubtitle(inputDto)); return(Ok(subtitle)); }
public SubtitleOutputDto CleanSubtitle(SubtitleInputDto inputDto) { _logger.LogInformation($"Cleaning subtitle file"); string[] inputLines = inputDto.Input.Split('\n'); int counter = 0; string videoString = string.Empty, blogString = string.Empty; foreach (var line in inputLines) { counter = counter >= 4 ? 1 : counter + 1; string cleanedLine = line .Replace("um", string.Empty) .Replace("uh", string.Empty) .Replace("[music] you", "[music]") .Replace(" ", " ") .Replace("all right", "alright") .Trim(); videoString += cleanedLine.ToUpper() + Environment.NewLine; if (counter == 3) { blogString += cleanedLine + Environment.NewLine; } } blogString = RemoveDuplicatesFromBlogString(blogString); blogString = CleanBlogString(blogString); blogString = ConvertToSentenceCase(blogString); SubtitleOutputDto outputDto = new(); outputDto.VideoTitle = inputDto.VideoTitle.Replace(FileExtension.Srt, string.Empty); outputDto.VideoText = videoString; outputDto.BlogText = blogString; outputDto.BlogWords = blogString.Split(' ').Length; return(outputDto); }