Index: rhythmdb/rhythmdb-private.h
===================================================================
--- rhythmdb/rhythmdb-private.h	(revision 6055)
+++ rhythmdb/rhythmdb-private.h	(working copy)
@@ -99,6 +99,7 @@
 	double album_gain;
 	double album_peak;
 	GDate date;
+	gboolean has_video;
 
 	/* filesystem */
 	RBRefString *location;
Index: rhythmdb/rhythmdb-tree.c
===================================================================
--- rhythmdb/rhythmdb-tree.c	(revision 6055)
+++ rhythmdb/rhythmdb-tree.c	(working copy)
@@ -1073,6 +1073,9 @@
 			if (podcast && podcast->image)
 				save_entry_string(ctx, elt_name, rb_refstring_get (podcast->image));
 			break;
+		case RHYTHMDB_PROP_HAS_VIDEO:
+			save_entry_boolean(ctx, elt_name, entry->has_video);
+			break;
 		case RHYTHMDB_PROP_POST_TIME:
 			if (podcast)
 				save_entry_ulong (ctx, elt_name, podcast->post_time, FALSE);
Index: rhythmdb/rhythmdb.c
===================================================================
--- rhythmdb/rhythmdb.c	(revision 6055)
+++ rhythmdb/rhythmdb.c	(working copy)
@@ -3350,6 +3350,9 @@
 			}
 			entry->flags |= RHYTHMDB_ENTRY_LAST_SEEN_DIRTY;
 			break;
+		case RHYTHMDB_PROP_HAS_VIDEO:
+			entry->has_video = g_value_get_boolean (value);
+			break;
 		case RHYTHMDB_PROP_STATUS:
 			g_assert (podcast);
 			podcast->status = g_value_get_ulong (value);
@@ -4010,6 +4013,7 @@
 			ENUM_ENTRY (RHYTHMDB_PROP_MUSICBRAINZ_ALBUMID, "Musicbrainz Album ID (gchararray) [mb-albumid]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_MUSICBRAINZ_ALBUMARTISTID, "Musicbrainz Album Artist ID (gchararray) [mb-albumartistid]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_ARTIST_SORTNAME, "Artist Sortname (gchararray) [mb-artistsortname]"),
+			ENUM_ENTRY (RHYTHMDB_PROP_HAS_VIDEO, "Whether the file contains a video track (gboolean) [has-video]"),
 
 			ENUM_ENTRY (RHYTHMDB_PROP_DURATION, "Duration (gulong) [duration]"),
 			ENUM_ENTRY (RHYTHMDB_PROP_FILE_SIZE, "File Size (guint64) [file-size]"),
@@ -4901,6 +4905,8 @@
 	switch (propid) {
 	case RHYTHMDB_PROP_HIDDEN:
 		return ((entry->flags & RHYTHMDB_ENTRY_HIDDEN) != 0);
+	case RHYTHMDB_PROP_HAS_VIDEO:
+		return (entry->has_video);
 	default:
 		g_assert_not_reached ();
 		return FALSE;
Index: rhythmdb/rhythmdb.h
===================================================================
--- rhythmdb/rhythmdb.h	(revision 6055)
+++ rhythmdb/rhythmdb.h	(working copy)
@@ -155,6 +155,7 @@
 {
 	RHYTHMDB_PROP_TYPE = 0,
 	RHYTHMDB_PROP_ENTRY_ID,
+	RHYTHMDB_PROP_HAS_VIDEO,
 	RHYTHMDB_PROP_TITLE,
 	RHYTHMDB_PROP_GENRE,
 	RHYTHMDB_PROP_ARTIST,
Index: metadata/rb-metadata.h
===================================================================
--- metadata/rb-metadata.h	(revision 6055)
+++ metadata/rb-metadata.h	(working copy)
@@ -67,6 +67,7 @@
 	RB_METADATA_FIELD_MUSICBRAINZ_ALBUMID,     /* string */
 	RB_METADATA_FIELD_MUSICBRAINZ_ALBUMARTISTID,   /* string */
 	RB_METADATA_FIELD_ARTIST_SORTNAME,         /* string */
+	RB_METADATA_FIELD_HAS_VIDEO,		   /* boolean */
 
 	RB_METADATA_FIELD_LAST			   /* nothing */
 } RBMetaDataField;
Index: metadata/rb-metadata-common.c
===================================================================
--- metadata/rb-metadata-common.c	(revision 6055)
+++ metadata/rb-metadata-common.c	(working copy)
@@ -74,6 +74,7 @@
 	/* RB_METADATA_FIELD_MUSICBRAINZ_ALBUMID */	{ G_TYPE_STRING, "musicbrainz-albumid" },
 	/* RB_METADATA_FIELD_MUSICBRAINZ_ALBUMARTISTID */ { G_TYPE_STRING, "musicbrainz-albumartistid" },
 	/* RB_METADATA_FIELD_ARTIST_SORTNAME */         { G_TYPE_STRING, "musicbrainz-sortname" },
+	/* RB_METADATA_FIELD_HAS_VIDEO */		{ G_TYPE_BOOLEAN, "has-video" },
 
 };
 
