Veloe преди 1 година
родител
ревизия
dbf94a4806

+ 2 - 2
VeloeAvaloniaKemonoPartyApp/VeloeAvaloniaKemonoPartyApp.Desktop/VeloeAvaloniaKemonoPartyApp.Desktop.csproj

@@ -10,8 +10,8 @@
 
   <PropertyGroup>
     <ApplicationManifest>app.manifest</ApplicationManifest>
-    <AssemblyVersion>1.0.0.89</AssemblyVersion>
-    <FileVersion>1.0.0.89</FileVersion>
+    <AssemblyVersion>1.0.0.95</AssemblyVersion>
+    <FileVersion>1.0.0.95</FileVersion>
   </PropertyGroup>
 
   <ItemGroup>

+ 2 - 7
VeloeAvaloniaKemonoPartyApp/VeloeAvaloniaKemonoPartyApp/Models/Post.cs

@@ -37,14 +37,9 @@ namespace VeloeAvaloniaKemonoPartyApp.Models
         [JsonPropertyName("user")]
         public string User { get; set; }
 
-        public static async Task<IEnumerable<Post>> InitPostsAsync(Creator creator)
+        public static async Task<IEnumerable<Post>> LoadPostsAsync(Creator creator, int start, string search = "")
         {
-            return await s_httpClient.GetPostsList(creator.Id,creator.Service,0);
-        }
-
-        public static async Task<IEnumerable<Post>> LoadPostsAsync(Creator creator, int start)
-        {
-            return await s_httpClient.GetPostsList(creator.Id, creator.Service, start);
+            return await s_httpClient.GetPostsList(creator.Id, creator.Service, start, search);
         }
 
         private static KemonoHttpClient s_httpClient = new();

+ 2 - 2
VeloeAvaloniaKemonoPartyApp/VeloeAvaloniaKemonoPartyApp/Services/HttpClient.cs

@@ -52,9 +52,9 @@ namespace VeloeKemonoPartyApp.Services
             }
         }
 
-        public async Task<List<Post>> GetPostsList(string id, string service, int start)
+        public async Task<List<Post>> GetPostsList(string id, string service, int start, string search = "")
         {
-            using (HttpResponseMessage response = await httpClient.GetAsync($"https://kemono.su/api/v1/{service}/user/{id}?o={start}"))
+            using (HttpResponseMessage response = await httpClient.GetAsync($"https://kemono.su/api/v1/{service}/user/{id}?o={start}" + (!string.IsNullOrEmpty(search) ? $"&q={search}" : string.Empty)))
             using (HttpContent content = response.Content)
             {
                 string jsonString = await response.Content.ReadAsStringAsync();

+ 2 - 2
VeloeAvaloniaKemonoPartyApp/VeloeAvaloniaKemonoPartyApp/VeloeAvaloniaKemonoPartyApp.csproj

@@ -4,8 +4,8 @@
     <Nullable>enable</Nullable>
     <LangVersion>latest</LangVersion>
     <AvaloniaUseCompiledBindingsByDefault>true</AvaloniaUseCompiledBindingsByDefault>
-    <AssemblyVersion>1.0.0.249</AssemblyVersion>
-    <FileVersion>1.0.0.249</FileVersion>
+    <AssemblyVersion>1.0.0.258</AssemblyVersion>
+    <FileVersion>1.0.0.258</FileVersion>
   </PropertyGroup>
 
   

+ 17 - 4
VeloeAvaloniaKemonoPartyApp/VeloeAvaloniaKemonoPartyApp/ViewModels/CreatorPostsViewModel.cs

@@ -4,6 +4,7 @@ using System;
 using System.Collections.ObjectModel;
 using System.ComponentModel;
 using System.Linq;
+using System.Reactive.Linq;
 using System.Threading;
 using System.Threading.Tasks;
 using VeloeAvaloniaKemonoPartyApp.Models;
@@ -22,6 +23,11 @@ namespace VeloeAvaloniaKemonoPartyApp.ViewModels
         {
             _dialogService = dialogService;
             Close = ReactiveCommand.Create(CloseImpl);
+
+            this.WhenAnyValue(x => x.SearchText)
+                .Throttle(TimeSpan.FromMilliseconds(400))
+                .ObserveOn(RxApp.MainThreadScheduler)
+                .Subscribe(InitPosts!);
         }
 
         private CancellationTokenSource? _cancellationTokenSource;
@@ -32,7 +38,14 @@ namespace VeloeAvaloniaKemonoPartyApp.ViewModels
             get => _isBusy;
             set => this.RaiseAndSetIfChanged(ref _isBusy, value);
         }
-        
+
+        private string _searchText = string.Empty;
+        public string SearchText
+        {
+            get => _searchText;
+            set => this.RaiseAndSetIfChanged(ref _searchText, value);
+        }
+
         private Creator _creator;
         public Creator Creator 
         {
@@ -44,7 +57,7 @@ namespace VeloeAvaloniaKemonoPartyApp.ViewModels
             } 
         }
 
-        private async void InitPosts()
+        private async void InitPosts(string search = "")
         {
             _cancellationTokenSource?.Cancel();
             _cancellationTokenSource = new CancellationTokenSource();
@@ -55,7 +68,7 @@ namespace VeloeAvaloniaKemonoPartyApp.ViewModels
 
             if (_creator is not null)
             {
-                var posts = await Post.InitPostsAsync(_creator);
+                var posts = await Post.LoadPostsAsync(_creator,0,search);
 
                 foreach (var post in posts)
                 {
@@ -87,7 +100,7 @@ namespace VeloeAvaloniaKemonoPartyApp.ViewModels
             {
                 var startIndex = Posts.Count;
 
-                var posts = await Post.LoadPostsAsync(_creator,startIndex);
+                var posts = await Post.LoadPostsAsync(_creator,startIndex,SearchText);
 
                 foreach (var post in posts)
                 {

+ 5 - 2
VeloeAvaloniaKemonoPartyApp/VeloeAvaloniaKemonoPartyApp/Views/CreatorPostsView.axaml

@@ -16,10 +16,13 @@
 	<DockPanel>
 		<ScrollViewer>
 			<StackPanel>
+				<StackPanel Margin="10 10 10 10">
+					<TextBox Watermark="Search in posts..." Text="{Binding SearchText}"/>
+					<ProgressBar IsIndeterminate="True" IsVisible="{Binding IsBusy}"/>
+				</StackPanel>
 				<ItemsControl 
 					ItemsSource="{Binding Posts}"
-					Background="Transparent"   
-					Margin="0 20">
+					Background="Transparent">
 					<ItemsControl.ItemsPanel>
 						<ItemsPanelTemplate>
 							<VirtualizingStackPanel />					

+ 1 - 1
VeloeAvaloniaKemonoPartyApp/VeloeAvaloniaKemonoPartyApp/Views/CreatorsView.axaml

@@ -18,7 +18,7 @@
 			<ProgressBar IsIndeterminate="True" IsVisible="{Binding IsBusy}"/>
 		</StackPanel>
 		<ListBox ItemsSource="{Binding SearchResults}" SelectedItem="{Binding SelectedAlbum}" SelectionMode="Single"
-				 Background="Transparent" Margin="0 20" Gestures.PullGesture="ReloadCreatorsSource">
+				 Background="Transparent" Margin="0 10" Gestures.PullGesture="ReloadCreatorsSource">
 			<ListBox.ItemsPanel>
 				<ItemsPanelTemplate>
 					<StackPanel/>