aboutsummaryrefslogtreecommitdiff
path: root/app/src/main/java/github/daneren2005/dsub/domain/SearchCritera.java
diff options
context:
space:
mode:
authorFrançois-Xavier Thomas <fx.thomas@gmail.com>2016-01-31 17:41:56 +0100
committerFrançois-Xavier Thomas <fx.thomas@gmail.com>2016-01-31 17:58:38 +0100
commitcb9f7d49ba13890872796c71b16b6f7e9f14625f (patch)
tree1e8d6915ab20f4c7eefbe1ee282d1ed86846d405 /app/src/main/java/github/daneren2005/dsub/domain/SearchCritera.java
parent22546b0fc8e166a9df493ced66daf0ead0944c67 (diff)
downloaddsub-cb9f7d49ba13890872796c71b16b6f7e9f14625f.tar.gz
dsub-cb9f7d49ba13890872796c71b16b6f7e9f14625f.tar.bz2
dsub-cb9f7d49ba13890872796c71b16b6f7e9f14625f.zip
Make suggestions work in offline search
Diffstat (limited to 'app/src/main/java/github/daneren2005/dsub/domain/SearchCritera.java')
-rw-r--r--app/src/main/java/github/daneren2005/dsub/domain/SearchCritera.java39
1 files changed, 38 insertions, 1 deletions
diff --git a/app/src/main/java/github/daneren2005/dsub/domain/SearchCritera.java b/app/src/main/java/github/daneren2005/dsub/domain/SearchCritera.java
index 20d46aa0..12c641f2 100644
--- a/app/src/main/java/github/daneren2005/dsub/domain/SearchCritera.java
+++ b/app/src/main/java/github/daneren2005/dsub/domain/SearchCritera.java
@@ -18,6 +18,8 @@
*/
package github.daneren2005.dsub.domain;
+import java.util.regex.Pattern;
+
/**
* The criteria for a music search.
*
@@ -29,6 +31,7 @@ public class SearchCritera {
private final int artistCount;
private final int albumCount;
private final int songCount;
+ private Pattern pattern;
public SearchCritera(String query, int artistCount, int albumCount, int songCount) {
this.query = query;
@@ -52,4 +55,38 @@ public class SearchCritera {
public int getSongCount() {
return songCount;
}
-} \ No newline at end of file
+
+ /**
+ * Returns and caches a pattern instance that can be used to check if a
+ * string matches the query.
+ */
+ public Pattern getPattern() {
+
+ // If the pattern wasn't already cached, create a new regular expression
+ // from the search string :
+ // * Surround the search string with ".*" (match anything)
+ // * Replace spaces and wildcard '*' characters with ".*"
+ // * All other characters are properly quoted
+ if (this.pattern == null) {
+ String regex = ".*";
+ String currentPart = "";
+ for (int i = 0; i < query.length(); i++) {
+ char c = query.charAt(i);
+ if (c == '*' || c == ' ') {
+ regex += Pattern.quote(currentPart);
+ regex += ".*";
+ currentPart = "";
+ } else {
+ currentPart += c;
+ }
+ }
+ if (currentPart.length() > 0) {
+ regex += Pattern.quote(currentPart);
+ }
+ regex += ".*";
+ this.pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
+ }
+
+ return this.pattern;
+ }
+}