public List<Issue> Search(Project project, Sprint sprint)
 {
     var connection = this.youTrackClientFactory.CreateConnection();
     var result = connection.Execute<IssueResponce>(
         new SearchIssueRequest(string.Format("#{0} Fix versions: {1}", project.Name, sprint.Name)));
     return result.Data.Issue;
 }
        public SprintSelectorViewModel(Project project,
            Func<Project,Sprint,ProjectDetailsViewModel> projectDetailsFactory,
            ProjectRepository projectRepository,
            IShell shell)
        {
            _project = project;
            _projectDetailsFactory = projectDetailsFactory;
            _projectRepository = projectRepository;
            _shell = shell;

            _projectRepository.GetSprintsObservable(_project).ToProperty(this, t => t.AllSprints, out allSprints);
        }
        public ProjectDetailsViewModel(
            Project project, 
            Sprint sprint, 
            Func<Project, Sprint, Person, PersonDetailsViewModel> personDetailsFactory
            )
        {
            _project = project;

            Name = _project.Name;

            PersonDetails = new ObservableCollection<PersonDetailsViewModel>(
                _project.People.Select(p=>personDetailsFactory(project,sprint,p))
                );
        }
        public PersonDetailsViewModel(Project project, 
            Sprint sprint,
            Person person,

            UserRepository userRepository,
            IssueRepository issueRepository,
            Func<IEnumerable<Issue>, IssueStatisticsViewModel> issueStatisticsFactory,
            Func<Sprint, Person, CommitsViewModel> commitsFactory
            )
        {
            _userRepository = userRepository;
            this.issueRepository = issueRepository;
            _issueStatisticsFactory = issueStatisticsFactory;
            Person = person;

            issueRepository.SearchObservable(project, sprint)
                           .Subscribe(r =>
                                    IssueStatistics = issueStatisticsFactory(r.Where(issue =>issue.Assignee != null && issue.Assignee.Login == person.Login))
                            );

            Commits = commitsFactory(sprint, person);
        }
 public IObservable<List<Issue>> SearchObservable(Project project, Sprint sprint)
 {
     return this.CacheCallObservable(() => this.Search(project, sprint));
 }
 public void Select(Project p)
 {
     _shell.Navigate(_sprintSelectorFactory(p));
 }