Ejemplo n.º 1
0
        protected override async void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);
            string[] file = null;

            if (e.Args.Length > 0 && File.Exists(e.Args[0]))
            {
                file = await AsyncFile.ReadAllLinesAsync(e.Args[0]);
            }
            else
            {
                var ofd = new OpenFileDialog {
                    Title = "Sélectionnez un fichier de traductions"
                };

                if (ofd.ShowDialog() == true && File.Exists(ofd.FileName))
                {
                    file = await AsyncFile.ReadAllLinesAsync(ofd.FileName);
                }
                else
                {
                    Shutdown(2);
                    return;
                }
            }

            if (file.Length < 4)
            {
                ShowError(true);
            }
            if (await file[0].AllAsync(c => c.Equals('=')) && await file[3].AllAsync(c => c.Equals('=')))
            {
                OSTName = file[1];
                Number  = file[2].StartsWith("⇒ ");
                Pattern = file[2].TrimStart("⇒ ", 1).Split(new[] { " ⇔ " }, StringSplitOptions.None);
                if (Pattern.Length <= 1 || await Pattern.AnyAsync(line => line.IsNullOrWhiteSpace()) || await(await Pattern.GroupByAsync(line => line)).AnyAsync(async group => await group.CountAsync() > 1))
                {
                    ShowError(true);
                }
            }
            else
            {
                ShowError(true);
            }

            if (file.Length < 6)
            {
                ShowError(false);
            }

            Translations = (await(await file.SubArray(5, file.Length - 5).SelectAsync(line =>
            {
                if (!Number ^ line.Contains(" ⇒ ") && line.Split(new[] { " ⇔ " }, StringSplitOptions.None).Length == Pattern.Length)
                {
                    if (Number)
                    {
                        int index = line.IndexOf(" ⇒ ");
                        string number = line.Substring(0, index);
                        string litt = line.Substring(index + 3);
                        return(new[] { number }.Concat(litt.Split(new[] { " ⇔ " }, StringSplitOptions.None)).ToArray());
                    }
                    else
                    {
                        return(line.Split(new[] { " ⇔ " }, StringSplitOptions.None));
                    }
                }
                else
                {
                    return(null);
                }
            })).WhereAsync(line => line != null)).ToArray();

            MainWindow = new MainWindow()
            {
                Title = $"{OSTName} - OSTRename"
            };
            MainWindow.Closed += (sender, args) => Shutdown();
            MainWindow.Show();
        }