コード例 #1
0
        protected async Task OnExecute()
        {
            var book = new NbBook(NotabenoidLogin, NotabenoidPassword, BookId);
            await book.ReadVolumes();

            foreach (var v in book.Volumes)
            {
                Console.WriteLine(v.Name);
                var tr = await book.GetTranslates(v.URL, true);

                foreach (var kv in tr)
                {
                    if (String.IsNullOrEmpty(kv.Value))
                    {
                        File.AppendAllText("en.txt", kv.Key + "\n");
                    }
                }
            }

            Console.WriteLine("Completed");
        }
コード例 #2
0
        protected override async Task Do()
        {
            NbBook book = new NbBook(NotabenoidLogin, NotabenoidPassword, BookId);
            await book.ReadVolumes();

            Console.WriteLine("Read parts...");
            var tasks = book.Volumes.Select(v => book.GetParts(v)).ToArray();
            await Task.WhenAll(tasks);

            Console.WriteLine("Complete");

            var parts = tasks.SelectMany(t => t.Result);

            // Групируем по исходному тексту
            var groups = parts.GroupBy(p => p.En).Where(g => g.Count() > 1);

            foreach (var byEn in groups)
            {
                // Группируем по главе
                var byVol = byEn.GroupBy(p => p.Volume).Where(g => g.Count() > 1);
                if (!byVol.Any())
                {
                    continue;
                }

                Console.WriteLine();
                Console.WriteLine(byEn.Key);
                Console.WriteLine();
                foreach (var volumeParts in byVol)
                {
                    var volume = volumeParts.Key;
                    Console.WriteLine(volume.Name);
                    Console.WriteLine(volume.URL);

                    if (volumeParts.Any(p => !String.IsNullOrWhiteSpace(p.Tr))) // Есть перевод
                    {
                        // Удаляем без перевода
                        var remTasks = volumeParts.Where(p => String.IsNullOrWhiteSpace(p.Tr))
                                       .Select(p => book.Remove(p))
                                       .ToArray();
                        await Task.WhenAll(remTasks);

                        // Удаляем лишние с переводом (оставляем первый в списке)
                        var translated = volumeParts.Where(p => !String.IsNullOrWhiteSpace(p.Tr));

                        remTasks = translated.TakeLast(translated.Count() - 1)
                                   .Select(p => book.Remove(p))
                                   .ToArray();
                        await Task.WhenAll(remTasks);
                    }
                    else
                    {
                        var remTasks = volumeParts.TakeLast(volumeParts.Count() - 1)
                                       .Select(p => book.Remove(p))
                                       .ToArray();
                        await Task.WhenAll(remTasks);
                    }

                    foreach (var p in volumeParts)
                    {
                        Console.WriteLine($"\t{p.Id} : {p.Tr}");
                    }
                }
            }

            // Чистим и групируем еще раз
            parts  = parts.Where(p => !p.Removed);
            groups = parts.GroupBy(p => p.En).Where(g => g.Count() > 1);
            foreach (var byEn in groups)
            {
                if (!byEn.Any(p => !String.IsNullOrWhiteSpace(p.Tr)))
                {
                    continue;                                                   // Нет перевода - пропускаем
                }
                if (byEn.All(p => !String.IsNullOrWhiteSpace(p.Tr)))
                {
                    continue;                                                  // Все переведены - пропускаем
                }
                Console.WriteLine();
                Console.WriteLine(byEn.Key);
                Console.WriteLine();

                foreach (var p in byEn)
                {
                    Console.WriteLine(p.Url);
                    Console.WriteLine(p.Tr);
                    Console.WriteLine();
                }
                Console.WriteLine("========================");

                var tr = byEn.First(p => !String.IsNullOrWhiteSpace(p.Tr)).Tr;

                var tasksTr = byEn.Where(p => String.IsNullOrWhiteSpace(p.Tr))
                              .Select(p => book.AddTranslate(p.Volume.Name, p.En, tr))
                              .ToArray();
                await Task.WhenAll(tasksTr);
            }
        }