| Line | Branch | Exec | Source |
|---|---|---|---|
| 1 | /* | ||
| 2 | * This file is part of the Falcon Player (FPP) and is Copyright (C) | ||
| 3 | * 2013-2022 by the Falcon Player Developers. | ||
| 4 | * | ||
| 5 | * The Falcon Player (FPP) is free software, and is covered under | ||
| 6 | * multiple Open Source licenses. Please see the included 'LICENSES' | ||
| 7 | * file for descriptions of what files are covered by each license. | ||
| 8 | * | ||
| 9 | * This source file is covered under the LGPL v2.1 as described in the | ||
| 10 | * included LICENSE.LGPL file. | ||
| 11 | */ | ||
| 12 | |||
| 13 | #include "fpp-pch.h" | ||
| 14 | |||
| 15 | #include "fpp-json.h" | ||
| 16 | |||
| 17 | #include <cmath> | ||
| 18 | #include <functional> | ||
| 19 | |||
| 20 | #include "../Sequence.h" | ||
| 21 | #include "../Timers.h" | ||
| 22 | #include "../common.h" | ||
| 23 | #include "../effects.h" | ||
| 24 | #include "../log.h" | ||
| 25 | #include "../overlays/PixelOverlay.h" | ||
| 26 | #include "../overlays/PixelOverlayModel.h" | ||
| 27 | #include "../scripts.h" | ||
| 28 | #include "../settings.h" | ||
| 29 | |||
| 30 | #include "EventCommands.h" | ||
| 31 | |||
| 32 | // A slot is a whole number 1..255 ("3.0" and spaces round it are fine); | ||
| 33 | // anything else is 0, which is what a preset with no slot holds. | ||
| 34 | 19 | static int ParsePresetSlot(const std::string& s) { | |
| 35 | 19 | char* end = nullptr; | |
| 36 | 19 | double v = strtod(s.c_str(), &end); | |
| 37 |
3/4✓ Branch 0 taken 20 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 19 times.
|
20 | while (end && isspace((unsigned char)*end)) { |
| 38 | 1 | end++; | |
| 39 | } | ||
| 40 |
12/12✓ Branch 0 taken 16 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 15 times.
✓ Branch 3 taken 1 times.
✓ Branch 4 taken 14 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 12 times.
✓ Branch 7 taken 2 times.
✓ Branch 8 taken 1 times.
✓ Branch 9 taken 11 times.
✓ Branch 10 taken 8 times.
✓ Branch 11 taken 11 times.
|
19 | if (end == s.c_str() || *end != '\0' || v != floor(v) || v < 1 || v > 255) { |
| 41 | 8 | return 0; | |
| 42 | } | ||
| 43 | 11 | return (int)v; | |
| 44 | } | ||
| 45 | |||
| 46 | 1888 | TriggerPresetCommand::TriggerPresetCommand() : | |
| 47 |
2/4✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
|
3776 | Command("Trigger Command Preset") { |
| 48 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("name", "datalist", "Preset Name").setContentListUrl("api/commandPresets?names=true")); |
| 49 | 1888 | } | |
| 50 | |||
| 51 | 24 | std::unique_ptr<Command::Result> TriggerPresetCommand::run(const std::vector<std::string>& args) { | |
| 52 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 24 times.
|
24 | if (args.size() != 1) { |
| 53 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 54 | } | ||
| 55 |
4/6✓ Branch 0 taken 24 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 24 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 22 times.
✓ Branch 5 taken 2 times.
|
24 | if (CommandManager::INSTANCE.TriggerPreset(args[0])) |
| 56 | 22 | return std::make_unique<Command::Result>("Preset Triggered"); | |
| 57 | else | ||
| 58 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | return std::make_unique<Command::ErrorResult>("Not found"); |
| 59 | } | ||
| 60 | |||
| 61 | 1888 | TriggerPresetInFutureCommand::TriggerPresetInFutureCommand() : | |
| 62 |
2/4✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
|
3776 | Command("Trigger Command Preset In Future") { |
| 63 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("id", "string", "Identifier")); |
| 64 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("ms", "int", "MS In Future").setRange(0, 86400000)); |
| 65 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("name", "datalist", "Preset Name").setContentListUrl("api/commandPresets?names=true")); |
| 66 | 1888 | } | |
| 67 | 115 | std::unique_ptr<Command::Result> TriggerPresetInFutureCommand::run(const std::vector<std::string>& args) { | |
| 68 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 115 times.
|
115 | if (args.size() != 3) { |
| 69 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 70 | } | ||
| 71 | 115 | long long t = GetTimeMS(); | |
| 72 | 115 | int val = std::atoi(args[1].c_str()); | |
| 73 | 115 | long long tv = t + val; | |
| 74 | 115 | LogDebug(VB_COMMAND, "\"Trigger Command Preset In Future\" identifier \"%s\" scheduling preset \"%s\" to trigger in %dms\n", | |
| 75 | args[0].c_str(), args[2].c_str(), val); | ||
| 76 | // The identifier lets a later trigger with the same one replace a pending | ||
| 77 | // timer. Kept in its own namespace: Timers ids are shared with fppd's own | ||
| 78 | // timers, and a user id of "FileMonitor" or "SequencePresets" replaced | ||
| 79 | // that timer's work with the preset. | ||
| 80 |
2/4✓ Branch 0 taken 115 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 115 times.
✗ Branch 3 not taken.
|
115 | Timers::INSTANCE.addTimer("preset:" + args[0], tv, args[2]); |
| 81 | 115 | return std::make_unique<Command::Result>("Timer Started"); | |
| 82 | } | ||
| 83 | |||
| 84 | 1888 | TriggerPresetSlotCommand::TriggerPresetSlotCommand() : | |
| 85 |
2/4✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
|
3776 | Command("Trigger Command Preset Slot") { |
| 86 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("slot", "int", "Preset Slot").setRange(1, 255)); |
| 87 | 1888 | } | |
| 88 | 13 | std::unique_ptr<Command::Result> TriggerPresetSlotCommand::run(const std::vector<std::string>& args) { | |
| 89 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 13 times.
|
13 | if (args.size() != 1) { |
| 90 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 91 | } | ||
| 92 | 13 | int val = ParsePresetSlot(args[0]); | |
| 93 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 7 times.
|
13 | if (val == 0) { |
| 94 |
3/6✓ Branch 0 taken 6 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
6 | return std::make_unique<Command::ErrorResult>("Invalid preset slot \"" + args[0] + "\""); |
| 95 | } | ||
| 96 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 1 times.
|
7 | if (CommandManager::INSTANCE.TriggerPreset(val)) |
| 97 | 6 | return std::make_unique<Command::Result>("Preset Triggered"); | |
| 98 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | return std::make_unique<Command::Result>("No preset in slot " + std::to_string(val)); |
| 99 | } | ||
| 100 | |||
| 101 | 1888 | TriggerMultiplePresetSlotsCommand::TriggerMultiplePresetSlotsCommand() : | |
| 102 |
2/4✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
|
3776 | Command("Trigger Multiple Command Preset Slots") { |
| 103 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("SlotA", "int", "Preset Slot A").setRange(1, 255)); |
| 104 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("SlotB", "int", "Preset Slot B").setRange(1, 255)); |
| 105 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("SlotC", "int", "Preset Slot C").setRange(1, 255)); |
| 106 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("SlotD", "int", "Preset Slot D").setRange(1, 255)); |
| 107 | 1888 | } | |
| 108 | 4 | std::unique_ptr<Command::Result> TriggerMultiplePresetSlotsCommand::run(const std::vector<std::string>& args) { | |
| 109 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 4 times.
|
4 | if (args.empty()) { |
| 110 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 111 | } | ||
| 112 | 4 | std::string slotList; | |
| 113 |
2/2✓ Branch 0 taken 13 times.
✓ Branch 1 taken 4 times.
|
17 | for (auto& a : args) { |
| 114 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 7 times.
|
13 | if (a.length() > 0) { |
| 115 |
4/6✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 6 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 6 times.
✗ Branch 5 not taken.
|
6 | slotList += (slotList.empty() ? "" : ", ") + a; |
| 116 | } | ||
| 117 | } | ||
| 118 |
1/2✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
|
4 | LogDebug(VB_COMMAND, "\"Trigger Multiple Command Preset Slots\" command triggering slots: %s\n", slotList.c_str()); |
| 119 |
2/2✓ Branch 0 taken 13 times.
✓ Branch 1 taken 4 times.
|
17 | for (auto& a : args) { |
| 120 |
2/2✓ Branch 0 taken 6 times.
✓ Branch 1 taken 7 times.
|
13 | if (a.length() > 0) { |
| 121 | 6 | int slot = ParsePresetSlot(a); | |
| 122 |
2/2✓ Branch 0 taken 2 times.
✓ Branch 1 taken 4 times.
|
6 | if (slot == 0) { |
| 123 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | LogWarn(VB_COMMAND, "\"Trigger Multiple Command Preset Slots\" skipping invalid slot \"%s\"\n", a.c_str()); |
| 124 | 2 | continue; | |
| 125 | } | ||
| 126 |
1/2✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
|
4 | CommandManager::INSTANCE.TriggerPreset(slot); |
| 127 | } | ||
| 128 | } | ||
| 129 |
1/2✓ Branch 0 taken 4 times.
✗ Branch 1 not taken.
|
4 | return std::make_unique<Command::Result>("Presets Triggered"); |
| 130 | 4 | } | |
| 131 | |||
| 132 | 1888 | TriggerMultiplePresetsCommand::TriggerMultiplePresetsCommand() : | |
| 133 |
2/4✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
|
3776 | Command("Trigger Multiple Command Presets") { |
| 134 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("NameA", "datalist", "Preset Name 1").setContentListUrl("api/commandPresets?names=true")); |
| 135 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("NameB", "datalist", "Preset Name 2").setContentListUrl("api/commandPresets?names=true")); |
| 136 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("NameC", "datalist", "Preset Name 3").setContentListUrl("api/commandPresets?names=true")); |
| 137 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("NameD", "datalist", "Preset Name 4").setContentListUrl("api/commandPresets?names=true")); |
| 138 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("NameE", "datalist", "Preset Name 5").setContentListUrl("api/commandPresets?names=true")); |
| 139 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("NameF", "datalist", "Preset Name 6").setContentListUrl("api/commandPresets?names=true")); |
| 140 | 1888 | } | |
| 141 | 2 | std::unique_ptr<Command::Result> TriggerMultiplePresetsCommand::run(const std::vector<std::string>& args) { | |
| 142 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
2 | if (args.empty()) { |
| 143 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 144 | } | ||
| 145 | 2 | std::string nameList; | |
| 146 |
2/2✓ Branch 0 taken 7 times.
✓ Branch 1 taken 2 times.
|
9 | for (auto& a : args) { |
| 147 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 2 times.
|
7 | if (!a.empty()) { |
| 148 |
4/6✓ Branch 0 taken 2 times.
✓ Branch 1 taken 3 times.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 5 times.
✗ Branch 5 not taken.
|
5 | nameList += (nameList.empty() ? "" : ", ") + a; |
| 149 | } | ||
| 150 | } | ||
| 151 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | LogDebug(VB_COMMAND, "\"Trigger Multiple Command Presets\" command triggering presets: %s\n", nameList.c_str()); |
| 152 |
2/2✓ Branch 0 taken 7 times.
✓ Branch 1 taken 2 times.
|
9 | for (auto& a : args) { |
| 153 |
2/2✓ Branch 0 taken 5 times.
✓ Branch 1 taken 2 times.
|
7 | if (!a.empty()) { |
| 154 |
2/4✓ Branch 0 taken 5 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 5 times.
✗ Branch 3 not taken.
|
5 | CommandManager::INSTANCE.TriggerPreset(a); |
| 155 | } | ||
| 156 | } | ||
| 157 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | return std::make_unique<Command::Result>("Presets Triggered"); |
| 158 | 2 | } | |
| 159 | |||
| 160 | 1888 | RunScriptEvent::RunScriptEvent() : | |
| 161 |
2/4✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
|
3776 | Command("Run Script") { |
| 162 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("script", "string", "Script Name").setContentListUrl("api/scripts")); |
| 163 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("args", "string", "Script Arguments").setAdjustable()); |
| 164 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("env", "string", "Environment Variables")); |
| 165 | 1888 | } | |
| 166 | 29 | std::unique_ptr<Command::Result> RunScriptEvent::run(const std::vector<std::string>& args) { | |
| 167 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 29 times.
|
29 | if (args.empty()) { |
| 168 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 169 | } | ||
| 170 |
1/2✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
|
29 | std::string script = args[0]; |
| 171 |
1/2✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
|
29 | std::string scriptArgs = ""; |
| 172 | 29 | std::vector<std::pair<std::string, std::string>> envVars; | |
| 173 |
2/2✓ Branch 0 taken 25 times.
✓ Branch 1 taken 4 times.
|
29 | if (args.size() > 1) { |
| 174 |
1/2✓ Branch 0 taken 25 times.
✗ Branch 1 not taken.
|
25 | scriptArgs = args[1]; |
| 175 | } | ||
| 176 |
2/2✓ Branch 0 taken 25 times.
✓ Branch 1 taken 4 times.
|
29 | if (args.size() > 2) { |
| 177 |
1/2✓ Branch 0 taken 25 times.
✗ Branch 1 not taken.
|
25 | std::vector<std::string> s = splitWithQuotes(args[2], ','); |
| 178 |
2/2✓ Branch 0 taken 28 times.
✓ Branch 1 taken 25 times.
|
53 | for (auto& a : s) { |
| 179 | 28 | size_t idx = a.find('='); | |
| 180 | // skip an entry with no "=" or no name, such as the empty one the UI sends | ||
| 181 |
3/4✓ Branch 0 taken 3 times.
✓ Branch 1 taken 25 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
|
28 | if (idx == std::string::npos || idx == 0) { |
| 182 | 25 | continue; | |
| 183 | } | ||
| 184 |
3/6✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 3 times.
✗ Branch 5 not taken.
|
3 | envVars.push_back(std::pair<std::string, std::string>(a.substr(0, idx), a.substr(idx + 1))); |
| 185 | } | ||
| 186 | 25 | } | |
| 187 | |||
| 188 |
6/10✓ Branch 0 taken 29 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 29 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 29 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 29 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✓ Branch 9 taken 27 times.
|
29 | if (RunScript(script, scriptArgs, envVars) < 1) { |
| 189 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | return std::make_unique<Command::ErrorResult>("Script Not Started"); |
| 190 | } | ||
| 191 |
1/2✓ Branch 0 taken 27 times.
✗ Branch 1 not taken.
|
27 | return std::make_unique<Command::Result>("Script Started"); |
| 192 | 29 | } | |
| 193 | |||
| 194 | 1888 | StartEffectCommand::StartEffectCommand() : | |
| 195 |
2/4✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
|
3776 | Command("Effect Start") { |
| 196 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("effect", "string", "Effect Name").setContentListUrl("api/effects")); |
| 197 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("startChannel", "int", "Start Channel")); |
| 198 |
6/12✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
|
11328 | args.push_back(CommandArg("loop", "bool", "Loop Effect").setDefaultValue("true")); |
| 199 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("bg", "bool", "Background")); |
| 200 |
4/8✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
|
13216 | args.push_back(CommandArg("ifNotRunning", "bool", "If Not Running", true) |
| 201 |
1/2✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
|
1888 | .setDefaultValue("false") |
| 202 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
3776 | .setHelp("Checks to see if this exact item is already running and " |
| 203 | "prevents it from running again.")); | ||
| 204 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("Model", "string", "Model").setContentListUrl("api/models?simple=true", true)); |
| 205 | 1888 | } | |
| 206 | 44 | std::unique_ptr<Command::Result> StartEffectCommand::run(const std::vector<std::string>& args) { | |
| 207 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 44 times.
|
44 | if (args.empty()) { |
| 208 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 209 | } | ||
| 210 | |||
| 211 | 44 | int startChannel = 0; | |
| 212 | 44 | bool loop = false; | |
| 213 | 44 | bool bg = false; | |
| 214 | 44 | bool iNR = false; | |
| 215 | 44 | bool isRunning = false; | |
| 216 |
1/2✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
|
44 | std::string Model = ""; |
| 217 | |||
| 218 |
1/2✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
|
44 | if (args.size() > 1) { |
| 219 | 44 | startChannel = std::atoi(args[1].c_str()); | |
| 220 | } | ||
| 221 |
1/2✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
|
44 | if (args.size() > 2) { |
| 222 |
5/8✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 7 times.
✓ Branch 3 taken 37 times.
✓ Branch 4 taken 7 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 7 times.
|
44 | loop = args[2] == "true" || args[2] == "1"; |
| 223 | } | ||
| 224 |
1/2✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
|
44 | if (args.size() > 3) { |
| 225 |
5/8✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 42 times.
✓ Branch 3 taken 2 times.
✓ Branch 4 taken 42 times.
✗ Branch 5 not taken.
✗ Branch 6 not taken.
✓ Branch 7 taken 42 times.
|
44 | bg = args[3] == "true" || args[3] == "1"; |
| 226 | } | ||
| 227 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 44 times.
|
44 | if (args.size() > 4) { |
| 228 | ✗ | iNR = args[4] == "true" || args[4] == "1"; | |
| 229 | } | ||
| 230 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 44 times.
|
44 | if (args.size() > 5) { |
| 231 | ✗ | Model = args[5].c_str(); | |
| 232 | ✗ | if (Model != "") { | |
| 233 | // A reference, not getModel()'s raw pointer: an output reload | ||
| 234 | // can free the model between the lookup and its use below. | ||
| 235 | ✗ | auto m_model = PixelOverlayManager::INSTANCE.getModelShared(Model); | |
| 236 | ✗ | if (!m_model) { | |
| 237 | ✗ | LogErr(VB_COMMAND, "Invalid Pixel Overlay Model: '%s'\n", Model.c_str()); | |
| 238 | } else { | ||
| 239 | ✗ | if (args[1] == "") | |
| 240 | ✗ | startChannel = 1; | |
| 241 | ✗ | LogDebug(VB_COMMAND, "Overlay Model start channel modified to be : '%i'\n", m_model->getStartChannel() + startChannel); | |
| 242 | ✗ | startChannel = m_model->getStartChannel() + startChannel; | |
| 243 | } | ||
| 244 | ✗ | } | |
| 245 | } | ||
| 246 | |||
| 247 |
1/2✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
|
44 | const Json::Value RunningEffects = GetRunningEffectsJson(); |
| 248 | |||
| 249 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 44 times.
|
44 | if (iNR) { |
| 250 | ✗ | for (int x = 0; x < RunningEffects.size(); x++) { | |
| 251 | ✗ | Json::Value v = RunningEffects[x]; | |
| 252 | ✗ | if (v["name"].asString() == args[0]) { | |
| 253 | ✗ | isRunning = true; | |
| 254 | ✗ | LogDebug(VB_COMMAND, "Effect Already running, configured not to start it again\n"); | |
| 255 | ✗ | return std::make_unique<Command::Result>("Effect NOT Started"); | |
| 256 | } | ||
| 257 | ✗ | } | |
| 258 | } | ||
| 259 | |||
| 260 |
1/2✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
|
44 | StartEffect(args[0], startChannel, loop, bg); |
| 261 |
1/2✓ Branch 0 taken 44 times.
✗ Branch 1 not taken.
|
44 | return std::make_unique<Command::Result>("Effect Started"); |
| 262 | 44 | } | |
| 263 | |||
| 264 | 1888 | StartFSEQAsEffectCommand::StartFSEQAsEffectCommand() : | |
| 265 |
2/4✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
|
3776 | Command("FSEQ Effect Start") { |
| 266 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("effect", "string", "FSEQ Name").setContentListUrl("api/sequence")); |
| 267 |
6/12✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
|
11328 | args.push_back(CommandArg("loop", "bool", "Loop Effect").setDefaultValue("true")); |
| 268 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("bg", "bool", "Background")); |
| 269 |
4/8✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
|
13216 | args.push_back(CommandArg("ifNotRunning", "bool", "If Not Running", true) |
| 270 |
1/2✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
|
1888 | .setDefaultValue("false") |
| 271 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
3776 | .setHelp("Checks to see if this exact item is already running and " |
| 272 | "prevents it from running again.")); | ||
| 273 |
4/8✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
|
13216 | args.push_back(CommandArg("restartIfRunning", "bool", "Restart If Running", true) |
| 274 |
1/2✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
|
1888 | .setDefaultValue("false") |
| 275 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
3776 | .setHelp("If this exact item is already running, restart it from the " |
| 276 | "beginning in place instead of starting a second instance. " | ||
| 277 | "Ignored if 'If Not Running' is also set.")); | ||
| 278 | 1888 | } | |
| 279 | 159 | std::unique_ptr<Command::Result> StartFSEQAsEffectCommand::run(const std::vector<std::string>& args) { | |
| 280 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 159 times.
|
159 | if (args.empty()) { |
| 281 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 282 | } | ||
| 283 | |||
| 284 | 159 | bool loop = false; | |
| 285 | 159 | bool bg = false; | |
| 286 | 159 | bool iNR = false; | |
| 287 | 159 | bool restartIfRunning = false; | |
| 288 | |||
| 289 |
1/2✓ Branch 0 taken 159 times.
✗ Branch 1 not taken.
|
159 | if (args.size() > 1) { |
| 290 |
3/4✓ Branch 0 taken 9 times.
✓ Branch 1 taken 150 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 9 times.
|
159 | loop = args[1] == "true" || args[1] == "1"; |
| 291 | } | ||
| 292 |
1/2✓ Branch 0 taken 159 times.
✗ Branch 1 not taken.
|
159 | if (args.size() > 2) { |
| 293 |
2/4✓ Branch 0 taken 159 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 159 times.
|
159 | bg = args[2] == "true" || args[2] == "1"; |
| 294 | } | ||
| 295 |
1/2✓ Branch 0 taken 159 times.
✗ Branch 1 not taken.
|
159 | if (args.size() > 3) { |
| 296 |
3/4✓ Branch 0 taken 158 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 158 times.
|
159 | iNR = args[3] == "true" || args[3] == "1"; |
| 297 | } | ||
| 298 |
1/2✓ Branch 0 taken 159 times.
✗ Branch 1 not taken.
|
159 | if (args.size() > 4) { |
| 299 |
3/4✓ Branch 0 taken 158 times.
✓ Branch 1 taken 1 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 158 times.
|
159 | restartIfRunning = args[4] == "true" || args[4] == "1"; |
| 300 | } | ||
| 301 | |||
| 302 |
4/4✓ Branch 0 taken 158 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 1 times.
✓ Branch 3 taken 157 times.
|
159 | if (iNR || restartIfRunning) { |
| 303 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | const Json::Value RunningEffects = GetRunningEffectsJson(); |
| 304 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | for (int x = 0; x < RunningEffects.size(); x++) { |
| 305 |
2/4✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
|
2 | Json::Value v = RunningEffects[x]; |
| 306 |
3/6✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 2 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✗ Branch 5 not taken.
|
2 | if (v["name"].asString() == args[0]) { |
| 307 |
2/2✓ Branch 0 taken 1 times.
✓ Branch 1 taken 1 times.
|
2 | if (iNR) { |
| 308 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | LogDebug(VB_COMMAND, "Effect Already running, configured not to start it again\n"); |
| 309 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | return std::make_unique<Command::Result>("Effect NOT Started"); |
| 310 | } | ||
| 311 | // restartIfRunning: jump the already-running instance back to frame 0 | ||
| 312 | // in place rather than tearing it down and opening a new one - reuses | ||
| 313 | // its existing read-ahead thread instead of spinning up another. | ||
| 314 |
4/8✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1 times.
✗ Branch 7 not taken.
|
1 | if (RestartEffect(v["id"].asInt(), args[0])) { |
| 315 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | return std::make_unique<Command::Result>("Effect Restarted"); |
| 316 | } | ||
| 317 | } | ||
| 318 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
2 | } |
| 319 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 2 times.
|
2 | } |
| 320 | |||
| 321 | 157 | StartFSEQAsEffect(args[0], loop, bg); | |
| 322 | 157 | return std::make_unique<Command::Result>("Effect Started"); | |
| 323 | } | ||
| 324 | |||
| 325 | 1888 | StopEffectCommand::StopEffectCommand() : | |
| 326 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
7552 | Command("Effect Stop", "Stop the specified effect.") { |
| 327 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("effect", "string", "Effect Name").setContentListUrl("api/effects")); |
| 328 | 1888 | } | |
| 329 | 21 | std::unique_ptr<Command::Result> StopEffectCommand::run(const std::vector<std::string>& args) { | |
| 330 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 21 times.
|
21 | if (args.empty()) { |
| 331 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 332 | } | ||
| 333 | |||
| 334 | 21 | StopEffect(args[0]); | |
| 335 | 21 | return std::make_unique<Command::Result>("Effect Stopped"); | |
| 336 | } | ||
| 337 | |||
| 338 | 1888 | StopAllEffectsCommand::StopAllEffectsCommand() : | |
| 339 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
7552 | Command("Effects Stop", "Stop all running effects.") { |
| 340 | 1888 | } | |
| 341 | 7 | std::unique_ptr<Command::Result> StopAllEffectsCommand::run(const std::vector<std::string>& args) { | |
| 342 | 7 | StopAllEffects(); | |
| 343 | 7 | return std::make_unique<Command::Result>("Effects Stopped"); | |
| 344 | } | ||
| 345 | |||
| 346 | 1888 | StopFSEQAsEffectCommand::StopFSEQAsEffectCommand() : | |
| 347 |
2/4✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
|
3776 | Command("FSEQ Effect Stop") { |
| 348 |
7/14✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 1888 times.
✗ Branch 11 not taken.
✓ Branch 12 taken 1888 times.
✗ Branch 13 not taken.
|
15104 | args.push_back(CommandArg("effect", "string", "FSEQ Name").setContentListUrl("api/sequence")); |
| 349 | 1888 | } | |
| 350 | 1 | std::unique_ptr<Command::Result> StopFSEQAsEffectCommand::run(const std::vector<std::string>& args) { | |
| 351 |
1/2✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
|
1 | if (args.empty()) { |
| 352 | ✗ | return std::make_unique<Command::ErrorResult>("Not found"); | |
| 353 | } | ||
| 354 | |||
| 355 | 1 | StopEffect(args[0]); | |
| 356 | 1 | return std::make_unique<Command::Result>("Effect Stopped"); | |
| 357 | } | ||
| 358 | |||
| 359 | 1888 | AllLightsOffCommand::AllLightsOffCommand() : | |
| 360 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
7552 | Command("All Lights Off", "Turn all lights off.") { |
| 361 | 1888 | } | |
| 362 | 677 | std::unique_ptr<Command::Result> AllLightsOffCommand::run(const std::vector<std::string>& args) { | |
| 363 | 677 | sequence->SendBlankingData(); | |
| 364 | 677 | return std::make_unique<Command::Result>("All Lights Off"); | |
| 365 | } | ||
| 366 | |||
| 367 | 1888 | SwitchToPlayerModeCommand::SwitchToPlayerModeCommand() : | |
| 368 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
7552 | Command("Switch To Player Mode", "Restart FPP in Player Mode.") { |
| 369 | 1888 | } | |
| 370 | 1 | std::unique_ptr<Command::Result> SwitchToPlayerModeCommand::run(const std::vector<std::string>& args) { | |
| 371 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string cmd(getFPPDDir("/scripts/common setSetting fppMode player")); |
| 372 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | system(cmd.c_str()); |
| 373 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | ShutdownFPPD(true); |
| 374 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
2 | return std::make_unique<Command::Result>("Switch To Player Mode"); |
| 375 | 1 | } | |
| 376 | |||
| 377 | 1888 | SwitchToRemoteModeCommand::SwitchToRemoteModeCommand() : | |
| 378 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
7552 | Command("Switch To Remote Mode", "Restart FPP in Remote Mode.") { |
| 379 | 1888 | } | |
| 380 | 1 | std::unique_ptr<Command::Result> SwitchToRemoteModeCommand::run(const std::vector<std::string>& args) { | |
| 381 |
2/4✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
|
1 | std::string cmd(getFPPDDir("/scripts/common setSetting fppMode remote")); |
| 382 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | system(cmd.c_str()); |
| 383 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | ShutdownFPPD(true); |
| 384 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
2 | return std::make_unique<Command::Result>("Switch To Remote Mode"); |
| 385 | 1 | } | |
| 386 | |||
| 387 | 1888 | RebootCommand::RebootCommand() : | |
| 388 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
7552 | Command("Reboot", "Reboot the Device. Requires confirmation.") { |
| 389 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("confirm", "bool", "Confirm System Reboot")); |
| 390 | 1888 | } | |
| 391 | 3 | std::unique_ptr<Command::Result> RebootCommand::run(const std::vector<std::string>& args) { | |
| 392 | #ifdef PLATFORM_OSX | ||
| 393 | return std::make_unique<Command::ErrorResult>(" Reboot is not supported on this platform (macOS)."); | ||
| 394 | #endif | ||
| 395 |
2/4✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
|
3 | if (FileExists("/etc/fpp/container")) { |
| 396 | ✗ | return std::make_unique<Command::ErrorResult>(" Reboot is not supported when running in a container."); | |
| 397 | } | ||
| 398 |
8/12✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 1 times.
|
3 | if (args.empty() || (args[0] != "true" && args[0] != "1")) { |
| 399 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | LogWarn(VB_CONTROL, "Reboot Command: rejected, confirmation not given\n"); |
| 400 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | return std::make_unique<Command::ErrorResult>(" Confirmation not given. Reboot aborted."); |
| 401 | } | ||
| 402 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | LogInfo(VB_CONTROL, "Reboot Command: rebooting Ddevice by FPP Command\n"); |
| 403 | 1 | std::string rc; | |
| 404 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
3 | urlPost("http://localhost/api/system/reboot", "", rc); |
| 405 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | return std::make_unique<Command::Result>("Reboot initiated"); |
| 406 | 1 | } | |
| 407 | |||
| 408 | 1888 | ShutdownCommand::ShutdownCommand() : | |
| 409 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
7552 | Command("Shutdown", "Shut down the OS. Requires confirmation.") { |
| 410 |
5/10✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1888 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 1888 times.
✗ Branch 9 not taken.
|
11328 | args.push_back(CommandArg("confirm", "bool", "Confirm System Shutdown")); |
| 411 | 1888 | } | |
| 412 | 3 | std::unique_ptr<Command::Result> ShutdownCommand::run(const std::vector<std::string>& args) { | |
| 413 | #ifdef PLATFORM_OSX | ||
| 414 | return std::make_unique<Command::ErrorResult>(" Shutdown is not supported on this platform (macOS)."); | ||
| 415 | #endif | ||
| 416 |
2/4✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 3 times.
|
3 | if (FileExists("/etc/fpp/container")) { |
| 417 | ✗ | return std::make_unique<Command::ErrorResult>(" Shutdown is not supported when running in a container."); | |
| 418 | } | ||
| 419 |
8/12✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 2 times.
✓ Branch 5 taken 1 times.
✓ Branch 6 taken 2 times.
✗ Branch 7 not taken.
✓ Branch 8 taken 2 times.
✗ Branch 9 not taken.
✓ Branch 10 taken 2 times.
✓ Branch 11 taken 1 times.
|
3 | if (args.empty() || (args[0] != "true" && args[0] != "1")) { |
| 420 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | LogWarn(VB_CONTROL, "Shutdown Command: rejected, confirmation not given\n"); |
| 421 |
1/2✓ Branch 0 taken 2 times.
✗ Branch 1 not taken.
|
2 | return std::make_unique<Command::ErrorResult>(" Confirmation not given. Shutdown aborted."); |
| 422 | } | ||
| 423 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | LogInfo(VB_CONTROL, "Shutdown Command: shutting down OS by FPP Command\n"); |
| 424 | 1 | std::string rc; | |
| 425 |
3/6✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1 times.
✗ Branch 5 not taken.
|
3 | urlPost("http://localhost/api/system/shutdown", "", rc); |
| 426 |
1/2✓ Branch 0 taken 1 times.
✗ Branch 1 not taken.
|
1 | return std::make_unique<Command::Result>("Shutdown initiated"); |
| 427 | 1 | } | |
| 428 | |||
| 429 | 1888 | RestartFPPDCommand::RestartFPPDCommand() : | |
| 430 |
3/6✓ Branch 0 taken 1888 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1888 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1888 times.
✗ Branch 5 not taken.
|
7552 | Command("Restart FPPD", "Restart the FPPD daemon.") { |
| 431 | 1888 | } | |
| 432 | 5 | std::unique_ptr<Command::Result> RestartFPPDCommand::run(const std::vector<std::string>& args) { | |
| 433 | 5 | LogInfo(VB_CONTROL, "Restart FPPD Command: restarting FPPD by FPP Command\n"); | |
| 434 | 5 | ShutdownFPPD(true); | |
| 435 | 5 | return std::make_unique<Command::Result>("FPPD restart initiated"); | |
| 436 | } | ||
| 437 |