DatStatus.cpp 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include <DatSubsystems/DatStatus.h>
  2. #include <DatFile.h>
  3. #include <math.h>
  4. namespace LOTRO_DAT {
  5. unsigned long long DatStatus::CallbackStorage::free_handler_ = 0;
  6. bool equalOfftoOneDecimalPoint(double x, double y) {
  7. return int(x * 10.0) == int(y * 10.0);
  8. }
  9. DatStatus::DatStatus(DatFile *datFilePtr) : dat(datFilePtr) {
  10. }
  11. void DatStatus::SetStatus(DatStatus::DAT_STATUS status) {
  12. bool need_to_invoke_progress_callback_functions = (status_ != status);
  13. status_ = status;
  14. if (need_to_invoke_progress_callback_functions) {
  15. InvokeCallbackFunctions();
  16. }
  17. }
  18. void DatStatus::SetFinishedParts(unsigned long long finished_parts) {
  19. finished_parts_ = finished_parts;
  20. if (!equalOfftoOneDecimalPoint(GetPercentage(), percentage_)) {
  21. percentage_ = GetPercentage();
  22. InvokeCallbackFunctions();
  23. }
  24. }
  25. void DatStatus::SetTotalParts(unsigned long long total_parts) {
  26. total_parts_ = total_parts;
  27. }
  28. void DatStatus::SetDebugMessage(const std::string &message) {
  29. debug_message_ = message;
  30. }
  31. DatStatus::DAT_STATUS DatStatus::GetStatus() {
  32. return status_;
  33. }
  34. double DatStatus::GetPercentage() {
  35. return total_parts_ != 0 ? double(finished_parts_) * 100.0 / double(total_parts_) : 0;
  36. }
  37. unsigned long long DatStatus::GetFinishedParts() {
  38. return finished_parts_;
  39. }
  40. unsigned long long DatStatus::GetTotalParts() {
  41. return total_parts_;
  42. }
  43. std::string DatStatus::GetDebugMessage() {
  44. return debug_message_;
  45. }
  46. void DatStatus::SetDefaultStatus() {
  47. debug_message_ = "";
  48. total_parts_ = 0;
  49. finished_parts_ = 0;
  50. status_ = E_FREE;
  51. InvokeCallbackFunctions();
  52. }
  53. bool DatStatus::CheckIfNotPatched() {
  54. return dat->GetLocaleManager().patch_dict_.empty();
  55. }
  56. unsigned long long DatStatus::AddStatusChangedCallbackFunction(Callback func) {
  57. CallbackStorage storage(func);
  58. callback_functions_.insert(storage);
  59. return storage.GetHandler();
  60. }
  61. void DatStatus::RemoveStatusChangedCallbackFunction(unsigned long long handler) {
  62. callback_functions_.erase(CallbackStorage(handler));
  63. }
  64. void DatStatus::EraseAllCallbackFunctions() {
  65. callback_functions_.clear();
  66. }
  67. void DatStatus::InvokeCallbackFunctions() {
  68. for (const auto& func : callback_functions_) {
  69. func(ProgressInfo({GetStatus(), GetPercentage(), GetFinishedParts(), GetTotalParts()})); // evaluating callback functions, transfering all needed information.
  70. }
  71. }
  72. } // namespace LOTRO_DAT