| Age | Commit message (Collapse) | Author |
|
|
|
|
|
Handles the repeated boiler plate of using a weak reference to NetplaySession from NetplayUICallbacks
|
|
Remove corresponding jni config.
Rename Netplay to NetplaySession in jni config to match new kotlin name.
|
|
|
|
|
|
|
|
|
|
Also rename max buffer to client buffer for better consistency with settings and c++
|
|
Traversal connections show in the joining info UI.
Non fatal errors show the retry button.
Fatal errors end the netplay session.
|
|
Doesn't support traversal yet
|
|
Also fix bottom sheets so they survive rotation
|
|
|
|
|
|
We just about get away with using a StateFlow in NetplaySession since the host sends AbortGameDigest when closing their own dialog. Without that it would be harder for the UI to distinguish between subsequent dialogs. If that wasn't the case then NetplaySession might need to expose the individual progress and result updates and have the view model assemble it into the overall GameDigestProgress.
|
|
Show them in the chat window and also in a toast during game play.
|
|
Create a new NetplaySession each time we try to join a netplay game. Hold onto it in NetplayManager so its available to the different activities that need to access it. Close the session when backing out of the netplay UI. Some guardrails in case things go out of sync: creating a session closes the old one if it is still around for some reason, finalizer in NetplaySession to release native resources if not closed explicitly for some reason. Profiling done to ensure all kotlin and native objects are successfully cleared / garbage collected.
|
|
|
|
When transferring saves from the host. Equivalent of ChunkedProgressDialog in QT.
|
|
Boot session data is already handled when the game is booted so this is just fallback in case the game launch fails in some weird way.
Add missing @Keep annotations to functions called from C++
|
|
the user to exit
|
|
|
|
Remove the big saveSetup function and set individual settings immediately after being changed in the UI. Group them all under Netplay.Settings
|
|
|
|
Includes chat, game changes, pad buffer changes and host input authority. Merges them all into the chat window.
|
|
|
|
If result is a success sent event to launch the next netplay screen. if it fails, clear up the netplay client
|
|
|
|
OnMsgStartGame, FindGameFile
|
|
|
|
|
|
For some reason, NativeLibrary.kt calling Log for the alert message text
makes Dolphin die with a JNI error. Supposedly the jstring passed to the
logging function is invalid. I don't understand why, because the dialog
that we show right afterwards is able to read the string just fine. The
error happens even if I pass the string directly to Log without
prepending any extra text.
There's no real downside to having the logging in C++ instead of Kotlin,
so let's move it to C++ to avoid the JNI error.
|
|
Follow-up to 068947e. HostThreadLock no longer serves a purpose.
|
|
This keeps the logic encapsulated inside GCAdapter.cpp so callers don't
have to think about it.
|
|
Now with cancel button and an actual progress bar. For simplicity, we do
two passes on the progress bar, one for loading the NAND into memory and
one for extracting it. The user directory is likely on an SSD, making
the extraction pass invisibly fast.
|
|
|
|
The functions SaveToSYSCONF and LoadFromSYSCONF contain checks for
whether emulation is running. The intent of this is that when we're
emulating a Wii, the emulated system may write to SYSCONF whenever it
likes and does not expect anything else to write to SYSCONF, so the
host code shouldn't access SYSCONF while emulation is ongoing. However,
Core::IsRunning is an imperfect proxy for whether we've handed over
control of SYSCONF to the emulated system yet, as the actual handover
happens at a slightly different point in time than when the emulation
state is changed. This usually isn't a problem, but in theory it could
be a determinism problem if a setting is changed right as emulation is
starting, or it could cause the emulated software to briefly misbehave
if a setting is changed right as emulation is stopping.
Things got worse in 72cf2bdb87f09deff22e1085de3290126aa4ad05 when I
replaced the Core::IsRunning calls with !Core::IsUninitialized. With
IsRunning, there was be a period of time where SYSCONF should have been
protected but wasn't. With !IsUninitialized, there was a period of time
where SYSCONF shouldn't have been protected but was, and crucially, this
period of time included the moments where we do setup and teardown of
the emulated NAND, which broke transferring SYSCONF settings between the
host and the guest. 72cf2bdb87f09deff22e1085de3290126aa4ad05 was
reverted because of this.
This commit adds a flag that we explicitly flip when control is handed
over to or from the emulated system. This protects the SYSCONF file
for exactly as long as is needed.
|
|
State: Simplify interthread communication and general cleanups.
|
|
|
|
|
|
now always non-blocking for the caller, but appropriately block the CPU thread as needed.
|
|
|
|
Requires at least GCC 11, Clang 13, MSVC 19.30 (VS2022 17.0), or AppleClang 13.1.6 (XCode 13.3).
|
|
Android Support for RetroAchievements
|
|
Modify the RetroAchievements login code in Android to pass in a callback, pop a message if login fails, close the login box if it succeeds.
|
|
Android: Convert NetworkHelper to Kotlin
|
|
Disables state loading and emulation speeds below 100% when RetroAchievements hardcore mode is enabled.
|
|
|
|
|
|
Core: Let any thread call previously host-thread-only functions
|