Esempio n. 1
0
        // 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;
            }
        }
Esempio n. 3
0
        // 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;
 }
Esempio n. 5
0
 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;
        }
Esempio n. 7
0
        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));
 }
Esempio n. 9
0
        // 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;
                }
            }
        }
Esempio n. 10
0
        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());
        }
Esempio n. 11
0
        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;
            }
        }
Esempio n. 12
0
        // 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;
            }
        }
Esempio n. 14
0
        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;
                }
            }
        }
Esempio n. 15
0
        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();
 }