summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAylur <[email protected]>2024-11-01 14:44:49 +0100
committerGitHub <[email protected]>2024-11-01 14:44:49 +0100
commit0608b6b8aebb3d85993411b6c07f2850c404bd29 (patch)
tree39ab82c9b1b152467d885282ed72eae906f72a99 /lib
parent2585ca7071638d90c02a2a21022815ac910fec07 (diff)
parente5d183860e6b21fee97e427ecac4867559b1c6e4 (diff)
Merge pull request #61 from matteo4375/apps/categories
apps: add option to include categories in queries
Diffstat (limited to 'lib')
-rw-r--r--lib/apps/application.vala49
-rw-r--r--lib/apps/apps.vala13
2 files changed, 52 insertions, 10 deletions
diff --git a/lib/apps/application.vala b/lib/apps/application.vala
index 0a2f73c..75b47e9 100644
--- a/lib/apps/application.vala
+++ b/lib/apps/application.vala
@@ -47,6 +47,20 @@ public class AstalApps.Application : Object {
*/
public string[] keywords { owned get { return app.get_keywords(); } }
+ /**
+ * `Categories` field from the desktop file.
+ */
+ public string[] categories {
+ owned get {
+ if (app.get_categories() == null)
+ return {};
+
+ var categories = app.get_categories();
+ var arr = categories.split(";");
+ return categories.has_suffix(";") ? arr[0:arr.length-1] : arr;
+ }
+ }
+
internal Application(string id, int? frequency = 0) {
Object(app: new DesktopAppInfo(id));
this.frequency = frequency;
@@ -94,6 +108,12 @@ public class AstalApps.Application : Object {
score.keywords = s;
}
}
+ foreach (var category in categories) {
+ var s = fuzzy_match_string(term, category);
+ if (s > score.categories) {
+ score.categories = s;
+ }
+ }
return score;
}
@@ -117,12 +137,27 @@ public class AstalApps.Application : Object {
score.keywords = keyword.down().contains(term.down()) ? 1 : 0;
}
}
+ foreach (var category in categories) {
+ if (score.categories == 0) {
+ score.categories = category.down().contains(term.down()) ? 1 : 0;
+ }
+ }
return score;
}
internal Json.Node to_json() {
- var builder = new Json.Builder()
+ var keyword_arr = new Json.Builder().begin_array();
+ foreach (string keyword in keywords) {
+ keyword_arr.add_string_value(keyword);
+ }
+
+ var category_arr = new Json.Builder().begin_array();
+ foreach (string category in categories) {
+ category_arr.add_string_value(category);
+ }
+
+ return new Json.Builder()
.begin_object()
.set_member_name("name").add_string_value(name)
.set_member_name("entry").add_string_value(entry)
@@ -130,15 +165,8 @@ public class AstalApps.Application : Object {
.set_member_name("description").add_string_value(description)
.set_member_name("icon_name").add_string_value(icon_name)
.set_member_name("frequency").add_int_value(frequency)
- .set_member_name("keywords")
- .begin_array();
-
- foreach (string keyword in keywords) {
- builder.add_string_value(keyword);
- }
-
- return builder
- .end_array()
+ .set_member_name("keywords").add_value(keyword_arr.end_array().get_root())
+ .set_member_name("categories").add_value(category_arr.end_array().get_root())
.end_object()
.get_root();
}
@@ -150,4 +178,5 @@ public struct AstalApps.Score {
int executable;
int description;
int keywords;
+ int categories;
}
diff --git a/lib/apps/apps.vala b/lib/apps/apps.vala
index dde7d44..30c305a 100644
--- a/lib/apps/apps.vala
+++ b/lib/apps/apps.vala
@@ -50,6 +50,12 @@ public class AstalApps.Apps : Object {
public double keywords_multiplier { get; set; default = 0.5; }
/**
+ * Extra multiplier to apply when matching the categories of an application.
+ * Defaults to `0.5`
+ */
+ public double categories_multiplier { get; set; default = 0.5; }
+
+ /**
* Consider the name of an application during queries.
* Defaults to `true`
*/
@@ -79,6 +85,12 @@ public class AstalApps.Apps : Object {
*/
public bool include_keywords { get; set; default = false; }
+ /**
+ * Consider the categories of an application during queries.
+ * Defaults to `false`
+ */
+ public bool include_categories { get; set; default = false; }
+
construct {
cache_directory = Environment.get_user_cache_dir() + "/astal";
cache_file = cache_directory + "/apps-frequents.json";
@@ -120,6 +132,7 @@ public class AstalApps.Apps : Object {
if (include_executable) r += s.executable * executable_multiplier;
if (include_description) r += s.description * description_multiplier;
if (include_keywords) r += s.keywords * keywords_multiplier;
+ if (include_categories) r += s.categories * categories_multiplier;
return r;
}