Fixed being stuck on splash screen

- Fixed being stuck on splash screen by adding retry attempts and running initShellCom on DomContentLoad as well.
- Fixed installer installing into stremio-4 if stremio 4 is installed.
This commit is contained in:
Zarg 2025-01-18 13:12:24 +01:00
parent 815fd22cb4
commit 2103fdde8a
2 changed files with 80 additions and 9 deletions

View file

@ -155,7 +155,8 @@ static ULONG_PTR g_gdiplusToken = 0;
// App Ready and Event Queue // App Ready and Event Queue
#define WM_NOTIFY_FLUSH (WM_USER + 101) #define WM_NOTIFY_FLUSH (WM_USER + 101)
static std::vector<json> g_pendingMessages; static std::vector<json> g_pendingMessages;
static bool g_isAppReady = false; static std::atomic<bool> g_isAppReady = false;
static std::atomic<bool> g_waitStarted(false);
// Updater // Updater
static std::atomic_bool g_updaterRunning = false; static std::atomic_bool g_updaterRunning = false;
@ -834,7 +835,7 @@ static void AppStart()
j["type"] ="shellVersion"; j["type"] ="shellVersion";
j["value"] =APP_VERSION; j["value"] =APP_VERSION;
SendToJS(j); SendToJS(j);
HideSplash();
for(const auto& pendingMsg : g_pendingMessages) { for(const auto& pendingMsg : g_pendingMessages) {
SendToJS(pendingMsg); SendToJS(pendingMsg);
} }
@ -1699,17 +1700,60 @@ LONG WINAPI ExceptionFilter(EXCEPTION_POINTERS* ExceptionInfo) {
// WebView2 // WebView2
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
static void WaitAndRefreshIfNeeded() {
std::thread([](){
int attempts = 15; // Number of total attempts
int waitTime = 1; // Initial wait time in seconds
std::this_thread::sleep_for(std::chrono::seconds(waitTime));
std::cout << "[WEBVIEW]: Checking Web Page state..." << std::endl;
if(!g_isAppReady) {
refreshWeb(true);
} else {
std::cout << "[WEBVIEW]: Web Page ready!" << std::endl;
return;
}
waitTime++;
for(int i = 1; i < attempts; ++i) {
std::this_thread::sleep_for(std::chrono::seconds(waitTime));
std::cout << "[WEBVIEW]: Checking Web Page state..." << std::endl;
if (g_isAppReady) {
std::cout << "[WEBVIEW]: Web Page ready!" << std::endl;
return;
}
std::cout << "[WEBVIEW]: Web Page not ready... Refreshing..." << std::endl;
refreshWeb(true);
waitTime++;
}
if(!g_isAppReady) {
AppendToCrashLog(L"[WEBVIEW]: Web page could not be loaded after multiple attempts.");
MessageBoxW(
nullptr,
L"Web page could not be loaded after multiple attempts. Make sure the Web UI is reachable. Check Github for more details.",
L"WebView2 Page load fail",
MB_ICONERROR | MB_OK
);
}
}).detach();
}
static void SetupWebMessageHandler() static void SetupWebMessageHandler()
{ {
if(!g_webview)return; if(!g_webview)return;
EventRegistrationToken navToken; EventRegistrationToken navToken;
g_webview->add_NavigationCompleted( g_webview->add_NavigationCompleted(
Callback<ICoreWebView2NavigationCompletedEventHandler>( Callback<ICoreWebView2NavigationCompletedEventHandler>(
[](ICoreWebView2* snd, ICoreWebView2NavigationCompletedEventArgs* args)->HRESULT [](ICoreWebView2* sender, ICoreWebView2NavigationCompletedEventArgs* args)->HRESULT
{ {
snd->ExecuteScript(L"initShellComm();",nullptr); std::cout<<"[WEBVIEW]: Navigation Complete\n";
if (g_hSplash) { if (!g_isAppReady) {
HideSplash(); sender->ExecuteScript(L"initShellComm();", nullptr);
}
if (g_hSplash && !g_waitStarted.exchange(true)) {
WaitAndRefreshIfNeeded();
} }
return S_OK; return S_OK;
} }
@ -1717,6 +1761,20 @@ static void SetupWebMessageHandler()
&navToken &navToken
); );
EventRegistrationToken domToken;
g_webview->add_DOMContentLoaded(
Callback<ICoreWebView2DOMContentLoadedEventHandler>(
[](ICoreWebView2* sender, IUnknown* args) -> HRESULT {
std::cout<<"[WEBVIEW]: DOM content loaded\n";
if (!g_isAppReady) {
sender->ExecuteScript(L"initShellComm();", nullptr);
}
return S_OK;
}
).Get(),
&domToken
);
EventRegistrationToken contextMenuToken; EventRegistrationToken contextMenuToken;
g_webview->add_ContextMenuRequested( g_webview->add_ContextMenuRequested(
Callback<ICoreWebView2ContextMenuRequestedEventHandler>( Callback<ICoreWebView2ContextMenuRequestedEventHandler>(

View file

@ -373,10 +373,24 @@ FunctionEnd
; Install code ; ; Install code ;
; ------------------- ; ; ------------------- ;
Function .onInit ; check for previous version Function .onInit ; check for previous version
; Read the previous installation directory from registry
ReadRegStr $0 HKCU "${UNINSTALL_KEY}" "InstallString" ReadRegStr $0 HKCU "${UNINSTALL_KEY}" "InstallString"
StrCmp $0 "" done
StrCpy $INSTDIR $0
; If registry value is empty, skip version check
StrCmp $0 "" done
; Expected installation directory for current major version (Stremio-5)
StrCpy $R1 "$LOCALAPPDATA\Programs\LNV\Stremio-5"
; Check if the registry path matches the expected directory
StrCmp $0 $R1 usePrev 0
; If it doesn't match, likely an old version, so do not use $0
Goto done
usePrev:
; If registry path matches the expected path, use it
StrCpy $INSTDIR $0
done:
${GetParameters} $Parameters ${GetParameters} $Parameters
ClearErrors ClearErrors
${GetOptions} $Parameters "/addon" $R1 ${GetOptions} $Parameters "/addon" $R1
@ -384,7 +398,6 @@ Function .onInit ; check for previous version
FileOpen $0 "$INSTDIR\addons.txt" w FileOpen $0 "$INSTDIR\addons.txt" w
FileWrite $0 "$R1" FileWrite $0 "$R1"
FileClose $0 FileClose $0
done:
FunctionEnd FunctionEnd
Section ; App Files Section ; App Files