commit b35c72da7e3a73d031cdf4200eadc3145436336b Author: Christophe Fergeau <t...@gnome.org> Date: Thu Jul 7 22:21:48 2011 +0200
make smart playlist string comparisons case-insensitive Bring behaviour in line with iTunes by making smart playlist string comparisons case-insensitive. Based on a patch from James Burton <burtonjam...@googlemail.com>. src/itdb_playlist.c | 62 +++++++++++++++++++++++++++++--------------------- 1 files changed, 36 insertions(+), 26 deletions(-) --- diff --git a/src/itdb_playlist.c b/src/itdb_playlist.c index fbb4aac..33ae6c8 100644 --- a/src/itdb_playlist.c +++ b/src/itdb_playlist.c @@ -382,35 +382,35 @@ gboolean itdb_splr_eval (Itdb_SPLRule *splr, Itdb_Track *track) switch (splr->field) { case ITDB_SPLFIELD_SONG_NAME: - strcomp = track->title; + strcomp = g_utf8_casefold(track->title, -1); handled = TRUE; break; case ITDB_SPLFIELD_ALBUM: - strcomp = track->album; + strcomp = g_utf8_casefold(track->album, -1); handled = TRUE; break; case ITDB_SPLFIELD_ARTIST: - strcomp = track->artist; + strcomp = g_utf8_casefold(track->artist, -1); handled = TRUE; break; case ITDB_SPLFIELD_GENRE: - strcomp = track->genre; + strcomp = g_utf8_casefold(track->genre, -1); handled = TRUE; break; case ITDB_SPLFIELD_KIND: - strcomp = track->filetype; + strcomp = g_utf8_casefold(track->filetype, -1); handled = TRUE; break; case ITDB_SPLFIELD_COMMENT: - strcomp = track->comment; + strcomp = g_utf8_casefold(track->comment, -1); handled = TRUE; break; case ITDB_SPLFIELD_COMPOSER: - strcomp = track->composer; + strcomp = g_utf8_casefold(track->composer, -1); handled = TRUE; break; case ITDB_SPLFIELD_GROUPING: - strcomp = track->grouping; + strcomp = g_utf8_casefold(track->grouping, -1); handled = TRUE; break; case ITDB_SPLFIELD_BITRATE: @@ -474,11 +474,11 @@ gboolean itdb_splr_eval (Itdb_SPLRule *splr, Itdb_Track *track) handled = TRUE; break; case ITDB_SPLFIELD_ALBUMARTIST: - strcomp = track->albumartist; + strcomp = g_utf8_casefold(track->albumartist, -1); handled = TRUE; break; case ITDB_SPLFIELD_TVSHOW: - strcomp = track->tvshow; + strcomp = g_utf8_casefold(track->tvshow, -1); handled = TRUE; break; case ITDB_SPLFIELD_LAST_SKIPPED: @@ -509,33 +509,43 @@ gboolean itdb_splr_eval (Itdb_SPLRule *splr, Itdb_Track *track) case ITDB_SPLFT_STRING: if(strcomp && splr->string) { - gint len1 = strlen (strcomp); - gint len2 = strlen (splr->string); + gchar *casefolded_str; + gboolean cmp_result; + + casefolded_str = g_utf8_casefold(splr->string, -1); + cmp_result = FALSE; switch (splr->action) { case ITDB_SPLACTION_IS_STRING: - return (strcmp (strcomp, splr->string) == 0); + cmp_result = (strcmp (strcomp, casefolded_str) == 0); + break; case ITDB_SPLACTION_IS_NOT: - return (strcmp (strcomp, splr->string) != 0); + cmp_result = (strcmp (strcomp, casefolded_str) != 0); + break; case ITDB_SPLACTION_CONTAINS: - return (strstr (strcomp, splr->string) != NULL); + cmp_result = (strstr (strcomp, casefolded_str) != NULL); + break; case ITDB_SPLACTION_DOES_NOT_CONTAIN: - return (strstr (strcomp, splr->string) == NULL); + cmp_result = (strstr (strcomp, casefolded_str) == NULL); + break; case ITDB_SPLACTION_STARTS_WITH: - return (strncmp (strcomp, splr->string, len2) == 0); + cmp_result = g_str_has_prefix(strcomp, casefolded_str); + break; case ITDB_SPLACTION_ENDS_WITH: - if (len2 > len1) return FALSE; - return (strncmp (strcomp+len1-len2, - splr->string, len2) == 0); + cmp_result = g_str_has_suffix(strcomp, casefolded_str); + break; case ITDB_SPLACTION_DOES_NOT_START_WITH: - return (strncmp (strcomp, splr->string, - strlen (splr->string)) != 0); + cmp_result = !g_str_has_prefix(strcomp, casefolded_str); + break; case ITDB_SPLACTION_DOES_NOT_END_WITH: - if (len2 > len1) return TRUE; - return (strncmp (strcomp+len1-len2, - splr->string, len2) != 0); - }; + cmp_result = !g_str_has_suffix(strcomp, casefolded_str); + break; + } + g_free(casefolded_str); + g_free(strcomp); + return cmp_result; } + g_free(strcomp); return FALSE; case ITDB_SPLFT_INT: switch(splr->action) ------------------------------------------------------------------------------ Storage Efficiency Calculator This modeling tool is based on patent-pending intellectual property that has been used successfully in hundreds of IBM storage optimization engage- ments, worldwide. Store less, Store more with what you own, Move data to the right place. Try It Now! http://www.accelacomm.com/jaw/sfnl/114/51427378/ _______________________________________________ gtkpod-cvs2 mailing list gtkpod-cvs2@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/gtkpod-cvs2