Anfänger-Problem: DBus Variants



  • Hi,

    ich versuch mich schon ne Weile stümperhaft an C++, und wollte mir von einem Programm einmal die Titel-Informationen von Rhythmbox ausgeben lassen. Soweit hat das auch alles geklappt, ich kann auf DBus prima zugreifen, nur sind die nützlichen Daten leider in einem ::DBUS::Variant versteckt, und ich habe keine Ideen mehr, wie ich an die ran komme.
    Mittlerweile hab ich auch noch ne Ausführlichere Informationsabfrage in DBus gefunden, allerdings ist da um den Variant jetzt noch eine std::map drum herum, womit ich mich allerdings auch (noch) nicht auskenne.
    Google spuckt mir auch kaum Quellcode aus, da ich die C++-Bibliothek nutze, und nicht die deutlich häufiger genutzte C-Bibliothek:
    https://sourceforge.net/apps/mediawiki/dbus-cplusplus
    Hier mal das was mir D-Feet ausspuckt, wenn ich die selbe Funktion dort eingebe:

    dbus.Dictionary({dbus.String(u'rating'): dbus.Double(0.0, variant_level=1), dbus.String(u'artist-sortname-sort-key'): dbus.String(u'', variant_level=1), dbus.String(u'subtitle'): dbus.String(u'', variant_level=1), dbus.String(u'entry-id'): dbus.UInt32(2587L, variant_level=1), dbus.String(u'album-sortname-folded'): dbus.String(u'', variant_level=1), dbus.String(u'disc-number'): dbus.UInt32(0L, variant_level=1), dbus.String(u'play-count'): dbus.UInt32(1L, variant_level=1), dbus.String(u'search-match'): dbus.String(u'', variant_level=1), dbus.String(u'date'): dbus.UInt32(0L, variant_level=1), dbus.String(u'album-sort-key'): dbus.String(u'NG;>D:GGM\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02', variant_level=1), dbus.String(u'mtime'): dbus.UInt32(1270920415L, variant_level=1), dbus.String(u'duration'): dbus.UInt32(211L, variant_level=1), dbus.String(u'mountpoint'): dbus.String(u'', variant_level=1), dbus.String(u'last-played'): dbus.UInt32(1275493747L, variant_level=1), dbus.String(u'post-time'): dbus.UInt32(0L, variant_level=1), dbus.String(u'album'): dbus.String(u'Unbekannt', variant_level=1), dbus.String(u'track-number'): dbus.UInt32(0L, variant_level=1), dbus.String(u'copyright'): dbus.String(u'', variant_level=1), dbus.String(u'title'): dbus.String(u'Was kostet die Welt.mp3', variant_level=1), dbus.String(u'playback-error'): dbus.String(u'', variant_level=1), dbus.String(u'album-sortname'): dbus.String(u'', variant_level=1), dbus.String(u'artist-folded'): dbus.String(u'unbekannt', variant_level=1), dbus.String(u'mb-artistsortname'): dbus.String(u'', variant_level=1), dbus.String(u'location'): dbus.String(u'file:///irgendwo/Was%20kostet%20die%20Welt.mp3', variant_level=1), dbus.String(u'artist-sortname-folded'): dbus.String(u'', variant_level=1), dbus.String(u'hidden'): dbus.Boolean(False, variant_level=1), dbus.String(u'image'): dbus.String(u'', variant_level=1), dbus.String(u'genre-sort-key'): dbus.String(u'NG;>D:GGM\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02', variant_level=1), dbus.String(u'mb-artistid'): dbus.String(u'', variant_level=1), dbus.String(u'status'): dbus.UInt32(0L, variant_level=1), dbus.String(u'genre-folded'): dbus.String(u'unbekannt', variant_level=1), dbus.String(u'artist-sort-key'): dbus.String(u'NG;>D:GGM\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02', variant_level=1), dbus.String(u'description'): dbus.String(u'', variant_level=1), dbus.String(u'year'): dbus.UInt32(0L, variant_level=1), dbus.String(u'title-sort-key'): dbus.String(u'P:LDHLM>M=B>P>EM\x01\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x01\x04\u036c\x07\u036c\x04\u036c\x01\x01\x01\x01FI\x01\x11\x11\x01\x02\x02\x01\x01\x01\x023', variant_level=1), dbus.String(u'last-played-str'): dbus.String(u'Heute 17:49', variant_level=1), dbus.String(u'last-seen-str'): dbus.String(u'', variant_level=1), dbus.String(u'mimetype'): dbus.String(u'application/x-id3', variant_level=1), dbus.String(u'album-folded'): dbus.String(u'unbekannt', variant_level=1), dbus.String(u'mb-albumid'): dbus.String(u'', variant_level=1), dbus.String(u'bitrate'): dbus.UInt32(48L, variant_level=1), dbus.String(u'first-seen-str'): dbus.String(u'20. Februar 19:06', variant_level=1), dbus.String(u'album-sortname-sort-key'): dbus.String(u'', variant_level=1), dbus.String(u'lang'): dbus.String(u'', variant_level=1), dbus.String(u'title-folded'): dbus.String(u'was kostet die weltmp3', variant_level=1), dbus.String(u'keyword'): dbus.String(u'', variant_level=1), dbus.String(u'artist'): dbus.String(u'Unbekannt', variant_level=1), dbus.String(u'first-seen'): dbus.UInt32(1266689196L, variant_level=1), dbus.String(u'last-seen'): dbus.UInt32(1275478627L, variant_level=1), dbus.String(u'summary'): dbus.String(u'', variant_level=1), dbus.String(u'mb-albumartistid'): dbus.String(u'', variant_level=1), dbus.String(u'file-size'): dbus.UInt64(3983142L, variant_level=1), dbus.String(u'mb-trackid'): dbus.String(u'', variant_level=1), dbus.String(u'genre'): dbus.String(u'Unbekannt', variant_level=1)}, signature=dbus.Signature('sv'))

    Und hier die Funktion die mir die Daten von DBus gibt.

    std::map< std::string, ::DBus::Variant > getSongProperties(const std::string& uri)
        {
            ::DBus::CallMessage call;
            ::DBus::MessageIter wi = call.writer();
    
            wi << uri;
            call.member("getSongProperties");
            ::DBus::Message ret = invoke_method(call);
            ::DBus::MessageIter ri = ret.reader();
    
            std::map< std::string, ::DBus::Variant > argout;
            ri >> argout;
            return argout;
        }
    

    Ich hab soviel probiert, ich poste das mal nicht alles. Falls mir bitte jemand helfen könnte, ohne die DBus-C-Biblio zu nehmen (wie gesagt mag ich die C++-Biblio, wenn sie es kann), würde ich mich freuen.

    LG,
    Manu


Anmelden zum Antworten