goatcorp / FFXIVQuickLauncher

Custom launcher for FFXIV
https://goatcorp.github.io/
GNU General Public License v3.0
2.78k stars 326 forks source link

Temporarily let user launch the game even if launcher has failed to update #543

Open Limiana opened 3 years ago

Limiana commented 3 years ago

What is your suggestion/feature request? Let user have a grace period of launching the game even if xivlauncher has failed to check for updates.

Describe how you'd like this to work Github's rate limits are real. If an user hits them every now and then there isn't much point of denying them from launching the game, so I would suggest adding "Launch anyway" button that will be active only within, for example, 24 hours from last update check (adjust the time to your liking). This way it will both resolve problems of people who just hit the limit (due to other app or constant relaunching or just shared IP) and not let people who have prolonged connectivity issues keep using not updated launcher.

v0idp commented 3 years ago

Does the launcher close automatically after the error pops up ?

reiichi001 commented 3 years ago

Does the launcher close automatically after the error pops up ?

Yes it does. The current behavior is to close if it can't run an update check as if github fails there, it will also fail later when trying to check Dalamud, DalamudAssets, and plugin updates.

Centzilius commented 3 years ago

Wouldn't it be better to just handle the rate limit as in "If we are rate limited then don't show this error and launch anyway". I don't think manual user intervention in the form of a "Launch anyway" button is needed here.

An advanced config option could also be added for a Github PAT so that requests are authenticated but I don't think that should be required.

reiichi001 commented 3 years ago

Wouldn't it be better to just handle the rate limit as in "If we are rate limited then don't show this error and launch anyway". I don't think manual user intervention in the form of a "Launch anyway" button is needed here.

Rate limits depend on the user's public IP and it's not a case of something being ratelimited for everyone. (But some ISPs are garbage and NAT collections of users under a single IP and that's our best guess on how they're getting rate limited because you'd have to otherwise open XIVLauncher like 20-60 times in the span of a single minute).

Launching silently anyways would defeat the purpose of the version check and we wouldn't be able to guarantee that the user has an up to date environment for:

Occasionally there are breaking changes in the launcher, like where it goes to download Dalamud. And if Dalamud isn't on the right version, it will also either fail to inject or crash the game. If DalamudAssets are out of date, they can crash Dalamud or break plugins that rely on those assets.

All in all, we cannot and should not trust that the user has everything set up unless we can validate it. A manual choice to bypass the version check would be better than outright failing, but it shouldn't be silent and the user should be informed that their files could be out of date and that it could result in things not working.

An advanced config option could also be added for a Github PAT so that requests are authenticated but I don't think that should be required.

AFAIK, Goat is looking to move things off of github as we've been encountering more reports of this, but many parts of the launcher are tied to files that are in githubv and this isn't as easy as just updating some URLs to point elsewhere when they're dependent on GitHub actions for CI/CD.

Centzilius commented 3 years ago

Launching silently anyways would defeat the purpose of the version check

My suggestion to launch anyway was based on the assumption that beeing rate limited by github is not a constant state but happens only on occasion.

AFAIK, Goat is looking to move things off of github as we've been encountering more reports of this, but many parts of the launcher are tied to files that are in githubv and this isn't as easy as just updating some URLs to point elsewhere when they're dependent on GitHub actions for CI/CD.

Not sure how much caching would ruin this plan but what about we let Github Actions create json files with the info we need and push it on Github Pages? These shouldn't be rate limited (at least I hope). All other options would probably introduce hosting cost.

EDIT: I see now that the current solution is done via the GithubUpdateManager from Squirrel so that is probably the more difficult part. I'm not familiar with .NET yet so sorry.

v0idp commented 3 years ago

I agree with the warning message. But could outdated files/plugins have issues with newer game updates ?

reiichi001 commented 3 years ago

I agree with the warning message. But could outdated files/plugins have issues with newer game updates ?

Absolutely!

Here are some example use case scenarios that have happened in the past.

  1. Dalamud is out of date. The client was updated. Dalamud's version whitelist no long matches the game client, so it doesn't inject.
  2. Dalamud is out of date. The client was updated. The user forces Dalamud to run anyways, but Square Enix actually made breaking changes this patch. Dalamud's hooks fail, resulting in it and/or the client crashing.
  3. DalamudAssets are out of date. The client was updated. While hooks didn't change, all opcodes have been shuffled as expected. PennyPincher, DF notifications, and all Marketboard features stop working. (We don't actually prevent this currently, and you may see it occur when there's a new patch)
  4. XIVLauncher is out of date. Dalamud and/or DalamudAssets have been moved to a new URL to versioncheck and/or download. The old launcher has no way of knowing this.
  5. XIVLauncher is out of date. Dalamud has been updated and includes a new configuration file change that needed to be paired with XIVLauncher. As they are no longer in sync, XIVLauncher might start, but will run into file read/write issues. Or Dalamud will.
v0idp commented 3 years ago

I agree with the warning message. But could outdated files/plugins have issues with newer game updates ?

Absolutely!

Here are some example use case scenarios that have happened in the past.

  1. Dalamud is out of date. The client was updated. Dalamud's version whitelist no long matches the game client, so it doesn't inject.
  2. Dalamud is out of date. The client was updated. The user forces Dalamud to run anyways, but Square Enix actually made breaking changes this patch. Dalamud's hooks fail, resulting in it and/or the client crashing.
  3. DalamudAssets are out of date. The client was updated. While hooks didn't change, all opcodes have been shuffled as expected. PennyPincher, DF notifications, and all Marketboard features stop working. (We don't actually prevent this currently, and you may see it occur when there's a new patch)
  4. XIVLauncher is out of date. Dalamud and/or DalamudAssets have been moved to a new URL to versioncheck and/or download. The old launcher has no way of knowing this.
  5. XIVLauncher is out of date. Dalamud has been updated and includes a new configuration file change that needed to be paired with XIVLauncher. As they are no longer in sync, XIVLauncher might start, but will run into file read/write issues. Or Dalamud will.

So I assume the easiest solution would be to move the files off from github to somewhere without a rate limit ? Otherwise wouldn't you want to only make it manual with a warning message if there is a launcher update but no game update. Wouldn't want users to go into the updated game with outdated launcher. What do you think ?

goaaats commented 2 years ago

This won't be implemented, but I'm looking at moving update files to a CDN, so that issues like this are less likely

XenHat commented 2 years ago

Is there any progress on this? I have consistently been unable to play for several days due to this limitation. I know my launcher is up to date, I wish I could just skip the update check.

reiichi001 commented 2 years ago

Is there any progress on this? I have consistently been unable to play for several days due to this limitation. I know my launcher is up to date, I wish I could just skip the update check.

You can:

  1. Compile your own copy of XIVLauncher - this disables update checking. You will be responsible for any issues resulting from out of date copies of XIVLauncher.
  2. Find the not-so-secret environment variable to disable the update check - you will be responsible for any issues resulting from out of date copies of XIVLauncher.
  3. (the recommended one) Address the issue you or your ISP have in connecting to GitHub, as github connectivity issues will result in more issues later, like failed Dalamud installs/updates and issues installing/updating plugins. - This is best done by ask for assistance on our discord as we don't check github as often and replies may take longer.