// Public Methods (11) public static SubtitleItems AddSubtitleItemToList(SubtitleItems subtitleItemsDataInternal, SubtitleItem subtitleItem) { var localSubItems = subtitleItemsDataInternal.ToList(); var newItem = new SubtitleItem { Dialog = subtitleItem.Dialog, EndTs = subtitleItem.EndTs, StartTs = subtitleItem.StartTs }; localSubItems.Add(newItem); localSubItems = localSubItems.OrderBy(x => x.StartTs).ToList(); var i = 1; var finalItems = new SubtitleItems(); foreach (var item in localSubItems) { item.Number = i++; finalItems.Add(item); } return(finalItems); }
private void deleteRow() { try { MainWindowGuiData.IsBusy = true; var localSubItems = new SubtitleItems(); foreach (var item in subtitleItemsDataInternal) { localSubItems.Add(item); } DeleteRow.DeleteWholeRow( localSubItems, MainWindowGuiData.SelectedItem, MainWindowGuiData.OpenedFilePath ); subtitleItemsDataInternal = localSubItems; } catch (Exception ex) { ExceptionLogger.LogExceptionToFile(ex); LogWindow.AddMessage(LogType.Error, ex.Message); } finally { MainWindowGuiData.IsBusy = false; } }
// Public Methods (1) public static void DeleteWholeRow(SubtitleItems data, SubtitleItem toDelete, string fileNameToSave) { if (data == null || toDelete == null || string.IsNullOrWhiteSpace(fileNameToSave)) { LogWindow.AddMessage(LogType.Alert, "Please select a line to delete it."); return; } var number = toDelete.Number; if (data.Remove(toDelete)) { //fix numbers for (var i = 0; i < data.Count; i++) { data[i].Number = i + 1; } //backup original file var backupFile = string.Format("{0}.original.bak", fileNameToSave); File.Copy(fileNameToSave, backupFile, overwrite: true); //write data File.WriteAllText(fileNameToSave, ParseSrt.SubitemsToString(data).ApplyCorrectYeKe(), Encoding.UTF8); LogWindow.AddMessage(LogType.Info, string.Format("Line {0} has been deleted.", number)); LogWindow.AddMessage(LogType.Info, string.Format("Backup file: {0}", backupFile)); } else { LogWindow.AddMessage(LogType.Alert, string.Format("Couldn't delete line {0}", number)); } }
private void setupItemsData() { _changedRows = new SortedSet <int>(); MainWindowGuiData = new MainWindowGui(); MainWindowGuiData.PropertyChanged += mainWindowGuiDataPropertyChanged; subtitleItemsDataInternal = new SubtitleItems(); subtitleItemsDataInternal.CollectionChanged += subtitleItemsDataInternalCollectionChanged; SubtitleItemsDataView = CollectionViewSource.GetDefaultView(subtitleItemsDataInternal); MainWindowGuiData.IsLoaded = true; }
public static SubtitleItem GetCurrentSubtile(SubtitleItems subtitleItems, TimeSpan currentMediaPosition) { if (subtitleItems == null || !subtitleItems.Any()) { return(null); } return(subtitleItems.Where(x => x.StartTs <= currentMediaPosition && x.EndTs >= currentMediaPosition) .OrderByDescending(x => x.Number) .FirstOrDefault()); }
private void initLocalItems() { _subtitleItems = new SubtitleItems(); PreviewModelData = new PreviewModel(); SubtitleItemData = new SubtitleItem(); PreviewModelData.PlayImage = "play"; PreviewModelData.DragCompleted = true; PreviewModelData.PropertyChanged += previewModelDataPropertyChanged; SubtitleItemData.PropertyChanged += subtitleItemDataPropertyChanged; SubtitleItemData.CaretIndex = 1; }
public static IList <string> FindConflicts(SubtitleItems subtitleItems) { var result = new List <string>(); for (var i = 1; i < subtitleItems.Count; i++) { if (subtitleItems[i].StartTs < subtitleItems[i - 1].EndTs) { result.Add(string.Format("Conflict in #{0}: Start({1})<End({2})", i, (i + 1), (i))); } } return(result); }
private void initMessenger() { App.Messenger.Register <SubtitleItems>("SubtitleItems", data => { _subtitleItems = data; }); App.Messenger.Register <TimeSpan>("doSetMediaPosition", data => { if (PreviewModelData.PlayMedia) { return; } PreviewModelData.MediaManualPosition = data; }); App.Messenger.Register("doClearSubtitle", () => doClearSubtitle(string.Empty)); }
// Public Methods (3) public static void MergeLists(SubtitleItems mainList, SubtitleItems timesFromList) { var mainListCount = mainList.Count; for (var i = 0; i < timesFromList.Count; i++) { if (i < mainListCount) { mainList[i].Time = timesFromList[i].Time; } else { break; } } }
public static string SubitemsToString(SubtitleItems mainItems) { var sb = new StringBuilder(); var i = 1; foreach (var item in mainItems.OrderBy(x => x.StartTs)) { item.FixMinReadTime(); sb.AppendLine(i.ToString(CultureInfo.InvariantCulture)); sb.AppendLine(item.Time); sb.AppendLine(item.Dialog.Trim()); sb.AppendLine(string.Empty); i++; } return(sb.ToString()); }
public void TranslateAll(string fileName, string sourceLanguage, string targetLanguage) { if (_isRunning) { LogWindow.AddMessage(LogType.Alert, "Translation is in progress..."); return; } _isRunning = true; StopTranslation = false; try { if (string.IsNullOrWhiteSpace(fileName)) { LogWindow.AddMessage(LogType.Alert, "Please open a file."); return; } _data = new ParseSrt().ToObservableCollectionFromFile(fileName); if (_data == null || !_data.Any()) { LogWindow.AddMessage(LogType.Alert, "Please open a file."); return; } _sourceLanguage = sourceLanguage; _targetLanguage = targetLanguage; for (var itemId = 0; itemId < _data.Count; itemId++) { if (StopTranslation) { break; } translateItem(itemId); } var saveToFileName = getSaveToFileName(fileName); File.WriteAllText(saveToFileName, ParseSrt.SubitemsToString(_data).ApplyCorrectYeKe(), Encoding.UTF8); LogWindow.AddMessage(LogType.Info, "Finished Translating. Saved to " + saveToFileName); } finally { _isRunning = false; } }
// Public Methods (4) public static void RecalculateRowNumbers(SubtitleItems data, string fileNameToSave) { if (data == null || string.IsNullOrWhiteSpace(fileNameToSave)) { LogWindow.AddMessage(LogType.Alert, "Please open a file."); return; } //fix numbers for (var i = 0; i < data.Count; i++) { data[i].Number = i + 1; } //write data File.WriteAllText(fileNameToSave, ParseSrt.SubitemsToString(data).ApplyCorrectYeKe(), Encoding.UTF8); LogWindow.AddMessage(LogType.Info, "Finished RecalculateRowNumbers."); }
void doSaveChanges(string data) { try { MainWindowGuiData.IsBusy = true; if (data == "All") { var localSubItems = new SubtitleItems(); foreach (var item in subtitleItemsDataInternal) { localSubItems.Add(item); } foreach (var row in localSubItems) { row.Dialog = row.Dialog.InsertRle(); } subtitleItemsDataInternal = localSubItems; } else { //modify changed rows foreach (var row in _changedRows) { subtitleItemsDataInternal[row].Dialog = subtitleItemsDataInternal[row].Dialog.InsertRle(); } } saveToFile(); } catch (Exception ex) { ExceptionLogger.LogExceptionToFile(ex); LogWindow.AddMessage(LogType.Error, ex.Message); } finally { MainWindowGuiData.IsBusy = false; } }
public static void MixLists(SubtitleItems mainList, SubtitleItems secondList) { var mainListCount = mainList.Count; for (var i = 0; i < secondList.Count; i++) { if (i < mainListCount) { var secondItem = secondList.Where(s => s.Time == mainList[i].Time).FirstOrDefault(); if (secondItem != null) { mainList[i].Dialog = mainList[i].Dialog + Environment.NewLine + secondItem.Dialog; } } else { break; } } }
public SubtitleItems ToObservableCollectionFromContent(string srtFileContent) { LogWindow.AddMessage(LogType.Info, "ParseSrt Start."); IsRtl = srtFileContent.ContainsFarsi(); var res = new List <SubtitleItem>(); var lines = srtFileContent.Split('\n'); var dialog = string.Empty; var time = string.Empty; var number = string.Empty; foreach (var line in lines) { var data = line.Trim(); if (string.IsNullOrWhiteSpace(data)) { if (!string.IsNullOrWhiteSpace(number) && !string.IsNullOrWhiteSpace(time)) { var ts = ExtractTsStartEnd(time); res.Add( new SubtitleItem { Dialog = dialog.Trim(), Number = int.Parse(number), Time = time, StartTs = ts.Item1, EndTs = ts.Item2 }); //for the next item dialog = string.Empty; time = string.Empty; number = string.Empty; } continue; } if (data.IsNumeric() && time == string.Empty) { number = data; } else if (data.IsTimeLine()) { time = data; } else { dialog += data + Environment.NewLine; } } if (!string.IsNullOrWhiteSpace(number) && !string.IsNullOrWhiteSpace(time)) { var ts = ExtractTsStartEnd(time); res.Add( new SubtitleItem { Dialog = dialog.Trim(), Number = int.Parse(number), Time = time, StartTs = ts.Item1, EndTs = ts.Item2 }); } var result = new SubtitleItems(); var i = 1; foreach (var item in res.OrderBy(x => x.StartTs)) { item.Number = i++; result.Add(item); } LogWindow.AddMessage(LogType.Info, "ParseSrt End."); return(result); }
private void clearSrtPanel() { subtitleItemsDataInternal = new SubtitleItems(); }