summaryrefslogtreecommitdiff
path: root/lib/apps
diff options
context:
space:
mode:
Diffstat (limited to 'lib/apps')
-rw-r--r--lib/apps/application.vala52
-rw-r--r--lib/apps/apps.vala58
2 files changed, 62 insertions, 48 deletions
diff --git a/lib/apps/application.vala b/lib/apps/application.vala
index 0a2f73c..3a9900a 100644
--- a/lib/apps/application.vala
+++ b/lib/apps/application.vala
@@ -1,3 +1,6 @@
+/**
+ * Object representing an applications .desktop file.
+ */
public class AstalApps.Application : Object {
/**
* The underlying DesktopAppInfo.
@@ -47,6 +50,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 +111,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 +140,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 +168,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 +181,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..999643c 100644
--- a/lib/apps/apps.vala
+++ b/lib/apps/apps.vala
@@ -1,3 +1,8 @@
+/**
+ * This object can be used to query applications.
+ * Multipliers can be set to customize [[email protected]] results
+ * from queries which then are summed and sorted accordingly.
+ */
public class AstalApps.Apps : Object {
private string cache_directory;
private string cache_file;
@@ -27,21 +32,21 @@ public class AstalApps.Apps : Object {
/**
* Extra multiplier to apply when matching the entry of an application.
- * Defaults to `1`
+ * Defaults to `0`
*/
- public double entry_multiplier { get; set; default = 1; }
+ public double entry_multiplier { get; set; default = 0; }
/**
* Extra multiplier to apply when matching the executable of an application.
- * Defaults to `1`
+ * Defaults to `0.5`
*/
- public double executable_multiplier { get; set; default = 1; }
+ public double executable_multiplier { get; set; default = 0.5; }
/**
* Extra multiplier to apply when matching the description of an application.
- * Defaults to `0.5`
+ * Defaults to `0`
*/
- public double description_multiplier { get; set; default = 0.5; }
+ public double description_multiplier { get; set; default = 0; }
/**
* Extra multiplier to apply when matching the keywords of an application.
@@ -50,34 +55,10 @@ public class AstalApps.Apps : Object {
public double keywords_multiplier { get; set; default = 0.5; }
/**
- * Consider the name of an application during queries.
- * Defaults to `true`
- */
- public bool include_name { get; set; default = true; }
-
- /**
- * Consider the entry of an application during queries.
- * Defaults to `false`
- */
- public bool include_entry { get; set; default = false; }
-
- /**
- * Consider the executable of an application during queries.
- * Defaults to `false`
- */
- public bool include_executable { get; set; default = false; }
-
- /**
- * Consider the description of an application during queries.
- * Defaults to `false`
- */
- public bool include_description { get; set; default = false; }
-
- /**
- * Consider the keywords of an application during queries.
- * Defaults to `false`
+ * Extra multiplier to apply when matching the categories of an application.
+ * Defaults to `0`
*/
- public bool include_keywords { get; set; default = false; }
+ public double categories_multiplier { get; set; default = 0; }
construct {
cache_directory = Environment.get_user_cache_dir() + "/astal";
@@ -115,11 +96,12 @@ public class AstalApps.Apps : Object {
if (alg == FUZZY) s = a.fuzzy_match(search);
if (alg == EXACT) s = a.exact_match(search);
- if (include_name) r += s.name * name_multiplier;
- if (include_entry) r += s.entry * entry_multiplier;
- if (include_executable) r += s.executable * executable_multiplier;
- if (include_description) r += s.description * description_multiplier;
- if (include_keywords) r += s.keywords * keywords_multiplier;
+ r += s.name * name_multiplier;
+ r += s.entry * entry_multiplier;
+ r += s.executable * executable_multiplier;
+ r += s.description * description_multiplier;
+ r += s.keywords * keywords_multiplier;
+ r += s.categories * categories_multiplier;
return r;
}