@@ -110,6 +111,7 @@
  * @RB_METADATA_FIELD_MUSICBRAINZ_ALBUMID: MusicBrainz album ID
  * @RB_METADATA_FIELD_MUSICBRAINZ_ALBUMARTISTID: MusicBrainz album artist ID
  * @RB_METADATA_FIELD_ARTIST_SORTNAME: Person(s) responsible for the recording, as used for sorting
+ * @RB_METADATA_FIELD_HAS_VIDEO: Whether the file contains a video track
  * @RB_METADATA_FIELD_LAST:  invalid field
  *
  * Metadata fields that can be read from and written to files.
Index: metadata/rb-metadata-dbus.c
===================================================================
--- metadata/rb-metadata-dbus.c	(revision 6055)
+++ metadata/rb-metadata-dbus.c	(working copy)
@@ -162,6 +162,9 @@
 		case G_TYPE_STRING:
 			v_sig = DBUS_TYPE_STRING_AS_STRING;
 			break;
+		case G_TYPE_BOOLEAN:
+			v_sig = DBUS_TYPE_BOOLEAN_AS_STRING;
+			break;
 		}
 		if (!dbus_message_iter_open_container (&d_iter, DBUS_TYPE_VARIANT, v_sig, &v_iter)) {
 			return FALSE;
@@ -198,6 +201,15 @@
 				break;
 			}
 
+		case G_TYPE_BOOLEAN:
+			{
+				gboolean b = g_value_get_boolean (&v);
+				if (!dbus_message_iter_append_basic (&v_iter, DBUS_TYPE_BOOLEAN, &b)) {
+					return FALSE;
+				}
+				break;
+			}
+
 		default:
 			g_assert_not_reached ();
 			break;
@@ -288,6 +300,15 @@
 				break;
 			}
 
+		case DBUS_TYPE_BOOLEAN:
+			{
+				gboolean n;
+				dbus_message_iter_get_basic (&v_iter, &n);
+				g_value_init (val, G_TYPE_BOOLEAN);
+				g_value_set_boolean (val, n);
+				break;
+			}
+
 		default:
 			g_assert_not_reached ();
 			break;
Index: metadata/rb-metadata-gst.c
===================================================================
--- metadata/rb-metadata-gst.c	(revision 6055)
+++ metadata/rb-metadata-gst.c	(working copy)
@@ -796,7 +796,6 @@
 			md->priv->has_audio = TRUE;
 		} else if (g_str_has_prefix (mimetype, "video/")) {
 			rb_debug ("got decoded video pad of type %s", mimetype);
-			md->priv->has_non_audio = TRUE;
 			md->priv->has_video = TRUE;
 		} else {
 			/* assume anything we can get a video or text stream out of is
@@ -1146,19 +1145,15 @@
 	 * these don't include the URI as the import errors source
 	 * already displays it.
 	 */
-	if ((md->priv->has_video || !md->priv->has_audio) &&
+	if (!md->priv->has_audio &&
 	    (md->priv->has_non_audio || !md->priv->handoff)) {
 		gboolean ignore = FALSE;
 		int i;
 
-		if (md->priv->has_video) {
-			ignore = TRUE;
-		} else {
-			for (i = 0; i < G_N_ELEMENTS (ignore_mime_types); i++) {
-				if (g_str_has_prefix (md->priv->type, ignore_mime_types[i])) {
-					ignore = TRUE;
-					break;
-				}
+		for (i = 0; i < G_N_ELEMENTS (ignore_mime_types); i++) {
+			if (g_str_has_prefix (md->priv->type, ignore_mime_types[i])) {
+				ignore = TRUE;
+				break;
 			}
 		}
 
