Loading

Paste #paj53yiec

  1. void Manager::update_goals(Manager::CompanyData &data) {
  2.     fmt::print(stderr, "UPDATE GOALS {} {} \n", data.is_processing, GetOwner(data.company));
  3.     if (data.is_processing)
  4.         return;
  5.     if (data.new_goals.size() > data.goals.size()) {
  6.         fmt::print(stderr, "CREATING GOAL {} {}\n", data.new_goals.size(), data.goals.size());
  7.         std::string new_text = data.new_goals[data.goals.size()];
  8.         data.is_processing = goal::Create(data.company, new_text)
  9.             .with_callback([this, new_text, &data] (bool res) {
  10.                 fmt::print(stderr, "GOAL CREATED {} {}\n", _new_goal_id, new_text);
  11.                 data.is_processing = false;
  12.                 if (res) {
  13.                     GoalData goal;
  14.                     goal.id = _new_goal_id;
  15.                     goal.text = new_text;
  16.                     data.goals.push_back(goal);
  17.                     this->update_goals(data);
  18.                 } else {
  19.                     ConsoleError("Goal creation failed (company_id={})", GetOwner(data.company));
  20.                 }
  21.             })
  22.             .queue();
  23.         return;
  24.     }
  25.  
  26.     std::sort(
  27.         data.goals.begin(), data.goals.end(),
  28.         [](const auto &a, const auto &b) -> bool {
  29.              return a.id < b.id;
  30.         }
  31.     );
  32.  
  33.     Commands commands;
  34.     for (int i = 0; i < data.goals.size(); i++) {
  35.         auto &goal = data.goals[i];
  36.         if (i < data.new_goals.size()) {
  37.             auto &new_text = data.new_goals[i];
  38.             if (new_text == goal.text)
  39.                 continue;
  40.             fmt::print(stderr, "SET GOAL {} {}\n", goal.id, new_text);
  41.             commands.push_back(
  42.                 cmd::goal::SetText(goal.id, new_text)
  43.                 .with_callback([new_text, &goal] (bool res) {
  44.                     if (res) {
  45.                         goal.text = new_text;
  46.                     } else {
  47.                         ConsoleError("Goal text change failed (goal_id={}, new_text='{}')",
  48.                               goal.id, new_text);
  49.                     }
  50.                 })
  51.             );
  52.         } else {
  53.             auto goal_id = goal.id;
  54.             fmt::print(stderr, "DEL GOAL {}\n", goal_id);
  55.             commands.push_back(
  56.                 cmd::goal::Remove(goal.id)
  57.                 .with_callback([goal_id, &data] (bool res) {
  58.                     if (res) {
  59.                         data.goals.erase(
  60.                             std::remove_if(
  61.                                 data.goals.begin(), data.goals.end(),
  62.                                 [goal_id] (const auto &goal) -> bool {
  63.                                     return goal.id == goal_id;
  64.                                 }
  65.                             ),
  66.                             data.goals.end()
  67.                         );
  68.                     } else {
  69.                         ConsoleError("Goal removal failed (goal_id={})", goal_id);
  70.                     }
  71.                 })
  72.             );
  73.         }
  74.     }
  75.  
  76.     if (!commands.empty()) {
  77.         data.is_processing = cmd::Queue(commands, [this, &data] (bool res) {
  78.             data.is_processing = false;
  79.             if (res)
  80.                 this->update_goals(data);
  81.         });
  82.     }
  83. }

Comments