From 795d3157725b977aae75db48e909772f61c232d4 Mon Sep 17 00:00:00 2001 From: GrapheneCt <57592952+GrapheneCt@users.noreply.github.com> Date: Sun, 7 May 2023 02:23:00 +0200 Subject: [PATCH] Updated assets, added last page tracking --- .../sce_sys/livearea/contents/title-en.png | Bin 3134 -> 3119 bytes NetStream/NetStream.vcxproj | 4 +- NetStream/include/utils.h | 6 +++ NetStream/param.sfx | 2 +- NetStream/source/main.cpp | 10 ++--- NetStream/source/menus/menu_first.cpp | 13 ++++++- NetStream/source/menus/menu_server.cpp | 4 ++ NetStream/source/menus/menu_settings.cpp | 5 +-- NetStream/source/utils.cpp | 36 ++++++++++++++++-- logo.PNG | Bin 14169 -> 7229 bytes 10 files changed, 65 insertions(+), 15 deletions(-) diff --git a/NetStream/CONTENTS/sce_sys/livearea/contents/title-en.png b/NetStream/CONTENTS/sce_sys/livearea/contents/title-en.png index 848348c266e0cc362890c87f483a6960844b56ff..ebf1afd722289224716c1da08c10f8e0a81f1eff 100644 GIT binary patch literal 3119 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 U=d+TT=UEo3E4F6uO?{I73s0@e(*OVf literal 3134 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 diff --git a/NetStream/NetStream.vcxproj b/NetStream/NetStream.vcxproj index f99ce83..f74cfa0 100644 --- a/NetStream/NetStream.vcxproj +++ b/NetStream/NetStream.vcxproj @@ -129,7 +129,7 @@ --no-standard-libraries $(SCE_PSP2_SDK_DIR)\target\lib\vdsuite;$(ProjectDir)libs\lib;%(AdditionalLibraryDirectories) FullMapFile - -lSceIpmi_stub;-lSceSysmem_stub;-lSceThreadMgr_stub;-lSceThreadmgrCoredumpTime_stub;-lSceModuleMgr_stub;-lSceProcessMgr_stub;-lSceTouch_stub;-lSceAppMgr_stub;-lSceAppMgrUser_stub;-lSceAppUtil_stub;-lSceAudio_stub;-lSceCtrl_stub;-lSceDisplay_stub;-lScePower_stub;-lSceSysmodule_stub;-lSceGxm_stub;-lSceDbg_stub;-lScePafThread_stub;-lScePafStdc_stub;-lScePafToplevel_stub;-lScePafResource_stub;-lScePafWidget_stub;-lScePafMisc_stub;-lScePafCommon_stub;-lScePafGraphics_stub;-lSceLibKernel_stub;-lSceNet_stub;-lSceNetCtl_stub;-lSceHttp_stub;-lSceSsl_stub;-lSceAppSettings_stub;-lSceCommonGuiDialog_stub;-lSceIniFileProcessor_stub;-lSceBEAVCorePlayer_stub;-lSceDmacmgr_stub;-lSceFiber_stub;-lSceVshBridge_stub;-ltaihenUnsafe_stub;-lInvidious_stub;-lLootkit_stub;-lcurl_stub;-lfmodstudio_stub;-lfmodngpext_stub;-lsnc;-lPafFileExt;%(AdditionalDependencies) + -lSceIpmi_stub;-lSceSysmem_stub;-lSceThreadMgr_stub;-lSceThreadmgrCoredumpTime_stub;-lSceModuleMgr_stub;-lSceProcessMgr_stub;-lSceTouch_stub;-lSceAppMgr_stub;-lSceAppMgrUser_stub;-lSceAppUtil_stub;-lSceAudio_stub;-lSceCtrl_stub;-lSceDisplay_stub;-lScePower_stub;-lSceSysmodule_stub;-lSceGxm_stub;-lSceDbg_stub;-lScePafThread_stub;-lScePafStdc_stub;-lScePafToplevel_stub;-lScePafResource_stub;-lScePafWidget_stub;-lScePafMisc_stub;-lScePafCommon_stub;-lScePafGraphics_stub;-lSceLibKernel_stub;-lSceNet_stub;-lSceNetCtl_stub;-lSceAppSettings_stub;-lSceCommonGuiDialog_stub;-lSceIniFileProcessor_stub;-lSceBEAVCorePlayer_stub;-lSceDmacmgr_stub;-lSceFiber_stub;-lSceVshBridge_stub;-ltaihenUnsafe_stub;-lInvidious_stub;-lLootkit_stub;-lcurl_stub;-lfmodstudio_stub;-lfmodngpext_stub;-lsnc;-lPafFileExt;%(AdditionalDependencies) "$(SCE_PSP2_SDK_DIR)/host_tools/build/bin/vdsuite-pubprx.exe" --boot-param "$(ProjectDir)ebootparam.bin" "$(LocalDebuggerCommand)" "$(OutDir)eboot.bin" @@ -161,7 +161,7 @@ true - --no-standard-libraries + --no-standard-libraries -lSceIpmi_stub;-lSceSysmem_stub;-lSceThreadMgr_stub;-lSceThreadmgrCoredumpTime_stub;-lSceModuleMgr_stub;-lSceProcessMgr_stub;-lSceTouch_stub;-lSceAppMgr_stub;-lSceAppMgrUser_stub;-lSceAppUtil_stub;-lSceAudio_stub;-lSceCtrl_stub;-lSceDisplay_stub;-lScePower_stub;-lSceSysmodule_stub;-lSceGxm_stub;-lSceDbg_stub;-lScePafThread_stub;-lScePafStdc_stub;-lScePafToplevel_stub;-lScePafResource_stub;-lScePafWidget_stub;-lScePafMisc_stub;-lScePafCommon_stub;-lScePafGraphics_stub;-lSceLibKernel_stub;-lSceNet_stub;-lSceNetCtl_stub;-lSceAppSettings_stub;-lSceCommonGuiDialog_stub;-lSceIniFileProcessor_stub;-lSceBEAVCorePlayer_stub;-lSceDmacmgr_stub;-lSceFiber_stub;-lSceVshBridge_stub;-ltaihenUnsafe_stub;-lInvidious_stub;-lLootkit_stub;-lcurl_stub;-lfmodstudio_stub;-lfmodngpext_stub;-lsnc;-lPafFileExt;%(AdditionalDependencies) diff --git a/NetStream/include/utils.h b/NetStream/include/utils.h index 661d138..081432b 100644 --- a/NetStream/include/utils.h +++ b/NetStream/include/utils.h @@ -44,6 +44,12 @@ namespace utils CurlFile::Share *GetShare(); + uint32_t SafememGetSettingsSize(); + + void SafememWrite(string const& str, uint32_t offset = 0); + + string SafememRead(uint32_t offset = 0); + class TimeoutListener : public TimerListener { public: diff --git a/NetStream/param.sfx b/NetStream/param.sfx index 8683b54..a5d51af 100644 --- a/NetStream/param.sfx +++ b/NetStream/param.sfx @@ -1,6 +1,6 @@ - 03.10 + 03.11 33408 16 0 diff --git a/NetStream/source/main.cpp b/NetStream/source/main.cpp index 2291c0d..45a3fe8 100644 --- a/NetStream/source/main.cpp +++ b/NetStream/source/main.cpp @@ -66,6 +66,10 @@ void menu::main::NetcheckJob::Run() thread::Sleep(100); } + ytutils::Init(); + + dialog::Close(); + sceAppMgrAppParamGetString(SCE_KERNEL_PROCESS_ID_SELF, 12, titleid, 12); if (sceAppMgrGetIdByName(&shellPid, "NPXS19999") == SCE_OK && _vshKernelSearchModuleByName("taihen", sarg) > 0) @@ -73,10 +77,6 @@ void menu::main::NetcheckJob::Run() string pluginPath = common::FormatString("ux0:app/%s/module/download_enabler_netstream.suprx", titleid); taiLoadStartModuleForPid(shellPid, pluginPath.c_str(), 0, NULL, 0); } - - ytutils::Init(); - - dialog::Close(); } void pluginLoadCB(Plugin *plugin) @@ -151,9 +151,9 @@ int main() sceSysmoduleLoadModuleInternal(SCE_SYSMODULE_INTERNAL_COMMON_GUI_DIALOG); new Module("vs0:sys/external/libfios2.suprx"); new Module("vs0:sys/external/libc.suprx"); + new Module("app0:module/libcurl.suprx"); new Module("app0:module/libInvidious.suprx"); new Module("app0:module/libLootkit.suprx"); - new Module("app0:module/libcurl.suprx"); curl_global_memmanager_set_np(sce_paf_malloc, sce_paf_free, sce_paf_realloc); diff --git a/NetStream/source/menus/menu_first.cpp b/NetStream/source/menus/menu_first.cpp index 1484110..66dd2e6 100644 --- a/NetStream/source/menus/menu_first.cpp +++ b/NetStream/source/menus/menu_first.cpp @@ -14,6 +14,8 @@ using namespace paf; +static bool s_afterBoot = true; + void menu::First::ListButtonCbFun(int32_t type, ui::Handler *self, ui::Event *e, void *userdata) { ui::Widget *wdg = (ui::Widget*)self; @@ -32,7 +34,16 @@ void menu::First::ListButtonCbFun(int32_t type, ui::Handler *self, ui::Event *e, break; case 3: menu::Local *lmenu = new menu::Local(); - lmenu->PushBrowserPage(NULL); + if (s_afterBoot) + { + string ref = utils::SafememRead(); + lmenu->PushBrowserPage(&ref); + s_afterBoot = false; + } + else + { + lmenu->PushBrowserPage(NULL); + } break; } } diff --git a/NetStream/source/menus/menu_server.cpp b/NetStream/source/menus/menu_server.cpp index fef83ab..8e84a09 100644 --- a/NetStream/source/menus/menu_server.cpp +++ b/NetStream/source/menus/menu_server.cpp @@ -214,6 +214,10 @@ void menu::GenericServerMenu::GoToJob::Run() } currentPath = workObj->browser->GetPath(); + if (workObj->GetMenuType() == MenuType_Local) + { + utils::SafememWrite(currentPath); + } common::Utf8ToUtf16(currentPath, &text16); thread::RMutex::main_thread_mutex.Lock(); diff --git a/NetStream/source/menus/menu_settings.cpp b/NetStream/source/menus/menu_settings.cpp index 35362f1..19be31f 100644 --- a/NetStream/source/menus/menu_settings.cpp +++ b/NetStream/source/menus/menu_settings.cpp @@ -23,7 +23,6 @@ using namespace paf; using namespace sce; -const uint32_t k_safeMemIniLimit = 0x400; const int32_t k_settingsVersion = 5; static sce::AppSettings *s_appSet = NULL; @@ -56,7 +55,7 @@ void menu::Settings::Init() sparam.free_cb = sce_paf_free; sparam.realloc_cb = sce_paf_realloc; sparam.safemem_offset = 0; - sparam.safemem_size = k_safeMemIniLimit; + sparam.safemem_size = utils::SafememGetSettingsSize(); sce::AppSettings::GetInstance(sparam, &s_appSet); @@ -75,7 +74,7 @@ void menu::Settings::Init() *verinfo = L"RELEASE "; #endif *verinfo += WIDE(__DATE__); - *verinfo += L" v 3.10"; + *verinfo += L" v 3.11"; s_verinfo = (wchar_t *)verinfo->c_str(); } diff --git a/NetStream/source/utils.cpp b/NetStream/source/utils.cpp index 96f3caa..3660212 100644 --- a/NetStream/source/utils.cpp +++ b/NetStream/source/utils.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -30,11 +31,9 @@ uint32_t utils::GetHash(const char *name) wchar_t *utils::GetStringWithNum(const char *name, uint32_t num) { - IDParam searchRequest; char fullName[128]; sce_paf_snprintf(fullName, sizeof(fullName), "%s%u", name, num); - searchRequest.SetID(fullName); - return g_appPlugin->GetString(searchRequest); + return g_appPlugin->GetString(fullName); } void utils::SetPowerTickTask(PowerTick mode) @@ -135,6 +134,37 @@ CurlFile::Share *utils::GetShare() return s_curlShare; } +uint32_t utils::SafememGetSettingsSize() +{ + return 0x400; +} + +void utils::SafememWrite(string const& str, uint32_t offset) +{ + int32_t strlen = str.length(); + uint32_t baseOffset = SafememGetSettingsSize(); + sceAppUtilSaveSafeMemory(&strlen, 4, baseOffset + offset); + sceAppUtilSaveSafeMemory(str.c_str(), strlen, baseOffset + offset + 4); +} + +string utils::SafememRead(uint32_t offset) +{ + string ret; + int32_t strlen = 0; + uint32_t baseOffset = SafememGetSettingsSize(); + sceAppUtilLoadSafeMemory(&strlen, 4, baseOffset + offset); + if (strlen <= 0 || strlen > SCE_KERNEL_64KiB - baseOffset + offset + 4) + { + return ret; + } + char *tmp = new char[strlen + 1]; + tmp[strlen] = 0; + sceAppUtilLoadSafeMemory(tmp, strlen, baseOffset + offset + 4); + ret = tmp; + delete tmp; + return ret; +} + void utils::SetTimeout(TimeoutFunc func, float timeoutMs, void *userdata1, void *userdata2) { Timer *t = new Timer(timeoutMs); diff --git a/logo.PNG b/logo.PNG index 65b0381c0d9b7dc30de38150a567f03ba44bd74b..a60bcee13f8c0843034ec937de4328e4c614ff97 100644 GIT binary patch literal 7229 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 LNkvXXu0mjfvuhVZ literal 14169 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 Vet41lw;WE)+S2}7(bWe}{}05!ms|h<