Re: [Rhythmbox-devel] (no subject)



On Sat, 2005-12-10 at 10:46 +0000, mailing rhythmbox seani justemail net
wrote: 
> > There was a discussion about having more powerful filters available
> > earlier in the year[0]. That suggest more complex searches, allowing
> you
> > to specify "artist=X or album=Y" and the like. What you're
> suggesting
> > would be a lot simpler, and fairly trivial to implement.
> > 
> >
> [0]http://mail.gnome.org/archives/rhythmbox-devel/2005-April/msg00041.html
> > 
> 
> What we found was that it covered 95% of the functionality required,
> and the majority of people grasped it straight away and used it. It's
> limited in comparison to RegEx or name/value pair searches but it
> tends to produce false positives rather than miss out items you're
> interested in. In an application where there's human intervention when
> the results get back, that doesn't seem to matter. And as you say,
> it's trivial to implement.

Patch against CVS is attached (it will probably apply to 0.9.2 as well).
I can't imagine anyone actually wanting to search for the | symbol, so
this shouldn't have any negative effects.


Cheers,

James "Doc" Livingston
-- 
You can lead an idiot to knowledge but you cannot make him think. You
can, however, rectally insert the information, printed on stone tablets,
using a sharpened poker. -- Nicolai in asr
Index: sources/rb-library-source.c
===================================================================
RCS file: /cvs/gnome/rhythmbox/sources/rb-library-source.c,v
retrieving revision 1.137
diff -u -u -r1.137 rb-library-source.c
--- sources/rb-library-source.c	10 Dec 2005 12:08:25 -0000	1.137
+++ sources/rb-library-source.c	11 Dec 2005 11:01:04 -0000
@@ -1444,6 +1444,7 @@
 	GPtrArray *query;
 	RhythmDBEntryType entry_type;
 
+	/* type = SONG */
 	g_object_get (G_OBJECT (source), "entry-type", &entry_type, NULL);
 	query = rhythmdb_query_parse (source->priv->db,
 				      RHYTHMDB_QUERY_PROP_EQUALS,
@@ -1451,25 +1452,50 @@
 				      entry_type,
 				      RHYTHMDB_QUERY_END);
 
-	/* select where type="song"
-	 */
-
+	/* add search text */
 	if (source->priv->search_text) {
-		GPtrArray *subquery = rhythmdb_query_parse (source->priv->db,
-							    RHYTHMDB_QUERY_PROP_LIKE,
-							    RHYTHMDB_PROP_SEARCH_MATCH,
-							    source->priv->search_text,
-							    RHYTHMDB_QUERY_END);
-		rhythmdb_query_append (source->priv->db,
-				       query,
-				       RHYTHMDB_QUERY_SUBQUERY,
-				       subquery,
-				       RHYTHMDB_QUERY_END);
-		/* select where type="song" and
-		 *  (genre like "foo" or artist like "foo" or album like "foo")
-		 */
+		char **strv;
+
+		strv = g_strsplit (source->priv->search_text, "|", -1);
+	       
+		if (strv[1]) {
+			/* more than one section */
+			GPtrArray *subquery;
+			int i;
+
+			subquery = rhythmdb_query_parse (source->priv->db,
+							 RHYTHMDB_QUERY_PROP_LIKE,
+							 RHYTHMDB_PROP_SEARCH_MATCH,
+							 strv[0],
+							 RHYTHMDB_QUERY_END);
+			for (i = 1; strv[i]; i++) {
+				rhythmdb_query_append (source->priv->db,
+						       subquery,
+						       RHYTHMDB_QUERY_DISJUNCTION,
+						       RHYTHMDB_QUERY_PROP_LIKE,
+						       RHYTHMDB_PROP_SEARCH_MATCH,
+						       strv[i],
+						       RHYTHMDB_QUERY_END);
+			}
+		
+			rhythmdb_query_append (source->priv->db,
+					       query,
+					       RHYTHMDB_QUERY_SUBQUERY,
+					       subquery,
+					       RHYTHMDB_QUERY_END);
+		} else {
+			/* only one section, don't need a subquery */
+			rhythmdb_query_append (source->priv->db,
+					       query,
+					       RHYTHMDB_QUERY_PROP_LIKE,
+					       RHYTHMDB_PROP_SEARCH_MATCH,
+					       strv[0],
+					       RHYTHMDB_QUERY_END);
+		}
+		g_strfreev (strv);
 	}
 
+	/* add browser limits */
 	if (source->priv->selected_genres) {
 		if (source->priv->selected_genres->next == NULL)
 			rhythmdb_query_append (source->priv->db,

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]