X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fkaka%2Fcakelight%2FCommands.java;h=825ebe32872fd6afcf820f18a9ba6eef5ade4fab;hb=fa9808cd57e32f096495ad06689f7d23878f5217;hp=048e6c6da9ca6511ced3054dcd6f18a8f1e24840;hpb=c6384b556c76a6a8e13ee4562664230fe1a3c3a1;p=kaka%2Fcakelight.git diff --git a/src/kaka/cakelight/Commands.java b/src/kaka/cakelight/Commands.java index 048e6c6..825ebe3 100644 --- a/src/kaka/cakelight/Commands.java +++ b/src/kaka/cakelight/Commands.java @@ -1,9 +1,6 @@ package kaka.cakelight; -import kaka.cakelight.mode.AmbientMode; -import kaka.cakelight.mode.SingleColorMode; -import kaka.cakelight.mode.TwoColorNoiseMode; -import kaka.cakelight.mode.VideoMode; +import kaka.cakelight.mode.*; import java.util.function.BiFunction; @@ -16,31 +13,74 @@ class Commands { } @Override - public void activate(Console console, String[] args) { + public Object activate(Console console, String[] args) { if (!activate.apply(console, args)) { console.out("did NOT run command"); } + return null; } }; } + private static Console.Command modeCommand(String[] names, BiFunction activate) { + return new Console.Command() { + @Override + public String[] getNames() { + return names; + } + + @Override + public Object activate(Console console, String[] args) { + Mode mode = activate.apply(console, args); + if (mode == null) { + console.out("did NOT run command"); + } + return mode; + } + }; + } + + static Console.Command help() { + return command(new String[] {"?", "h", "help"}, (console, args) -> { + for (Console.Command c : console.getCommands()) { + System.out.println(String.join("|", c.getNames())); + } + return true; + }); + } + static Console.Command quit() { return command(new String[] {"q", "quit"}, (console, args) -> { - console.getCakelight().turnOff(); - console.out("stopping cakelight"); + console.quit(); + console.out("terminating"); return true; }); } - static Console.Command video() { - return command(new String[] {"v", "video"}, (console, args) -> { - console.getCakelight().setMode(new VideoMode()); - return true; + static Console.Command push() { + return command(new String[] {"push"}, (console, args) -> { + Object obj = console.handleInput(String.join(" ", args)); + if (obj instanceof Mode) { // obj could be anything, which should be fixed + console.out("pushing mode " + obj.getClass().getSimpleName()); + console.getCakelight().pushMode((Mode) obj); + } + return true; }); } + static Console.Command pop() { + return command(new String[] {"pop"}, (console, args) -> { + console.out("popping mode " + console.getCakelight().popMode().getClass().getSimpleName()); + return true; + }); + } + + static Console.Command video() { + return modeCommand(new String[] {"v", "video"}, (console, args) -> new VideoMode()); + } + static Console.Command color() { - return command(new String[] {"c", "col", "color"}, (console, args) -> { + return modeCommand(new String[] {"c", "col", "color"}, (console, args) -> { Color c = null; if (args.length == 1) { c = console.parseColor(args[0]); @@ -52,19 +92,17 @@ class Commands { ); } if (c != null) { - console.getCakelight().setMode(new SingleColorMode(c)); console.out("setting color to " + c); - return true; - } else { - return false; + return new SingleColorMode(c); } + return null; }); } static Console.Command brightness() { return command(new String[] {"b", "brightness"}, (console, args) -> { if (args.length == 1) { - int b = Integer.parseInt(args[0].replaceAll("\\+-", "")); + int b = Integer.parseInt(args[0].replaceAll("[+-]+", "")); if (args[0].startsWith("+")) { b = Math.min(console.getConfig().leds.brightness + b, 31); } else if (args[0].startsWith("-")) { @@ -107,29 +145,36 @@ class Commands { } static Console.Command ambientMode() { - return command(new String[] {"m", "mode"}, (console, args) -> { + return modeCommand(new String[] {"m", "mode"}, (console, args) -> { if (args.length == 1) { - console.getCakelight().setMode(new AmbientMode(new String[] {args[0]})); console.out("setting ambient mode to " + args[0]); - return true; - } else { - return false; + return new AmbientMode(new String[]{args[0]}); } + return null; }); } static Console.Command twoColorNoiseMode() { - return command(new String[] {"n", "noise"}, (console, args) -> { + return modeCommand(new String[] {"n", "noise"}, (console, args) -> { if (args.length == 2) { - console.getCakelight().setMode(new TwoColorNoiseMode( + console.out("setting two-color noise mode"); + return new TwoColorNoiseMode( console.parseColor(args[0]), console.parseColor(args[1]) - )); - console.out("setting two-color noise mode"); - return true; - } else { - return false; + ); + } + return null; + }); + } + + static Console.Command sunriseMode() { + return modeCommand(new String[] {"sunrise"}, (console, args) -> { + if (args.length == 1) { + int durationSeconds = Integer.parseInt(args[0]); + console.out("setting sunrise mode with duration " + durationSeconds); + return new SunriseMode(durationSeconds); } + return null; }); } }