Skip to content

Commit

Permalink
Load news in separate thread
Browse files Browse the repository at this point in the history
  • Loading branch information
Drombeys committed Apr 21, 2024
1 parent 0dcedef commit 41f3123
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 30 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Reactive;
using System.Reactive.Linq;

Expand Down Expand Up @@ -49,18 +48,26 @@ public NewsSliderViewModel(ILogger<NewsSliderViewModel> logger, ViewModelLocator
UserManager = userManager;
_launcherStorage = launcherStorage;
LinkViewModel = viewModelLocator.LinkViewModel;

SetupBinding();
SetupCommands();

var canLoadNews = this.WhenAnyValue(x => x._launcherStorage.NewsContents)
.Any(news => news != null && news.Any());

var reloadNewsCommand = ReactiveCommand.Create<Locale?>((lang) => {
_logger.LogInformation("Language has been changed!");
ReloadNews(lang);
}, canLoadNews);
this.WhenAnyValue(x => x.UserManager.UserSettings!.Locale)
.Subscribe(ReloadNews);
.InvokeCommand(reloadNewsCommand);

this.WhenAnyValue(x => x._launcherStorage.NewsContents)
.Select(news => news != null && news.Any())
.Subscribe((n) => _logger.LogInformation("NewsContents --------------------------------------------------"));

this.WhenAnyValue(x => x._launcherStorage.NewsContents[0])
.Subscribe((n) => _logger.LogInformation("NewsContents[0] --------------------------------------------------"));
.Where(news => news != null && news.Any())
.Subscribe((n) => {
var locale = UserManager.UserSettings!.Locale;
ReloadNews(locale);
});
}

private void ReloadNews(Locale? locale)
Expand Down
45 changes: 22 additions & 23 deletions src/ImeSense.Launchers.Belarus.Core/Manager/InitializerManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,44 +36,43 @@ public async Task InitializeAsync()
var stopwatch = new Stopwatch();
stopwatch.Start();
_launcherStorage.IsCheckGitHubConnection = await CheckGitHubConnectionAsync();
var locale = _userManager?.UserSettings?.Locale;
_logger.LogInformation("Check GitHub connection time: {Time}", stopwatch.ElapsedMilliseconds);

var locale = _userManager?.UserSettings?.Locale;
if (_launcherStorage.IsCheckGitHubConnection) {
try {
var isLauncherReleaseCurrent = await IsLauncherReleaseCurrentAsync();
if (!isLauncherReleaseCurrent) {
var pathLauncherUpdater = Path.Combine(DirectoryStorage.Base,
FileNameStorage.SBLauncherUpdater);
await _updaterService.UpdaterAsync(UriStorage.LauncherApiUri, pathLauncherUpdater);

var updater = Launcher.Launch(pathLauncherUpdater);
updater?.Start();

return;
}
} catch (Exception ex) {
_logger.LogError("{Message}", ex.Message);
_logger.LogError("{StackTrace}", ex.StackTrace);
var isLauncherReleaseCurrent = await IsLauncherReleaseCurrentAsync();
_logger.LogInformation("Check launcher update time: {Time}", stopwatch.ElapsedMilliseconds);
if (!isLauncherReleaseCurrent) {
var pathLauncherUpdater = Path.Combine(DirectoryStorage.Base,
FileNameStorage.SBLauncherUpdater);
await _updaterService.UpdaterAsync(UriStorage.LauncherApiUri, pathLauncherUpdater);

var updater = Launcher.Launch(pathLauncherUpdater);
updater?.Start();

return;
}

_launcherStorage.GitHubRelease = await _gitStorageApiService.GetLastReleaseAsync();
_logger.LogInformation("Check last release time: {Time}", stopwatch.ElapsedMilliseconds);

IsGameReleaseCurrent = await IsGameReleaseCurrentAsync();
IsUserAuthorized = File.Exists(PathStorage.LauncherSetting);

if (IsUserAuthorized) {
_launcherStorage.NewsContents = new(await LoadNewsAsync(locale) ?? []);
await Task.Factory.StartNew(() => LoadNewsAsync(locale));
} else {
_launcherStorage.NewsContents = new(await LoadNewsAsync() ?? []);
await Task.Factory.StartNew(() => LoadNewsAsync());
}
var task = new Task(async () => await LoadWebResourcesAsync());
task.Start();
await Task.Factory.StartNew(() => LoadWebResourcesAsync());
} else {
if (IsUserAuthorized) {
_launcherStorage.NewsContents = new(LoadErrorNews(locale) ?? []);
} else {
_launcherStorage.NewsContents = new(LoadErrorNews() ?? []);
}


_launcherStorage.GitHubRelease = await FileDataHelper.LoadDataAsync<GitHubRelease>(PathStorage.CurrentRelease);
}

stopwatch.Stop();
Expand Down Expand Up @@ -207,7 +206,7 @@ private async Task LoadWebResourcesAsync()
}
}

private async Task<IList<LangNewsContent>?> LoadNewsAsync(Locale? locale = null)
private async Task LoadNewsAsync(Locale? locale = null)
{
// News in all languages
var allNews = new List<LangNewsContent>();
Expand All @@ -229,7 +228,7 @@ private async Task LoadWebResourcesAsync()
_logger.LogError("{StackTrace}", ex.StackTrace);
}

return allNews;
_launcherStorage.NewsContents = new(allNews);
}

private void AddNews(Locale? locale, List<LangNewsContent> allNews, IEnumerable<NewsContent>? news)
Expand Down

0 comments on commit 41f3123

Please sign in to comment.