Example #1
0
        private void GeneratePreview(bool setText)
        {
            if (_subtitle == null)
            {
                return;
            }
            _abort = false;
            int numberOfThreads = 3;
            var threadPool      = new List <BackgroundWorker>();

            for (int i = 0; i < numberOfThreads; i++)
            {
                var bw = new BackgroundWorker();
                bw.DoWork             += OnBwOnDoWork;
                bw.RunWorkerCompleted += OnBwRunWorkerCompleted;
                threadPool.Add(bw);
            }
            for (int index = 0; index < _subtitle.Paragraphs.Count; index++)
            {
                Paragraph p      = _subtitle.Paragraphs[index];
                var       before = p.Text;
                var       after  = string.Empty;
                if (setText)
                {
                    var arg = new BackgroundWorkerParameter {
                        P = p, Index = index, Log = new StringBuilder()
                    };
                    threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg);
                    while (threadPool.All(bw => bw.IsBusy))
                    {
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(100);
                    }
                }
                else
                {
                    AddToListView(p, before, after);
                }
                if (_abort)
                {
                    _abort = false;
                    return;
                }
            }
            while (threadPool.Any(bw => bw.IsBusy))
            {
                Application.DoEvents();
                System.Threading.Thread.Sleep(100);
            }
            foreach (var backgroundWorker in threadPool)
            {
                backgroundWorker.Dispose();
            }
        }
Example #2
0
 private void CacheForward(int index, BackgroundWorker bw)
 {
     if (!bw.IsBusy && index + 1 < _subtitle.Paragraphs.Count)
     {
         var p2        = _subtitle.Paragraphs[index];
         var parameter = new BackgroundWorkerParameter {
             Text = p2.Text, Indexes = new List <int> {
                 index
             }, Log = new StringBuilder()
         };
         bw.RunWorkerAsync(parameter);
     }
 }
Example #3
0
        private void GeneratePreview(bool setText)
        {
            //  const int max = 90; // DeepL uses max 90 chars at a time
            if (_subtitle == null)
            {
                return;
            }

            try
            {
                _abort = false;
                int numberOfThreads = 4;
                var threadPool      = new List <BackgroundWorker>();
                for (int i = 0; i < numberOfThreads; i++)
                {
                    var bw = new BackgroundWorker();
                    bw.DoWork             += OnBwOnDoWork;
                    bw.RunWorkerCompleted += OnBwRunWorkerCompleted;
                    threadPool.Add(bw);
                }
                var textToTranslate    = new StringBuilder();
                var indexesToTranslate = new List <int>();
                int start = 0;
                if (listView1.SelectedItems.Count > 0)
                {
                    start = listView1.SelectedItems[0].Index;
                }
                for (int index = start; index < _subtitle.Paragraphs.Count; index++)
                {
                    if (index < listView1.Items.Count)
                    {
                        var listViewItem = listView1.Items[index];
                        if (!string.IsNullOrWhiteSpace(listViewItem.SubItems[2].Text))
                        {
                            if (progressBar1.Value < progressBar1.Maximum)
                            {
                                progressBar1.Value++;
                            }
                            continue;
                        }
                    }

                    Paragraph p      = _subtitleOriginal.Paragraphs[index];
                    string    text   = SetFormattingTypeAndSplitting(index, p.Text, (comboBoxLanguageFrom.SelectedItem as TranslationLanguage).Code.StartsWith("ZH"));
                    var       before = text;
                    var       after  = string.Empty;
                    if (setText)
                    {
                        //if (text.Length + textToTranslate.Length > max) - max is too low for merging texts to really have any effect
                        {
                            var arg = new BackgroundWorkerParameter {
                                Text = textToTranslate.ToString().TrimEnd().TrimEnd('*').TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder()
                            };
                            textToTranslate    = new StringBuilder();
                            indexesToTranslate = new List <int>();
                            threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg);
                            while (threadPool.All(bw => bw.IsBusy))
                            {
                                Application.DoEvents();
                                System.Threading.Thread.Sleep(100);
                            }
                        }
                        textToTranslate.AppendLine(text);
                        textToTranslate.AppendLine(ParagraphSplitter);
                        indexesToTranslate.Add(index);
                    }
                    else
                    {
                        AddToListView(p, before, after);
                    }
                    if (_abort)
                    {
                        _abort = false;
                        _exit  = true;
                        return;
                    }
                    if (_tooManyRequests)
                    {
                        _tooManyRequests = false;
                        _exit            = true;
                        MessageBox.Show("DeepL returned 'Too many requests' - please wait a while!");
                        return;
                    }
                }
                if (textToTranslate.Length > 0)
                {
                    while (threadPool.All(bw => bw.IsBusy))
                    {
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(100);
                    }
                    var arg = new BackgroundWorkerParameter {
                        Text = textToTranslate.ToString().TrimEnd().TrimEnd('*').TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder()
                    };
                    threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg);
                }
                while (threadPool.Any(bw => bw.IsBusy))
                {
                    Application.DoEvents();
                    System.Threading.Thread.Sleep(100);
                }
                try
                {
                    foreach (var backgroundWorker in threadPool)
                    {
                        backgroundWorker.Dispose();
                    }
                }
                catch
                {
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message + Environment.NewLine + exception.StackTrace);
            }
        }
