diff --git a/src/Angor/Client/Pages/Browse.razor b/src/Angor/Client/Pages/Browse.razor index 2e797837..68d82131 100644 --- a/src/Angor/Client/Pages/Browse.razor +++ b/src/Angor/Client/Pages/Browse.razor @@ -11,6 +11,7 @@ @inject NavigationManager NavigationManager @inject IRelayService _RelayService @inject IIndexerService _IndexerService +@inject INetworkService _NetworkService @inject IJSRuntime JS @inject ISerializer serializer @@ -216,11 +217,93 @@ else protected override async Task OnInitializedAsync() { projects = SessionStorage.GetProjectIndexerData() ?? new List(); - if (!projects.Any()) + + if (projects.Any()) + { + // Projects exist, initialize the search focus + await JS.InvokeVoidAsync("angor.initSearchFocus", "searchQuery"); + + // Check for indexer and relay availability in the background + _ = CheckIndexerAndRelayAvailability(); + } + else + { + // No projects are cached, fetch new projects after ensuring services are available + await FetchAndEnsureServices(); + } + } + + private async Task FetchAndEnsureServices() + { + try { + _NetworkService.AddSettingsIfNotExist(); + await _NetworkService.CheckServices(true); + + var primaryIndexer = _NetworkService.GetPrimaryIndexer(); + var primaryRelay = _NetworkService.GetPrimaryRelay(); + + if (primaryIndexer == null || primaryRelay == null) + { + notificationComponent.ShowNotificationMessage("No primary indexer or relay found. Please configure them in settings."); + return; + } + await GetAllProjects(); } - await JS.InvokeVoidAsync("angor.initSearchFocus", "searchQuery"); + catch (Exception ex) + { + notificationComponent.ShowNotificationMessage($"Initialization failed: {ex.Message}"); + } + } + + private async Task CheckIndexerAndRelayAvailability() + { + try + { + // Attempt to retrieve primary indexer and relay + var primaryIndexer = _NetworkService.GetPrimaryIndexer(); + var primaryRelay = _NetworkService.GetPrimaryRelay(); + + // Initialize flags to track service availability + bool indexerAvailable = false; + bool relayAvailable = false; + + // Check if the primary indexer is available + if (primaryIndexer != null) + { + await _NetworkService.CheckServices(false); // Refresh service status + indexerAvailable = primaryIndexer.Status == UrlStatus.Online; + if (!indexerAvailable) + { + notificationComponent.ShowNotificationMessage("Primary indexer is offline. Please check your network settings."); + } + } + else + { + notificationComponent.ShowNotificationMessage("No primary indexer configured. Please add one in settings."); + } + + // Check if the primary relay is available + if (primaryRelay != null) + { + await _NetworkService.CheckServices(false); // Refresh service status + relayAvailable = primaryRelay.Status == UrlStatus.Online; + if (!relayAvailable) + { + notificationComponent.ShowNotificationMessage("Primary relay is offline. Please check your relay settings."); + } + } + else + { + notificationComponent.ShowNotificationMessage("No primary relay configured. Please add one in settings."); + } + } + catch (Exception ex) + { + // General error handling if the service check fails + notificationComponent.ShowNotificationMessage($"Service check failed: {ex.Message}"); + } } private void ToggleView() diff --git a/src/Angor/Client/Pages/Settings.razor b/src/Angor/Client/Pages/Settings.razor index b2a0361f..ea75ecf8 100644 --- a/src/Angor/Client/Pages/Settings.razor +++ b/src/Angor/Client/Pages/Settings.razor @@ -203,9 +203,9 @@ @if (indexer.IsPrimary) { - + - + } else { @@ -286,7 +286,7 @@ else { - + } @@ -362,7 +362,7 @@ @@ -402,12 +402,25 @@ networkType = _networkConfiguration.GetNetwork().Name; + _networkService.OnStatusChanged += UpdateUI; + if (!networkType.ToLower().Contains("test")) selectedNetwork = "mainnet"; return base.OnInitializedAsync(); } + private void UpdateUI() + { + settingsInfo = _clientStorage.GetSettingsInfo(); + StateHasChanged(); + } + + public void Dispose() + { + _networkService.OnStatusChanged -= UpdateUI; + } + protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) @@ -565,21 +578,21 @@ try { await _networkService.CheckServices(force); - settingsInfo = _clientStorage.GetSettingsInfo(); } catch (Exception e) { - Logger.LogError(e, e.Message); - notificationComponent.ShowErrorMessage(e.Message); + Logger.LogError(e, $"Error during Refresh: {e.Message}"); + notificationComponent.ShowErrorMessage("Failed to refresh settings: " + e.Message); } finally { refreshSpinner = false; + StateHasChanged(); } } - private void WipteAllData() + private void WipeAllData() { if (!confirmWipe) { diff --git a/src/Angor/Client/Shared/MainLayout.razor b/src/Angor/Client/Shared/MainLayout.razor index 4e15e6cd..3d51dab0 100644 --- a/src/Angor/Client/Shared/MainLayout.razor +++ b/src/Angor/Client/Shared/MainLayout.razor @@ -11,7 +11,7 @@ @inject INetworkService _networkService @inject NavigationManager _navManager @inject NavMenuState NavMenuState; - +