Compare commits

...

7 Commits

Author SHA1 Message Date
c3c35611fd chore(owlry-core): bump version to 1.1.3 2026-03-28 11:35:23 +01:00
5ecd0a6412 chore(owlry): bump version to 1.0.5 2026-03-28 11:35:22 +01:00
6fe7213b6f fix(core): group auto-detect plugin results together in ranking
Calculator and converter results now get a 10k grouping bonus so all
their results stay together above websearch/filesearch. Previously
websearch (priority 9000) would interleave with converter results
(9000, 8999, 8998...) since they had the same base priority.
2026-03-28 11:34:26 +01:00
b768bfd181 chore(ui): remove dead update_results method 2026-03-28 11:30:40 +01:00
c9a1ff28f4 fix(ui): only highlight calc and converter, not websearch/filesearch
Websearch is a generic fallback — it always shows a result, so
highlighting it adds no signal. Filesearch returns fuzzy matches,
not auto-detected conversions. Only calc and conv produce direct
answers that deserve highlighting.
2026-03-28 11:28:37 +01:00
623572ec14 fix: use git add -A in aur-publish-pkg 2026-03-28 11:20:57 +01:00
5196255594 chore(aur): update owlry 1.0.4, owlry-core 1.1.2 2026-03-28 11:19:05 +01:00
11 changed files with 32 additions and 57 deletions

4
Cargo.lock generated
View File

