99using GitHub . Collections ;
1010using GitHub . Extensions ;
1111using GitHub . Extensions . Reactive ;
12+ using GitHub . Logging ;
1213using GitHub . Models ;
1314using GitHub . Primitives ;
1415using GitHub . Services ;
1516using ReactiveUI ;
17+ using Serilog ;
1618
1719namespace 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