GithubHelp home page GithubHelp logo

derrod / legendary Goto Github PK

View Code? Open in Web Editor NEW
4.5K 46.0 162.0 611 KB

Legendary - A free and open-source replacement for the Epic Games Launcher

Home Page: https://legendary.gl/discord

License: GNU General Public License v3.0

Python 100.00%
epicgames-launcher epic-games epic-games-client epic-games-launcher linux-gaming

legendary's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

legendary's Issues

GTAV

This is not an issue but I couldn't figure out how to launch GTAV. My wine 5.8 setup throws error after installing DirectX with a message of:

Unable to launch game, please verify your game data

Support for Cloud-Saves

Several games support storing savegames in the cloud. Legendary ideally should support this as well when possible.

Will investiage.

pip install legendary-gl fails

It appears in pip search but it can't be installed.

user@machine:~> pip install legendary-gl -vvv
Collecting legendary-gl
  1 location(s) to search for versions of legendary-gl:
  * https://pypi.python.org/simple/legendary-gl/
  Getting page https://pypi.python.org/simple/legendary-gl/
  Looking up "https://pypi.python.org/simple/legendary-gl/" in the cache
  Returning cached "301 Moved Permanently" response (ignoring date and etag information)
  Looking up "https://pypi.org/simple/legendary-gl/" in the cache
  Current age based on date: 83
  Freshness lifetime from max-age: 600
  Freshness lifetime from request max-age: 600
  The response is "fresh", returning cached response
  600 > 83
  Analyzing links from page https://pypi.org/simple/legendary-gl/
    The package https://files.pythonhosted.org/packages/0a/2c/df4fbafe51810adfc77de835f203bee6d820003d234ff21b8140052479ac/legendary-gl-0.0.6.tar.gz#sha256=d7ce4cb5cbfc8538574892e57dd89fb54d5210938d8260f1726683f3310c7894 (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8) is incompatible with the pythonversion in use. Acceptable python versions are:>=3.8
    Skipping link https://files.pythonhosted.org/packages/49/d6/97bbf7722eb5efb3a16762d3f1ee962ddcb9e25a4ed5204b6d6309ac97ce/legendary_gl-0.0.6-py3-none-any.whl#sha256=49654036744f50b71c1074f7e62edc661baa164167d64bf570b177e179792035 (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8); it is not compatible with this Python
    The package https://files.pythonhosted.org/packages/fe/93/2c2df59311c6181035bf397a81265bce3d316167d380106b33ac7100ef13/legendary-gl-0.0.7-3.tar.gz#sha256=2a1c10781586de00eb155650f8ad3e9aca8366d743761000290832e2d349476b (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8) is incompatible with the pythonversion in use. Acceptable python versions are:>=3.8
    Skipping link https://files.pythonhosted.org/packages/96/f8/a00b8b905d44d13578408f7f4385332eb865be6bee86e5ae5281799bf83f/legendary_gl-0.0.7-3-py3-none-any.whl#sha256=10d4dfe9f57f01b4e3d00e10458a9981ef8701ef41c3395f012c1eca79b020d2 (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8); it is not compatible with this Python
    The package https://files.pythonhosted.org/packages/cd/99/6ab7417206a2bf48a8800f1e1e17b8e50c2619c7f25c786a7b1cc10ff0a8/legendary-gl-0.0.8.tar.gz#sha256=3c9367f844144b47b7f4c292640d00ac94406f7fd2cb32dc2fdcb8ba4f560e15 (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8) is incompatible with the pythonversion in use. Acceptable python versions are:>=3.8
    Skipping link https://files.pythonhosted.org/packages/e9/a0/31bf1b1085c14a046e508e64473bb2b269bb095ddf9b5a0b1b36a540978b/legendary_gl-0.0.8-py3-none-any.whl#sha256=fdac34b9f8606e55bffb54b23c7c156e580e8977a90ea158c5cbb3ed58430c7c (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8); it is not compatible with this Python
    The package https://files.pythonhosted.org/packages/92/4f/c067da0ae1852b8db0e6fa89d0d61172cbe11e8629c45c3c6e9e19d66a36/legendary-gl-0.0.9.tar.gz#sha256=aaa64bc0f862b04a0b44d6f4496fdd3ca8508bcb119ff35483938c143266c29a (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8) is incompatible with the pythonversion in use. Acceptable python versions are:>=3.8
    Skipping link https://files.pythonhosted.org/packages/35/ff/65cea0419679f9ef33a5a79374f81e8a8a32711bd62ba8ae5ec824cc8876/legendary_gl-0.0.9-py3-none-any.whl#sha256=f458e3aac4e611f9f76061fe8ec436c7e440b2a2c1c84779b847adf24c5aa4e3 (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8); it is not compatible with this Python
    The package https://files.pythonhosted.org/packages/c6/d5/15b541e63a41d2ddee290d5a36d6cebac07d03331b8c2e552fea8779d9a5/legendary-gl-0.0.10.tar.gz#sha256=5c06428e54c6ff497858031fe1c4138c9ce5c11b45fc65f7896eb2052d624d0c (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8) is incompatible with the pythonversion in use. Acceptable python versions are:>=3.8
    Skipping link https://files.pythonhosted.org/packages/99/24/71b1feb085dddf81fd94ec538b08c60a366bdc84261a92c2e119f0779410/legendary_gl-0.0.10-py3-none-any.whl#sha256=623a75af26fc9c0a029a325c46b25c3ea4364f00bb1f827cf18a002070292fce (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8); it is not compatible with this Python
    The package https://files.pythonhosted.org/packages/61/59/d5e4e63262238395523589317c098488f7192654d073655e2a979bff9d5b/legendary-gl-0.0.11.tar.gz#sha256=848e1ee6d724b1e089ee2aa97ab9e8c3a8b2eaa2b33407d617d154a86d2bedd8 (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8) is incompatible with the pythonversion in use. Acceptable python versions are:>=3.8
    Skipping link https://files.pythonhosted.org/packages/d1/3e/c9f1a3e3ccc1d5f7829a66ec54c94006e8c08309eb8e38916bb3238eda9d/legendary_gl-0.0.11-py3-none-any.whl#sha256=1c2fa525b9524743e4ff4d739435d3f5d21b934737d619f5ca153d19f184bf6d (from https://pypi.org/simple/legendary-gl/) (requires-python:>=3.8); it is not compatible with this Python
  Could not find a version that satisfies the requirement legendary-gl (from versions: )