@@ -2536,7 +2536,7 @@ dependencies = [
[[package]]
name = "owlry"
version = "1.0.4"
version = "1.0.5"
dependencies = [
"chrono",
"clap",
@@ -2557,7 +2557,7 @@ dependencies = [
[[package]]
name = "owlry-core"
version = "1.1.2"
version = "1.1.3"
dependencies = [
"chrono",
"ctrlc",

View File

@@ -1,13 +1,13 @@
pkgbase = owlry-core
pkgdesc = Core daemon for the Owlry application launcher — manages plugins, providers, and search
pkgver = 1.1.1
pkgver = 1.1.2
pkgrel = 1
url = https://somegit.dev/Owlibou/owlry
arch = x86_64
license = GPL-3.0-or-later
makedepends = cargo
depends = gcc-libs
source = owlry-core-1.1.1.tar.gz::https://somegit.dev/Owlibou/owlry/archive/owlry-core-v1.1.1.tar.gz
b2sums = 2924468a55fa62979b324c0c48cff2fa13e348f1d21a6ca5e19596bfbeb88fc932b285586275b219bcd75cacc72c1d1d9fecfe13c90dcbc4b258a193bcda1047
source = owlry-core-1.1.2.tar.gz::https://somegit.dev/Owlibou/owlry/archive/owlry-core-v1.1.2.tar.gz
b2sums = 2445d097fd6472fd2b6db063ed3f68dc4c5707dfb3fab23b3b9b6b5231732a4df9502112337a513ec7c34a2e613ea895af3bddd54dcfd58b104c0265c1c78034
pkgname = owlry-core

View File

@@ -1,6 +1,6 @@
# Maintainer: vikingowl <christian@nachtigall.dev>
pkgname=owlry-core
pkgver=1.1.1
pkgver=1.1.2
pkgrel=1
pkgdesc='Core daemon for the Owlry application launcher — manages plugins, providers, and search'
arch=('x86_64')
@@ -9,7 +9,7 @@ license=('GPL-3.0-or-later')
depends=('gcc-libs')
makedepends=('cargo')
source=("$pkgname-$pkgver.tar.gz::https://somegit.dev/Owlibou/owlry/archive/owlry-core-v$pkgver.tar.gz")
b2sums=('2924468a55fa62979b324c0c48cff2fa13e348f1d21a6ca5e19596bfbeb88fc932b285586275b219bcd75cacc72c1d1d9fecfe13c90dcbc4b258a193bcda1047')
b2sums=('2445d097fd6472fd2b6db063ed3f68dc4c5707dfb3fab23b3b9b6b5231732a4df9502112337a513ec7c34a2e613ea895af3bddd54dcfd58b104c0265c1c78034')
prepare() {
cd "owlry"

View File

@@ -1,6 +1,6 @@
pkgbase = owlry
pkgdesc = Lightweight Wayland application launcher with plugin support
pkgver = 1.0.3
pkgver = 1.0.4
pkgrel = 1
url = https://somegit.dev/Owlibou/owlry
arch = x86_64
@@ -28,7 +28,7 @@ pkgbase = owlry
optdepends = owlry-plugin-pomodoro: pomodoro timer widget
optdepends = owlry-lua: Lua runtime for user plugins
optdepends = owlry-rune: Rune runtime for user plugins
source = owlry-1.0.3.tar.gz::https://somegit.dev/Owlibou/owlry/archive/owlry-v1.0.3.tar.gz
b2sums = e20a227d0d5fd957155f7edbe5eadb24acf22b1f89df0620a619770f20f568621350a09973fe4d06aa0e4302e2929d4d770ad06e3c20c619af04eba17ab796de
source = owlry-1.0.4.tar.gz::https://somegit.dev/Owlibou/owlry/archive/owlry-v1.0.4.tar.gz
b2sums = 2445d097fd6472fd2b6db063ed3f68dc4c5707dfb3fab23b3b9b6b5231732a4df9502112337a513ec7c34a2e613ea895af3bddd54dcfd58b104c0265c1c78034
pkgname = owlry

View File

@@ -1,6 +1,6 @@
# Maintainer: vikingowl <christian@nachtigall.dev>
pkgname=owlry
pkgver=1.0.3
pkgver=1.0.4
pkgrel=1
pkgdesc="Lightweight Wayland application launcher with plugin support"
arch=('x86_64')
@@ -29,7 +29,7 @@ optdepends=(
'owlry-rune: Rune runtime for user plugins'
)
source=("$pkgname-$pkgver.tar.gz::https://somegit.dev/Owlibou/owlry/archive/owlry-v$pkgver.tar.gz")
b2sums=('e20a227d0d5fd957155f7edbe5eadb24acf22b1f89df0620a619770f20f568621350a09973fe4d06aa0e4302e2929d4d770ad06e3c20c619af04eba17ab796de')
b2sums=('2445d097fd6472fd2b6db063ed3f68dc4c5707dfb3fab23b3b9b6b5231732a4df9502112337a513ec7c34a2e613ea895af3bddd54dcfd58b104c0265c1c78034')
prepare() {
cd "owlry"

View File

@@ -1,6 +1,6 @@
[package]
name = "owlry-core"
version = "1.1.2"
version = "1.1.3"
edition.workspace = true
rust-version.workspace = true
license.workspace = true

View File

@@ -602,8 +602,20 @@ impl ProviderManager {
let dynamic_results = provider.query(query);
// Priority comes from plugin-declared priority field
let base_score = provider.priority() as i64;
// Auto-detect plugins (calc, conv) get a grouping bonus so
// all their results stay together above generic search results
let grouping_bonus: i64 = match provider.provider_type() {
ProviderType::Plugin(ref id)
if matches!(id.as_str(), "calc" | "conv") =>
{
10_000
}
_ => 0,
};
for (idx, item) in dynamic_results.into_iter().enumerate() {
results.push((item, base_score - idx as i64));
results.push((item, base_score + grouping_bonus - idx as i64));
}
}
}

View File

@@ -1,6 +1,6 @@
[package]
name = "owlry"
version = "1.0.4"
version = "1.0.5"
edition = "2024"
rust-version = "1.90"
description = "A lightweight, owl-themed application launcher for Wayland"

View File

@@ -1287,43 +1287,6 @@ impl MainWindow {
});
}
fn update_results(&self, query: &str) {
let cfg = self.config.borrow();
let max_results = cfg.general.max_results;
drop(cfg);
let results = self.backend.borrow_mut().search(
query,
max_results,
&self.filter.borrow(),
&self.config.borrow(),
);
// Clear existing results
while let Some(child) = self.results_list.first_child() {
self.results_list.remove(&child);
}
// Display initial batch only
let initial_count = INITIAL_RESULTS.min(results.len());
for item in results.iter().take(initial_count) {
let row = ResultRow::new(item, query);
self.results_list.append(&row);
}
if let Some(first_row) = self.results_list.row_at_index(0) {
self.results_list.select_row(Some(&first_row));
}
// current_results holds what's currently displayed; store full vec for lazy loading
*self.current_results.borrow_mut() = results[..initial_count].to_vec();
let mut lazy = self.lazy_state.borrow_mut();
lazy.all_results = results;
lazy.displayed_count = initial_count;
lazy.query = query.to_string();
}
/// Set up lazy loading scroll detection
fn setup_lazy_loading(&self) {
let vadj = self.scrolled.vadjustment();

View File

@@ -20,8 +20,8 @@ fn is_emoji_icon(s: &str) -> bool {
/// Check if this item should be highlighted based on the query.
/// Highlighted when:
/// - Item is from a dynamic plugin (calculator, converter, websearch, filesearch)
/// and the query is non-empty (auto-detect triggered)
/// - Item is from an auto-detecting plugin (calculator, converter) that parsed
/// the query into a result — these produce direct answers, not search results
/// - Item name exactly matches the query (case-insensitive)
fn should_highlight(item: &LaunchItem, query: &str) -> bool {
if query.is_empty() {
@@ -33,10 +33,10 @@ fn should_highlight(item: &LaunchItem, query: &str) -> bool {
return true;
}
// Dynamic plugin auto-detect results
// Auto-detect plugins that produce direct answers (not search tools)
matches!(
&item.provider,
ProviderType::Plugin(id) if matches!(id.as_str(), "calc" | "conv" | "websearch" | "filesearch")
ProviderType::Plugin(id) if matches!(id.as_str(), "calc" | "conv")
)
}

View File

@@ -224,7 +224,7 @@ aur-publish-pkg pkg:
cd "$aur_dir"
ver=$(grep '^pkgver=' PKGBUILD | sed 's/pkgver=//')
git add PKGBUILD .SRCINFO *.install 2>/dev/null || true
git add -A
git commit -m "Update to v$ver" || { echo "Nothing to commit"; exit 0; }
git push origin master
echo "{{pkg}} v$ver published to AUR!"