@@ -117,11 +117,9 @@ public void UpdateSettings(PowerLauncherPluginSettings settings)
117117 x . Key == nameof ( Setting . FaviconDbPathPriority ) ) ? . ComboBoxValue ;
118118 if ( comboBoxValue != null )
119119 Setting . FaviconDbPathPriority = ( Settings . FaviconDbPathPriorityItem ) comboBoxValue ;
120- /*if (Setting.Port != null)
121- {
122- WsUtils.RestartWebSocketServer(Setting.Port);
123- }*/
124-
120+ Setting . MaxResults = Convert . ToInt32 ( settings . AdditionalOptions . FirstOrDefault ( x =>
121+ x . Key == nameof ( Setting . MaxResults ) ) ? . NumberValue ?? 20 ) ;
122+ FaviconFetcher . ClearCache ( ) ;
125123 }
126124
127125 public IEnumerable < PluginAdditionalOption > AdditionalOptions => Setting . AdditionalOptions ;
@@ -135,43 +133,62 @@ public List<Result> Query(Query query, bool delayedExecution)
135133 {
136134 browserTabs . AddRange ( RuntimeStaticData . BrowserTabData [ key ] . Select ( tab => Tuple . Create ( key , tab ) ) ) ;
137135 }
138- return browserTabs . Select ( tuple =>
136+
137+ var maxResults = Setting . MaxResults ;
138+
139+ var scored = browserTabs . Select ( tuple =>
140+ {
141+ var tab = tuple . Item2 ;
142+ var score = string . IsNullOrEmpty ( search )
143+ ? 0
144+ : ( int ) ( StringMatcher . FuzzySearch ( search , tab . Title ) . Score * Setting . TitleWeight +
145+ StringMatcher . FuzzySearch ( search , tab . Url ) . Score * Setting . UrlWeight ) ;
146+ return ( tuple , score ) ;
147+ } ) ;
148+
149+ var filtered = string . IsNullOrEmpty ( search )
150+ ? scored
151+ : scored . Where ( x => x . score > 0 ) ;
152+
153+ var topResults = filtered
154+ . OrderByDescending ( x => x . score )
155+ . Take ( maxResults ) ;
156+
157+ return [ .. topResults . Select ( x =>
158+ {
159+ var browserTab = x . tuple . Item2 ;
160+ var browser = x . tuple . Item1 ;
161+ var faviconBin = FaviconFetcher . FetchFaviconLocalDatabase ( browserTab . Url ) ;
162+
163+ var result = new Result
139164 {
140- var browserTab = tuple . Item2 ;
141- var browser = tuple . Item1 ;
142- var faviconBin = FaviconFetcher . FetchFaviconLocalDatabase ( browserTab . Url ) ;
143- var result = new Result
165+ QueryTextDisplay = browserTab . Title ,
166+ Title = browserTab . Title ,
167+ SubTitle = browserTab . Url ,
168+ ToolTipData = new ToolTipData ( browserTab . Title , browserTab . Status ) ,
169+ Action = context =>
144170 {
145- QueryTextDisplay = browserTab . Title ,
146- Title = browserTab . Title ,
147- SubTitle = browserTab . Url ,
148- ToolTipData = new ToolTipData ( browserTab . Title , browserTab . Status ) ,
149- Action = context =>
150- {
151- Clipboard . SetDataObject ( browserTab . Title ) ;
152- RuntimeStaticData . SwitchToTabAction ( browserTab ) ;
153- _ = WebSocketUtils . SendMessageAsync ( $ "switch { browserTab . Id } { browserTab . WindowId } ",
154- browser ) ;
155- return true ;
156- } ,
157- ContextData = new Tuple < WebSocket , BrowserTab > ( browser , browserTab ) ,
158- Score =
159- ( int ) ( StringMatcher . FuzzySearch ( search , browserTab . Title ) . Score * Setting . TitleWeight +
160- StringMatcher . FuzzySearch ( search , browserTab . Url ) . Score * Setting . UrlWeight ) ,
161- Glyph = "\xE838 "
162- } ;
163- if ( faviconBin != null && faviconBin . Length > 0 )
164- {
165- result . Icon = ( ) => GetImageSourceFromRawPngData ( faviconBin ) ;
166- }
167- else
168- {
169- result . IcoPath = IconPath ;
170- }
171+ Clipboard . SetDataObject ( browserTab . Title ) ;
172+ RuntimeStaticData . SwitchToTabAction ( browserTab ) ;
173+ _ = WebSocketUtils . SendMessageAsync ( $ "switch { browserTab . Id } { browserTab . WindowId } ",
174+ browser ) ;
175+ return true ;
176+ } ,
177+ ContextData = new Tuple < WebSocket , BrowserTab > ( browser , browserTab ) ,
178+ Score = x . score ,
179+ Glyph = "\xE838 "
180+ } ;
181+ if ( faviconBin != null && faviconBin . Length > 0 )
182+ {
183+ result . Icon = ( ) => GetImageSourceFromRawPngData ( faviconBin ) ;
184+ }
185+ else
186+ {
187+ result . IcoPath = IconPath ;
188+ }
171189
172- return result ;
173- } )
174- . ToList ( ) ;
190+ return result ;
191+ } ) ] ;
175192 }
176193
177194 private static BitmapImage GetImageSourceFromRawPngData ( byte [ ] rawPngData )
0 commit comments