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; }
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); }
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; }
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."); }