Cleaning up...
No matching distribution found for legendary-gl
Exception information:
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 353, in run
    wb.build(autobuilding=True)
  File "/usr/lib/python2.7/dist-packages/pip/wheel.py", line 749, in build
    self.requirement_set.prepare_files(self.finder)
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 380, in prepare_files
    ignore_dependencies=self.ignore_dependencies))
  File "/usr/lib/python2.7/dist-packages/pip/req/req_set.py", line 554, in _prepare_file
    require_hashes
  File "/usr/lib/python2.7/dist-packages/pip/req/req_install.py", line 278, in populate_link
    self.link = finder.find_requirement(self, upgrade)
  File "/usr/lib/python2.7/dist-packages/pip/index.py", line 514, in find_requirement
    'No matching distribution found for %s' % req
DistributionNotFound: No matching distribution found for legendary-gl

Adding deb packages

Hi,

Could it be possible to have .deb packages ?

Thanks, a Pop-OS user ;)

Adding Legendary games as Non-Steam game

Hi firstly thanks for the amazing project, as a Linux user this tool is amazing. Anyways the issue I'm having is adding Legendary games as a non-steam game (yes, i've manually corrected the path/launch options, tried using a bash script, even tried just adding a terminal emulator as a non-steam game and launching it manually from there) regardless of the method I use the game flashes "running" for 1 second but never actually opens, I have almost every other app added as non-steam game without issues (Lutris/POL/GOG games/Humble Games/etc). I've tried setting LD_LIBRARY_PATH without luck, I need to add to steam so I can stream the game to my TV, Sorry if this isn't the right spot for this issue, I post here because legendary is the only app behaving like this, thanks.

[Feature Request] [Windows] Desktop/Start menu shortcut creation

