[gnome-music] query: Find strings with accents
- From: Felipe Borges <felipeborges src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-music] query: Find strings with accents
- Date: Thu, 17 Dec 2015 12:51:28 +0000 (UTC)
commit bcd19561ebacb8c2f645694f4642942f1d7cf626
Author: Mattia Cerrato <matcerrato gmail com>
Date: Sat Dec 12 14:47:15 2015 +0100
query: Find strings with accents
When searching for an artist/track/album w. accented
letters, no match is found. This patch changes the queries
to find both accented and unaccented strings when an equivalent
unaccented string is searched for, while only accented strings
are found when an accented string is searched.
https://bugzilla.gnome.org/show_bug.cgi?id=739924
gnomemusic/query.py | 74 ++++++++++++++++++++++++++++++++------------------
1 files changed, 47 insertions(+), 27 deletions(-)
---
diff --git a/gnomemusic/query.py b/gnomemusic/query.py
index d09dff0..09f1dfd 100644
--- a/gnomemusic/query.py
+++ b/gnomemusic/query.py
@@ -1139,7 +1139,7 @@ class Query():
# TODO: make those queries actually return something
@staticmethod
def get_albums_with_any_match(name):
- name = Tracker.sparql_escape_string(GLib.utf8_casefold(name, -1))
+ name = Tracker.sparql_escape_string(GLib.utf8_normalize(GLib.utf8_casefold(name, -1), -1,
GLib.NormalizeMode.NFKD))
query = '''
{
SELECT DISTINCT
@@ -1147,9 +1147,12 @@ class Query():
WHERE {
?song a nmm:MusicPiece .
FILTER (
- fn:contains(tracker:case-fold(nie:title(nmm:musicAlbum(?song))), "%(name)s") ||
- fn:contains(tracker:case-fold(nmm:artistName(nmm:performer(?song))), "%(name)s") ||
- fn:contains(tracker:case-fold(nie:title(?song)), "%(name)s")
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(nmm:musicAlbum(?song)), 'nfkd'))),
"%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(nmm:musicAlbum(?song)),
'nfkd')), "%(name)s") ||
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nmm:artistName(nmm:performer(?song)),
'nfkd'))), "%(name)s") ||
+
fn:contains(tracker:case-fold(tracker:normalize(nmm:artistName(nmm:performer(?song)), 'nfkd')), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(?song),
'nfkd'))), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(?song), 'nfkd')),
"%(name)s")
)
}
}
@@ -1159,7 +1162,7 @@ class Query():
@staticmethod
def get_albums_with_artist_match(name):
- name = Tracker.sparql_escape_string(GLib.utf8_casefold(name, -1))
+ name = Tracker.sparql_escape_string(GLib.utf8_normalize(GLib.utf8_casefold(name, -1), -1,
GLib.NormalizeMode.NFKD))
query = '''
{
SELECT DISTINCT
@@ -1168,7 +1171,8 @@ class Query():
?album a nmm:MusicAlbum ;
nmm:albumArtist ?artist .
FILTER (
- fn:contains(tracker:case-fold(nmm:artistName(?artist)), "%(name)s")
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nmm:artistName(?artist), 'nfkd'))),
"%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nmm:artistName(?artist), 'nfkd')),
"%(name)s")
)
}
}
@@ -1178,7 +1182,7 @@ class Query():
@staticmethod
def get_albums_with_album_match(name):
- name = Tracker.sparql_escape_string(GLib.utf8_casefold(name, -1))
+ name = Tracker.sparql_escape_string(GLib.utf8_normalize(GLib.utf8_casefold(name, -1), -1,
GLib.NormalizeMode.NFKD))
query = '''
{
SELECT DISTINCT
@@ -1186,7 +1190,8 @@ class Query():
WHERE {
?album a nmm:MusicAlbum .
FILTER (
- fn:contains(tracker:case-fold(nie:title(?album)), "%(name)s")
+ fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(?album),
'nfkd'))), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(?album), 'nfkd')),
"%(name)s")
)
}
}
@@ -1196,7 +1201,7 @@ class Query():
@staticmethod
def get_albums_with_track_match(name):
- name = Tracker.sparql_escape_string(GLib.utf8_casefold(name, -1))
+ name = Tracker.sparql_escape_string(GLib.utf8_normalize(GLib.utf8_casefold(name, -1), -1,
GLib.NormalizeMode.NFKD))
query = '''
{
SELECT DISTINCT
@@ -1204,7 +1209,8 @@ class Query():
WHERE {
?song a nmm:MusicPiece .
FILTER (
- fn:contains(tracker:case-fold(nie:title(?song)), "%(name)s")
+ fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(?song),
'nfkd'))), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(?song), 'nfkd')),
"%(name)s")
)
}
}
@@ -1214,7 +1220,7 @@ class Query():
@staticmethod
def get_artists_with_any_match(name):
- name = Tracker.sparql_escape_string(GLib.utf8_casefold(name, -1))
+ name = Tracker.sparql_escape_string(GLib.utf8_normalize(GLib.utf8_casefold(name, -1), -1,
GLib.NormalizeMode.NFKD))
query = '''
{
SELECT DISTINCT
@@ -1222,9 +1228,12 @@ class Query():
WHERE {
?song a nmm:MusicPiece .
FILTER (
- fn:contains(tracker:case-fold(nie:title(nmm:musicAlbum(?song))), "%(name)s") ||
- fn:contains(tracker:case-fold(nmm:artistName(nmm:performer(?song))), "%(name)s") ||
- fn:contains(tracker:case-fold(nie:title(?song)), "%(name)s")
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(nmm:musicAlbum(?song)), 'nfkd'))),
"%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(nmm:musicAlbum(?song)),
'nfkd')), "%(name)s") ||
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nmm:artistName(nmm:performer(?song)),
'nfkd'))), "%(name)s") ||
+
fn:contains(tracker:case-fold(tracker:normalize(nmm:artistName(nmm:performer(?song)), 'nfkd')), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(?song),
'nfkd'))), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(?song), 'nfkd')),
"%(name)s")
)
}
}
@@ -1234,7 +1243,7 @@ class Query():
@staticmethod
def get_artists_with_artist_match(name):
- name = Tracker.sparql_escape_string(GLib.utf8_casefold(name, -1))
+ name = Tracker.sparql_escape_string(GLib.utf8_normalize(GLib.utf8_casefold(name, -1), -1,
GLib.NormalizeMode.NFKD))
query = '''
{
SELECT DISTINCT
@@ -1243,7 +1252,8 @@ class Query():
?album a nmm:MusicAlbum ;
nmm:albumArtist ?artist .
FILTER (
- fn:contains(tracker:case-fold(nmm:artistName(?artist)), "%(name)s")
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nmm:artistName(?artist), 'nfkd'))),
"%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nmm:artistName(?artist), 'nfkd')),
"%(name)s")
)
}
}
@@ -1253,7 +1263,7 @@ class Query():
@staticmethod
def get_artists_with_album_match(name):
- name = Tracker.sparql_escape_string(GLib.utf8_casefold(name, -1))
+ name = Tracker.sparql_escape_string(GLib.utf8_normalize(GLib.utf8_casefold(name, -1), -1,
GLib.NormalizeMode.NFKD))
query = '''
{
SELECT DISTINCT
@@ -1261,7 +1271,8 @@ class Query():
WHERE {
?album a nmm:MusicAlbum .
FILTER (
- fn:contains(tracker:case-fold(nie:title(?album)), "%(name)s")
+ fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(?album),
'nfkd'))), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(?album), 'nfkd')),
"%(name)s")
)
}
}
@@ -1271,7 +1282,7 @@ class Query():
@staticmethod
def get_artists_with_track_match(name):
- name = Tracker.sparql_escape_string(GLib.utf8_casefold(name, -1))
+ name = Tracker.sparql_escape_string(GLib.utf8_normalize(GLib.utf8_casefold(name, -1), -1,
GLib.NormalizeMode.NFKD))
query = '''
{
SELECT DISTINCT
@@ -1279,7 +1290,8 @@ class Query():
WHERE {
?song a nmm:MusicPiece .
FILTER (
- fn:contains(tracker:case-fold(nie:title(?song)), "%(name)s")
+ fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(?song),
'nfkd'))), "%(name)s")
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(?song), 'nfkd')),
"%(name)s")
)
}
}
@@ -1289,7 +1301,7 @@ class Query():
@staticmethod
def get_songs_with_any_match(name):
- name = Tracker.sparql_escape_string(GLib.utf8_casefold(name, -1))
+ name = Tracker.sparql_escape_string(GLib.utf8_normalize(GLib.utf8_casefold(name, -1), -1,
GLib.NormalizeMode.NFKD))
query = '''
{
SELECT DISTINCT
@@ -1297,9 +1309,14 @@ class Query():
WHERE {
?song a nmm:MusicPiece .
FILTER (
- fn:contains(tracker:case-fold(nie:title(?song)), "%(name)s") ||
- fn:contains(tracker:case-fold(nmm:artistName(nmm:performer(?song))), "%(name)s") ||
- fn:contains(tracker:case-fold(nie:title(nmm:musicAlbum(?song))), "%(name)s")
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(nmm:musicAlbum(?song)), 'nfkd'))),
"%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(nmm:musicAlbum(?song)),
'nfkd')), "%(name)s") ||
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nmm:artistName(nmm:performer(?song)),
'nfkd'))), "%(name)s") ||
+
fn:contains(tracker:case-fold(tracker:normalize(nmm:artistName(nmm:performer(?song)), 'nfkd')), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(?song),
'nfkd'))), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(?song), 'nfkd')),
"%(name)s")
+
+
)
}
}
@@ -1317,7 +1334,8 @@ class Query():
WHERE {
?song a nmm:MusicPiece .
FILTER (
- fn:contains(tracker:case-fold(nmm:artistName(nmm:performer(?song))), "%(name)s")
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nmm:performer(?song), 'nfkd'))), "%(name)s")
||
+ fn:contains(tracker:case-fold(tracker:normalize(nmm:performer(?song), 'nfkd')),
"%(name)s")
)
}
}
@@ -1335,7 +1353,8 @@ class Query():
WHERE {
?song a nmm:MusicPiece .
FILTER (
- fn:contains(tracker:case-fold(nie:title(nmm:musicAlbum(?song))), "%(name)s")
+
fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(nmm:musicAlbum(?song)), 'nfkd'))),
"%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(nmm:musicAlbum(?song)),
'nfkd')), "%(name)s")
)
}
}
@@ -1353,7 +1372,8 @@ class Query():
WHERE {
?song a nmm:MusicPiece .
FILTER (
- fn:contains(tracker:case-fold(nie:title(?song)), "%(name)s")
+ fn:contains(tracker:case-fold(tracker:unaccent(tracker:normalize(nie:title(?song),
'nfkd'))), "%(name)s") ||
+ fn:contains(tracker:case-fold(tracker:normalize(nie:title(?song), 'nfkd')),
"%(name)s")
)
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]