From cd582fc25873b911da87a218f50600172df1e4dc Mon Sep 17 00:00:00 2001 From: bricefriha Date: Tue, 7 May 2024 15:32:45 +0100 Subject: [PATCH 1/8] Optimisation - Custom feeds loading --- AresNews/AresNews/App.xaml.cs | 6 +- .../AresNews/ViewModels/FeedsViewModel.cs | 81 ++++++------------- AresNews/AresNews/Views/FeedsPage.xaml | 7 +- 3 files changed, 30 insertions(+), 64 deletions(-) diff --git a/AresNews/AresNews/App.xaml.cs b/AresNews/AresNews/App.xaml.cs index 174c2ac..b9c0886 100644 --- a/AresNews/AresNews/App.xaml.cs +++ b/AresNews/AresNews/App.xaml.cs @@ -154,7 +154,7 @@ public static void CloseDb() /// /// Function to start the data base /// - public static async void StartDb() + public static void StartDb() { const SQLite.SQLiteOpenFlags Flags = // open the database in read/write mode @@ -163,8 +163,8 @@ public static async void StartDb() SQLite.SQLiteOpenFlags.Create | // enable multi-threaded database access SQLite.SQLiteOpenFlags.SharedCache; - // Just use whatever directory SpecialFolder.Personal returns - string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); + // Just use whatever directory SpecialFolder.Personal returns + string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal); var path = Path.Combine(libraryPath, "ares.db3"); var pathBackUp = Path.Combine(libraryPath, "aresBackup.db3"); diff --git a/AresNews/AresNews/ViewModels/FeedsViewModel.cs b/AresNews/AresNews/ViewModels/FeedsViewModel.cs index 694b34a..d7e436d 100644 --- a/AresNews/AresNews/ViewModels/FeedsViewModel.cs +++ b/AresNews/AresNews/ViewModels/FeedsViewModel.cs @@ -1,24 +1,17 @@ -using AresNews.Helpers.Tools; + using AresNews.Models; using AresNews.Views; using MvvmHelpers; using Newtonsoft.Json; -using Rg.Plugins.Popup.Extensions; using SQLiteNetExtensions.Extensions; using System; -using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; -using System.Drawing; using System.Linq; -using System.Reflection; -using System.Threading; using System.Threading.Tasks; using Xamarin.Essentials; using Xamarin.Forms; -using Xamarin.Forms.PancakeView; -using static AresNews.Models.UpdateOrder; using Command = Xamarin.Forms.Command; namespace AresNews.ViewModels @@ -135,28 +128,25 @@ public TabButton SelectedFeedTab public Xamarin.Forms.Command RefreshAll => new Command((feed) => { IsRefreshing = true; - Task.Run(() => - { - this.Refresh(feed); - }); + Refresh(feed); }); - public Xamarin.Forms.Command SwitchFeed => new Command(async (feed) => + public Xamarin.Forms.Command SwitchFeed => new Command((feed) => { if (IsBusy) return; //IsRefreshing = true; CurrentApp.ShowLoadingIndicator(); - SwitchFeedAsync(feed); + _ = SwitchFeedAsync(feed); RefreshArticles.Execute(null); CurrentApp.RemoveLoadingIndicator(); }); - private async void SwitchFeedAsync(Feed feed) + private async Task SwitchFeedAsync(Feed feed) { await Task.Run(() => { @@ -164,11 +154,6 @@ await Task.Run(() => // Set new feed SwitchTabs(_feeds.IndexOf(feed)); SelectedFeed.IsLoaded = false; - - //// Load articles - // - - }); } @@ -216,7 +201,7 @@ await Task.Run(() => SelectedFeed = _feeds[0]; } - this.Refresh(SelectedFeed); + Refresh(SelectedFeed); } catch { @@ -258,13 +243,7 @@ public FeedsViewModel(FeedsPage page) MessagingCenter.Subscribe(this, "AddFeed", (sender) => - { - - //UpdateOrders.Add(new UpdateOrder - //{ - // Update= UpdateOrder.FeedUpdate.Add, - // Feed= sender - //}); + {; AddFeed(sender); @@ -275,12 +254,7 @@ public FeedsViewModel(FeedsPage page) if (sender == null) return; - RemoveFeed(sender); - //UpdateOrders.Add(new UpdateOrder - //{ - // Update = UpdateOrder.FeedUpdate.Remove, - // Feed = sender - //}); + _ = RemoveFeed(sender); }); @@ -306,7 +280,7 @@ public FeedsViewModel(FeedsPage page) // Get selected article var article = Articles.FirstOrDefault(art => art.Id == id.ToString()); - await Share.RequestAsync(new ShareTextRequest + _ = Share.RequestAsync(new ShareTextRequest { Uri = article.Url, Title = "Share this article", @@ -336,10 +310,6 @@ await Share.RequestAsync(new ShareTextRequest App.SqLiteConn.InsertWithChildren(article, recursive: true); } - - - //Articles[_articles.IndexOf(article)] = article; - // Say the the bookmark has been updated MessagingCenter.Send
(article, "SwitchBookmark"); @@ -361,7 +331,7 @@ public Command FeedSelect return; //Feed nextFeed = Feeds.FirstOrDefault(feed => feed.Id == feedId); - int nextIndex = _feeds.IndexOf(_feeds.FirstOrDefault(feed => feed.Id == feedId));//_feeds.IndexOf(nextFeed); + int nextIndex = _feeds.IndexOf(_feeds.FirstOrDefault(feed => feed.Id == feedId)); if (nextIndex == -1) return; @@ -374,7 +344,6 @@ public Command FeedSelect if (i != nextIndex) { _feeds[i].IsLoaded = false; - //FeedTabs[i].IsSelected = false; } } @@ -393,13 +362,16 @@ public Command AddBookmark return _addBookmark; } } - public async void Refresh(Feed feed) + public void Refresh(Feed feed) { if (IsBusy) return; IsBusy = true; +#if DEBUG + Debug.WriteLine($"IsNotBusy: {IsNotBusy}"); +#endif CurrentApp.ShowLoadingIndicator(); // Determine wether or not it's the first time loading the article of this feed @@ -407,23 +379,19 @@ public async void Refresh(Feed feed) - await Task.Run(() => + _ = AggregateFeed(feed, isFirstLoad).ContinueWith(res => { - //SelectedFeed.Keywords = feed.Keywords; - AggregateFeed(feed, isFirstLoad); - // End the loading indicator IsRefreshing = false; IsBusy = false; CurrentApp.RemoveLoadingIndicator(); - - }); + }); } /// /// Load articles via search /// /// feed we are searching - private async void AggregateFeed(Feed feed, bool firstLoad = true) + private async Task AggregateFeed(Feed feed, bool firstLoad = true) { int indexFeed = _feeds.IndexOf(_feeds.FirstOrDefault(f => f.Id == feed.Id)); @@ -505,12 +473,12 @@ public Command GoToDetail { get { - return new Command(async (id) => + return new Command( (id) => { var articlePage = new ArticlePage(Articles.FirstOrDefault(art => art.Id == id.ToString())); - await App.Current.MainPage.Navigation.PushAsync(articlePage); + _ = App.Current.MainPage.Navigation.PushAsync(articlePage); }); ; } } @@ -569,7 +537,7 @@ private void UpdateArticles(List
articles, Feed feed, int indexFeed) /// Remove a feed from the list /// /// feed we want to remove - public async void RemoveFeed(Feed feed) + public async Task RemoveFeed(Feed feed) { CurrentApp.ShowLoadingIndicator(); IsBusy = true; @@ -617,10 +585,13 @@ await Task.Factory.StartNew(() => .ContinueWith((Action)((e) => { // Load selected feed - SwitchFeedAsync(feedInView); - })); + _ = SwitchFeedAsync(feedInView).ContinueWith((res) => + { - CurrentApp.RemoveLoadingIndicator(); + CurrentApp.RemoveLoadingIndicator(); + + }); + })); } /// /// Update a feed diff --git a/AresNews/AresNews/Views/FeedsPage.xaml b/AresNews/AresNews/Views/FeedsPage.xaml index a2458ef..3ac93f5 100644 --- a/AresNews/AresNews/Views/FeedsPage.xaml +++ b/AresNews/AresNews/Views/FeedsPage.xaml @@ -81,7 +81,7 @@ + HorizontalOptions="CenterAndExpand"> /// - private async void SearchArticles(ObservableRangeCollection
articles) + private async Task SearchArticles(ObservableRangeCollection
articles) { bool isUpdate = _prevSearch == SearchText; string timeParam = string.Empty; @@ -654,7 +650,7 @@ private async void SearchArticles(ObservableRangeCollection
articles) { if (isUpdate) timeParam = _articles?.First().FullPublishDate.ToUniversalTime().ToString("dd-MM-yyy_HH:mm:ss"); - articles = await App.WService.Get>(controller:"feeds", action: isUpdate ? "update": null, parameters: isUpdate? new string[] { timeParam } : null, jsonBody: $"{{\"search\": \"{SearchText}\"}}"); + articles = await App.WService.Get>(controller:"feeds", action: isUpdate ? "update": null, parameters: isUpdate? new string[] { timeParam } : null, jsonBody: $"{{\"search\": \"{SearchText}\"}}").ConfigureAwait(false); } // Offline search From 93664c6c2f54601b1413fd1ca4aae06f17075b01 Mon Sep 17 00:00:00 2001 From: bricefriha Date: Tue, 7 May 2024 16:10:13 +0100 Subject: [PATCH 3/8] Change in the colour scheme --- AresNews/AresNews/App.xaml | 4 +-- AresNews/AresNews/AppShell.xaml | 4 +-- .../AresNews/Controls/ArticlePreview.xaml | 4 +-- .../AresNews/Controls/BookmarkButton.xaml | 35 +++---------------- AresNews/AresNews/Views/FeedsPage.xaml | 2 +- AresNews/AresNews/Views/NewsPage.xaml | 15 ++------ 6 files changed, 13 insertions(+), 51 deletions(-) diff --git a/AresNews/AresNews/App.xaml b/AresNews/AresNews/App.xaml index ad79e03..1e87d3f 100644 --- a/AresNews/AresNews/App.xaml +++ b/AresNews/AresNews/App.xaml @@ -60,7 +60,7 @@ - + diff --git a/AresNews/AresNews/AppShell.xaml b/AresNews/AresNews/AppShell.xaml index f4198b2..d47e86c 100644 --- a/AresNews/AresNews/AppShell.xaml +++ b/AresNews/AresNews/AppShell.xaml @@ -9,7 +9,7 @@ Shell.TabBarTitleColor="{StaticResource Primary}" Shell.BackgroundColor="{StaticResource LightDark}" FlyoutBackgroundColor="{StaticResource LightDark}" - Shell.ForegroundColor="{StaticResource Primary}" + Shell.ForegroundColor="{StaticResource Light}" FlyoutWidth="270" xmlns:xct="http://xamarin.com/schemas/2020/toolkit" xmlns:viewmodels="clr-namespace:AresNews.ViewModels"> @@ -61,7 +61,7 @@ Text="{Binding Icon}" FontFamily="FaSolid" FontSize="23" - TextColor="{StaticResource Primary}"/> + TextColor="{StaticResource Light}"/>