Would it be possible to implement Desktop and Start Menu shortcut creation for the installed games, e.g. legendary.exe -shortcuts? Currently, the games are installed without these (or, at least, the one I installed to test, "A Short Hike", appeared without any shortcuts), and it makes it more difficult to launch them. (As I don't usually use Epic Games, I had to check with my little brother, and he confirmed that the Epic Launcher does not create Start Menu shortcuts, but does make desktop shortcuts).

Game Name.lnk containing the Epic Launcher command line, of course, it's possible to manually make the shortcuts using --dry-run output, and manually copy them to desired locations.

Paths:

Current User: %AppData%\Microsoft\Windows\Start Menu\Programs\Game Name.lnk
Desktop: %USERPROFILE%\Desktop\Game Name.lnk

Possible alternative start menu shortcut locations:
All users start menu (may have Admin prompt): %ProgramData%\Microsoft\Windows\Start Menu\Programs\Game Name.lnk

Or possibly Epic Games or legendary or Games subdirectories of the Start Menu directories (to keep the programs list organised).

If install.executable starts with a leading slash, os.path.join discards the install path and fails to launch game

game_exe = os.path.join(install.install_path, install.executable)

https://docs.python.org/3/library/os.path.html#os.path.join

If a component is an absolute path, all previous components are thrown away and joining continues from the absolute path component.

Not sure why my executables in install.json have a leading slash, but it breaks legendary for me

Epic Games OAuth Flow

Hi, this is a really cool library! Sorry if this is off-topic, but we're developing an application where we need users to sign into their Epic Games accounts so that we can verify that they truly own the usernames that they claim. We want to go through Epic Games and have a redirect URL back to our site since that's the "standard" OAuth flow. Do you know if Epic Games has a REST endpoint that performs this authentication and redirect with an OAuth token? We figured we'd ask here since you clearly have a lot of expertise on the protocols they support.

Unable to change wine_executable to Proton

(Wine-noob here)
How do I change the wine_executable to proton ?

wine_executable = proton does not work as proton is not in my path.
I have several version of Proton installed under ~/.local/share/Steam/steamapps/common/Proton X.X/
I tried putting this absolute path but something seems wrong with the escaping space.

Whatever I tried I always ended up with this error :

> legendary launch Kinglet 
[cli] INFO: Logging in...
[Core] INFO: Trying to re-use existing login session...
[cli] INFO: Checking for updates...
[Core] INFO: Getting authentication token...
[cli] INFO: Launching Kinglet...
Traceback (most recent call last):
  File "/usr/bin/legendary", line 11, in <module>
    load_entry_point('legendary-gl==0.0.13', 'console_scripts', 'legendary')()
  File "/usr/lib/python3.8/site-packages/legendary/cli.py", line 775, in main
    cli.launch_game(args, extra)
  File "/usr/lib/python3.8/site-packages/legendary/cli.py", line 387, in launch_game
    subprocess.Popen(params, cwd=cwd, env=env)
  File "/usr/lib/python3.8/subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1702, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'proton'

Memory leaking?

I'm using the AUR version for Manjaro (v0.0.9) and trying to download Metro: Exodus. It starts downloading fine, but consumes more and more RAM until its amount (preset with max_memory option) runs out, and stops downloading after that. When I interrupt and restart legendary, it resumes downloading, but eventually the same happens.
legendary-log.zip
Screenshot_2020-05-05_16:45:03:294

Crashes on Wine64 with "INTERNAL ERROR: cannot create temporary directory!"

I'm attempting to get GTA V running on OSX with Wine64. GTA V is a Windows only binary, so while it is possible to auth and download it with legendary on OSX natively, ultimately the game will need to be installed and run on Wine64 if it is to work on Mac at all...

Attempting to run legendary.exe within a cmd.exe crashes on Wine64 for OSX with the following:
[##] INTERNAL ERROR: cannot create temporary directory!
where ## is the number of the temporary folder it is creating.

It seems that PyInstaller is creating about 6 directories prefixed with ## in %TMP% in _MEI592, _MEI593, etc...

These directories are not owned by the user and are not readable (dir /q) or accessible

cd %TMP%\_MEI592
Access denied.

on the Host os they appear as:

d---------   2 user  wheel    64B 15 May 02:19 _MEI592

I'm not sure if this is an issue with PyInstaller on Wine specifically or a problem with how legendary is packed with PyInstaller.

I've not yet attempted to install Python and install legendary that way.

Cannot find .exe

I use Manjaro, so I installed legendary through AUR. Auth and installed the game went fine.

Launch failed with : wine: cannot find '~/Games/legendary/GTAV/PlayGTAV.exe'

And indeed the file does not exist.

No working on ubuntu 20.04

It installs fine but when I launch it with, legendary auth , I get this error.

Traceback (most recent call last):
File "/usr/local/bin/legendary", line 11, in
load_entry_point('legendary-gl==0.0.14', 'console_scripts', 'legendary')()
File "/usr/local/lib/python3.8/dist-packages/legendary_gl-0.0.14-py3.8.egg/legendary/cli.py", line 853, in main
File "/usr/lib/python3.8/argparse.py", line 1380, in add_argument
action = action_class(**kwargs)
TypeError: init() got an unexpected keyword argument 'type'

Review import function

Hello,

today I was trying to import GTAV from on older install I had, but it wouldn't let me because it would've had to download 240/340 files, clearly outside of the 95% match range.

Out of curiosity, I removed the check from cli.py and it imported the game, marking it as installed, so I could now run verify, and it turned out I only actually had to download 17GB instead of the whole 90GB.

I also tried to run legendary repair first, but it refused to do that because the game wasn't marked as installed.

My suggestion would be to rewrite the import function to mark the game as installed (maybe after checking for conflicts, such as an already existing manifest but for another game, or same path as another installed game, etc) and run repair on it. This change wouldn't impact importing installations which are 100% perfect as repair would do nothing but it allows to import game installations which are in a broken state without having to download the whole game again.

I'd like to hear your opinion on this as there might be something I'm missing here.

Verify game installations/extraction (also for importing etc)

Currently Legendary does not verify data at all and just hopes for the best.
Ideally we should check the hash of the file we're writing at least while writing.
For importing games it will also be important to check the installed version in order to determine whether or not it needs to be patched up.

ModuleNotFoundError: No module named 'legendary.utils'

Building the project from source and running legendary auth results in this:

Traceback (most recent call last): File "/usr/bin/legendary", line 11, in <module> load_entry_point('legendary-gl==0.0.7', 'console_scripts', 'legendary')() File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 490, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2859, in load_entry_point return ep.load() File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2450, in load return self.resolve() File "/usr/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2456, in resolve module = __import__(self.module_name, fromlist=['__name__'], level=0) File "<frozen zipimport>", line 259, in load_module File "/usr/lib/python3.8/site-packages/legendary_gl-0.0.7-py3.8.egg/legendary/cli.py", line 18, in <module> File "<frozen zipimport>", line 259, in load_module File "/usr/lib/python3.8/site-packages/legendary_gl-0.0.7-py3.8.egg/legendary/core.py", line 28, in <module> ModuleNotFoundError: No module named 'legendary.utils'

This is on an Arch-based distro. Latest version of python is installed, as well as requests and setuptools.

Missing retries/error handling on API requests

I was downloading Civilisation VI which completed successfully, but was then asked if I wanted to download the DLC content, I selected yes. I then recieved the following error:

The following DLCs are available for this game:
 - Civilization VI : Aztec DLC (App name: KingletAztec, version: 1.0.1.504666c)
Manually installing DLCs works the same; just use the DLC app name instead.
Do you wish to automatically install DLCs ? [Y/n]: y
[Core] INFO: Trying to re-use existing login session...
[cli] INFO: Install candidate is DLC
[cli] INFO: Preparing download...
Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 416, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.8/http/client.py", line 1332, in getresponse
    response.begin()
  File "/usr/lib/python3.8/http/client.py", line 303, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.8/http/client.py", line 264, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib/python3.8/socket.py", line 669, in readinto
    return self._sock.recv_into(b)
  File "/usr/lib/python3/dist-packages/urllib3/contrib/pyopenssl.py", line 318, in recv_into
    raise SocketError(str(e))
OSError: (104, 'ECONNRESET')

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 439, in send
    resp = conn.urlopen(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 719, in urlopen
    retries = retries.increment(
  File "/usr/lib/python3/dist-packages/urllib3/util/retry.py", line 400, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "/usr/lib/python3/dist-packages/six.py", line 702, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 665, in urlopen
    httplib_response = self._make_request(
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 421, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "/usr/lib/python3/dist-packages/urllib3/connectionpool.py", line 416, in _make_request
    httplib_response = conn.getresponse()
  File "/usr/lib/python3.8/http/client.py", line 1332, in getresponse
    response.begin()
  File "/usr/lib/python3.8/http/client.py", line 303, in begin
    version, status, reason = self._read_status()
  File "/usr/lib/python3.8/http/client.py", line 264, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "/usr/lib/python3.8/socket.py", line 669, in readinto
    return self._sock.recv_into(b)
  File "/usr/lib/python3/dist-packages/urllib3/contrib/pyopenssl.py", line 318, in recv_into
    raise SocketError(str(e))
urllib3.exceptions.ProtocolError: ('Connection aborted.', OSError("(104, 'ECONNRESET')"))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/bin/legendary", line 11, in <module>
    load_entry_point('legendary-gl==0.0.14', 'console_scripts', 'legendary')()
  File "/usr/local/lib/python3.8/dist-packages/legendary_gl-0.0.14-py3.8.egg/legendary/cli.py", line 947, in main
  File "/usr/local/lib/python3.8/dist-packages/legendary_gl-0.0.14-py3.8.egg/legendary/cli.py", line 565, in install_game
  File "/usr/local/lib/python3.8/dist-packages/legendary_gl-0.0.14-py3.8.egg/legendary/cli.py", line 464, in install_game
  File "/usr/local/lib/python3.8/dist-packages/legendary_gl-0.0.14-py3.8.egg/legendary/core.py", line 611, in prepare_download
  File "/usr/local/lib/python3.8/dist-packages/legendary_gl-0.0.14-py3.8.egg/legendary/core.py", line 558, in get_cdn_manifest
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 546, in get
    return self.request('GET', url, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/usr/lib/python3/dist-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/usr/lib/python3/dist-packages/requests/adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', OSError("(104, 'ECONNRESET')"))

Just like the error suggested I tried installed the DLC after which worked successfully.

Cannot Save games to custom path

I tried to use legendary to install GTA5 to an external drive but instead it looks like it was installed to the default location.
The command that I used was:
legendary install "9d2d0eb64d5c44529cece33fe2a46482" --save-path /home/m/NotDeadYet/GTA5
Instead of saving the files to: /home/m/NotDeadYet/GTA5
The game files were saved to: /home/m/legendary

Question : Any way to verify game files?

Justreinstalled Windows and epic. Have the fortnite game files but there is no native option to verify or locate a storage location in Epic Games Launcher, wondering if there is such a feature on legendary?

TIA

The process of downloading games on high latency internet is very bad because of low timeout settings that are currently un-adjustable

Hi, thank you for your efforts on creating an open source CLI binary for interacting with the Epic games store. Would certainly prefer this one than the official resource-heavy client.

I have a concern about downloading games however, I noticed that downloading is really bad on my internet that is suffering from high latency thanks to incompetent ISPs...

I think it would help if the "read timeout=5.0" could be adjustable to a bigger number. As you can see on my logs below, I still am able to download to some extent but the Download speeds always go down to 0 just a few seconds after it gets to start to download.

My internet isn't completely unstable except for the fact that it hiccups at an average of every 10 seconds. Despite that, I am still able to download using youtube-dl on speeds around 50 KBPS but I do admit that this one suffers from hiccups too, just that not as bad as what's happening when I use legendary to download a game.

[2020-05-02 15:06:08,691] [DLMProc] INFO: Downloaded: 22.19 MiB, Written: 36.91 MiB
[2020-05-02 15:06:08,691] [DLMProc] INFO: Speeds:
[2020-05-02 15:06:08,691] [DLMProc] INFO: + Download - 0.00 MiB/s (raw) / 0.00 MiB/s (decompressed)
[2020-05-02 15:06:08,691] [DLMProc] INFO: + Write (disk) - 0.00 MiB/s
[2020-05-02 15:06:08,691] [DLMProc] INFO: + Read (disk) - 0.00 MiB/s
[2020-05-02 15:06:08,691] [DLMProc] INFO: + Tasks - 0.00 Chunks/s
[2020-05-02 15:06:08,691] [DLMProc] INFO: Active download tasks: 16
[2020-05-02 15:06:08,691] [DLMProc] INFO: Shared memory usage: 26.0 MiB, available: 998
[2020-05-02 15:06:08,689] [DLWorker 3] WARNING: [DLWorker 3] Chunk download failed (ReadTimeout(ReadTimeoutError("HTTPSConnectionPool(host='download.epicgames.com', port=443): Read timed out. (read timeout=5.0)"))), retrying...
[2020-05-02 15:06:08,693] [DLWorker 6] WARNING: [DLWorker 6] Chunk download failed (ReadTimeout(ReadTimeoutError("HTTPSConnectionPool(host='download.epicgames.com', port=443): Read timed out. (read timeout=5.0)"))), retrying...
[2020-05-02 15:06:08,698] [DLWorker 5] WARNING: [DLWorker 5] Chunk download failed (ReadTimeout(ReadTimeoutError("HTTPSConnectionPool(host='download.epicgames.com', port=443): Read timed out. (read timeout=5.0)"))), retrying...
[2020-05-02 15:06:08,697] [DLWorker 4] WARNING: [DLWorker 4] Chunk download failed (ReadTimeout(ReadTimeoutError("HTTPSConnectionPool(host='download.epicgames.com', port=443): Read timed out. (read timeout=5.0)"))), retrying...
[2020-05-02 15:06:08,702] [DLWorker 2] WARNING: [DLWorker 2] Chunk download failed (ReadTimeout(ReadTimeoutError("HTTPSConnectionPool(host='download.epicgames.com', port=443): Read timed out. (read timeout=5.0)"))), retrying...
[2020-05-02 15:06:08,697] [DLWorker 7] WARNING: [DLWorker 7] Chunk download failed (ReadTimeout(ReadTimeoutError("HTTPSConnectionPool(host='download.epicgames.com', port=443): Read timed out. (read timeout=5.0)"))), retrying...

Verifying error

I'm trying to verify GTA V, but the process freezes at 337/345 (97.7%) and suddenly quits. The computer also lags when hitting that value. I ran using administrator privilege both CMD and legendary.exe

504/502 Server Error

Legandary has just been updated to v0.0.10, and now I can neither download nor launch games:

sergey@ryzen:~> legendary install Catnip
[Core] INFO: Trying to re-use existing login session...
Traceback (most recent call last):
  File "/usr/bin/legendary", line 11, in <module>
    load_entry_point('legendary-gl==0.0.10', 'console_scripts', 'legendary')()
  File "/usr/lib/python3.8/site-packages/legendary/cli.py", line 564, in main
    cli.install_game(args)
  File "/usr/lib/python3.8/site-packages/legendary/cli.py", line 260, in install_game
    game = self.core.get_game(args.app_name, update_meta=True)
  File "/usr/lib/python3.8/site-packages/legendary/core.py", line 149, in get_game
    self.get_game_list(True)
  File "/usr/lib/python3.8/site-packages/legendary/core.py", line 153, in get_game_list
    return self.get_game_and_dlc_list(update_assets=update_assets)[0]
  File "/usr/lib/python3.8/site-packages/legendary/core.py", line 161, in get_game_and_dlc_list
    for ga in self.get_assets(update_assets=update_assets,
  File "/usr/lib/python3.8/site-packages/legendary/core.py", line 137, in get_assets
    self.lgd.assets = [GameAsset.from_egs_json(a) for a in self.egs.get_game_assets()]
  File "/usr/lib/python3.8/site-packages/legendary/api/egs.py", line 97, in get_game_assets
    r.raise_for_status()
  File "/usr/lib/python3.8/site-packages/requests/models.py", line 941, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 504 Server Error: Gateway Time-out for url: https://launcher-public-service-prod06.ol.epicgames.com/launcher/api/public/assets/Windows?label=Live
sergey@ryzen:~> legendary list-installed

Installed games:
 * Metro Exodus (App name: Snapdragon, version: 0.1.0.35)

Total: 1
sergey@ryzen:~> legendary launch Snapdragon
[cli] INFO: Logging in...
[Core] INFO: Trying to re-use existing login session...
[cli] INFO: Checking for updates...
Traceback (most recent call last):
  File "/usr/bin/legendary", line 11, in <module>
    load_entry_point('legendary-gl==0.0.10', 'console_scripts', 'legendary')()
  File "/usr/lib/python3.8/site-packages/legendary/cli.py", line 562, in main
    cli.launch_game(args, extra)
  File "/usr/lib/python3.8/site-packages/legendary/cli.py", line 218, in launch_game
    latest = self.core.get_asset(app_name, update=True)
  File "/usr/lib/python3.8/site-packages/legendary/core.py", line 143, in get_asset
    self.get_assets(update_assets=True)
  File "/usr/lib/python3.8/site-packages/legendary/core.py", line 137, in get_assets
    self.lgd.assets = [GameAsset.from_egs_json(a) for a in self.egs.get_game_assets()]
  File "/usr/lib/python3.8/site-packages/legendary/api/egs.py", line 97, in get_game_assets
    r.raise_for_status()
  File "/usr/lib/python3.8/site-packages/requests/models.py", line 941, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 502 Server Error: Bad Gateway for url: https://launcher-public-service-prod06.ol.epicgames.com/launcher/api/public/assets/Windows?label=Live

Update README.md

legendary import Anemone /mnt/games/Epic/WorldOfGoo

doesnt work. The correct syntax is:

legendary import-game Anemone /mnt/games/Epic/WorldOfGoo

BTW, your project is awesome!

Can't launch Batman Arkham Asylum (Linux)

I installed Batman™ Arkham Asylum Game of the Year Edition (App name: Godwit, version: 1.93). But when I try to launch it I got a error:
wine: cannot find '/home/firebird/legendary/BatmanArkhamAsylum/Binaries/Batman.exe'
So I checked the files using list-files command it includes Batman.exe but it's not downloaded so I can't launch it.

Game is marked as uninstalled when it shouldn't

``C:\Users\John\legendary\SuperMeatBoy
λ legendary uninstall Buffalo
Do you wish to uninstall "Super Meat Boy"? [y/N]: y
[cli] INFO: Removing "Super Meat Boy" from "C:\Users\John/legendary\SuperMeatBoy"...
[LFS Utils] ERROR: Failed deleting files with PermissionError(13, 'Δεν ήταν δυνατή η προσπέλαση του αρχείου από τη διεργασία, επειδή χρησιμοποιείται ήδη από κάποια άλλη διεργασία')
[cli] INFO: Game has been uninstalled.

C:\Users\John\legendary\SuperMeatBoy
λ cd ..

C:\Users\John\legendary
λ legendary uninstall Buffalo
[cli] ERROR: Game Buffalo not installed, cannot uninstall!
``

Here we have an example of a game that should be uninstalled because the resource is being used(that is what it says in greek) when such an error comes up it should be marked as uninstalled

Computed save path wrong on linux

The computed save path for “Untitled Goose Game” (Flour) is %APPDATA%/../locallow/House House/Untitled Goose Game/. I guess %APPDATA% should be translated to ${WINEPREFIX}/drive_c/users/${USER}/Application Data/?

Support for overriding platform / platform-awareness

A quick test patch to the following code to replace Windows with Mac was confirmed to work:

def get_game_assets(self):
r = self.session.get(f'https://{self._launcher_host}/launcher/api/public/assets/Windows',
params=dict(label='Live'))
r.raise_for_status()
return r.json()

def get_game_manifest(self, namespace, catalog_item_id, app_name):
r = self.session.get(f'https://{self._launcher_host}/launcher/api/public/assets/v2/platform'
f'/Windows/namespace/{namespace}/catalogItem/{catalog_item_id}/app'
f'/{app_name}/label/Live')

It appears legendary is currently storing metadata for things without regard of the platform it grabbed things from, so that's a concern as well.

It seems that despite being platform-specific, the manifest for games lists alternate platforms that are available (example from Fortnite):

    "releaseInfo": [
      {
        "appId": "Fortnite",
        "compatibleApps": [],
        "dateAdded": "2014-09-11T00:00:00.000Z",
        "id": "...",
        "platform": [
          "Windows",
          "Mac"
        ]
      }
    ],

I'm not sure the best approach here just yet (still reading through legendary's code), but a way to specify a platform override for legendary download would be fantastic.

Hopefully this sort of usage is not out of scope for legendary? ☺️

Problem lauching Jotun Valhalla Edition on 64bit linux

Hi, i'm trying to lauch Jotun Valhalla Edition this way:

$ legendary launch Grouse

and get this result:

0024:err:module:__wine_process_init L"Z:\home\j\legendary\Jotun\Jotun.exe" 64-bit application not supported in 32-bit prefix

I am using an updated Voidlinux 64bit linux. Here is my " $ uname -a"

Linux tour 5.4.39_1 #1 SMP PREEMPT Wed May 6 19:42:50 UTC 2020 x86_64 GNU/Linux

Tell me if you need more info on my system.

[Suggestion] csv / tsv friendly output of `list-games` command

That'd make trivial to pick the right game to download by its AppName with a fuzzy finder like skim or fzf:

Current:

  * Inside (App name: Marigold, version: 1.0.0)
  * Into The Breach (App name: Blobfish, version: 1.2.22)

Sample alternative (tab-separated in this case):

 Marigold	Inside	1.0.0
 Blobfish	Into The Breach	1.2.22

To pick AppName(s) one can run:

legendary list-games | sk --multi --nth 2 | cut -f 1

and pipe output to download / install commands. Humans surely aren't great in reading dozens of lines of text and parsing them for AppName :)

Using fuzzy finder with current output is still recommended to anybody.

Error when trying to list games

This is on a fresh run with no games installed (as far as the app knows), using the 0.0.4 release.

$ ./legendary -v list-installed                                                                                                                                                                                                                                   
Traceback (most recent call last):
  File "legendary/cli.py", line 435, in <module>
  File "legendary/cli.py", line 417, in main
  File "legendary/cli.py", line 103, in list_installed
  File "legendary/core.py", line 183, in get_installed_list
  File "legendary/lfs/lgndry.py", line 208, in get_installed_list
AttributeError: 'NoneType' object has no attribute 'values'
[8517] Failed to execute script cli

Namespace' object has no attribute 'wine_bin' upon launching GTA V

legendary launch 9d2d0eb64d5c44529cece33fe2a46482
[cli] INFO: Logging in...
[Core] INFO: Trying to re-use existing login session...
[cli] INFO: Checking for updates...
Traceback (most recent call last):
  File "legendary\cli.py", line 795, in <module>
  File "legendary\cli.py", line 771, in main
  File "legendary\cli.py", line 373, in launch_game
AttributeError: 'Namespace' object has no attribute 'wine_bin'
[9280] Failed to execute script cli

Windows 10 x64

Download Progress Bar

It would make the download progress much easier to understand. You can use rich library for python to make beautiful progress bars.

Error using egl-sync on a fresh install

With a fresh install, egl-sync crashes:

$ legendary egl-sync
EGL path not found, please manually provide the path to the WINE prefix it is installed in
Path [empty input to quit]: /home/djib/epic-games-store
Traceback (most recent call last):
  File "/home/djib/.local/bin/legendary", line 8, in <module>
    sys.exit(main())
  File "/home/djib/.local/lib/python3.8/site-packages/legendary/cli.py", line 1101, in main
    cli.egs_sync(args)
  File "/home/djib/.local/lib/python3.8/site-packages/legendary/cli.py", line 797, in egs_sync
    self.core.lgd.config.set('Legendary', 'egl_programdata', egl_path)
  File "/usr/lib/python3.8/configparser.py", line 1201, in set
    super().set(section, option, value)
  File "/usr/lib/python3.8/configparser.py", line 902, in set
    raise NoSectionError(section) from None
configparser.NoSectionError: No section: 'Legendary'

To solve the issue I added an empty [Legendary] section in ~/.config/legendary/config.ini.

Implement on-disk cache during download

While 1 GiB is enough for almost any title, World War Z defies that trend by requiring up to 5.3 GiB of cache to successfully reconstruct its files. This is due to heavy duplication on the game's part since it ships with both a client and server that share large amounts of their files. The resulting heavy deduplication on Epic's part result in lots of cache being required for successful reconstruction. There are basically three ways this could be addressed:

  • Optimize file processing order to discard cache sooner (i.e. grouping files that share lots of chunks)
  • Throw away cache when it gets full and redownload later (inefficient and would require redownload logic)
  • Add on-disk cache to temporarily store excess cache on disk during the download (annoying with mechanical drives)

Since the first two approaches are both complicated and not a cure-all/efficient solution we will have to add on-disk caching capability.

Rename download to install for consistency

The commands related to installation are download, uninstall, and list-installed. I think it would be more consistent if download were renamed to install. I can make a pull request for this if you agree.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.