2014-10-22 8 views
1

DBus metadata에서 Lua 스크립트로 nuvolaplayer을 읽으려고합니다. 예상대로 (트랙) 제목 및 앨범 필드는 표시 할 수 있지만 작가의 데이터가 이상하게 나타납니다루아 스크립트의 DBus에서 아티스트 메타 데이터 읽기 - 이상한 결과

"Sly & Robbie""lgi.rec 0x7f9ee8005c90:GLib.Variant" 대신 예상된다
lgi.rec 0x7f9ee8005c90:GLib.Variant Underwater Dub Dictionary 

.

d-feet을 사용하여 값을 보면 xesam:artist 필드가 []로 둘러싸인 다른 필드와 다릅니다.

local lgi = require 'lgi' 
local Gio = lgi.require 'Gio' 
local core = require 'lgi.core' 
local GLib = lgi.require 'GLib' 
local type,unpack = type,unpack 
local bus = Gio.bus_get_sync(Gio.BusType.SESSION) 

local ret,err = bus:call(
    "org.mpris.MediaPlayer2.nuvolaplayer", 
    --"org.gnome.Rhythmbox3", 
    "/org/mpris/MediaPlayer2", 
    "org.freedesktop.DBus.Properties", 
    "GetAll", 
    GLib.Variant.new_tuple(
    { 
     GLib.Variant("s","org.mpris.MediaPlayer2.Player") 
    }, 1), 
    nil, 
    Gio.DBusConnectionFlags.NONE, 
    -1, -- Timeout 
    nil, -- Cancellable 
    function(conn, res) 
     local ret, err = bus:call_finish(res) 
     print("here",err) 

     local returnValue1, returnValue2 = unpack(ret.value) 
     if not err then 
      print("META", returnValue1.Metadata["xesam:artist"], 
       returnValue1.Metadata["xesam:album"], 
       returnValue1.Metadata["xesam:title"]) 
     end 
    end 
) 

local main_loop = GLib.MainLoop() 
main_loop:run() 
+0

d-feet 출력과 메서드의 서명을 게시 할 수 있습니까? –

+0

어떤 이유로 d-feet은 오늘 이상하게 행동하고 있습니다. 이제 "Dict of {String, Variant} Metadata"항목을 두 번 클릭하면 "부울 CanSeek"항목으로 바뀝니다. 어제 그 일을하지 않았습니다. 그래서 나는 지금 d-feet 출력을 얻는 방법을 확신하지 못합니다 .... – emacsomancer

답변

1

필드 xesam:artist 문자열 (예술가)의 목록/배열 :

여기 내가 사용하는 코드입니다. 어쩌면 루아 (Lua)는 인쇄를 위해이 유형을 특별히 처리해야한다. 예를 들어 배열을 반복하고 일반 문자열을 추출해야한다.

+0

아, 그 말이 맞습니다. 감사! – emacsomancer