From 585357807b6ea83fb503fb23987e592bd108cf36 Mon Sep 17 00:00:00 2001 From: SMJSGaming Date: Thu, 26 Sep 2024 12:46:07 +0200 Subject: [PATCH] Added a pause persisting confirmation --- CHANGELOG.md | 4 ++++ CMakeLists.txt | 2 +- mod.json | 8 ++++++- src/mods/MenuLayer.cpp | 4 ++++ src/mods/MenuLayer.hpp | 2 ++ src/nodes/Warning.cpp | 29 +++++++++++++++++++++++ src/nodes/Warning.hpp | 11 +++++++++ src/nodes/codeblock/CodeBlock.events.cpp | 30 ++++-------------------- src/nodes/codeblock/CodeBlock.hpp | 3 +-- src/proxy/ProxyHandler.cpp | 6 ++--- 10 files changed, 67 insertions(+), 32 deletions(-) create mode 100644 src/nodes/Warning.cpp create mode 100644 src/nodes/Warning.hpp diff --git a/CHANGELOG.md b/CHANGELOG.md index c863981..faeb315 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # GDIntercept Changelog +## v0.6.3-alpha.6 (2024-09-26) - Pause Persisting + +- Added a confirmation setting to persist the pause state between sessions + ## v0.6.2-alpha.6 (2024-09-25) - Minor Semantic Fixes - Fixed the release date of the previous version diff --git a/CMakeLists.txt b/CMakeLists.txt index 7688de7..ed6d933 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,7 @@ set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64") set(CMAKE_MSVC_RUNTIME_LIBRARY MultiThreadedDLL) -project(GDIntercept VERSION 0.6.2) +project(GDIntercept VERSION 0.6.3) file(GLOB_RECURSE SOURCES "src/*.cpp") add_library(${PROJECT_NAME} SHARED ${SOURCES}) diff --git a/mod.json b/mod.json index e7dce7d..53edf14 100644 --- a/mod.json +++ b/mod.json @@ -1,6 +1,6 @@ { "geode": "3.7.1", - "version": "v0.6.2-alpha.6", + "version": "v0.6.3-alpha.6", "id": "smjs.gdintercept", "name": "GDIntercept", "api": { @@ -138,6 +138,12 @@ "name": "Proxy Settings", "description": "Settings related to the proxy server." }, + "confirm-pause-between-plays": { + "name": "Confirm Pause Between Plays", + "description": "If this is enabled, GDI will remember the pause option between session.", + "type": "bool", + "default": false + }, "cache-limit": { "name": "Cache Limit", "description": "The amount of requests to cache before removing the oldest one.", diff --git a/src/mods/MenuLayer.cpp b/src/mods/MenuLayer.cpp index f83853d..3ec0ca2 100644 --- a/src/mods/MenuLayer.cpp +++ b/src/mods/MenuLayer.cpp @@ -14,6 +14,10 @@ bool ModMenuLayer::init() { closeMenu = this->getChildByID("top-right-menu"); } + if (ProxyHandler::isPaused()) { + Warning::show(); + } + menuItem->setID("GDI"_spr); closeMenu->addChild(menuItem); closeMenu->updateLayout(); diff --git a/src/mods/MenuLayer.hpp b/src/mods/MenuLayer.hpp index a9fd1f8..df6679c 100644 --- a/src/mods/MenuLayer.hpp +++ b/src/mods/MenuLayer.hpp @@ -2,6 +2,8 @@ #include #include "../include.hpp" +#include "../nodes/Warning.hpp" +#include "../proxy/ProxyHandler.hpp" #include "../nodes/InterceptPopup.hpp" class $modify(ModMenuLayer, MenuLayer) { diff --git a/src/nodes/Warning.cpp b/src/nodes/Warning.cpp new file mode 100644 index 0000000..3e1890f --- /dev/null +++ b/src/nodes/Warning.cpp @@ -0,0 +1,29 @@ +#include "Warning.hpp" + +CCScale9Sprite* Warning::warning = nullptr; + +void Warning::show() { + ESCAPE_WHEN(Warning::warning,); + const CCSize winSize = CCDirector::sharedDirector()->getWinSize(); + Warning::warning = CCScale9Sprite::create("square02_001.png"); + CCLabelBMFont* label = CCLabelBMFont::create("Requests Paused", "bigFont.fnt"); + + label->setScale(2); + Warning::warning->setScale(0.25f); + Warning::warning->setOpacity(0x7F); + Warning::warning->setAnchorPoint(TOP_CENTER); + Warning::warning->setContentSize(label->getScaledContentSize() + ccp(PADDING, PADDING) * 4); + Warning::warning->setPosition({ winSize.width / 2, winSize.height - PADDING }); + label->setPosition(Warning::warning->getContentSize() / 2); + Warning::warning->addChild(label); + + ProxyHandler::pauseAll(); + SceneManager::get()->keepAcrossScenes(Warning::warning); +} + +void Warning::hide() { + ESCAPE_WHEN(!Warning::warning,); + SceneManager::get()->forget(Warning::warning); + Warning::warning->removeFromParent(); + Warning::warning = nullptr; +} \ No newline at end of file diff --git a/src/nodes/Warning.hpp b/src/nodes/Warning.hpp new file mode 100644 index 0000000..615d7c6 --- /dev/null +++ b/src/nodes/Warning.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "../include.hpp" + +class Warning { +public: + static void show(); + static void hide(); +private: + static CCScale9Sprite* warning; +}; \ No newline at end of file diff --git a/src/nodes/codeblock/CodeBlock.events.cpp b/src/nodes/codeblock/CodeBlock.events.cpp index 8e09871..46f1b66 100644 --- a/src/nodes/codeblock/CodeBlock.events.cpp +++ b/src/nodes/codeblock/CodeBlock.events.cpp @@ -50,8 +50,6 @@ const SideBar::Categories CodeBlock::actions({ } } }); -CCScale9Sprite* CodeBlock::pauseWarning = nullptr; - bool CodeBlock::acceptedPauses = false; void CodeBlock::setup() { @@ -223,7 +221,8 @@ bool CodeBlock::onSave() { bool CodeBlock::onPause() { if (CodeBlock::acceptedPauses) { - this->onPauseAction(); + Warning::show(); + this->showMessage("Requests Paused"); return true; } else { @@ -239,8 +238,7 @@ bool CodeBlock::onPause() { bool CodeBlock::onResume() { ProxyHandler::resumeAll(); - SceneManager::get()->forget(CodeBlock::pauseWarning); - OPT(CodeBlock::pauseWarning)->removeFromParent(); + Warning::hide(); this->showMessage("Requests Resumed"); return true; @@ -325,30 +323,12 @@ void CodeBlock::onResponseHeaders() { } } -void CodeBlock::onPauseAction() { - const CCSize winSize = CCDirector::sharedDirector()->getWinSize(); - CCLabelBMFont* label = CCLabelBMFont::create("Requests Paused", "bigFont.fnt"); - CodeBlock::pauseWarning = CCScale9Sprite::create("square02_001.png"); - - label->setScale(2); - CodeBlock::pauseWarning->setScale(0.25f); - CodeBlock::pauseWarning->setOpacity(0x7F); - CodeBlock::pauseWarning->setAnchorPoint(TOP_CENTER); - CodeBlock::pauseWarning->setContentSize(label->getScaledContentSize() + ccp(PADDING, PADDING) * 4); - CodeBlock::pauseWarning->setPosition({ winSize.width / 2, winSize.height - PADDING }); - label->setPosition(CodeBlock::pauseWarning->getContentSize() / 2); - CodeBlock::pauseWarning->addChild(label); - - ProxyHandler::pauseAll(); - SceneManager::get()->keepAcrossScenes(CodeBlock::pauseWarning); - this->showMessage("Requests Paused"); -} - void CodeBlock::FLAlert_Clicked(FLAlertLayer* alert, const bool state) { if (state) { CodeBlock::acceptedPauses = true; - this->onPauseAction(); + Warning::show(); + this->showMessage("Requests Paused"); m_bar->reloadState(); } } \ No newline at end of file diff --git a/src/nodes/codeblock/CodeBlock.hpp b/src/nodes/codeblock/CodeBlock.hpp index 2730385..8de2536 100644 --- a/src/nodes/codeblock/CodeBlock.hpp +++ b/src/nodes/codeblock/CodeBlock.hpp @@ -2,6 +2,7 @@ #include "../../include.hpp" #include "SideBar.hpp" +#include "../Warning.hpp" #include "cells/ViewCell.hpp" #include "cells/ActionCell.hpp" #include "cells/CategoryCell.hpp" @@ -25,7 +26,6 @@ class CodeBlock : public KeybindNode, public FLAlertLayerProtocol { private: static const std::vector views; static const SideBar::Categories actions; - static CCScale9Sprite* pauseWarning; static bool acceptedPauses; HttpInfo* m_info; @@ -56,6 +56,5 @@ class CodeBlock : public KeybindNode, public FLAlertLayerProtocol { void onRequestHeaders(); void onResponse(); void onResponseHeaders(); - void onPauseAction(); void FLAlert_Clicked(FLAlertLayer* alert, const bool state) override; }; \ No newline at end of file diff --git a/src/proxy/ProxyHandler.cpp b/src/proxy/ProxyHandler.cpp index 3ece075..fdbbb54 100644 --- a/src/proxy/ProxyHandler.cpp +++ b/src/proxy/ProxyHandler.cpp @@ -8,7 +8,7 @@ std::deque proxy::ProxyHandler::cachedProxies; std::vector proxy::ProxyHandler::pausedProxies; -bool proxy::ProxyHandler::paused = false; +bool proxy::ProxyHandler::paused = Mod::get()->getSettingValue("confirm-pause-between-plays") && Mod::get()->getSavedValue("paused", false); ProxyHandler* ProxyHandler::create(CCHttpRequest* request) { ProxyHandler* instance = new ProxyHandler(request); @@ -89,12 +89,12 @@ bool ProxyHandler::isPaused() { } void ProxyHandler::pauseAll() { - ProxyHandler::paused = true; + Mod::get()->setSavedValue("paused", ProxyHandler::paused = true); } void ProxyHandler::resumeAll() { const std::vector paused = std::vector(ProxyHandler::pausedProxies); - ProxyHandler::paused = false; + Mod::get()->setSavedValue("paused", ProxyHandler::paused = false); std::thread([paused]{ for (ProxyHandler* proxy : paused) {