Skip to content

Commit d760f29

Browse files
author
lijiahao
committed
fix xcloud error
1 parent 33a76af commit d760f29

File tree

12 files changed

+112
-53
lines changed

12 files changed

+112
-53
lines changed

app/background.js

Lines changed: 29 additions & 16 deletions
Large diffs are not rendered by default.

app/preload.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

flatpak/io.github.Geocld.XStreamingDesktop.metainfo.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,14 @@
3434
</screenshot>
3535
</screenshots>
3636
<releases>
37+
<release version="1.8.6" date="2025-09-02">
38+
<description>
39+
<ul>
40+
<li>Fixed:</li>
41+
<li>xCloud error when fetch games.</li>
42+
</ul>
43+
</description>
44+
</release>
3745
<release version="1.8.5" date="2025-08-18">
3846
<description>
3947
<ul>

main/authentication.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,11 @@ export default class Authentication {
166166
.then(streamingTokens => {
167167
// log.info('streamingTokens:', streamingTokens);
168168
this._xal.getWebToken(this._tokenStore).then(webToken => {
169+
if (streamingTokens.xCloudToken !== null) {
170+
this._appLevel = 2;
171+
} else {
172+
this._appLevel = 1;
173+
}
169174
saveStreamToken(streamingTokens);
170175
saveWebToken(webToken);
171176
this._application.authenticationCompleted(streamingTokens, webToken);
@@ -267,7 +272,7 @@ export default class Authentication {
267272
clearWebToken();
268273
this._tokenStore.clear();
269274
dialog.showMessageBox({
270-
message: '[startSilentFlow() - 272] refreshTokens error:' + e.message,
275+
message: '[startSilentFlow() - 275] refreshTokens error:' + e.message,
271276
type: "error",
272277
});
273278
});

main/helpers/titlemanager.ts

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,14 @@ export default class TitleManager {
7777
}
7878
resolve(officialTitles);
7979
})
80-
.catch(e => {
80+
.catch(() => {
8181
resolve([]);
8282
});
8383
});
8484
}
8585

8686
getGamePassProducts(titles) {
87-
return new Promise((resolve, reject) => {
87+
return new Promise((resolve) => {
8888
const productIdQueue = [];
8989
const v2TitleMap = {};
9090
if (!Array.isArray(titles)) {
@@ -108,17 +108,27 @@ export default class TitleManager {
108108
const mergeProductIds = [
109109
...new Set([...productIdQueue, ...officialTitles]),
110110
];
111-
112-
this._http.post('catalog.gamepass.com', `/v3/products?market=US&language=${lang}&hydration=RemoteLowJade0`, { // RemoteLowJade0
113-
'Products': mergeProductIds,
114-
}, {
115-
'ms-cv': 0,
116-
'calling-app-name': 'Xbox Cloud Gaming Web',
117-
'calling-app-version': '24.17.63',
118-
119-
}).then((result: any) => {
120-
if (result && result.Products) {
121-
const products = result.Products;
111+
112+
axios
113+
.post(
114+
`https://catalog.gamepass.com/v3/products?market=US&language=${lang}&hydration=RemoteLowJade0`,
115+
{
116+
Products: mergeProductIds,
117+
},
118+
{
119+
headers: {
120+
Accept: 'application/json',
121+
'Content-Type': 'application/json',
122+
'ms-cv': 0,
123+
'calling-app-name': 'Xbox Cloud Gaming Web',
124+
'calling-app-version': '24.17.63',
125+
},
126+
},
127+
)
128+
.then(res => {
129+
console.log('POST catalog.gamepass.com/v3/products success')
130+
if (res.data && res.data.Products) {
131+
const products = res.data.Products;
122132
let mergedTitles = [];
123133
for (const key in products) {
124134
if (v2TitleMap[key]) {
@@ -141,14 +151,16 @@ export default class TitleManager {
141151
return item.titleId || item.XCloudTitleId;
142152
});
143153
resolve(mergedTitles);
144-
} else {
154+
} else {
145155
resolve([]);
146-
}
147-
}).catch(e => {
148-
console.log('getGamePassProducts error:', e);
149-
reject(e);
156+
}
157+
})
158+
.catch(e => {
159+
console.log('getGamePassProducts error:', e);
160+
// reject(e);
161+
resolve([])
162+
});
150163
});
151-
});
152164
})
153165
}
154166

main/ipc/xcloud.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,23 @@ export default class IpcxCloud extends IpcBase {
3232

3333
getRecentTitles() {
3434
const streamingTokens = this._application.streamingTokens;
35-
const _xCloudApi = new xCloudApi(
35+
36+
let _xCloudApi = new xCloudApi(
3637
this._application,
37-
streamingTokens.xCloudToken.getDefaultRegion().baseUri.substring(8),
38-
streamingTokens.xCloudToken.data.gsToken,
39-
"cloud"
38+
'ckr.core.gssv-play-prod.xboxlive.com',
39+
'',
40+
'cloud'
4041
);
42+
43+
if (streamingTokens.xCloudToken) {
44+
_xCloudApi = new xCloudApi(
45+
this._application,
46+
streamingTokens.xCloudToken.getDefaultRegion().baseUri.substring(8),
47+
streamingTokens.xCloudToken.data.gsToken,
48+
'cloud'
49+
);
50+
}
51+
4152
return _xCloudApi.getRecentTitles();
4253
}
4354

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"private": true,
33
"name": "xstreaming",
44
"description": "xstreaming",
5-
"version": "1.8.5",
5+
"version": "1.8.6",
66
"author": "Geocld <lijiahao5372@gmail.com>",
77
"main": "app/background.js",
88
"scripts": {

renderer/components/ActionBar.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
DropdownMenu,
77
DropdownItem,
88
} from "@heroui/react";
9-
// import Ipc from "../lib/ipc";
9+
import Ipc from "../lib/ipc";
1010
import { useSettings } from "../context/userContext";
1111

1212
const CONNECTED = 'connected';
@@ -52,9 +52,9 @@ function ActionBar(props) {
5252
props.onLongPressNexus && props.onLongPressNexus();
5353
};
5454

55-
// const handleToggleFullscreen = () => {
56-
// Ipc.send('app', 'toggleFullscreen')
57-
// }
55+
const handleToggleFullscreen = () => {
56+
Ipc.send('app', 'toggleFullscreen')
57+
}
5858

5959
return (
6060
<div id="actionBar">
@@ -121,9 +121,9 @@ function ActionBar(props) {
121121
)
122122
}
123123

124-
{/* <DropdownItem key="fullscreen" onClick={handleToggleFullscreen}>
124+
<DropdownItem key="fullscreen" onClick={handleToggleFullscreen}>
125125
{t("Toggle fullscreen")}
126-
</DropdownItem> */}
126+
</DropdownItem>
127127

128128
{
129129
(props.connectState === CONNECTED && settings.power_on && props.type !== 'cloud') && (

renderer/components/Nav.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ const Nav = ({ current, isLogined }) => {
148148
<DropdownItem key="logout" color="danger" onClick={handleLouout}>
149149
{t('Logout')}
150150
</DropdownItem>
151-
<DropdownItem key="exit" color="danger" onClick={handleExit}>
151+
<DropdownItem key="exit" className="text-danger" color="danger" onClick={handleExit}>
152152
{t('Exit')}
153153
</DropdownItem>
154154
</DropdownMenu>

renderer/components/TitleItem.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ function TitleItem(props) {
2525
titleItem.Image_Tile && (<Image
2626
alt="Card background"
2727
className="object-cover rounded-xl"
28+
loading={'lazy'}
2829
src={"https:" + titleItem.Image_Tile.URL}
2930
width={270}
3031
/>)
@@ -52,7 +53,7 @@ function TitleItem(props) {
5253
</div>
5354
</CardBody>
5455
<CardFooter className="pt-0 px-4 flex-col items-start">
55-
<h4 className="font-bold">{titleItem.ProductTitle}</h4>
56+
<p className="text-sm font-bold">{titleItem.ProductTitle}</p>
5657
</CardFooter>
5758
</Card>
5859
) : null}

0 commit comments

Comments
 (0)