private void LoadGridState()
        {
            string filterPath = null;

            try
            {
                var filters = Directory.EnumerateFiles(_settingsPath).Select(p => Path.GetFileName(p)).ToArray();
                var dialog  = new SelectFilterDialog(filters);
                if (dialog.ShowDialog() == false)
                {
                    return;
                }

                var manager = new PersistenceManager();
                manager.AllowCrossVersion = true;
                filterPath = Path.Combine(_settingsPath, dialog.FilterName);
                using (var stream = File.OpenRead(filterPath))
                {
                    manager.Load(Grid as RadGridView, stream);
                }
            }
            catch (Exception e)
            {
                Sentry.CaptureException(e);
                MessageBox.Show("Failed to load filter!", "Jira Assistant", MessageBoxButton.OK, MessageBoxImage.Error);
                _logger.Error(e, "Error while loading Issue Browser filter from: " + filterPath);
            }
        }
Пример #2
0
 private void CrashDialog_Closed(object sender, EventArgs e)
 {
     if (Config.Instance.GoogleAnalytics || _hasClickedSend)
     {
         Sentry.CaptureException(_exception);
     }
 }
Пример #3
0
        private async void Login(PasswordBox passwordBox)
        {
            try
            {
                LoginErrorMessage = string.Empty;
                BusyMessage       = "Trying to log into JIRA...";
                IsBusy            = true;
                await _jiraApi.Session.AttemptLogin(JiraAddress, Username, passwordBox.Password);

                _messenger.Send(new OpenAgileBoardPickupMessage());
            }
            catch (ServerNotFoundException)
            {
                LoginErrorMessage = "Server did not respond. Please check address and/or connection.";
            }
            catch (LoginFailedException e)
            {
                LoginErrorMessage = e.Message;
            }
            catch (Exception e)
            {
                Sentry.CaptureException(e);
                LoginErrorMessage = "Failed to log in due to technical issues.";
            }
            finally
            {
                passwordBox.Password = string.Empty;
                IsBusy = false;
            }
        }
Пример #4
0
 private void ButtonSend_Click(object sender, RoutedEventArgs e)
 {
     if (!string.IsNullOrEmpty(TextBoxDescription.Text))
     {
         _exception.Data.Add("description", TextBoxDescription.Text);
     }
     Sentry.CaptureException(_exception);
     Close();
 }
Пример #5
0
        public static void Main()
        {
            var assemblies        = new Dictionary <string, Assembly>();
            var executingAssembly = Assembly.GetExecutingAssembly();

            AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
            {
                var assemblyName = new AssemblyName(e.Name);
                var path         = string.Format("{0}.dll", assemblyName.Name);

                if (assemblies.ContainsKey(path))
                {
                    return(assemblies[path]);
                }

                using (var stream = executingAssembly.GetManifestResourceStream(path))
                {
                    if (stream == null)
                    {
                        return(null);
                    }

                    var bytes = new byte[stream.Length];
                    stream.Read(bytes, 0, bytes.Length);
                    try
                    {
                        assemblies.Add(path, Assembly.Load(bytes));
                        return(assemblies[path]);
                    }
                    catch (Exception ex)
                    {
                        Sentry.CaptureException(ex);
                        _logger.Error(ex, "Failed to load: {0}", path);
                    }
                }

                return(null);
            };
            AppDomain.CurrentDomain.UnhandledException += (sender, args) =>
            {
                if (args.ExceptionObject == null)
                {
                    return;
                }
                Sentry.CaptureException(args.ExceptionObject as Exception);
                _logger.Fatal(args.ExceptionObject as Exception, "Unexpected exception - shutting down.");
            };

            App.Main();
        }
        private void SaveGridState()
        {
            try
            {
                var dialog = new FilterNameDialog();
                if (dialog.ShowDialog() == false)
                {
                    return;
                }

                var name = Regex.Replace(dialog.FilterName, @"[^\w\s]", "_");

                if (File.Exists(Path.Combine(_settingsPath, name)))
                {
                    var result = MessageBox.Show("Do you want to overwrite existing filter?", "Jira Assistant", MessageBoxButton.YesNo, MessageBoxImage.Warning);

                    if (result == MessageBoxResult.No)
                    {
                        return;
                    }
                }

                var manager = new PersistenceManager();
                manager.AllowCrossVersion = true;
                var savedState = manager.Save(Grid);
                using (var reader = new StreamReader(savedState))
                    using (var writer = new StreamWriter(Path.Combine(_settingsPath, name)))
                    {
                        writer.Write(reader.ReadToEnd());
                    }
            }
            catch (Exception e)
            {
                Sentry.CaptureException(e);
                MessageBox.Show("Failed to save filter!", "Jira Assistant", MessageBoxButton.OK, MessageBoxImage.Error);
                _logger.Error(e, "Error while saving Issue Browser filter!");
            }
        }
