Skip to content

Instantly share code, notes, and snippets.

@adamgreig
Created July 24, 2011 17:00
Show Gist options
  • Save adamgreig/1102820 to your computer and use it in GitHub Desktop.
Save adamgreig/1102820 to your computer and use it in GitHub Desktop.
exaile plugin to allow play/pause over http for remote control
# support for stop, prev, next by Paul Martrenchar
from xl import event
from xl import player
import threading
import socket
socket_thread = None
class ThreadedSocket(threading.Thread):
def run(self):
self._stop = threading.Event()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(0.5)
s.bind(('127.0.0.1', 6789))
s.listen(1)
while True:
try:
c, d = s.accept()
rev = c.recv(128)[:4]
if rev == 'pause':
if player.PLAYER.is_playing() or player.PLAYER.is_paused():
player.PLAYER.toggle_pause()
else:
player.QUEUE.play()
elif rev == 'next':
player.QUEUE.next()
elif rev == 'prev':
player.QUEUE.prev()
elif rev == 'stop':
player.PLAYER.stop()
c.close()
except socket.error:
if self._stop.isSet():
s.close()
break
def stop(self):
self._stop.set()
def enable(exaile):
if(exaile.loading):
event.add_callback(_enable, 'exaile_loaded')
else:
_enable(None, exaile, None)
def _enable(eventname, exaile, nothing):
global socket_thread
socket_thread = ThreadedSocket()
socket_thread.start()
def disable(exaile):
global socket_thread
if socket_thread:
socket_thread.stop()
def teardown(exaile):
global socket_thread
if socket_thread:
socket_thread.stop()
#!/usr/bin/env python
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 6789))
s.send('pause\n')
s.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment