Skip to content

Commit aa13d6e

Browse files
committed
Search Working
1 parent 57ff76c commit aa13d6e

File tree

27 files changed

+328
-10
lines changed

27 files changed

+328
-10
lines changed

src/WeeklyXamarin.Mobile/WeeklyXamarin.Core/Helpers/Constants.cs

+10
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ namespace WeeklyXamarin.Core.Helpers
66
{
77
public static class Constants
88
{
9+
public static string HelloWorld = "hi";
10+
11+
912
public static class Analytics
1013
{
1114
public static class Events
@@ -43,6 +46,13 @@ public static class Paths
4346

4447
}
4548

49+
public static class PageMode
50+
{
51+
public const string Edition = "edition";
52+
public const string Bookmarks = "bookmarks";
53+
public const string Search = "search";
54+
}
55+
4656
public static class ParameterNames
4757
{
4858
public const string ArticleId = "ArticleId";

src/WeeklyXamarin.Mobile/WeeklyXamarin.Core/Models/Article.cs

+15
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using MvvmHelpers;
22
using System;
33
using System.Collections.Generic;
4+
using System.Linq;
45
using System.Text;
56

67
namespace WeeklyXamarin.Core.Models
@@ -17,5 +18,19 @@ public class Article : ObservableObject
1718
public string Id { get; set; }
1819
public string Category { get; set; }
1920
public bool IsSaved { get => isSaved; set => SetProperty(ref isSaved, value); }
21+
22+
private string SearchIndex
23+
{
24+
get
25+
{
26+
return $"{Title} {Description} {Author} {Category}".ToLower();
27+
}
28+
}
29+
30+
internal bool Matches(string searchText)
31+
{
32+
var terms = searchText.ToLower().Split(' ');
33+
return terms.Any(i => SearchIndex.Contains(i));
34+
}
2035
}
2136
}

src/WeeklyXamarin.Mobile/WeeklyXamarin.Core/Services/Acknowledgements.cs

+26
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,32 @@ public Acknowledgements()
3333
{
3434
// new Acknowledgement() {Person="", Activity=Activity.Follow},
3535

36+
// 11 November 2020
37+
new Acknowledgement() {Person="lukaspanni", Activity=Activity.Follow},
38+
new Acknowledgement() {Person="m0rde0n", Activity=Activity.Follow},
39+
new Acknowledgement() {Person="dreener", Activity=Activity.Follow},
40+
new Acknowledgement() {Person="Gamedeveloper0", Activity=Activity.Follow},
41+
new Acknowledgement() {Person="mayyhhem", Activity=Activity.Follow},
42+
new Acknowledgement() {Person="DerNerd", Activity=Activity.Follow},
43+
new Acknowledgement() {Person="WillyWutz", Activity=Activity.Follow},
44+
new Acknowledgement() {Person="alenussgipfele27", Activity=Activity.Follow},
45+
new Acknowledgement() {Person="Messmeryzed", Activity=Activity.Follow},
46+
new Acknowledgement() {Person="muerc", Activity=Activity.Follow},
47+
new Acknowledgement() {Person="noobrunner", Activity=Activity.Follow},
48+
new Acknowledgement() {Person="l4zy_pigeon", Activity=Activity.Follow},
49+
new Acknowledgement() {Person="ravenonj", Activity=Activity.Follow},
50+
new Acknowledgement() {Person="gabse191", Activity=Activity.Follow},
51+
new Acknowledgement() {Person="ProfAHeil", Activity=Activity.Follow},
52+
new Acknowledgement() {Person="ProfAHeil", Activity=Activity.Raid},
53+
new Acknowledgement() {Person="ProfAHeil", Activity=Activity.DerailedEverything},
54+
55+
new Acknowledgement() {Person="moijjo", Activity=Activity.Follow},
56+
new Acknowledgement() {Person="BenBtg", Activity=Activity.Subscribe},
57+
new Acknowledgement() {Person="DavidWengier", Activity=Activity.Raid},
58+
new Acknowledgement() {Person="correiavictor92", Activity=Activity.Follow},
59+
60+
61+
3662
// 30 September 2020
3763
new Acknowledgement() {Person="r2_au", Activity=Activity.DerailedEverything },
3864
new Acknowledgement() {Person="AbhishekSY", Activity=Activity.Follow},

src/WeeklyXamarin.Mobile/WeeklyXamarin.Core/Services/GithubDataStore.cs

+17
Original file line numberDiff line numberDiff line change
@@ -154,5 +154,22 @@ public void UnbookmarkArticle(Article articleToRemove)
154154
_barrel.Add(key: Constants.BarrelNames.SavedArticles, data: savedArticleList, expireIn: TimeSpan.FromDays(999));
155155
}
156156

157+
public async IAsyncEnumerable<Article> GetArticleFromSearchAsync(string searchText, bool forceRefresh)
158+
{
159+
var editions = await GetEditionsAsync(forceRefresh);
160+
161+
foreach (var edition in editions)
162+
{
163+
var articles = await GetEditionAsync(edition.Id, forceRefresh);
164+
165+
foreach (var article in articles.Articles)
166+
{
167+
if (article.Matches(searchText))
168+
{
169+
yield return article;
170+
}
171+
}
172+
}
173+
}
157174
}
158175
}