Пример #7
0
        public async void OnNavigatedTo()
        {
            Boards.Clear();
            RecentBoards.Clear();

            try
            {
                BusyMessage = "Downloading available agile boards...";
                IsBusy      = true;

                var boards = await _jiraApi.Agile.GetAgileBoards();

                var recentBoards = GetRecentBoardsIds();
                foreach (var board in boards.OrderBy(b => b.Name))
                {
                    Boards.Add(board);
                    if (recentBoards.Contains(board.Id))
                    {
                        RecentBoards.Add(board);
                    }
                }
            }
            catch (MissingJiraAgileSupportException)
            {
                MessageBox.Show("Please log into JIRA instance with JIRA Agile installed.", "JIRA Assistant", MessageBoxButton.OK, MessageBoxImage.Information);
            }
            catch (Exception e)
            {
                Sentry.CaptureException(e);
                MessageBox.Show("Failed to retrieve list of available JIRA boards. Can't go any further.\nReason: " + e.Message, "JIRA Assistant", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            finally
            {
                IsBusy      = false;
                BusyMessage = "";
            }
        }
Пример #8
0
        private async void CheckForUpdates()
        {
            if (_inProgress)
            {
                return;
            }
            _inProgress = true;

            if (_settings.EnableUpdates == false)
            {
                return;
            }
            try
            {
                var client  = new RestClient(EndpointUrl);
                var request = new RestRequest("/", Method.GET);

                var currentVersion = Assembly.GetEntryAssembly().GetName().Version;

                var response = await client.ExecuteGetTaskAsync(request);

                var releases = await Task.Factory.StartNew(() => JsonConvert.DeserializeObject <List <GithubApplicationRelease> >(response.Content));

                var higherVersions = releases.Where(r => r.Draft == false &&
                                                    (_settings.OnlyStableVersions == false || r.Prerelease != _settings.OnlyStableVersions) &&
                                                    Version.Parse(r.TagName) > currentVersion)
                                     .OrderByDescending(r => r.TagName);

                if (higherVersions.Any() == false)
                {
                    return;
                }

                _timer.Stop();

                var higherVersion = higherVersions.First();

                var closeApplicationAfterDownload = false;
                var installer = higherVersion.Assets.First(a => a.Name.EndsWith(".msi"));

                _installerPath = Path.Combine(Path.GetTempPath(), installer.Name);

                if (File.Exists(_installerPath) == false || new FileInfo(_installerPath).Length != installer.Size)
                {
                    await DownloadToFile(installer.BrowserDownloadUrl, _installerPath);
                }

                if (_settings.InformAboutUpdate || higherVersion.Prerelease)
                {
                    var dialog = new UpdateInstallPrompt(currentVersion, Version.Parse(higherVersion.TagName), higherVersion.Prerelease == false);

                    var result = dialog.Prompt();

                    if (result == UpdatePromptResult.None)
                    {
                        return;
                    }

                    if (result == UpdatePromptResult.InstallManually)
                    {
                        var saveDialog = new SaveFileDialog {
                            FileName = installer.Name
                        };
                        if (saveDialog.ShowDialog() == true)
                        {
                            File.Copy(_installerPath, saveDialog.FileName);
                        }
                        return;
                    }
                    if (result == UpdatePromptResult.ExitAndInstall)
                    {
                        closeApplicationAfterDownload = true;
                    }
                }

                _runInstaller = true;
                if (closeApplicationAfterDownload)
                {
                    _showInstallerUi = true;
                    Application.Current.Shutdown();
                    return;
                }

                _mainViewModel.UserMessage = string.Format("New version ({0}) will be installed once you close application.", higherVersion.TagName);
            }
            catch (Exception e)
            {
                Sentry.CaptureException(e);
                _logger.Warn(e, "Failed to check for updates.");
            }
            finally
            {
                _inProgress = false;
            }
        }