From 07b0a42f4510e3b43de14034a27aaab29ea4893c Mon Sep 17 00:00:00 2001 From: momo5502 Date: Thu, 19 Jan 2017 21:21:59 +0100 Subject: [PATCH] [Download] Small fixes --- src/Components/Modules/Download.cpp | 29 +++++++++++++++---------- src/Components/Modules/Localization.cpp | 14 +++++------- src/Components/Modules/Localization.hpp | 2 +- src/Components/Modules/Renderer.cpp | 4 ++++ src/Utils/String.cpp | 2 ++ 5 files changed, 31 insertions(+), 20 deletions(-) diff --git a/src/Components/Modules/Download.cpp b/src/Components/Modules/Download.cpp index 39521e21..dc4d671e 100644 --- a/src/Components/Modules/Download.cpp +++ b/src/Components/Modules/Download.cpp @@ -15,7 +15,7 @@ namespace Components Localization::SetTemp("MPUI_PROGRESS_DL", "(0/0) %"); Localization::SetTemp("MPUI_TRANS_RATE", "0.0 MB/s"); - Command::Execute("openmenu mod_download_popmenu", true); + Command::Execute("openmenu mod_download_popmenu", false); Download::CLDownload.running = true; Download::CLDownload.mod = mod; @@ -83,7 +83,12 @@ namespace Components fDownload->download->downBytes += bytes; fDownload->download->timeStampBytes += bytes; - double progress = (100.0 / fDownload->download->totalBytes) * fDownload->download->downBytes; + double progress = 0; + if (fDownload->download->totalBytes) + { + progress = (100.0 / fDownload->download->totalBytes) * fDownload->download->downBytes; + } + Localization::SetTemp("MPUI_PROGRESS_DL", Utils::String::VA("(%d/%d) %d%%", fDownload->index + 1, fDownload->download->files.size(), static_cast(progress))); int delta = Game::Sys_Milliseconds() - fDownload->download->lastTimeStamp; @@ -93,8 +98,13 @@ namespace Components fDownload->download->lastTimeStamp = Game::Sys_Milliseconds(); size_t dataLeft = fDownload->download->totalBytes - fDownload->download->downBytes; - double timeLeftD = ((1.0 * dataLeft) / fDownload->download->timeStampBytes) * delta; - int timeLeft = static_cast(timeLeftD); + + int timeLeft = 0; + if (fDownload->download->timeStampBytes) + { + double timeLeftD = ((1.0 * dataLeft) / fDownload->download->timeStampBytes) * delta; + timeLeft = static_cast(timeLeftD); + } if (doFormat) { @@ -208,7 +218,7 @@ namespace Components if (download->terminateThread) return; - static std::string mod = download->mod; + std::string mod = download->mod; for (unsigned int i = 0; i < download->files.size(); ++i) { @@ -222,10 +232,9 @@ namespace Components download->thread.detach(); download->clear(); - QuickPatch::Once([] () + QuickPatch::Once([mod] () { Dvar::Var("partyend_reason").set(mod); - mod.clear(); Localization::ClearTemp(); Command::Execute("closemenu mod_download_popmenu"); @@ -242,16 +251,14 @@ namespace Components download->clear(); // Run this on the main thread - QuickPatch::Once([] () + QuickPatch::Once([mod] () { auto fsGame = Dvar::Var("fs_game"); fsGame.set(mod); fsGame.get()->modified = true; - mod.clear(); - Localization::ClearTemp(); - Command::Execute("closemenu mod_download_popmenu", true); + Command::Execute("closemenu mod_download_popmenu", false); if (Dvar::Var("cl_modVidRestart").get()) { diff --git a/src/Components/Modules/Localization.cpp b/src/Components/Modules/Localization.cpp index dc87aa74..995f6349 100644 --- a/src/Components/Modules/Localization.cpp +++ b/src/Components/Modules/Localization.cpp @@ -2,7 +2,7 @@ namespace Components { - std::mutex Localization::LocalizeMutex; + std::recursive_mutex Localization::LocalizeMutex; Dvar::Var Localization::UseLocalization; Utils::Memory::Allocator Localization::MemAllocator; std::unordered_map Localization::LocalizeMap; @@ -10,7 +10,7 @@ namespace Components void Localization::Set(std::string key, std::string value) { - std::lock_guard _(Localization::LocalizeMutex); + std::lock_guard _(Localization::LocalizeMutex); if (Localization::LocalizeMap.find(key) != Localization::LocalizeMap.end()) { @@ -49,7 +49,7 @@ namespace Components if (!Localization::UseLocalization.get()) return key; Game::LocalizeEntry* entry = nullptr; - std::lock_guard _(Localization::LocalizeMutex); + std::lock_guard _(Localization::LocalizeMutex); if (Localization::TempLocalizeMap.find(key) != Localization::TempLocalizeMap.end()) { @@ -62,9 +62,7 @@ namespace Components if (!entry || !entry->value) { - Localization::LocalizeMutex.unlock(); entry = Game::DB_FindXAssetHeader(Game::XAssetType::ASSET_TYPE_LOCALIZE_ENTRY, key).localize; - Localization::LocalizeMutex.lock(); } if (entry && entry->value) @@ -77,7 +75,7 @@ namespace Components void Localization::SetTemp(std::string key, std::string value) { - std::lock_guard _(Localization::LocalizeMutex); + std::lock_guard _(Localization::LocalizeMutex); if (Localization::TempLocalizeMap.find(key) != Localization::TempLocalizeMap.end()) { @@ -111,7 +109,7 @@ namespace Components void Localization::ClearTemp() { - std::lock_guard _(Localization::LocalizeMutex); + std::lock_guard _(Localization::LocalizeMutex); for (auto i = Localization::TempLocalizeMap.begin(); i != Localization::TempLocalizeMap.end(); ++i) { @@ -164,7 +162,7 @@ namespace Components AssetHandler::OnFind(Game::XAssetType::ASSET_TYPE_LOCALIZE_ENTRY, [] (Game::XAssetType, std::string filename) { Game::XAssetHeader header = { 0 }; - std::lock_guard _(Localization::LocalizeMutex); + std::lock_guard _(Localization::LocalizeMutex); if (Localization::TempLocalizeMap.find(filename) != Localization::TempLocalizeMap.end()) { diff --git a/src/Components/Modules/Localization.hpp b/src/Components/Modules/Localization.hpp index a67a3dfe..292ad04e 100644 --- a/src/Components/Modules/Localization.hpp +++ b/src/Components/Modules/Localization.hpp @@ -17,7 +17,7 @@ namespace Components static void ClearTemp(); private: - static std::mutex LocalizeMutex; + static std::recursive_mutex LocalizeMutex; static Utils::Memory::Allocator MemAllocator; static std::unordered_map LocalizeMap; static std::unordered_map TempLocalizeMap; diff --git a/src/Components/Modules/Renderer.cpp b/src/Components/Modules/Renderer.cpp index 775bd4b3..ea8b8d4d 100644 --- a/src/Components/Modules/Renderer.cpp +++ b/src/Components/Modules/Renderer.cpp @@ -14,7 +14,9 @@ namespace Components { __asm { + pushad call Renderer::FrameHandler + popad jmp Renderer::DrawFrameHook.original } } @@ -33,7 +35,9 @@ namespace Components { __asm { + pushad call Renderer::BackendFrameHandler + popad mov eax, ds:66E1BF0h mov ecx, 536A85h diff --git a/src/Utils/String.cpp b/src/Utils/String.cpp index b65ba53c..66fdbf23 100644 --- a/src/Utils/String.cpp +++ b/src/Utils/String.cpp @@ -153,6 +153,8 @@ namespace Utils "TB" }; + if (!milliseconds) return "0.00 B/s"; + double bytesPerSecond = (1000.0 / milliseconds) * bytes; int i = 0;