src/WeeklyXamarin.Mobile/WeeklyXamarin.Core/Services/IDataStore.cs

+1
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,6 @@ public interface IDataStore
1515
SavedArticleThing GetSavedArticles(bool forceRefresh);
1616
void BookmarkArticle(Article articleToSave);
1717
void UnbookmarkArticle(Article articleToRemove);
18+
IAsyncEnumerable<Article> GetArticleFromSearchAsync(string searchText, bool forceRefresh);
1819
}
1920
}

src/WeeklyXamarin.Mobile/WeeklyXamarin.Core/Services/MockDataStore.cs

+5
Original file line numberDiff line numberDiff line change
@@ -90,5 +90,10 @@ SavedArticleThing IDataStore.GetSavedArticles(bool forceRefresh)
9090
{
9191
throw new NotImplementedException();
9292
}
93+
94+
public IAsyncEnumerable<Article> GetArticleFromSearchAsync(string searchText, bool forceRefresh)
95+
{
96+
throw new NotImplementedException();
97+
}
9398
}
9499
}

src/WeeklyXamarin.Mobile/WeeklyXamarin.Core/ViewModels/ArticlesListViewModel.cs

+18-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class ArticlesListViewModel : ViewModelBase
2020
readonly IBrowser browser;
2121
readonly IPreferences preferences;
2222
readonly IShare share;
23+
private bool _showSearch;
2324

2425
public ObservableRangeCollection<Article> Articles { get; set; } = new ObservableRangeCollection<Article>();
2526
public AsyncCommand<bool> LoadArticlesCommand { get; set; }
@@ -30,6 +31,13 @@ public class ArticlesListViewModel : ViewModelBase
3031
public string EditionId { get; set; }
3132
public bool ShowSaved { get; set; }
3233

