private void AddBuilds(ref Project project)
		{
			var count = (int)buildTypesJson.count;
			for (int i = 0; i < count; i++)
			{
				var buildTypeJson = buildTypesJson.buildType[i];

				if (buildTypeJson.projectId != project.Id)
				{
					continue;
				}

				var build = new Build();
				build.Id = buildTypeJson.id;
				build.Name = buildTypeJson.name;

				var url = string.Format(buildStatusUrl, build.Id);
				var buildStatusJsonString = RequestHelper.GetJson(url);
				buildStatusJson = JsonConvert.DeserializeObject<dynamic>(buildStatusJsonString ?? string.Empty);

                build.Branch = (buildStatusJson != null) ? (buildStatusJson.branchName ?? "default") : "unknown";
                build.Status = GetBuildStatusForRunningBuild(build.Id);

				if (build.Status == BuildStatus.Running)
				{
					UpdateBuildStatusFromRunningBuildJson(build.Id);
				}

				build.UpdatedBy = GetUpdatedBy();
				build.LastRunText = GetLastRunText();
				build.IsQueued = IsBuildQueued(build.Id);
				build.StatusDescription = (string)buildStatusJson.statusText;

				if (build.Status == BuildStatus.Running)
				{
					var result = GetRunningBuildBranchAndProgress(build.Id);
					build.Branch = result[0];
					build.Progress = result[1];
				}
				else
				{
					build.Progress = string.Empty;
				}

				project.Builds.Add(build);
			}
		}
        private void AddBuilds(ref Project project, Group group)
        {
            foreach (var job in group.Jobs)
            {
                var buildTypeJson = GetJsonBuildTypeById(job.Id);

                var build = new Build();
                build.Id = buildTypeJson.id;
                build.Name = job.Text ?? buildTypeJson.name;

                var url = string.Format(buildStatusUrl, build.Id);
                var buildStatusJsonString = RequestHelper.GetJson(url);
                buildStatusJson = JsonConvert.DeserializeObject<dynamic>(buildStatusJsonString ?? string.Empty);

                build.Branch = buildStatusJson.branchName ?? "default";
                build.Status = GetBuildStatusForRunningBuild(build.Id);

                if (build.Status == BuildStatus.Running)
                {
                    UpdateBuildStatusFromRunningBuildJson(build.Id);
                }
                if (build.Status == BuildStatus.Failure)
                {
                    if (buildStatusJson.testOccurrences != null)
                        build.FailedTests = buildStatusJson.testOccurrences.failed ?? 0;
                }

                build.UpdatedBy = GetUpdatedBy();
                build.LastRunText = GetLastRunText();
                build.IsQueued = IsBuildQueued(build.Id);

                if (build.Status == BuildStatus.Running)
                {
                    var result = GetRunningBuildBranchAndProgress(build.Id);
                    build.Branch = result[0];
                    build.Progress = result[1];
                }
                else
                {
                    build.Progress = string.Empty;
                }

                project.Builds.Add(build);
            }
        }
        public override BuildMonitorViewModel GetModel()
        {
            var model = new BuildMonitorViewModel();

            GetTeamCityBuildsJson();

            foreach (var group in settings.Groups)
            {
                var project = new Project();
                project.Name = group.Name;

                AddBuilds(ref project, group);

                model.Projects.Add(project);
            }

            return model;
        }
		public override BuildMonitorViewModel GetModel()
		{
			var model = new BuildMonitorViewModel();

			GetTeamCityBuildsJson();

			var count = (int)projectsJson.count;
			for (int i = 0; i < count; i++)
			{
				var project = new Project();
				var projectJson = projectsJson.project[i];

				project.Id = projectJson.id;
				project.Name = projectJson.name;
				AddBuilds(ref project);

				model.Projects.Add(project);
			}

			return model;
		}