Skip to content

Commit a9769b1

Browse files
committed
fix issues with steam drm downloader
1 parent 907da82 commit a9769b1

File tree

4 files changed

+51
-49
lines changed

4 files changed

+51
-49
lines changed

.vscode/launch.json

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "0.2.0",
2+
"version": "0.7.0",
33
"inputs": [
44
{
55
"id": "debugPath",
@@ -176,7 +176,10 @@
176176
"request": "launch",
177177
"module": "pbsync",
178178
"console": "integratedTerminal",
179-
"justMyCode": false
179+
"justMyCode": false,
180+
"env": {
181+
"GEVENT_SUPPORT": "True"
182+
},
180183
},
181184
{
182185
"name": "Migrate Assets",

pbpy/pbsteamcmd.py

+42-47
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import urllib.request
77
from pathlib import Path
88

9+
import gevent
910
import steam.protobufs.steammessages_partnerapps_pb2 # don't remove
1011
from steam.client import SteamClient
1112

@@ -181,29 +182,6 @@ def handle_drm_file():
181182

182183
if drm_proc.returncode != 0:
183184

184-
def finish_handling_drm_fail():
185-
if not drm_output.exists() and drm_download_failed:
186-
input(
187-
f"DRM download failed, download the file from https://partner.steamgames.com/apps/drm/{drm_app_id} and place it at {drm_output}, then press enter"
188-
)
189-
handled_drm = False
190-
if drm_output.exists():
191-
handle_drm_file()
192-
handled_drm = True
193-
if (
194-
drm_proc.returncode != 0
195-
and not drm_download_failed
196-
or drm_download_failed
197-
and not handled_drm
198-
):
199-
if drm_output.exists():
200-
pbtools.remove_file(str(drm_output))
201-
pbtools.error_state(
202-
f"DRM wrapping failed: exit code {drm_proc.returncode}",
203-
hush=True,
204-
term=True,
205-
)
206-
207185
if drm_download_failed and drm_id:
208186
steamclient = SteamWorker()
209187
steamclient.login(
@@ -212,30 +190,47 @@ def finish_handling_drm_fail():
212190
True,
213191
)
214192

215-
def wait_for_drm_download():
216-
time.sleep(5)
217-
resp = steamclient.steam.send_um_and_wait(
218-
"PartnerApps.Download#1",
219-
{
220-
"file_id": f"/{drm_app_id}/{drm_id}/{drm_exe_path.name}_{drm_id}",
221-
"app_id": int(drm_app_id),
222-
},
223-
)
224-
url = resp.body.download_url
225-
if url:
226-
with urllib.request.urlopen(url) as response, open(
227-
str(drm_output), "wb"
228-
) as out_file:
229-
shutil.copyfileobj(response, out_file)
230-
steamclient.close()
231-
finish_handling_drm_fail()
232-
233-
if steamclient.logged_on_once:
234-
wait_for_drm_download()
235-
else:
236-
steamclient.steam.once("logged_on", wait_for_drm_download)
237-
else:
238-
finish_handling_drm_fail()
193+
while not steamclient.logged_on_once:
194+
# TODO: doesn't work, "this operation would block forever"
195+
# steamclient.steam.wait_event("logged_on")
196+
gevent.sleep(1)
197+
198+
resp = steamclient.steam.send_um_and_wait(
199+
"PartnerApps.Download#1",
200+
{
201+
"file_id": f"/{drm_app_id}/{drm_id}/{drm_exe_path.name}_{drm_id}",
202+
"app_id": int(drm_app_id),
203+
},
204+
)
205+
url = resp.body.download_url
206+
if url:
207+
with urllib.request.urlopen(url) as response, open(
208+
str(drm_output), "wb"
209+
) as out_file:
210+
shutil.copyfileobj(response, out_file)
211+
steamclient.close()
212+
213+
if not drm_output.exists() and drm_download_failed:
214+
input(
215+
f"DRM download failed, download the file from https://partner.steamgames.com/apps/drm/{drm_app_id} and place it at {drm_output}, then press enter"
216+
)
217+
handled_drm = False
218+
if drm_output.exists():
219+
handle_drm_file()
220+
handled_drm = True
221+
if (
222+
drm_proc.returncode != 0
223+
and not drm_download_failed
224+
or drm_download_failed
225+
and not handled_drm
226+
):
227+
if drm_output.exists():
228+
pbtools.remove_file(str(drm_output))
229+
pbtools.error_state(
230+
f"DRM wrapping failed: exit code {drm_proc.returncode}",
231+
hush=True,
232+
term=True,
233+
)
239234
else:
240235
handle_drm_file()
241236
else:

pbsync/__init__.py

Whitespace-only changes.

pbsync/__main__.py

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
from gevent import monkey
2+
3+
monkey.patch_all()
4+
15
import argparse
26
import multiprocessing
37
import os

0 commit comments

Comments
 (0)