/* yes this is ugly, i have to change the interface */ DBusMessageWriter& DBusMessageWriter::operator<<(const ClientInterface::Hits& s) { DBusMessageIter sub; DBusMessageIter ssub; DBusMessageIter sssub; dbus_message_iter_open_container(&it, DBUS_TYPE_ARRAY, "sdsssxxa{ss}", &sub); vector::const_iterator i; for (i=s.hits.begin(); i!=s.hits.end(); ++i) { const char* c = i->uri.c_str(); dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &c); double d = i->score; dbus_message_iter_append_basic(&sub, DBUS_TYPE_DOUBLE, &d); c = i->fragment.c_str(); dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &c); c = i->mimetype.c_str(); dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &c); c = i->sha1.c_str(); dbus_message_iter_append_basic(&sub, DBUS_TYPE_STRING, &c); int64_t n = i->size; dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT64, &n); n = i->mtime; dbus_message_iter_append_basic(&sub, DBUS_TYPE_INT64, &n); dbus_message_iter_open_container(&sub, DBUS_TYPE_ARRAY, "{ss}", &ssub); map::const_iterator j; for (j = i->properties.begin(); j != i->properties.end(); ++j) { dbus_message_iter_open_container(&ssub, DBUS_TYPE_DICT_ENTRY, 0, &sssub); c = j->first.c_str(); dbus_message_iter_append_basic(&sssub, DBUS_TYPE_STRING, &c); c = j->second.c_str(); dbus_message_iter_append_basic(&sssub, DBUS_TYPE_STRING, &c); dbus_message_iter_close_container(&ssub, &sssub); } dbus_message_iter_close_container(&sub, &ssub); } dbus_message_iter_close_container(&it, &sub); printf("%i results\n", s.hits.size()); return *this; }