public List<ProjectModel> GetAllProjectSummary()
        {
            try
            {
                foreach (Project proj in projects)
                {
                    try
                    {
                        currentProjectConfigs = buildConfigs.Where(x => x.ProjectId == proj.Id).ToList<BuildConfig>();

                        foreach (BuildConfig currentConfig in currentProjectConfigs)
                        {
                            var build = GetLatestBuildForConfig(currentConfig.Id);

                            ProjectModel project = new ProjectModel()
                            {
                                ProjectName = proj.Name,
                                ProjectId = proj.Id,
                                BuildConfigName = currentConfig.Name,
                                LastBuildTime = DateTime.ParseExact(build.StartDate, "yyyyMMddTHHmmsszzzzz", System.Globalization.CultureInfo.InvariantCulture).ToString("dd/MM/yyyy HH:mm:ss"),
                                LastBuildStatus = build.Status,
                                LastBuildStatusText = build.StatusText
                            };
                            projectList.Add(project);
                        }

                    }
                    catch (ArgumentNullException)
                    {
                        ProjectModel project = new ProjectModel()
                        {
                            ProjectName = proj.Name,
                            ProjectId = proj.Id,
                            BuildConfigName = "** No Builds available **",
                            LastBuildTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"),
                            LastBuildStatus = "undefined",
                            LastBuildStatusText = String.Empty
                        };
                        projectList.Add(project);
                    }
                    catch (NullReferenceException)
                    {
                        ProjectModel project = new ProjectModel()
                        {
                            ProjectName = proj.Name,
                            ProjectId = proj.Id,
                            BuildConfigName = String.Empty,
                            LastBuildTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"),
                            LastBuildStatus = "undefined",
                            LastBuildStatusText = String.Empty
                        };
                        projectList.Add(project);
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }

                }

                return projectList
                    .OrderBy(x => x.LastBuildStatus.ToLower().Contains("success") ? 3 : 0)
                    .ThenBy(x => x.LastBuildStatus.ToLower().Contains("undefined") ? 2 : 0)
                    .ThenBy(x => x.LastBuildStatus.ToLower().Contains("failure") ? 1 : 0)
                    .ToList<ProjectModel>();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<ProjectModel> GetPageOfProjectSummary(out bool morePages, int page = 1, int items = 25)
        {
            try
            {
                morePages = projects.Count > (items * page);

                foreach (var proj in projects.Where(x => !x.Archived).Skip((page-1) * items).Take(items))
                {
                    var skipRemainingBuildConfigs = false;

                    try
                    {
                        currentProjectConfigs = (from configs in buildConfigs
                            where configs.ProjectId == proj.Id
                            select configs).ToList();

                        foreach (var currentConfig in currentProjectConfigs)
                        {
                            if (!skipRemainingBuildConfigs)
                            {
                                var build = GetLatestBuildForConfig(currentConfig.Id);

                                var project = new ProjectModel
                                {
                                    ProjectName = proj.Name,
                                    ProjectId = proj.Id,
                                    BuildConfigName = currentConfig.Name,
                                    LastBuildTime = build.StartDate.ToString("dd/MM/yyyy HH:mm:ss"),
                                    LastBuildStatus = build.Status,
                                    LastBuildStatusText = build.StatusText,
                                    Url = build.WebUrl
                                };
                                if (Settings.Default.ShowFailedBuildsOnly)
                                {
                                    //if the last build was cancelled but we suceeded before that?
                                    if (build.Status == "UNKNOWN")
                                    {
                                        if (HadSucessfulBuildSinceLastFailure(currentConfig.Id))
                                        {
                                            continue;
                                        }
                                    }

                                    if (build.Status != "SUCCESS" &&
                                        //build.StartDate > DateTime.Today.AddYears(-1) &&
                                        build.Number != "N/A")
                                    {
                                        projectList.Add(project);

                                        if (Settings.Default.ShowOneFailPerProject)
                                        {
                                            skipRemainingBuildConfigs = true;
                                        }
                                    }
                                }
                                else
                                {
                                    projectList.Add(project);
                                }
                            }
                        }
                    }
                    catch (ArgumentNullException)
                    {
                        var project = new ProjectModel
                        {
                            ProjectName = proj.Name,
                            ProjectId = proj.Id,
                            BuildConfigName = "** No Builds available **",
                            LastBuildTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"),
                            LastBuildStatus = "undefined",
                            LastBuildStatusText = String.Empty
                        };
                        projectList.Add(project);
                    }
                    catch (NullReferenceException)
                    {
                        var project = new ProjectModel
                        {
                            ProjectName = proj.Name,
                            ProjectId = proj.Id,
                            BuildConfigName = String.Empty,
                            LastBuildTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"),
                            LastBuildStatus = "undefined",
                            LastBuildStatusText = String.Empty
                        };
                        projectList.Add(project);
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }

                return projectList
                    .OrderBy(x => GetStatus(x).Contains("success") ? 3 : 0)
                    .ThenBy(x => GetStatus(x).Contains("undefined") ? 2 : 0)
                    .ThenBy(x => GetStatus(x).Contains("unknown") ? 2 : 0)
                    .ThenBy(x => GetStatus(x).Contains("failure") ? 1 : 0)
                    .ToList();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public List<ProjectModel> GetAllProjectSummary()
        {
            try
            {
                foreach (Project proj in projects)
                {
                    try
                    {
                        currentProjectConfigs = (from configs in buildConfigs
                                                 where configs.ProjectId == proj.Id
                                                 select configs).ToList<BuildConfig>();

                        foreach (BuildConfig currentConfig in currentProjectConfigs)
                        {
                            var build = GetLatestBuildForConfig(currentConfig.Id);

                            ProjectModel project = new ProjectModel()
                            {
                                ProjectName = proj.Name,
                                ProjectId = proj.Id,
                                BuildConfigName = currentConfig.Name,
                                LastBuildTime = build.StartDate.ToString("dd/MM/yyyy HH:mm:ss"),
                                LastBuildStatus = build.Status,
                                LastBuildStatusText = build.StatusText
                            };
                            if (Properties.Settings.Default.ShowFailedBuildsOnly)
                            {
                                if (build.Status != "SUCCESS")
                                    projectList.Add(project);
                            }
                            else
                            {
                                projectList.Add(project);
                            }

                        }

                    }
                    catch (ArgumentNullException)
                    {
                        ProjectModel project = new ProjectModel()
                        {
                            ProjectName = proj.Name,
                            ProjectId = proj.Id,
                            BuildConfigName = "** No Builds available **",
                            LastBuildTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"),
                            LastBuildStatus = "undefined",
                            LastBuildStatusText = String.Empty
                        };
                        projectList.Add(project);
                    }
                    catch (NullReferenceException)
                    {
                        ProjectModel project = new ProjectModel()
                        {
                            ProjectName = proj.Name,
                            ProjectId = proj.Id,
                            BuildConfigName = String.Empty,
                            LastBuildTime = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss"),
                            LastBuildStatus = "undefined",
                            LastBuildStatusText = String.Empty
                        };
                        projectList.Add(project);
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }

                }

                return projectList
                    .OrderBy(x => x.LastBuildStatus.ToLower().Contains("success") ? 3 : 0)
                    .ThenBy(x => x.LastBuildStatus.ToLower().Contains("undefined") ? 2 : 0)
                    .ThenBy(x => x.LastBuildStatus.ToLower().Contains("unknown") ? 2 : 0)
                    .ThenBy(x => x.LastBuildStatus.ToLower().Contains("failure") ? 1 : 0)
                    .ToList<ProjectModel>();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
 private string GetStatus(ProjectModel model)
 {
     return string.IsNullOrEmpty(model.LastBuildStatus) ? "" : model.LastBuildStatus.ToLower();
 }