public IObservable<IList<Client.Project>> GetProjectsForUser(Client.UserCredentials login) { var source = GetProjectsForUserCompleted.MakeObservableServiceResultSingle(login) .Select(args => args.Result as IList<Client.Project>); _svc.GetProjectsForUserAsync(login, login); return source; }
public IObservable<Client.UserProfile> GetUserInfo(Client.UserCredentials login) { var source = GetUserInfoCompleted.MakeObservableServiceResultSingle(login) .Select(args => args.Result); _svc.GetUserInfoAsync(login, login); return source; }
public IObservable<IEnumerable<string>> GetRepositories(Client.UserCredentials login) { var source = GetRepositoriesCompleted.MakeObservableServiceResultSingle(login) .Select(args => from repo in args.Result select repo.DisplayText); _svc.GetRepositoriesAsync(login, login); return source; }
public IObservable<IEnumerable<Client.TaxonName>> DownloadTaxonListChunked(Client.TaxonList list) { var serviceList = new TaxonList() { DisplayText = list.TableDisplayName, IsPublicList = list.IsPublicList, Table = list.TableName, TaxonomicGroup = list.TaxonomicGroup }; return Observable.Create((IObserver<IEnumerable<Client.TaxonName>> observer) => { int chunk = 1; //First Chunk is 1, not 0! var subscription = DownloadTaxonList.MakeObservableServiceResult(list) .Select(args => args.Result ?? Enumerable.Empty<TaxonName>()) .Select(taxa => taxa.Select( taxon => new Client.TaxonName() { GenusOrSupragenic = taxon.GenusOrSupragenic, InfraspecificEpithet = taxon.InfraspecificEpithet, SpeciesEpithet = taxon.SpeciesEpithet, Synonymy = (Client.Synonymy)Enum.Parse(typeof(Client.Synonymy), taxon.Synonymy, true), TaxonNameCache = taxon.TaxonNameCache, TaxonNameSinAuth = taxon.TaxonNameSinAuth, URI = taxon.URI, AcceptedNameURI = taxon.AcceptedNameURI, AcceptedNameCache = taxon.AcceptedNameCache })) .TakeWhile(taxonChunk => { if (taxonChunk.Any()) { //There might still be more Taxa -> request next chunk WithCredentials(c => _svc.DownloadTaxonListAsync(serviceList, ++chunk, c, list)); return true; } else //Transfer finished return false; }).Subscribe(observer); //Request first chunk WithCredentials(c => _svc.DownloadTaxonListAsync(serviceList, chunk, c, list)); return subscription; }); }
public IObservable<IEnumerable<Client.Property>> GetPropertiesForUser(Client.UserCredentials login) { var source = GetPropertiesForUserCompleted.MakeObservableServiceResultSingle(login) .Select(args => args.Result .Select(p => new Client.Property() { PropertyID = p.PropertyID, DisplayText = p.DisplayText })); WithCredentials(c => _svc.GetPropertiesForUserAsync(login, login)); return source; }
public IObservable<IEnumerable<Client.Qualification>> GetQualifications(Client.UserCredentials credentials) { var request = new object(); var res = GetQualificationsCompleted.MakeObservableServiceResultSingle(request) .Select(args => args.Result.Select(q => new Client.Qualification() { Code = q.Code, DisplayText = q.DisplayText })); _svc.GetQualificationsAsync(credentials, request); return res; }
public IObservable<IEnumerable<Client.AnalysisTaxonomicGroup>> GetAnalysisTaxonomicGroupsForProject(int projectID, Client.UserCredentials login) { var source = GetAnalysisTaxonomicGroupsForProjectCompleted.MakeObservableServiceResultSingle(login) .Select(args => args.Result) .Select(atgs => atgs .Select(atg => new Client.AnalysisTaxonomicGroup() { AnalysisID = atg.AnalysisID, TaxonomicGroup = atg.TaxonomicGroup })); _svc.GetAnalysisTaxonomicGroupsForProjectAsync(projectID, login, login); return source; }
public IObservable<IEnumerable<Client.AnalysisResult>> GetAnalysisResultsForProject(int projectID, Client.UserCredentials login) { var source = GetAnalysisResultsForProjectCompleted.MakeObservableServiceResultSingle(login) .Select(args => args.Result) .Select(ars => ars .Select(ar => new Client.AnalysisResult() { AnalysisID = ar.AnalysisID, Description = ar.Description, DisplayText = ar.DisplayText, Notes = ar.Notes, Result = ar.Result })); _svc.GetAnalysisResultsForProjectAsync(projectID, login, login); return source; }
public IObservable<IEnumerable<Client.Analysis>> GetAnalysesForProject(int projectID, Client.UserCredentials login) { var source = GetAnalysesForProjectCompleted.MakeObservableServiceResultSingle(login) .Select(args => args.Result) .Select(analyses => analyses .Select(an => new Client.Analysis() { AnalysisID = an.AnalysisID, Description = an.Description, DisplayText = an.DisplayText, MeasurementUnit = an.MeasurementUnit })); _svc.GetAnalysesForProjectAsync(projectID, login, login); return source; }
public IObservable<IEnumerable<Client.PropertyName>> DownloadPropertyValuesChunked(Client.Property p) { var localclient = new DiversityService.DiversityServiceClient(); //Avoid race conditions from chunked download var svcProperty = new Property() { PropertyID = p.PropertyID, DisplayText = p.DisplayText }; int chunk = 1; //First Chunk is 1, not 0! Func<IObservable<IEnumerable<Client.PropertyName>>> factory = () => { var obs = Observable.FromEvent<EventHandler<DownloadPropertyNamesCompletedEventArgs>, DownloadPropertyNamesCompletedEventArgs>((a) => (s, args) => a(args), d => localclient.DownloadPropertyNamesCompleted += d, d => localclient.DownloadPropertyNamesCompleted -= d) .Select(args => args.Result ?? Enumerable.Empty<PropertyValue>()) .Select(taxa => taxa.Select( property => new Client.PropertyName { PropertyUri = property.PropertyUri, PropertyID = property.PropertyID, DisplayText = property.DisplayText, })) .Publish(); obs.Connect(); return obs; }; var res = factory() .Catch((Exception ex) => { var obs = factory(); WithCredentials(c => localclient.DownloadPropertyNamesAsync(svcProperty, chunk, c)); // Re-Request last chunk return obs; }) .TakeWhile(taxonChunk => { if (taxonChunk.Any()) { //There might still be more Taxa -> request next chunk WithCredentials(c => localclient.DownloadPropertyNamesAsync(svcProperty, ++chunk, c)); return true; } else //Transfer finished return false; }); //Request first chunk WithCredentials(c => localclient.DownloadPropertyNamesAsync(svcProperty, chunk, c)); return res; }