/* * Copyright (c) Facebook, Inc. and its affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include "FlipperState.h" #include "FlipperStateUpdateListener.h" #include "FlipperStep.h" #include #if FLIPPER_DEBUG_LOG #include "Log.h" #endif using namespace facebook::flipper; /* Class responsible for collecting state updates and combining them into a * view of the current state of the flipper client. */ FlipperState::FlipperState() : logs("") {} void FlipperState::setUpdateListener( std::shared_ptr listener) { mListener = listener; } void FlipperState::started(std::string step) { #if FLIPPER_DEBUG_LOG log("[started] " + step); #endif if (stateMap.find(step) == stateMap.end()) { insertOrder.push_back(step); } stateMap[step] = State::in_progress; if (mListener) { mListener->onUpdate(); } } void FlipperState::success(std::string step) { #if FLIPPER_DEBUG_LOG log("[finished] " + step); #endif logs = logs + "[Success] " + step + "\n"; stateMap[step] = State::success; if (mListener) { mListener->onUpdate(); } } void FlipperState::failed(std::string step, std::string errorMessage) { std::string message = "[Failed] " + step + ": " + errorMessage; #if FLIPPER_DEBUG_LOG log(message); #endif logs = logs + message + "\n"; stateMap[step] = State::failed; if (mListener) { mListener->onUpdate(); } } // TODO: Currently returns string, but should really provide a better // representation of the current state so the UI can show it in a more intuitive // way std::string FlipperState::getState() { return logs; } std::vector FlipperState::getStateElements() { std::vector v; for (auto stepName : insertOrder) { v.push_back(StateElement(stepName, stateMap[stepName])); } return v; } std::shared_ptr FlipperState::start(std::string step_name) { started(step_name); return std::make_shared(step_name, this); }