Exemplo n.º 1
0
        private async Task<bool> setup(string url)
        {
            url = url.Trim().TrimEnd('/') + "/";

            if (!url.StartsWith("http://") && !url.StartsWith("https://"))
                url = "http://" + url;

            var fi = new FileInfo(Assembly.GetExecutingAssembly().Location);
            var rootPath = Directory.GetCurrentDirectory();
            var appPath = rootPath + "\\" + fi.Name + ".catflap";

            var repo = new Repository(url, rootPath, appPath);
            Manifest mf;

            try
            {
                mf = repo.AuthPolicy.Execute(() => repo.GetManifestFromRemote());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Isso não parece ser um repositório válido");
                Console.WriteLine(ex.ToString());
                return false;
            }

            if (mf.warnWhenSetupWithoutFiles.Count() > 0)
            {
                var currentContents = Directory.GetFiles(rootPath).Select(x => new FileInfo(x).Name.ToLowerInvariant());
                var diff = mf.warnWhenSetupWithoutFiles.Select(x => new FileInfo(x).Name.ToLowerInvariant()).Except(currentContents);
                if (diff.Count() > 0)
                {
                    var setupAnyways = await this.ShowMessageAsync("Arquivos não encontrados?",
                        "Este manifesto precisa rodar em um diretório que contém alguns " +
                        "arquivos, mas você não possuí os seguintes:\n\n" +
                        string.Join(", ", diff) + "\n\n" +
                        "Ques continuar mesmo assim?", MessageDialogStyle.AffirmativeAndNegative);

                    if (MessageDialogResult.Negative == setupAnyways)
                        return false;
                }
            }

            if (mf.warnWhenSetupWithUntracked)
            {
                var currentContents =
                    Directory.GetFiles(rootPath).
                        Select(x => System.IO.Path.GetFileName(x)).
                    Concat(
                        Directory.GetDirectories(rootPath).
                        Select(x => System.IO.Path.GetFileName(x)).
                        Select(x => x + "/")
                    ).Select(x => x.ToLower());

                var skip = new string[] { fi.Name.ToLower(), fi.Name.ToLower() + ".catflap/", fi.Name.ToLower() + ".setup" };

                var untracked = currentContents.Except(mf.sync.Select(x => x.name.ToLower())).Except(skip);
                
                if (untracked.Count() > 0)
                {
                    var ret = MessageBox.Show(
                        "ESTE REPOSITÓRIO RECOMANDA INICIAR EM UM DIRETÓRIO VAZIO.\n\n" +
                        "Você está configurando um repositório que já contém alguns arquivos:\n\n" +
                        String.Join("\n", untracked.Take(10)) + "\n..\n\n" +
                        "Que continuar mesmo assim?",
                        "Arquivos não rastreados no diretório, continuar?", MessageBoxButton.YesNo);
                    if (ret == MessageBoxResult.No)
                        return false;
                }
            }

            Directory.CreateDirectory(appPath);

            System.IO.File.WriteAllText(appPath + "\\catflap.json", JsonConvert.SerializeObject(mf));

            var wantShortcut = await this.ShowMessageAsync("Criar um atalho na desktop?",
                "Você gostaria de criar um atalho na desktop?\n" +
                "Isso será perguntado somente uma vez. Futuramente, utilize o menu 'preferências'.",
                MessageDialogStyle.AffirmativeAndNegative);

            if (MessageDialogResult.Affirmative == wantShortcut)
                repo.MakeDesktopShortcut();

            return true;
        }
Exemplo n.º 2
0
        private async Task <bool> setup(string url)
        {
            url = url.Trim().TrimEnd('/') + "/";

            if (!url.StartsWith("http://") && !url.StartsWith("https://"))
            {
                url = "http://" + url;
            }

            var fi       = new FileInfo(Assembly.GetExecutingAssembly().Location);
            var rootPath = Directory.GetCurrentDirectory();
            var appPath  = rootPath + "\\" + fi.Name + ".catflap";

            var      repo = new Repository(url, rootPath, appPath);
            Manifest mf;

            try
            {
                mf = repo.AuthPolicy.Execute(() => repo.GetManifestFromRemote());
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Isso não parece ser um repositório válido");
                Console.WriteLine(ex.ToString());
                return(false);
            }

            if (mf.warnWhenSetupWithoutFiles.Count() > 0)
            {
                var currentContents = Directory.GetFiles(rootPath).Select(x => new FileInfo(x).Name.ToLowerInvariant());
                var diff            = mf.warnWhenSetupWithoutFiles.Select(x => new FileInfo(x).Name.ToLowerInvariant()).Except(currentContents);
                if (diff.Count() > 0)
                {
                    var setupAnyways = await this.ShowMessageAsync("Arquivos não encontrados?",
                                                                   "Este manifesto precisa rodar em um diretório que contém alguns " +
                                                                   "arquivos, mas você não possuí os seguintes:\n\n" +
                                                                   string.Join(", ", diff) + "\n\n" +
                                                                   "Ques continuar mesmo assim?", MessageDialogStyle.AffirmativeAndNegative);

                    if (MessageDialogResult.Negative == setupAnyways)
                    {
                        return(false);
                    }
                }
            }

            if (mf.warnWhenSetupWithUntracked)
            {
                var currentContents =
                    Directory.GetFiles(rootPath).
                    Select(x => System.IO.Path.GetFileName(x)).
                    Concat(
                        Directory.GetDirectories(rootPath).
                        Select(x => System.IO.Path.GetFileName(x)).
                        Select(x => x + "/")
                        ).Select(x => x.ToLower());

                var skip = new string[] { fi.Name.ToLower(), fi.Name.ToLower() + ".catflap/", fi.Name.ToLower() + ".setup" };

                var untracked = currentContents.Except(mf.sync.Select(x => x.name.ToLower())).Except(skip);

                if (untracked.Count() > 0)
                {
                    var ret = MessageBox.Show(
                        "ESTE REPOSITÓRIO RECOMANDA INICIAR EM UM DIRETÓRIO VAZIO.\n\n" +
                        "Você está configurando um repositório que já contém alguns arquivos:\n\n" +
                        String.Join("\n", untracked.Take(10)) + "\n..\n\n" +
                        "Que continuar mesmo assim?",
                        "Arquivos não rastreados no diretório, continuar?", MessageBoxButton.YesNo);
                    if (ret == MessageBoxResult.No)
                    {
                        return(false);
                    }
                }
            }

            Directory.CreateDirectory(appPath);

            System.IO.File.WriteAllText(appPath + "\\catflap.json", JsonConvert.SerializeObject(mf));

            var wantShortcut = await this.ShowMessageAsync("Criar um atalho na desktop?",
                                                           "Você gostaria de criar um atalho na desktop?\n" +
                                                           "Isso será perguntado somente uma vez. Futuramente, utilize o menu 'preferências'.",
                                                           MessageDialogStyle.AffirmativeAndNegative);

            if (MessageDialogResult.Affirmative == wantShortcut)
            {
                repo.MakeDesktopShortcut();
            }

            return(true);
        }
