Skip to content

Commit 2b57343

Browse files
committed
fix #944 click user game announcement link if game has ended
click on player live game announcement when game had ended, let to fa starting with error message. Now it will give a message about game ended, with an option to search users replays in Vault click on host/join game announcent when the game has already started, now will gives a message with an option to watch the live game
1 parent e34dd0b commit 2b57343

File tree

3 files changed

+34
-7
lines changed

3 files changed

+34
-7
lines changed

src/chat/channel.py

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from fa.replay import replay
2-
2+
from model.game import GameState
33
import util
44
from PyQt5 import QtWidgets, QtCore, QtGui
55
import time
@@ -206,10 +206,36 @@ def pingWindow(self):
206206
@QtCore.pyqtSlot(QtCore.QUrl)
207207
def openUrl(self, url):
208208
logger.debug("Clicked on URL: " + url.toString())
209-
if url.scheme() == "faflive":
210-
replay(url)
211-
elif url.scheme() == "fafgame":
212-
self.chat_widget.client.joinGameFromURL(url)
209+
if url.scheme() == "faflive" or url.scheme() == "fafgame":
210+
replay_id = int(QtCore.QUrlQuery(url).queryItemValue("uid"))
211+
if replay_id in self.chat_widget.client.gameset:
212+
game = self.chat_widget.client.gameset[replay_id]
213+
if game.state == GameState.OPEN: # and url.scheme() == "fafgame"
214+
self.chat_widget.client.joinGameFromURL(url)
215+
elif game.state == GameState.PLAYING:
216+
if game.has_live_replay:
217+
if url.scheme() == "faflive" or QtWidgets.QMessageBox.question(
218+
QtWidgets.QApplication.activeWindow(), "Live Game started",
219+
"Would you like to join and watch the live game?",
220+
QtWidgets.QMessageBox.Yes,
221+
QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.Yes:
222+
replay(game.url(game.host_player.id))
223+
else:
224+
QtWidgets.QMessageBox.information(
225+
QtWidgets.QApplication.activeWindow(), "Live Game started",
226+
"But ... it is to early to join (5 minute delay)\n"
227+
"(Wait for the user/player status cross to turn silver)")
228+
elif url.scheme() == "faflive" and QtWidgets.QMessageBox.question(
229+
QtWidgets.QApplication.activeWindow(), "Live Game ended",
230+
"Would you like to look for it in Replays?",
231+
QtWidgets.QMessageBox.Yes,
232+
QtWidgets.QMessageBox.No) == QtWidgets.QMessageBox.Yes:
233+
player = QtCore.QUrlQuery(url).queryItemValue("player")
234+
self.chat_widget.client.searchUserReplays(player)
235+
elif url.scheme() == "fafgame":
236+
QtWidgets.QMessageBox.information(
237+
QtWidgets.QApplication.activeWindow(), "Game ended",
238+
"Host has abandoned game or the game already ended")
213239
else:
214240
QtGui.QDesktopServices.openUrl(url)
215241

src/fa/replay.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ def replay(source, detach=False):
8787
if url.scheme() == "faflive":
8888
mod = QtCore.QUrlQuery(url).queryItemValue("mod")
8989
mapname = QtCore.QUrlQuery(url).queryItemValue("map")
90-
replay_id = url.path().split("/")[0]
90+
replay_id = QtCore.QUrlQuery(url).queryItemValue("uid")
9191
# whip the URL into shape so ForgedAllianceForever.exe understands it
9292
arg_url = QtCore.QUrl(url)
9393
arg_url.setScheme("gpgnet")

src/model/game.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,12 @@ def url(self, player_id):
231231
query = QUrlQuery()
232232
query.addQueryItem("map", self.mapname)
233233
query.addQueryItem("mod", self.featured_mod)
234+
query.addQueryItem("uid", str(self.uid))
235+
query.addQueryItem("player", str(self._playerset[player_id].login))
234236

235237
if self.state == GameState.OPEN:
236238
url.setScheme("fafgame")
237239
url.setPath("/" + str(player_id))
238-
query.addQueryItem("uid", str(self.uid))
239240
else:
240241
url.setScheme("faflive")
241242
url.setPath("/" + str(self.uid) + "/" + str(player_id) + ".SCFAreplay")

0 commit comments

Comments
 (0)