Example #4
0
        private void CheckGrammar()
        {
            if (_subtitle == null)
            {
                return;
            }

            try
            {
                int numberOfThreads = 1;
                var threadPool      = new List <BackgroundWorker>();
                for (int i = 0; i < numberOfThreads; i++)
                {
                    var bw = new BackgroundWorker();
                    bw.DoWork             += OnBwOnDoWork;
                    bw.RunWorkerCompleted += OnBwRunWorkerCompleted;
                    threadPool.Add(bw);
                }
                var textToTranslate    = new StringBuilder();
                var indexesToTranslate = new List <int>();
                int start = 0;
                if (listView1.SelectedItems.Count > 0)
                {
                    start = listView1.SelectedItems[0].Index;
                }

                for (int index = start; index < _subtitle.Paragraphs.Count; index++)
                {
                    Paragraph p   = _subtitle.Paragraphs[index];
                    var       arg = new BackgroundWorkerParameter {
                        Text = textToTranslate.ToString().TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder()
                    };
                    textToTranslate    = new StringBuilder();
                    indexesToTranslate = new List <int>();
                    threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg);

                    // add some multi threading
                    CacheForward(index + 2, _bw2);
                    CacheForward(index + 4, _bw3);
                    CacheForward(index + 6, _bw4);

                    while (threadPool.All(bw => bw.IsBusy))
                    {
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(100);
                    }
                    textToTranslate.AppendLine(p.Text);
                    indexesToTranslate.Add(index);
                    if (_abort)
                    {
                        return;
                    }
                }
                if (textToTranslate.Length > 0)
                {
                    while (threadPool.All(bw => bw.IsBusy))
                    {
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(100);
                    }
                    var arg = new BackgroundWorkerParameter {
                        Text = textToTranslate.ToString().TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder()
                    };
                    threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg);
                }
                while (threadPool.Any(bw => bw.IsBusy))
                {
                    Application.DoEvents();
                    System.Threading.Thread.Sleep(100);
                }
                try
                {
                    foreach (var backgroundWorker in threadPool)
                    {
                        backgroundWorker.Dispose();
                    }
                }
                catch
                {
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message + Environment.NewLine + exception.StackTrace);
            }
        }
Example #5
0
        private void GeneratePreview(bool setText)
        {
            if (_subtitle == null)
            {
                return;
            }

            try
            {
                _abort = false;
                int numberOfThreads = 4;
                var threadPool      = new List <BackgroundWorker>();
                for (int i = 0; i < numberOfThreads; i++)
                {
                    var bw = new BackgroundWorker();
                    bw.DoWork             += OnBwOnDoWork;
                    bw.RunWorkerCompleted += OnBwRunWorkerCompleted;
                    threadPool.Add(bw);
                }
                var textToTranslate    = new StringBuilder();
                var indexesToTranslate = new List <int>();
                for (int index = 0; index < _subtitle.Paragraphs.Count; index++)
                {
                    Paragraph p      = _subtitle.Paragraphs[index];
                    string    text   = SetFormattingTypeAndSplitting(index, p.Text, (comboBoxLanguageFrom.SelectedItem as TranslationPair).Code.StartsWith("ZH", StringComparison.OrdinalIgnoreCase));
                    var       before = text;
                    var       after  = string.Empty;
                    if (setText)
                    {
                        //if (text.Length + textToTranslate.Length > max) - max is too low for merging texts to really have any effect
                        {
                            var arg = new BackgroundWorkerParameter {
                                Text = textToTranslate.ToString().TrimEnd().TrimEnd(ParagraphSplitter).TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder()
                            };
                            textToTranslate    = new StringBuilder();
                            indexesToTranslate = new List <int>();
                            threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg);
                            while (threadPool.All(bw => bw.IsBusy))
                            {
                                Application.DoEvents();
                                System.Threading.Thread.Sleep(100);
                            }
                        }
                        textToTranslate.AppendLine(text);
                        textToTranslate.AppendLine(ParagraphSplitter.ToString());
                        indexesToTranslate.Add(index);
                    }
                    else
                    {
                        AddToListView(p, before, after);
                    }
                    if (_abort)
                    {
                        _abort = false;
                        return;
                    }
                }
                if (textToTranslate.Length > 0)
                {
                    while (threadPool.All(bw => bw.IsBusy))
                    {
                        Application.DoEvents();
                        System.Threading.Thread.Sleep(100);
                    }
                    var arg = new BackgroundWorkerParameter {
                        Text = textToTranslate.ToString().TrimEnd().TrimEnd(ParagraphSplitter).TrimEnd(), Indexes = indexesToTranslate, Log = new StringBuilder()
                    };
                    threadPool.First(bw => !bw.IsBusy).RunWorkerAsync(arg);
                }
                while (threadPool.Any(bw => bw.IsBusy))
                {
                    Application.DoEvents();
                    System.Threading.Thread.Sleep(100);
                }
                try
                {
                    foreach (var backgroundWorker in threadPool)
                    {
                        backgroundWorker.Dispose();
                    }
                }
                catch
                {
                }
            }
            catch (Exception exception)
            {
                MessageBox.Show(exception.Message + Environment.NewLine + exception.StackTrace);
            }
        }