Exemplo n.º 3
0
        private async Task<bool> setup(string url)
        {
            url = url.Trim().TrimEnd('/') + "/";

            if (!url.StartsWith("http://") && !url.StartsWith("https://"))
                url = "https://" + url;

            var fi = new FileInfo(Assembly.GetExecutingAssembly().Location);
            var rootPath = Directory.GetCurrentDirectory();
            var appPath = rootPath + "\\" + fi.Name + ".catflap";

            var repo = new Repository(url, rootPath, appPath);
            Manifest mf;

            try
            {
                mf = BusyWindow.WithBusyWindow(() => repo.AuthPolicy.Execute(() => repo.GetManifestFromRemote()));
            }
            catch (Exception ex)
            {
                MessageBox.Show(Text.t("setup_manifest_invalid_long", url, ex.Message),
                    Text.t("setup_manifest_invalid"));
                return false;
            }

            if (mf.warnWhenSetupWithoutFiles.Count() > 0)
            {
                var currentContents = Directory.GetFiles(rootPath).Select(x => new FileInfo(x).Name.ToLowerInvariant());
                var diff = mf.warnWhenSetupWithoutFiles.Select(x => new FileInfo(x).Name.ToLowerInvariant()).Except(currentContents);
                if (diff.Count() > 0)
                {
                    var setupAnyways = await this.ShowMessageAsync(Text.t("setup_expected_missing"),
                        Text.t("setup_expected_missing_long", string.Join(", ", diff)),
                        MessageDialogStyle.AffirmativeAndNegative);

                    if (MessageDialogResult.Negative == setupAnyways)
                        return false;
                }
            }

            if (mf.warnWhenSetupWithUntracked)
            {
                var currentContents =
                    Directory.GetFiles(rootPath).
                        Select(x => System.IO.Path.GetFileName(x)).
                    Concat(
                        Directory.GetDirectories(rootPath).
                        Select(x => System.IO.Path.GetFileName(x)).
                        Select(x => x + "/")
                    ).Select(x => x.ToLower());

                var skip = new string[] { fi.Name.ToLower(), fi.Name.ToLower() + ".catflap/", fi.Name.ToLower() + ".setup" };

                var untracked = currentContents.Except(mf.sync.Select(x => x.name.ToLower())).Except(skip);
                
                if (untracked.Count() > 0)
                {
                    var ret = MessageBox.Show(
                        Text.t("setup_warn_untracked_long", String.Join("\n", untracked.Take(10))),
                        Text.t("setup_warn_untracked"),
                        MessageBoxButton.YesNo);
                    if (ret == MessageBoxResult.No)
                        return false;
                }
            }

            Directory.CreateDirectory(appPath);

            System.IO.File.WriteAllText(appPath + "\\catflap.json", JsonConvert.SerializeObject(mf));

            if (mf.runAction != null && mf.runAction.execute != "")
            {
                var wantShortcut = await this.ShowMessageAsync(
                    Text.t("setup_shortcut_ask"),
                    Text.t("setup_shortcut_ask_long"),
                    MessageDialogStyle.AffirmativeAndNegative);

                if (MessageDialogResult.Affirmative == wantShortcut)
                    repo.MakeDesktopShortcut();
            }

            return true;
        }
Exemplo n.º 4
0
 private void btnMakeShortcut_Click(object sender, RoutedEventArgs e)
 {
     repository.MakeDesktopShortcut();
     this.ShowMessageAsync("Atalho criado", "um atalho para sincronizar e atualizar este servidor foi criado em sua área de trabalho.\n\n" +
                           "Fique a vontade para renomear ou trocar seu ícone.");
 }