local server = libs.server; local http = libs.http; local utf8 = libs.utf8; local timer = libs.timer; local state = {}; local tid = -1; function send (parameter) local host = server.get("host"); local port = server.get("port"); local url = "http://" .. host .. ":" .. port .. "/xbmcCmds/xbmcHttp?command=" .. parameter; local ok, resp = pcall(http.get, url); if (ok) then resp = utf8.replace(resp, "", ""); resp = utf8.replace(resp, "
  • ", ""); resp = utf8.replace(resp, "", ""); resp = utf8.replace(resp, "
  • ", ""); else resp = nil; end return resp; end function update () local resp = send("GetCurrentlyPlaying"); if (resp == nil) then state = nil; return; else state = {}; end -- Parse state values local lines = utf8.split(resp, "\n"); for i,line in ipairs(lines) do local p = utf8.indexof(line, ":"); if (p > -1) then local key = utf8.sub(line, 0, p); local value = utf8.sub(line, p+1); state[key] = value; end end -- Check title if (state.Title == nil) then if (state.Show ~= nil) then state.Title = state.Show; if (state.Season ~= nil and state.Episode ~= nil) then state.Title = state.Title .. " " .. state.Season .. "x" .. state.Episode; end elseif (state.Plot ~= nil) then state.Title = state.Plot; elseif (state.Filename ~= nil) then state.Title = state.Filename; else state.Title = "[Not Playing]"; end end -- Check volume local vol = send("GetVolume"); vol = utf8.replace(vol, "\n", ""); vol = tonumber(vol); state.Volume = vol; -- Check position local pos = tonumber(state.Percentage); -- Check playing status local icon = "play"; if (state.PlayStatus == "Playing") then icon = "pause"; end server.update( { id = "title", text = state.Title }, { id = "vol", progress = vol }, { id = "play", icon = icon }, { id = "pos", progress = pos } ); tid = timer.timeout(update, 500); end function info () server.update({ id = "title", text = "[Not Connected]" },{ type = "dialog", title = "Boxee Connection", text = "Boxee Connection", Text = "A connection to Boxee could not be established. " .. "We recommend version 0.9.23 for PC or a Boxee Box.\n\n" .. "1. Make sure Boxee is running on your computer or your Boxee Box is powered on.\n\n" .. "2. Enable webserver in Boxee > Settings > Network > Servers. Unified Remote is pre-configured to use port 8800 and no password.\n\n" .. "3. If you are using a Boxee Box you must enter the IP address or hostname in Unified Remote Server Settings > Remotes > Boxee (Web) > Configure.", children = { { type = "button", text = "ok" } } }); end events.focus = function () update(); if (state == nil) then info(); end end events.blur = function () timer.cancel(tid); end actions.launch = function () if OS_WINDOWS then os.start("%programfiles(x86)%/Boxee/BOXEE.exe"); end end --@help Toggle playback state actions.play_pause = function () send("Pause"); end --@help Start playback actions.play = function () if (state.PlayStatus ~= "Playing") then actions.play_pause(); end end --@help Pause playback actions.pause = function () if (state.PlayStatus == "Playing") then actions.play_pause(); end end --@help Stop playback actions.stop = function () send("Stop"); end --@help Fast forward actions.forward = function () send("895"); end --@help Rewind actions.rewind = function () send("894"); end --@help Navigate up actions.up = function () send("SendKey(270)"); end --@help Navigate down actions.down = function () send("SendKey(271)"); end --@help Navigate left actions.left = function () send("SendKey(272)"); end --@help Navigate right actions.right = function () send("SendKey(273)"); end --@help Select current item actions.select = function () send("SendKey(256)"); end --@help Navigate back actions.back = function () send("SendKey(275)"); end --@help Leave DVD actions.dvd_leave = function () send("SendKey(934)"); end --@help Set volume --@param volume:number Set volume actions.volume = function (volume) send("SetVolume(" .. volume .. ")"); end --@help Raise volume actions.volume_up = function () actions.volume(math.min(state.Volume + 10, 100)); end --@help Lower volume actions.volume_down = function () actions.volume(math.max(state.Volume - 10, 0)); end --@help Set position --@param position:number Set position actions.position = function (position) send("SeekPercentage(" .. position .. ")"); end --@help Mute volume actions.volume_mute = function () send("Mute"); end --@help Toggle fullscreen actions.fullscreen = function () send("830"); end --@help Previous media actions.previous = function () send("PlayPrev"); end --@help Next media actions.next = function () send("PlayNext"); end