Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit 9a279a4

Browse files
committed
Handle errors when initalizing PR list.
1 parent 9060e89 commit 9a279a4

File tree

1 file changed

+48
-30
lines changed

1 file changed

+48
-30
lines changed

src/GitHub.App/ViewModels/GitHubPane/IssueListViewModelBase.cs

Lines changed: 48 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@
99
using GitHub.Collections;
1010
using GitHub.Extensions;
1111
using GitHub.Extensions.Reactive;
12+
using GitHub.Logging;
1213
using GitHub.Models;
1314
using GitHub.Primitives;
1415
using GitHub.Services;
1516
using ReactiveUI;
17+
using Serilog;
1618

1719
namespace GitHub.ViewModels.GitHubPane
1820
{
@@ -21,6 +23,7 @@ namespace GitHub.ViewModels.GitHubPane
2123
/// </summary>
2224
public abstract class IssueListViewModelBase : PanePageViewModelBase, IIssueListViewModelBase
2325
{
26+
static readonly ILogger log = LogManager.ForContext<GitHubPaneViewModel>();
2427
readonly IRepositoryService repositoryService;
2528
IReadOnlyList<IIssueListItemViewModelBase> items;
2629
ICollectionView itemsView;
@@ -123,44 +126,53 @@ public string SelectedState
123126
/// <inheritdoc/>
124127
public async Task InitializeAsync(ILocalRepositoryModel repository, IConnection connection)
125128
{
126-
LocalRepository = repository;
127-
SelectedState = States.FirstOrDefault();
128-
AuthorFilter = new UserFilterViewModel(LoadAuthors);
129-
IsLoading = true;
130-
131-
var parent = await repositoryService.FindParent(
132-
HostAddress.Create(repository.CloneUrl),
133-
repository.Owner,
134-
repository.Name);
135-
136-
if (parent == null)
137-
{
138-
RemoteRepository = repository;
139-
}
140-
else
129+
try
141130
{
142-
// TODO: Handle forks with different names.
143-
RemoteRepository = new RepositoryModel(
144-
repository.Name,
145-
UriString.ToUriString(repository.CloneUrl.ToRepositoryUrl(parent.Value.owner)));
131+
LocalRepository = repository;
132+
SelectedState = States.FirstOrDefault();
133+
AuthorFilter = new UserFilterViewModel(LoadAuthors);
134+
IsLoading = true;
146135

147-
Forks = new IRepositoryModel[]
136+
var parent = await repositoryService.FindParent(
137+
HostAddress.Create(repository.CloneUrl),
138+
repository.Owner,
139+
repository.Name);
140+
141+
if (parent == null)
142+
{
143+
RemoteRepository = repository;
144+
}
145+
else
148146
{
147+
// TODO: Handle forks with different names.
148+
RemoteRepository = new RepositoryModel(
149+
repository.Name,
150+
UriString.ToUriString(repository.CloneUrl.ToRepositoryUrl(parent.Value.owner)));
151+
152+
Forks = new IRepositoryModel[]
153+
{
149154
RemoteRepository,
150155
repository,
151-
};
152-
}
156+
};
157+
}
153158

154-
this.WhenAnyValue(x => x.SelectedState, x => x.RemoteRepository)
155-
.Skip(1)
156-
.Subscribe(_ => Refresh().Forget());
159+
this.WhenAnyValue(x => x.SelectedState, x => x.RemoteRepository)
160+
.Skip(1)
161+
.Subscribe(_ => Refresh().Forget());
157162

158-
Observable.Merge(
159-
this.WhenAnyValue(x => x.SearchQuery).Skip(1).SelectUnit(),
160-
AuthorFilter.WhenAnyValue(x => x.Selected).Skip(1).SelectUnit())
161-
.Subscribe(_ => FilterChanged());
163+
Observable.Merge(
164+
this.WhenAnyValue(x => x.SearchQuery).Skip(1).SelectUnit(),
165+
AuthorFilter.WhenAnyValue(x => x.Selected).Skip(1).SelectUnit())
166+
.Subscribe(_ => FilterChanged());
162167

163-
await Refresh();
168+
await Refresh();
169+
}
170+
catch (Exception ex)
171+
{
172+
Error = ex;
173+
IsLoading = false;
174+
log.Error(ex, "Error initializing IssueListViewModelBase");
175+
}
164176
}
165177

166178
/// <summary>
@@ -169,6 +181,12 @@ public async Task InitializeAsync(ILocalRepositoryModel repository, IConnection
169181
/// <returns>A task tracking the operation.</returns>
170182
public override Task Refresh()
171183
{
184+
if (RemoteRepository == null)
185+
{
186+
// If an exception occurred reading the parent repository, do nothing.
187+
return Task.CompletedTask;
188+
}
189+
172190
subscription?.Dispose();
173191

174192
var dispose = new CompositeDisposable();

0 commit comments

Comments
 (0)