def main(): control = Control() communicate.listen() while True: control.action, control.option = communicate.accept() log.write("Received action '%s' and option '%s'." % (control.action, control.option)) control.get_state() if control.state == "Ended": control.stop() api.action("stop") log.write("Performing action '%s'." % (control.action)) if control.action == "restart": break try: action_result = getattr(control, control.action)() if action_result: communicate.reply(action_result) except Exception as error: log.error("Failed to perform action '%s': %s." % (control.action, error)) continue
def media_watcher(): log.write("Watcher launched.") communicate.receiver_hostname = config.hostname while True: with communicate: communicate.send("get_status") state, time_elapsed, time_total = communicate.receive() time_remaining = int(time_total) - int(time_elapsed) time_sleep = time_remaining / 2 if time_sleep < 3: time_sleep = 0.5 if state in ["Ended", "opped"]: with communicate: communicate.send(("play", "next")) log.write("Watcher exited.") break sleep(time_sleep)
def get_media_file(self, media_partial): if media_partial == "disc": self.media_file = self.find_disc_type() log.write(self.media_file) return media_mount = options.source_mount if "Downloads-" in media_partial: media_partial = media_partial.strip("Downloads-") media_mount = options.downloads_mount if "Temporary-" in media_partial: media_partial = media_partial.strip("Temporary-") media_mount = options.temporary_mount if config.platform == "win32": media_partial = media_partial.replace("/", "\\") self.media_file = media_mount + "/" + media_partial if not os.path.exists(self.media_file): self.find_media_files()
def volume_down(self): current_volume = self.media_player.audio_get_volume() target_volume = current_volume - 15 if current_volume < 30: target_volume = 10 log.write("Setting volume to '%s'." % (target_volume)) self.media_player.audio_set_volume(target_volume)
def volume_up(self): current_volume = self.media_player.audio_get_volume() target_volume = current_volume + 15 if target_volume > 200: target_volume = 200 log.write("Setting volume to '%s'." % (target_volume)) self.media_player.audio_set_volume(target_volume)
def play(self): self.stop() if self.option == "next": if self.queue: media_file, directory, media_info = self.queue.pop(0) time_viewed = 0 else: log.write("Cannot play next media, queue is empty.") return else: media_partial, time_viewed, directory, media_info = self.option media = Media(directory, media_info) media.get_media_file(media_partial) self.queue.extend(media.parts) media_file = media.media_file media_ready = self.instance.media_new(media_file) self.media_player.set_media(media_ready) api.action("begin", (directory, media_info)) if self.state not in ["Playing", "Paused"]: media_watch = Process(target = media_watcher) media_watch.start() self.media_player.play() if time_viewed: self.media_player.set_time(time_viewed * 1000) self.media_player.set_fullscreen(1) self.mute() if self.media_player.audio_get_mute(): self.mute() self.media_player.audio_set_volume(40) self.focus()
def main(): """Check Receivers, launch web server.""" log.write("Checking Receivers.") with database: receivers = database.select_receivers() check_alive_receivers(receivers) log.write("Starting web server.") # This is set up for testing, hence port 7000. web.run(host = "0.0.0.0", port = 7000, debug = True)
with self.database: for fle in delete_list: directory = self.check_directory(fle) for drc in self.options.directories: if directory == drc: directory = directory.lower() data = getattr(self.naming, "parse_" + directory)(fle) # Check it is there first, if it is, delete. if getattr(self.database, "check_" + directory)(data): getattr(self.database, "delete_" + directory)(data) def check_directory(self, directory): """Checks that the directory is one that was passed by the user.""" for drc in self.options.directories: if "%s/%s/" % (self.options.source_mount, drc) in directory: return drc if __name__ == "__main__": log.write("Indexer launched.") main() log.write("Indexer exited.")
def set_subtitle_track(self): self.media_player.video_set_spu(int(self.option)) def set_audio_track(self): self.media_player.audio_set_track(int(self.option)) def focus(self): if config.platform == "win32": keybd_event(VK_MENU, 0xb8, 0, 0) keybd_event(VK_TAB, 0x8f, 0, 0) keybd_event(VK_TAB, 0x8f, KEYEVENTF_KEYUP, 0) keybd_event(VK_MENU, 0xb8, KEYEVENTF_KEYUP, 0) if __name__ == "__main__": log.write("Receiver launched.") parser = argparse.ArgumentParser(description = """The Downloads and Temporary mounts are optional. They provide functionality for the 'Recent' page.""") parser.add_argument("-w", "--webmote", action = "store", required = True, help = "The hostname of the Webmote server.") parser.add_argument("-n", "--name", action = "store", required = True, help = "A descriptive name for this Receiver.")
else: receivers = database.select_receivers() receivers = check_alive_receivers(receivers) return flask.render_template("admin.html", receiver = receiver, data = data, receivers = receivers) # Run. #------------------------------------------------------------------------------ if __name__ == "__main__": log.write("Webmote launched.") help = """Launches the Webmote server. Both arguments are optional but provide functionality for the 'Recent' page.""" parser = argparse.ArgumentParser(description = help) parser.add_argument("-d", "--downloads_mount", action = "store", type = unicode, default = None) parser.add_argument("-t", "--temporary_mount", action = "store", type = unicode, default = None)