diff --git a/README.md b/README.md
index 9ec9261..cec30ce 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,15 @@
-# moonlight-openelec-rpi2
+#script.moonlight
+Only for Raspberry Pi 2 and Openelec.
+
+##Installation
+- Download a release
+- Copy the file to the Openelec
+- Go to Settings > Addons > Install from zip file
+
+##Features
+- Pair
+- List availables games
+- Stream
+
+##Bugs
+- Feel free to open a issue.
diff --git a/script.moonlight/addon.py b/script.moonlight/addon.py
index 39c4fb3..197f388 100644
--- a/script.moonlight/addon.py
+++ b/script.moonlight/addon.py
@@ -1,5 +1,91 @@
import os
+import sys
+import urllib
+import urlparse
+import xbmcgui
+import xbmcplugin
+import xbmcaddon
+import re
+import subprocess
-with open('/storage/.kodi/addons/script.moonlight/start_moonlight.tmp', 'w') as f:
- f.write("open moonlight")
+my_addon = xbmcaddon.Addon()
+my_env = os.environ.copy()
+my_env["LD_LIBRARY_PATH"] = my_addon.getAddonInfo("path")+"/libs:" + my_env["LD_LIBRARY_PATH"]
+base_url = sys.argv[0]
+addon_handle = int(sys.argv[1])
+args = urlparse.parse_qs(sys.argv[2][1:])
+
+xbmcplugin.setContent(addon_handle, 'files')
+
+def build_url(query):
+ return base_url + '?' + urllib.urlencode(query)
+
+mode = args.get('mode', None)
+
+if mode is None:
+ xbmcplugin.addDirectoryItem(handle=addon_handle,
+ url=build_url({'mode': 'pair'}),
+ listitem=xbmcgui.ListItem('Pair'),
+ isFolder=False)
+
+ xbmcplugin.addDirectoryItem(handle=addon_handle,
+ url=build_url({'mode': 'list'}),
+ listitem=xbmcgui.ListItem('List Games'),
+ isFolder=True)
+
+ xbmcplugin.addDirectoryItem(handle=addon_handle,
+ url=build_url({'mode': 'stream', 'app': ''}),
+ listitem=xbmcgui.ListItem('Stream Default'),
+ isFolder=False)
+ xbmcplugin.endOfDirectory(addon_handle)
+elif mode[0] == "pair":
+ pair_args = ["pair"]
+ if my_addon.getSetting("MOON_SERVER_IP") != "0.0.0.0":
+ pair_args += [my_addon.getSetting("MOON_SERVER_IP")]
+
+ p = subprocess.Popen([my_addon.getAddonInfo("path") + "/bin/moonlight"] + pair_args, stdout=subprocess.PIPE, env=my_env)
+ pin = ""
+
+ while True:
+ l = p.stdout.readline()
+ if "following PIN" in l:
+ m = re.search(':\s(\d+)', l)
+ pin = m.group(0)
+ break
+
+ dialog = xbmcgui.Dialog()
+ dialog.ok("PIN code", "Insert the pin code in server: %s" % pin)
+
+ ret = ''.join(p.stdout.readlines())
+
+ if "Succesfully paired" in ret:
+ dialog = xbmcgui.Dialog()
+ dialog.ok("Paired", "Succesfully paired")
+ else:
+ dialog = xbmcgui.Dialog()
+ dialog.ok("Error", "Failed to pair to server")
+elif mode[0] == "list":
+ list_args = ["list"]
+ if my_addon.getSetting("MOON_SERVER_IP") != "0.0.0.0":
+ list_args += [my_addon.getSetting("MOON_SERVER_IP")]
+ p = subprocess.Popen([my_addon.getAddonInfo("path") + "/bin/moonlight"] + list_args, stdout=subprocess.PIPE, env=my_env)
+
+ ret = ''.join(p.stdout.readlines()).strip()
+ m = re.findall(r"\d.\s(.*?)\n|$", ret)
+
+ for game in list(m):
+ name = game.strip()
+ if name != "":
+ xbmcplugin.addDirectoryItem(handle=addon_handle,
+ url=build_url({'mode': 'stream', 'app': name}),
+ listitem=xbmcgui.ListItem(name),
+ isFolder=False)
+ xbmcplugin.endOfDirectory(addon_handle)
+elif mode[0] == "stream":
+ app = args.get('app', None)
+ with open(my_addon.getAddonInfo("path") + '/start_moonlight.tmp', 'w') as f:
+ if app is None:
+ f.write("")
+ else:
+ f.write(app[0])
diff --git a/script.moonlight/addon.xml b/script.moonlight/addon.xml
index a9f7f1f..9a0541b 100644
--- a/script.moonlight/addon.xml
+++ b/script.moonlight/addon.xml
@@ -1,19 +1,19 @@
-
+
-
+
executable
- all
+ linux
Run moonlight
Run moonlight
GNU General Public License, v2
gustavobenn@hotmail.com
-
\ No newline at end of file
+
diff --git a/script.moonlight/bin/service.sh b/script.moonlight/bin/service.sh
index c9e6bd3..33c6b9d 100644
--- a/script.moonlight/bin/service.sh
+++ b/script.moonlight/bin/service.sh
@@ -1,68 +1,77 @@
#!/bin/sh
. /etc/profile
+
oe_setup_addon script.moonlight
export LD_LIBRARY_PATH=$ADDON_DIR/libs:$LD_LIBRARY_PATH
chmod a+x $ADDON_DIR/bin/*
-MOONLIGHT_ARG=""
-
-if [ "$MOON_PACKETSIZE" != "0" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -packetsize $MOON_PACKETSIZE"
-fi
-
-if [ "$MOON_BITRATE" != "0" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -bitrate $MOON_BITRATE"
-fi
-
-if [ "$MOON_RESOLUTION" = "720p" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -720"
-else
- MOONLIGHT_ARG="$MOONLIGHT_ARG -1080"
-fi
-
-if [ "$MOON_FRAMERATE" = "60" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -60fps"
-else
- MOONLIGHT_ARG="$MOONLIGHT_ARG -30fps"
-fi
-
-if [ "$MOON_FORCEHW" = "true" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -forcehw"
-fi
-
-if [ "$MOON_SURROUND" = "true" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -surround"
-fi
-
-if [ "$MOON_LOCALAUDIO" = "true" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -localaudio"
-fi
-
-if [ "$MOON_NOSOPS" = "true" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -nosops"
-fi
-
-if [ "$MOON_REMOTE" = "true" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -remote"
-fi
-
-if [ "$MOON_MAPPING" != "" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG -mapping $ADDON_DIR/bin/mappings/$MOON_MAPPING.conf"
-fi
-
-if [ "$MOON_SERVER_IP" != "0.0.0.0" ]; then
- MOONLIGHT_ARG="$MOONLIGHT_ARG $MOON_SERVER_IP"
-fi
-
while [ 1 ]
do
if [ -f $ADDON_DIR/start_moonlight.tmp ]
then
+ oe_setup_addon script.moonlight
+
+ MOONLIGHT_APP=`cat $ADDON_DIR/start_moonlight.tmp`
+
rm $ADDON_DIR/start_moonlight.tmp
+ MOONLIGHT_ARG=""
+
+ if [ "$MOON_PACKETSIZE" != "0" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -packetsize $MOON_PACKETSIZE"
+ fi
+
+ if [ "$MOON_BITRATE" != "0" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -bitrate $MOON_BITRATE"
+ fi
+
+ if [ "$MOON_RESOLUTION" = "720p" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -720"
+ else
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -1080"
+ fi
+
+ if [ "$MOON_FRAMERATE" = "60" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -60fps"
+ else
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -30fps"
+ fi
+
+ if [ "$MOON_FORCEHW" = "true" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -forcehw"
+ fi
+
+ if [ "$MOON_SURROUND" = "true" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -surround"
+ fi
+
+ if [ "$MOON_LOCALAUDIO" = "true" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -localaudio"
+ fi
+
+ if [ "$MOON_NOSOPS" = "true" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -nosops"
+ fi
+
+ if [ "$MOON_REMOTE" = "true" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -remote"
+ fi
+
+ if [ "$MOON_MAPPING" != "" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -mapping \"${ADDON_DIR}/bin/mappings/${MOON_MAPPING}.conf\""
+ fi
+
+ if [ "$MOONLIGHT_APP" != "" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG -app \"${MOONLIGHT_APP}\""
+ fi
+
+ if [ "$MOON_SERVER_IP" != "0.0.0.0" ]; then
+ MOONLIGHT_ARG="$MOONLIGHT_ARG $MOON_SERVER_IP"
+ fi
+
if pgrep "kodi.bin" > /dev/null
then
systemctl stop kodi
@@ -70,7 +79,7 @@ do
modprobe snd_bcm2835
echo $MOONLIGHT_ARG >> $ADDON_LOG_FILE
- $ADDON_DIR/bin/moonlight $MOONLIGHT_ARG stream >> $ADDON_LOG_FILE 2>&1
+ /bin/sh -c "${ADDON_DIR}/bin/moonlight ${MOONLIGHT_ARG} stream >> ${ADDON_LOG_FILE} 2>&1"
rmmod snd_bcm2835
systemctl start kodi
fi
diff --git a/script.moonlight/changelog.txt b/script.moonlight/changelog.txt
index 3c75b86..5d12ccb 100644
--- a/script.moonlight/changelog.txt
+++ b/script.moonlight/changelog.txt
@@ -1 +1,5 @@
-1.0.0 Initial Release
\ No newline at end of file
+v1.0.1
+Add Pair and List Options
+
+v1.0.0
+Initial Release
\ No newline at end of file
diff --git a/script.moonlight/resources/settings.xml b/script.moonlight/resources/settings.xml
index 9854ff9..8dd0fd3 100644
--- a/script.moonlight/resources/settings.xml
+++ b/script.moonlight/resources/settings.xml
@@ -1,14 +1,15 @@
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/script.moonlight/settings-default.xml b/script.moonlight/settings-default.xml
index 8b12244..2bd2573 100644
--- a/script.moonlight/settings-default.xml
+++ b/script.moonlight/settings-default.xml
@@ -5,7 +5,7 @@
-
+