diff --git a/rokucli/cli.py b/rokucli/cli.py index 0b54432..8b7be43 100644 --- a/rokucli/cli.py +++ b/rokucli/cli.py @@ -1,2 +1,38 @@ +import argparse +from roku import Roku +from discover import discover_roku + +class RokuCLI(): + """ Command-line interpreter for processing user input and relaying + commands to Roku """ + def __init__(self): + pass + + def parseargs(self): + parser = argparse.ArgumentParser( + description='Command-line control of Roku devices') + parser.add_argument( + 'ipaddr', + nargs='?', + help=('IP address of Roku to connect to. By default, will ' + + 'automatically detect Roku within LAN.')) + return parser.parse_args() + + def run(self): + ipaddr = self.parseargs().ipaddr + + # If IP not specified, use Roku discovery and let user choose + if ipaddr: + roku = Roku(ipaddr) + else: + roku = discover_roku() + + # Main interactive loop + print('Running') + while True: + roku.home() + break + + def main(): - print("Roku main") + RokuCLI().run() diff --git a/rokucli/discover.py b/rokucli/discover.py new file mode 100644 index 0000000..3b01bf4 --- /dev/null +++ b/rokucli/discover.py @@ -0,0 +1,37 @@ +from roku import Roku + +def discover_roku(): + """ Search LAN for available Roku devices. Returns a Roku object. """ + + print("Searching for Roku devices within LAN ...") + rokus = Roku.discover() + if not rokus: + print("Unable to discover Roku devices. " + + "Try again, or manually specify the IP address with " + + "\'roku \' (e.g. roku 192.168.1.130)") + return None + + print("Found the following Roku devices:") + for i,r in enumerate(rokus): + print("[" + str(i+1) + "] " + str(r.host) + ":" + str(r.port)) + print("") + + if len(rokus) == 1: + print("Selecting Roku 1 by default") + return rokus[0] + else: + print("Multiple Rokus found. Select the index of the Roku to control:") + + while True: + try: + query = "Select (1 to " + str(len(rokus)) + ") > " + sel = int(raw_input(query)) - 1 + if sel >= len(rokus): + raise ValueError + else: + break + except ValueError: + print("Invalid selection") + + return rokus[sel] +