Skip to content

Commit 70c13f3

Browse files
committed
Fix MediaElement stuttering
1 parent 2d758d2 commit 70c13f3

File tree

7 files changed

+205
-117
lines changed

7 files changed

+205
-117
lines changed

SmartImage.Lib 3/Engines/Impl/Search/TraceMoeEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public override async Task<SearchResult> GetResultAsync(SearchQuery query, Cance
9191
else if (tm.error != null) {
9292
Debug.WriteLine($"{Name} :: API error: {tm.error}", nameof(GetResultAsync));
9393
r.ErrorMessage = tm.error;
94-
94+
r.Status = SearchResultStatus.IllegalInput;
9595
if (r.ErrorMessage.Contains("Search queue is full")) {
9696
r.Status = SearchResultStatus.Unavailable;
9797
}
File renamed without changes.

SmartImage.UI/MainWindow.Handlers.cs

Lines changed: 72 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33

44
global using VBFS = Microsoft.VisualBasic.FileIO.FileSystem;
55
using System;
6+
using System.Collections.Concurrent;
7+
using System.Collections.Generic;
68
using System.Collections.ObjectModel;
79
using System.ComponentModel;
810
using System.Diagnostics;
911
using System.Globalization;
1012
using System.IO;
1113
using System.Linq;
14+
using System.Net.Http;
1215
using System.Threading;
1316
using System.Threading.Tasks;
1417
using System.Windows;
@@ -19,6 +22,8 @@
1922
using System.Windows.Media;
2023
using System.Windows.Threading;
2124
using Flurl;
25+
using Flurl.Http;
26+
using Kantan.Net.Utilities;
2227
using Kantan.Text;
2328
using Kantan.Utilities;
2429
using Microsoft.VisualBasic.FileIO;
@@ -139,6 +144,7 @@ private void Lb_Queue_PreviewDragOver(object sender, DragEventArgs e)
139144
private void Lb_Queue_SelectionChanged(object sender, SelectionChangedEventArgs e)
140145
{
141146
Debug.WriteLine($"lqs: {sender} {e}");
147+
142148
if (e.OriginalSource != sender) {
143149
return;
144150
}
@@ -182,11 +188,20 @@ private void Btn_Reset_Click(object sender, RoutedEventArgs e)
182188

183189
private void Btn_Restart_Click(object sender, RoutedEventArgs e)
184190
{
185-
var ctrl = Keyboard.Modifiers.HasFlag(ModifierKeys.Control);
186-
Restart(ctrl);
191+
Cancel();
192+
ClearResults(false);
193+
// Query.Dispose();
194+
var cpy = CurrentQueueItem;
195+
var i = Queue.IndexOf(cpy);
196+
Queue.Remove(cpy);
197+
cpy.Dispose();
198+
ResultModel rm = new ResultModel(cpy.Value);
199+
Queue.Insert(i, rm);
200+
CurrentQueueItem = rm;
201+
187202
// ClearQueue();
188203
// ClearResults(true);
189-
204+
ReloadToken();
190205
e.Handled = true;
191206
}
192207

@@ -204,10 +219,10 @@ private void Btn_Cancel_Click(object sender, RoutedEventArgs e)
204219
{
205220
Cancel();
206221
ReloadToken();
207-
Lb_Queue.IsEnabled = true;
208-
Btn_Run.IsEnabled = true;
222+
Lb_Queue.IsEnabled = true;
223+
Btn_Run.IsEnabled = true;
209224
Btn_Remove.IsEnabled = true;
210-
e.Handled = true;
225+
e.Handled = true;
211226
}
212227

213228
private void Btn_Run_Loaded(object sender, RoutedEventArgs e)
@@ -219,12 +234,13 @@ private void Btn_Run_Loaded(object sender, RoutedEventArgs e)
219234
private void Btn_Remove_Click(object sender, RoutedEventArgs e)
220235
{
221236
// var q = MathHelper.Wrap(QueueSelectedIndex + 1, Queue.Count);
222-
237+
223238
var old = CurrentQueueItem;
224239

225240
if (old == null || old.IsPrimitive) {
226241
goto ret;
227242
}
243+
228244
var i = Queue.IndexOf(old);
229245
Queue.Remove(old);
230246
old?.Dispose();
@@ -233,7 +249,7 @@ private void Btn_Remove_Click(object sender, RoutedEventArgs e)
233249

234250
/*if (m_queries.TryRemove(old, out var sq)) {
235251
m_resultMap.TryRemove(sq, out var result);
236-
252+
237253
foreach (var r in result) {
238254
r.Dispose();
239255
}
@@ -303,7 +319,8 @@ private void Btn_Delete_Click(object sender, RoutedEventArgs e)
303319
m_cbDispatch.Start();
304320
Btn_Delete.IsEnabled = ok;
305321
Btn_Remove.IsEnabled = ok;
306-
AdvanceQueue();
322+
ReloadToken();
323+
// AdvanceQueue();
307324
// FileSystem.SendFileToRecycleBin(InputText);
308325
e.Handled = true;
309326
}
@@ -341,14 +358,18 @@ private void Lv_Results_SelectionChanged(object sender, SelectionChangedEventArg
341358
UpdatePreview();
342359

343360
if (ri.Result.Metadata is TraceMoeEngine.TraceMoeDoc doc) {
361+
Dispatcher.InvokeAsync(async () =>
362+
{
363+
Me_Preview.ScrubbingEnabled = false;
364+
Me_Preview.UnloadedBehavior = MediaState.Close;
365+
Me_Preview.LoadedBehavior = MediaState.Manual;
366+
var uri = await DownloadAsync(doc.video);
367+
Me_Preview.Source = new Uri(uri, UriKind.Absolute);
368+
Me_Preview.Play();
369+
ShowMedia = true;
370+
Tb_Preview.Text = $"Preview: {ri.Name}";
371+
});
344372

345-
Me_Preview.ScrubbingEnabled = false;
346-
Me_Preview.UnloadedBehavior = MediaState.Close;
347-
Me_Preview.LoadedBehavior = MediaState.Manual;
348-
Me_Preview.Source = new Uri(doc.video, UriKind.Absolute);
349-
Me_Preview.Play();
350-
ShowMedia = true;
351-
Tb_Preview.Text = $"Preview: {ri.Name}";
352373
}
353374
else {
354375
CheckMedia();
@@ -365,17 +386,6 @@ private void Lv_Results_SelectionChanged(object sender, SelectionChangedEventArg
365386

366387
}
367388

368-
private void CheckMedia()
369-
{
370-
if (ShowMedia) {
371-
Me_Preview.Stop();
372-
Me_Preview.Close();
373-
Me_Preview.Source = null;
374-
ShowMedia = false;
375-
}
376-
else { }
377-
}
378-
379389
private void Lv_Results_KeyDown(object sender, KeyEventArgs e)
380390
{
381391
(bool ctrl, bool alt, bool shift) = ControlsHelper.GetModifiers();
@@ -573,6 +583,10 @@ private void Wnd_Main_Closing(object sender, CancelEventArgs e)
573583
{
574584
Debug.WriteLine("Main closing");
575585

586+
foreach ((string? key, string? value) in FileCache) {
587+
Debug.WriteLine($"Deleting {key}={value}");
588+
File.Delete(value);
589+
}
576590
}
577591

578592
private void Wnd_Main_KeyDown(object sender, KeyEventArgs e)
@@ -716,7 +730,7 @@ private void Btn_Filter_Click(object sender, RoutedEventArgs e)
716730
private void Tb_Search_TextChanged(object sender, TextChangedEventArgs e)
717731
{
718732
if (string.IsNullOrWhiteSpace(Tb_Search.Text)) /*&& m_resultMap.TryGetValue(Query, out var value))*/ {
719-
Lv_Results.ItemsSource = CurrentQueueItem.Results; //todo
733+
ClearSearch();
720734
}
721735
else {
722736
var selected = (string) Cb_SearchFields.SelectionBoxItem;
@@ -733,12 +747,37 @@ private void Tb_Search_TextChanged(object sender, TextChangedEventArgs e)
733747
return s.Contains(Tb_Search.Text, StringComparison.InvariantCultureIgnoreCase);
734748
});
735749
Lv_Results.ItemsSource = searchResults;
750+
IsSearching = true;
736751

737752
}
738753

739754
e.Handled = true;
740755
}
756+
757+
private void Lb_Queue_OnTargetUpdated(object? sender, DataTransferEventArgs e)
758+
{
759+
Debug.WriteLine($"{sender} {e}");
760+
761+
e.Handled = true;
762+
}
763+
764+
private void Tb_Input_OnTargetUpdated(object? sender, DataTransferEventArgs e)
765+
{
766+
// BindingExpression be = Tb_Input.GetBindingExpression(TextBox.TextProperty);
767+
// be?.UpdateSource();
768+
Debug.WriteLine($"target: {sender} {e}");
769+
770+
e.Handled = true;
771+
}
772+
773+
private void Tb_Input_OnSourceUpdated(object? sender, DataTransferEventArgs e)
774+
{
775+
Debug.WriteLine($"src: {sender} {e}");
776+
777+
e.Handled = true;
778+
}
741779
}
780+
742781
[ValueConversion(typeof(Url), typeof(String))]
743782
public class UrlConverter : IValueConverter
744783
{
@@ -747,7 +786,8 @@ public object Convert(object? value, Type targetType, object? parameter, Culture
747786
if (value == null) {
748787
return null;
749788
}
750-
var date = (Url)value;
789+
790+
var date = (Url) value;
751791
return date.ToString();
752792
}
753793

@@ -756,8 +796,9 @@ public object ConvertBack(object? value, Type targetType, object? parameter, Cul
756796
if (value == null) {
757797
return null;
758798
}
759-
string strValue = value as string;
760-
Url resultDateTime;
799+
800+
string strValue = value as string;
801+
Url resultDateTime;
761802

762803
return (Url) strValue;
763804
}

SmartImage.UI/MainWindow.State.cs

Lines changed: 45 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ public ResultItem CurrentResultItem
3232

3333
#endregion
3434

35+
#region
36+
3537
private void OpenResultWindow(ResultItem ri)
3638
{
3739
var sw = new ResultWindow(ri)
@@ -50,15 +52,15 @@ private void OpenResultWindow(ResultItem ri)
5052
sw.Show();
5153
}
5254

53-
private ResultItem? Find(Predicate<ResultItem> f)
55+
private ResultItem? FindResult(Predicate<ResultItem> f)
5456
{
5557
return Results.FirstOrDefault(t => f(t));
5658

5759
}
5860

59-
private int FindIndex(Predicate<ResultItem> f)
61+
private int FindResultIndex(Predicate<ResultItem> f)
6062
{
61-
var r = Find(f);
63+
var r = FindResult(f);
6264

6365
if (r == null) {
6466
return -1;
@@ -67,32 +69,23 @@ private int FindIndex(Predicate<ResultItem> f)
6769
return Results.IndexOf(r);
6870
}
6971

70-
private bool m_showMedia;
71-
72-
public bool ShowMedia
73-
{
74-
get => m_showMedia;
75-
set
76-
{
77-
if (value == m_showMedia) return;
78-
m_showMedia = value;
79-
OnPropertyChanged();
80-
}
81-
}
72+
#endregion
8273

83-
private bool m_isChecked;
74+
private bool m_isSelected;
8475

85-
public bool IsChecked
76+
public bool IsSelected
8677
{
87-
get { return m_isChecked; }
78+
get { return m_isSelected; }
8879
set
8980
{
90-
m_isChecked = value;
81+
m_isSelected = value;
9182
OnPropertyChanged();
9283
}
9384
}
9485

95-
public ResultModel? Find(string s)
86+
#region
87+
88+
public ResultModel? FindQueue(string s)
9689
{
9790
var x = Queue.FirstOrDefault(x => x.Value == s);
9891

@@ -123,7 +116,7 @@ public void ClearQueue()
123116

124117
public bool SetQueue(string s)
125118
{
126-
var x = Find(s);
119+
var x = FindQueue(s);
127120

128121
var b = x == null;
129122

@@ -136,4 +129,35 @@ public bool SetQueue(string s)
136129

137130
return b;
138131
}
132+
133+
#endregion
134+
135+
#region
136+
137+
private bool m_showMedia;
138+
139+
public bool ShowMedia
140+
{
141+
get => m_showMedia;
142+
set
143+
{
144+
if (value == m_showMedia) return;
145+
m_showMedia = value;
146+
OnPropertyChanged();
147+
}
148+
}
149+
150+
private void CheckMedia()
151+
{
152+
if (ShowMedia)
153+
{
154+
Me_Preview.Stop();
155+
Me_Preview.Close();
156+
Me_Preview.Source = null;
157+
ShowMedia = false;
158+
}
159+
else { }
160+
}
161+
162+
#endregion
139163
}

SmartImage.UI/MainWindow.xaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -470,7 +470,7 @@
470470
<ListView x:Name="Lv_Results" Margin="0,85,0,0"
471471
MouseDoubleClick="Lv_Results_MouseDoubleClick"
472472
Foreground="White"
473-
IsSelected="{Binding IsChecked, UpdateSourceTrigger=PropertyChanged}"
473+
IsSelected="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}"
474474
IsSynchronizedWithCurrentItem="True"
475475
Background="{DynamicResource Black2}"
476476
ItemsSource="{Binding CurrentQueueItem.Results}"

0 commit comments

Comments
 (0)