Lookin' great! Got a couple of patches for you
1. tracker-search-tool won't autogen.sh...EXTRA_DIST acceesses
variables that are commented out.
2. The new mp3 extractor creashes tracker-extract (strlen'ing a NULL?).
3. mplayer based extractor for videos and audio.
Index: src/tracker-search-tool/Makefile.am
===================================================================
RCS file: /cvs/gnome/tracker/src/tracker-search-tool/Makefile.am,v
retrieving revision 1.2
diff -u -p -r1.2 Makefile.am
--- src/tracker-search-tool/Makefile.am 8 Oct 2006 22:22:52 -0000 1.2
+++ src/tracker-search-tool/Makefile.am 12 Oct 2006 21:10:55 -0000
@@ -47,7 +47,7 @@ tracker_search_tool_LDADD = \
#Utilities_DATA = $(Utilities_in_files:.desktop.in=.desktop)
-EXTRA_DIST = \
+#EXTRA_DIST = \
$(Utilities_in_files) \
$(Utilities_DATA) \
$(schema_in_file) \
Index: src/tracker-extract/tracker-extract-mp3.c
===================================================================
RCS file: /cvs/gnome/tracker/src/tracker-extract/tracker-extract-mp3.c,v
retrieving revision 1.2
diff -u -p -r1.2 tracker-extract-mp3.c
--- src/tracker-extract/tracker-extract-mp3.c 11 Oct 2006 23:59:56 -0000 1.2
+++ src/tracker-extract/tracker-extract-mp3.c 12 Oct 2006 21:11:23 -0000
@@ -996,27 +996,27 @@ tracker_extract_mp3 (const char *filenam
}
- if (strlen (info.title) > 0) {
+ if (info.title && strlen (info.title) > 0) {
g_hash_table_insert (metadata, g_strdup ("Audio.Title"), g_strdup (info.title));
}
- if (strlen (info.artist) > 0) {
+ if (info.artist && strlen (info.artist) > 0) {
g_hash_table_insert (metadata, g_strdup ("Audio.Artist"), g_strdup (info.artist));
}
- if (strlen (info.album) > 0) {
+ if (info.album && strlen (info.album) > 0) {
g_hash_table_insert (metadata, g_strdup ("Audio.Album"), g_strdup (info.album));
}
- if (strlen (info.year) > 0) {
+ if (info.year && strlen (info.year) > 0) {
g_hash_table_insert (metadata, g_strdup ("Audio.ReleaseDate"), g_strdup (info.year));
}
- if (strlen (info.genre) > 0) {
+ if (info.genre && strlen (info.genre) > 0) {
g_hash_table_insert (metadata, g_strdup ("Audio.Genre"), g_strdup (info.genre));
}
- if (strlen (info.comment) > 0) {
+ if (info.comment && strlen (info.comment) > 0) {
g_hash_table_insert (metadata, g_strdup ("Audio.Comment"), g_strdup (info.comment));
}
Index: configure.in
===================================================================
RCS file: /cvs/gnome/tracker/configure.in,v
retrieving revision 1.24
diff -u -p -r1.24 configure.in
--- configure.in 11 Oct 2006 23:59:54 -0000 1.24
+++ configure.in 12 Oct 2006 21:12:02 -0000
@@ -361,20 +361,6 @@ AC_SUBST(VORBIS_LIBS)
test "$have_vorbis" = "yes" && AC_DEFINE(HAVE_VORBIS, [], [Define if we have libvorbis])
##################################################################
-# check for ogg/theora
-##################################################################
-
-THEORA_REQUIRED=1.1
-
-PKG_CHECK_MODULES(THEORA, [theora >= $THEORA_REQUIRED], [have_theora=yes] , [have_theora=no])
-
-AM_CONDITIONAL(HAVE_THEORA, test "$have_theora" = "yes")
-AC_SUBST(THEORA_CFLAGS)
-AC_SUBST(THEORA_LIBS)
-test "$have_theora" = "yes" && AC_DEFINE(HAVE_THEORA, [], [Define if we have libtheora])
-
-
-##################################################################
# check for libpng
##################################################################
@@ -481,7 +467,6 @@ Metadata extractors:
pdf : $have_poppler
ogg/vorbis : $have_vorbis
- ogg/theora : $have_theora
png : $have_libpng
exif (jpeg) : $have_libexif
gsf : $have_libgsf
Index: src/tracker-extract/Makefile.am
===================================================================
RCS file: /cvs/gnome/tracker/src/tracker-extract/Makefile.am,v
retrieving revision 1.9
diff -u -p -r1.9 Makefile.am
--- src/tracker-extract/Makefile.am 9 Oct 2006 14:26:02 -0000 1.9
+++ src/tracker-extract/Makefile.am 12 Oct 2006 21:12:17 -0000
@@ -18,7 +18,8 @@ tracker_extract_SOURCES = tracker-extrac
tracker-extract-png.c \
tracker-extract-exif.c \
tracker-extract-msoffice.c \
- tracker-extract-imagemagick.c
+ tracker-extract-imagemagick.c \
+ tracker-extract-mplayer.c
tracker_extract_LDADD = $(GLIB2_LIBS) \
Index: src/trackerd/tracker-metadata.c
===================================================================
RCS file: /cvs/gnome/tracker/src/trackerd/tracker-metadata.c,v
retrieving revision 1.17
diff -u -p -r1.17 tracker-metadata.c
--- src/trackerd/tracker-metadata.c 11 Oct 2006 23:30:55 -0000 1.17
+++ src/trackerd/tracker-metadata.c 12 Oct 2006 21:12:37 -0000
@@ -143,7 +143,7 @@ tracker_get_metadata_type (const char *m
} else if (g_str_has_prefix (mime, "video")) {
/* don't bother with video metadata - its really really slow to extract + there's bugger all metadata anyhow! */
- return IGNORE_METADATA;
+ return VIDEO_METADATA;
} else if (g_str_has_prefix (mime, "audio") || (strcmp (mime, "application/ogg") == 0)) {
return AUDIO_METADATA;
@@ -413,7 +413,7 @@ tracker_metadata_get_embedded (const cha
meta_type = tracker_get_metadata_type (mime);
- if (meta_type == DOC_METADATA || meta_type == IMAGE_METADATA || meta_type == AUDIO_METADATA) {
+ if (meta_type == DOC_METADATA || meta_type == IMAGE_METADATA || meta_type == AUDIO_METADATA || meta_type == VIDEO_METADATA) {
char *argv[4];
char *value;
Index: src/tracker-extract/tracker-extract.c
===================================================================
RCS file: /cvs/gnome/tracker/src/tracker-extract/tracker-extract.c,v
retrieving revision 1.14
diff -u -p -r1.14 tracker-extract.c
--- src/tracker-extract/tracker-extract.c 9 Oct 2006 14:16:00 -0000 1.14
+++ src/tracker-extract/tracker-extract.c 12 Oct 2006 21:12:53 -0000
@@ -70,45 +70,45 @@ void tracker_extract_png (gchar *, GHa
void tracker_extract_exif (gchar *, GHashTable *);
#endif
void tracker_extract_imagemagick (gchar *, GHashTable *);
+void tracker_extract_mplayer (gchar *, GHashTable *);
MimeToExtractor extractors[] = {
- /* Document extractors */
- { "application/vnd.oasis.opendocument.*", tracker_extract_oasis },
- { "application/postscript", tracker_extract_ps },
+ /* Document extractors */
+ { "application/vnd.oasis.opendocument.*", tracker_extract_oasis },
+ { "application/postscript", tracker_extract_ps },
#ifdef HAVE_POPPLER
- { "application/pdf", tracker_extract_pdf },
+ { "application/pdf", tracker_extract_pdf },
#endif
- { "application/x-abiword", tracker_extract_abw },
+ { "application/x-abiword", tracker_extract_abw },
#ifdef HAVE_LIBGSF
- { "application/msword", tracker_extract_msoffice },
- { "application/vnd.ms-*", tracker_extract_msoffice },
+ { "application/msword", tracker_extract_msoffice },
+ { "application/vnd.ms-*", tracker_extract_msoffice },
#endif
- /* Video extractors */
-#ifdef HAVE_THEORA
- { "video/x-theora+ogg", tracker_extract_theora },
-#endif
+ /* Video extractors */
+ { "video/*", tracker_extract_mplayer },
- /* Audio extractors */
- { "audio/mpeg", tracker_extract_mp3 },
- { "audio/x-mp3", tracker_extract_mp3 },
- { "audio/x-mpeg", tracker_extract_mp3 },
+ /* Audio extractors */
+ { "audio/mpeg", tracker_extract_mp3 },
+ { "audio/x-mp3", tracker_extract_mp3 },
+ { "audio/x-mpeg", tracker_extract_mp3 },
#ifdef HAVE_VORBIS
- { "audio/x-vorbis+ogg", tracker_extract_vorbis },
+ { "audio/x-vorbis+ogg", tracker_extract_vorbis },
#endif
+ { "audio/*", tracker_extract_mplayer },
/* Image extractors */
#ifdef HAVE_LIBPNG
- { "image/png", tracker_extract_png },
+ { "image/png", tracker_extract_png },
#endif
#ifdef HAVE_LIBEXIF
- { "image/jpeg", tracker_extract_exif },
+ { "image/jpeg", tracker_extract_exif },
#endif
- { "image/*", tracker_extract_imagemagick },
- { "", NULL }
+ { "image/*", tracker_extract_imagemagick },
+ { "", NULL }
};
static MetadataFileType
@@ -125,7 +125,7 @@ get_metadata_type (const char *mime)
return IMAGE_METADATA;
} else {
if (g_str_has_prefix (mime, "video")) {
- return IGNORE_METADATA;
+ return VIDEO_METADATA;
} else {
if (g_str_has_prefix (mime, "audio")) {
return AUDIO_METADATA;
@@ -174,6 +174,8 @@ tracker_get_file_metadata (const char *u
for (p = extractors; p->extractor; ++p) {
if (g_pattern_match_simple (p->mime, mime)) {
(*p->extractor)(uri_in_locale, meta_table);
+ if (g_hash_table_size (meta_table) == 0)
+ continue;
g_free (uri_in_locale);
g_free (mime);
return meta_table;
--- /dev/null 2006-08-05 19:53:54.000000000 -0400
+++ src/tracker-extract/tracker-extract-mplayer.c 2006-10-12 16:25:37.000000000 -0400
@@ -0,0 +1,102 @@
+
+#include "config.h"
+
+#include <stdio.h>
+#include <string.h>
+#include <glib.h>
+
+gchar *video_tags[][2] = {
+ { "ID_VIDEO_HEIGHT", "Video.Height" },
+ { "ID_VIDEO_WIDTH", "Video.Width" },
+ { "ID_VIDEO_FPS", "Video.FrameRate" },
+ { "ID_VIDEO_CODEC", "Video.Codec" },
+ { "ID_VIDEO_BITRATE", "Video.Bitrate" },
+ { NULL, NULL }
+ };
+
+gchar *audio_tags[][2] = {
+ { "ID_AUDIO_BITRATE", "Audio.Bitrate" },
+ { "ID_AUDIO_RATE", "Audio.Samplerate" },
+ { "ID_AUDIO_CODEC", "Audio.Codec" },
+ { "ID_AUDIO_NCH", "Audio.Channels" },
+ { NULL, NULL }
+ };
+
+gchar *info_tags[][2] = {
+ { "comments", "Video.Comment" },
+ { "name", "Video.Title" },
+ { "author", "Video.Author" },
+ { "copyright", "Video.Copyright" },
+ { NULL, NULL }
+ };
+
+void
+tracker_extract_mplayer (gchar *filename, GHashTable *metadata)
+{
+ gchar *argv[10];
+ gchar *mplayer;
+ gchar **lines, **line;
+ gchar **tag;
+ gint n;
+
+ argv[0] = g_strdup ("mplayer");
+ argv[1] = g_strdup ("-identify");
+ argv[2] = g_strdup ("-frames");
+ argv[3] = g_strdup ("0");
+ argv[4] = g_strdup ("-vo");
+ argv[5] = g_strdup ("null");
+ argv[6] = g_strdup ("-ao");
+ argv[7] = g_strdup ("null");
+ argv[8] = g_strdup (filename);
+ argv[9] = NULL;
+
+ if(g_spawn_sync (NULL,
+ argv,
+ NULL,
+ G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL,
+ NULL,
+ NULL,
+ &mplayer,
+ NULL,
+ NULL,
+ NULL)) {
+
+
+ lines = g_strsplit (mplayer, "\n", -1);
+
+ for (line = lines; *line; ++line) {
+
+ if (g_pattern_match_simple ("ID_VIDEO*=*", *line)) {
+ for (tag = video_tags; *tag; ++tag) {
+ if (g_str_has_prefix (*line, tag[0])) {
+ g_hash_table_insert (metadata,
+ g_strdup (tag[1]),
+ g_strdup ((*line) + strlen (tag[0]) + 1));
+ }
+ }
+ }
+
+ if (g_pattern_match_simple ("ID_AUDIO*=*", *line)) {
+ for (tag = audio_tags; *tag; ++tag) {
+ if (g_str_has_prefix (*line, tag[0])) {
+ g_hash_table_insert (metadata,
+ g_strdup (tag[1]),
+ g_strdup ((*line) + strlen (tag[0]) + 1));
+ }
+ }
+ }
+
+ if (g_pattern_match_simple ("ID_CLIP_INFO_NAME*=*", *line)) {
+ for (tag = info_tags; *tag; ++tag) {
+ n = strlen(*line) - strlen(tag[0]);
+ if (strcasecmp (*line + n, tag[0]) == 0) {
+ g_hash_table_insert (metadata,
+ g_strdup (tag[1]),
+ g_strdup (strstr (line[1], "=") + 1));
+ }
+ }
+ }
+ }
+ }
+}
+
Index: data/sqlite-tracker.sql
===================================================================
RCS file: /cvs/gnome/tracker/data/sqlite-tracker.sql,v
retrieving revision 1.8
diff -u -p -r1.8 sqlite-tracker.sql
--- data/sqlite-tracker.sql 6 Oct 2006 11:33:03 -0000 1.8
+++ data/sqlite-tracker.sql 12 Oct 2006 21:13:36 -0000
@@ -25,7 +25,7 @@ insert Into ServiceTypes (TypeID, TypeNa
insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (2, 'Documents', 'Doc, File', 'documents only', 1);
insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (3, 'Images', 'Image, File', 'image files only', 1);
insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (4, 'Music', 'Audio, File', 'music files only', 1);
-insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (5, 'Videos', 'File', 'video and movie files only', 1);
+insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (5, 'Videos', 'File, Audio, Video', 'video and movie files only', 1);
insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (6, 'Text Files', 'File', 'text files only', 1);
insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (7, 'Development Files', 'File', 'development and source code files only', 1);
insert Into ServiceTypes (TypeID, TypeName, MetadataClass, Description, MainService) values (8, 'Other Files', 'File', 'all other uncategorized files', 1);
@@ -305,6 +305,16 @@ insert Into MetaDataTypes (MetaName, Dat
insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Image.MeteringMode', 1, 1, 0, 0);
insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Image.WhiteBalance', 1, 1, 0, 0);
insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Image.Copyright', 4, 1, 0, 1);
+
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Video.Title', 0, 1, 0, 1);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Video.Author', 0, 1, 0, 1);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Video.Comment', 0, 1, 0, 1);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Video.Copyright', 0, 1, 0, 1);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Video.Height', 2, 1, 0, 100);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Video.Width', 2, 1, 0, 100);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Video.FrameRate', 2, 1, 0, 100);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Video.Codec', 0, 1, 0, 10);
+insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Video.Bitrate', 2, 1, 0, 100);
insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Email.Date', 3, 1, 0, 0);
insert Into MetaDataTypes (MetaName, DatatypeID, Embedded, Writeable, Weight) values ('Email.Sender', 4, 1, 0, 10);
_______________________________________________
tracker-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/tracker-list