34+
public string SearchText { get; set; }
35+
public bool ShowSearch
36+
{
37+
get => _showSearch;
38+
set => SetProperty(ref _showSearch, value);
39+
}
40+
3341
public ArticlesListViewModel(INavigationService navigation, IDataStore dataStore, IBrowser browser, IAnalytics analytics, IPreferences preferences, IShare share) : base(navigation, analytics)
3442
{
3543
Title = "Articles";
@@ -44,10 +52,10 @@ public ArticlesListViewModel(INavigationService navigation, IDataStore dataStore
4452
this.share = share;
4553
}
4654

55+
4756
private async Task ExecuteNavigateBackCommand()
4857
{
4958
await navigation.GoToAsync(Constants.Navigation.Paths.Editions);
50-
//await navigation.GoBackAsync();
5159
}
5260

5361
private async Task ExecuteShareCommand(Article article)
@@ -100,13 +108,22 @@ async Task ExecuteLoadArticlesCommand(bool forceRefresh = false)
100108
{
101109
Articles.Clear();
102110

111+
103112
if (ShowSaved)
104113
{
105114
// get the saved
106115
var articles = dataStore.GetSavedArticles(forceRefresh);
107116
Articles.AddRange(articles.Articles);
108117
Title = "Bookmarks";
109118
}
119+
else if (ShowSearch)
120+
{
121+
var articlesAsync = dataStore.GetArticleFromSearchAsync(SearchText, forceRefresh);
122+
await foreach (Article article in articlesAsync)
123+
{
124+
Articles.Add(article);
125+
}
126+
}
110127
else
111128
{
112129
Title = $"Edition {EditionId}";

src/WeeklyXamarin.Mobile/WeeklyXamarin.Core/WeeklyXamarin.Core.csproj

+2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
5+
<LangVersion>latest</LangVersion>
56
</PropertyGroup>
67

78
<ItemGroup>
9+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="5.0.0" />
810
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="3.1.7" />
911
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="3.1.7" />
1012
<PackageReference Include="MonkeyCache.FileStore" Version="1.3.0" />

src/WeeklyXamarin.Mobile/WeeklyXamarin.Mobile.Android/Resources/Resource.designer.cs

+8-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Loading
Loading
Loading
Loading

src/WeeklyXamarin.Mobile/WeeklyXamarin.Mobile.Android/WeeklyXamarin.Mobile.Android.csproj

+18
Original file line numberDiff line numberDiff line change
@@ -286,5 +286,23 @@
286286
<ItemGroup>
287287
<AndroidResource Include="Resources\drawable\bookmarkanimation.gif" />
288288
</ItemGroup>
289+
<ItemGroup>
290+
<AndroidResource Include="Resources\drawable-hdpi\tab_search.png" />
291+
</ItemGroup>
292+
<ItemGroup>
293+
<AndroidResource Include="Resources\drawable-ldpi\tab_search.png" />
294+
</ItemGroup>
295+
<ItemGroup>
296+
<AndroidResource Include="Resources\drawable-mdpi\tab_search.png" />
297+
</ItemGroup>
298+
<ItemGroup>
299+
<AndroidResource Include="Resources\drawable-xhdpi\tab_search.png" />
300+
</ItemGroup>
301+
<ItemGroup>
302+
<AndroidResource Include="Resources\drawable-xxhdpi\tab_search.png" />
303+
</ItemGroup>
304+
<ItemGroup>
305+
<AndroidResource Include="Resources\drawable-xxxhdpi\tab_search.png" />
306+
</ItemGroup>
289307
<Import Project="$(MSBuildExtensionsPath)\Xamarin\Android\Xamarin.Android.CSharp.targets" />
290308
</Project>
Loading
Loading
Loading

src/WeeklyXamarin.Mobile/WeeklyXamarin.Mobile.iOS/WeeklyXamarin.Mobile.iOS.csproj

+10-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<ErrorReport>prompt</ErrorReport>
5050
<WarningLevel>4</WarningLevel>
5151
<MtouchArch>ARM64</MtouchArch>
52-
<CodesignKey>Apple Development: Kym Phillpotts (FAY47Y7AK4)</CodesignKey>
52+
<CodesignKey>Apple Development: Kym Phillpotts %28FAY47Y7AK4%29</CodesignKey>
5353
<MtouchDebug>true</MtouchDebug>
5454
<CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
5555
<MtouchLink>Full</MtouchLink>
@@ -291,6 +291,15 @@
291291
<ItemGroup>
292292
<BundleResource Include="Resources\bookmarkanimation.gif" />
293293
</ItemGroup>
294+
<ItemGroup>
295+
<BundleResource Include="Resources\tab_search.png" />
296+
</ItemGroup>
297+
<ItemGroup>
298+
<BundleResource Include="Resources\tab_search%402x.png" />
299+
</ItemGroup>
300+
<ItemGroup>
301+
<BundleResource Include="Resources\tab_search%403x.png" />
302+
</ItemGroup>
294303
<ProjectExtensions>
295304
<VisualStudio>
296305
<UserProperties XamarinHotReloadUnhandledDeviceExceptionWeeklyXamarinMobileiOSHideInfoBar="True" />

src/WeeklyXamarin.Mobile/WeeklyXamarin.Mobile/AppShell.xaml

+16-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
xmlns="http://xamarin.com/schemas/2014/forms"
55
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
66
xmlns:d="http://xamarin.com/schemas/2014/forms/design"
7+
xmlns:helpers="clr-namespace:WeeklyXamarin.Core.Helpers;assembly=WeeklyXamarin.Core"
78
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
89
xmlns:views="clr-namespace:WeeklyXamarin.Mobile.Views"
910
Title="WeeklyXamarin.Mobile"
@@ -44,7 +45,21 @@
4445
<DataTemplate>
4546
<views:ArticlesListPage>
4647
<x:Arguments>
47-
<x:Boolean>True</x:Boolean>
48+
<x:String>bookmarks</x:String>
49+
<!--<x:Static DataType="{x:Type x:String}" Member="helpers:Constants.Navigation.PageMode.Bookmarks" />-->
50+
</x:Arguments>
51+
</views:ArticlesListPage>
52+
</DataTemplate>
53+
</ShellContent.ContentTemplate>
54+
</ShellContent>
55+
</Tab>
56+
<Tab Title="Search" Icon="tab_search.png">
57+
<ShellContent>
58+
<ShellContent.ContentTemplate>
59+
<DataTemplate>
60+
<views:ArticlesListPage>
61+
<x:Arguments>
62+
<x:String>search</x:String>
4863
</x:Arguments>
4964
</views:ArticlesListPage>
5065
</DataTemplate>

src/WeeklyXamarin.Mobile/WeeklyXamarin.Mobile/AppShell.xaml.cs

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ public partial class AppShell : Xamarin.Forms.Shell
1010
{
1111
public AppShell()
1212
{
13+
// WeeklyXamarin.Core.Helpers.Constants.Navigation.PageMode.Bookmarks;
14+
1315
InitializeComponent();
1416
Routing.RegisterRoute(Constants.Navigation.Paths.Articles,typeof(ArticlesListPage));
1517
}

src/WeeklyXamarin.Mobile/WeeklyXamarin.Mobile/Views/ArticlesListPage.xaml

+16
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,22 @@
1515
x:DataType="viewmodels:ArticlesListViewModel"
1616
x:TypeArguments="viewmodels:ArticlesListViewModel"
1717
mc:Ignorable="d">
18+
<Shell.TitleView>
19+
<Entry
20+
ClearButtonVisibility="WhileEditing"
21+
IsVisible="{Binding ShowSearch}"
22+
Placeholder="Search"
23+
PlaceholderColor="White"
24+
ReturnCommand="{Binding LoadArticlesCommand}"
25+
Text="{Binding SearchText}"
26+
TextColor="White">
27+
<Entry.ReturnCommandParameter>
28+
<x:Boolean>
29+
False
30+
</x:Boolean>
31+
</Entry.ReturnCommandParameter>
32+
</Entry>
33+
</Shell.TitleView>
1834

1935
<RefreshView Command="{Binding LoadArticlesCommand}" IsRefreshing="{Binding IsBusy, Mode=TwoWay}">
2036
<RefreshView.CommandParameter>

src/WeeklyXamarin.Mobile/WeeklyXamarin.Mobile/Views/ArticlesListPage.xaml.cs

+6-2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
using System.IO;
1515
using System.Reflection;
1616
using Lottie.Forms;
17+
using WeeklyXamarin.Core.Helpers;
1718

1819
namespace WeeklyXamarin.Mobile.Views
1920
{
@@ -24,22 +25,25 @@ namespace WeeklyXamarin.Mobile.Views
2425
public partial class ArticlesListPage : PageBase<ArticlesListViewModel>
2526
{
2627
private readonly bool showSaved;
28+
private readonly bool showSearch;
2729

2830
public string EditionId { get; set; }
2931
public ArticlesListPage()
3032
{
3133
InitializeComponent();
3234
}
33-
public ArticlesListPage(bool showSaved) : this()
35+
public ArticlesListPage(string pageMode) : this()
3436
{
35-
this.showSaved = showSaved;
37+
this.showSaved = pageMode == Constants.Navigation.PageMode.Bookmarks;
38+
this.showSearch = pageMode == Constants.Navigation.PageMode.Search;
3639
}
3740

3841
protected override async void OnAppearing()
3942
{
4043
base.OnAppearing();
4144

4245
ViewModel.ShowSaved = showSaved;
46+
ViewModel.ShowSearch = showSearch;
4347
ViewModel.EditionId = EditionId;
4448

4549
await ViewModel.LoadArticlesCommand.ExecuteAsync(false);
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>netcoreapp3.1</TargetFramework>
6+
<LangVersion>latest</LangVersion>
7+
</PropertyGroup>
8+
9+
<ItemGroup>
10+
<PackageReference Include="System.ServiceModel.Syndication" Version="4.7.0" />
11+
</ItemGroup>
12+
13+
<ItemGroup>
14+
<ProjectReference Include="..\..\src\WeeklyXamarin.Mobile\WeeklyXamarin.Core\WeeklyXamarin.Core.csproj" />
15+
</ItemGroup>
16+
17+
</Project>

0 commit comments

Comments
 (0)