playerdo / playerdo / backends / shellfm.py

import os.path
import re
import socket

from playerdo.backends.base import Player
from playerdo.utils import process_retval, PlayerException

class ShellFm(Player):

    process_name = "shell-fm"
    friendly_name = "shell-fm"

    def _socket_path(self):
        rc_path = os.path.join(os.environ['HOME'], '.shell-fm', 'shell-fm.rc')
        conf = file(rc_path).read()
        return re.search(r'^\s*unix\s*=\s*([^#\s]+)', conf, re.MULTILINE).groups()[0]

    def _send_command(self, command):
        s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        s.connect(self._socket_path())
        s.send(command + "\n")
        s.close()

    def is_stopped(self):
        return not os.path.isfile(os.path.join(os.environ['HOME'],
                                               ".shell-fm",
                                               "nowplaying"))

    def check_dependencies(self):
        retval = []
        try:
            p = self._socket_path()
        except Exception:
            retval.append("Cannot find configuration file ~/.shell-fm/shell-fm.rc, or the 'unix' configuration item in that file.")
        return retval

    def play(self):
        if not self.is_stopped():
            self.unpause()
        else:
            raise PlayerException("Cannot play shell-fm when in a stopped state.")

    def pause(self):
        self._send_command("pause")

    def unpause(self):
        self.pause()

    def stop(self):
        self._send_command("stop")

    def next(self):
        self._send_command("skip")
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.