1
0
Fork 0
mirror of synced 2024-06-26 10:11:19 +12:00

Add ProtonDB in UninstalledInfo (Test/Beta)

This commit is contained in:
Dummerle 2021-05-11 14:30:08 +02:00
parent 2d3c1bf295
commit 6a3166ceff
5 changed files with 140 additions and 9 deletions

View file

@ -3,6 +3,7 @@ from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QCheckBox, QLineE
from qtawesome import icon
from rare.components.tabs.games.game_info import InfoTabs
from rare.components.tabs.games.game_info.uninstalled_info import UninstalledInfo
from rare.components.tabs.games.game_list import GameList
from rare.components.tabs.games.import_widget import ImportWidget
from rare.utils.extra_widgets import SelectViewWidget
@ -28,12 +29,21 @@ class GameTab(QWidget):
self.layout.addWidget(self.import_widget)
self.import_widget.back_button.clicked.connect(lambda: self.layout.setCurrentIndex(0))
self.import_widget.update_list.connect(self.update_list)
self.uninstalled_info_widget = UninstalledInfo(core)
self.layout.addWidget(self.uninstalled_info_widget)
self.uninstalled_info_widget.back.clicked.connect(lambda: self.layout.setCurrentIndex(0))
self.setLayout(self.layout)
def update_list(self):
self.default_widget.game_list.update_list(self.default_widget.head_bar.view.isChecked())
self.layout.setCurrentIndex(0)
def show_uninstalled(self, app_name):
self.uninstalled_info_widget.update_game(app_name)
self.layout.setCurrentIndex(3)
def show_info(self, app_name):
self.game_info.update_game(app_name, self.default_widget.game_list.dlcs)
self.game_info.setCurrentIndex(1)

View file

@ -1,3 +1,4 @@
import json
import os
from PyQt5.QtCore import Qt, pyqtSignal
@ -62,8 +63,18 @@ class GameInfo(QScrollArea):
verify_game = pyqtSignal(str)
verify_threads = {}
grade_table = json.load(open(os.path.expanduser("~/.cache/rare/game_list.json")))
def __init__(self, core: LegendaryCore, parent):
super(GameInfo, self).__init__(parent=parent)
self.ratings = {"platinum": self.tr("Platimum"),
"gold": self.tr("Gold"),
"silver": self.tr("Silver"),
"bronze": self.tr("Bronze"),
"fail": self.tr("Could not get grade from ProtonDB"),
"pending": "Not enough reports"}
self.widget = QWidget()
self.core = core
self.layout = QVBoxLayout()
@ -88,6 +99,11 @@ class GameInfo(QScrollArea):
self.app_name.setTextInteractionFlags(Qt.TextSelectableByMouse)
right_layout.addWidget(self.app_name)
if os.name != "nt":
self.grade = QLabel("Error")
right_layout.addWidget(self.grade)
self.grade.setTextInteractionFlags(Qt.TextSelectableByMouse)
self.version = QLabel("Error")
self.version.setTextInteractionFlags(Qt.TextSelectableByMouse)
right_layout.addWidget(self.version)
@ -184,6 +200,12 @@ class GameInfo(QScrollArea):
self.tr("Install size: ") + get_size(self.igame.install_size))
self.install_path.setText(self.tr("Install path: ") + self.igame.install_path)
if os.name != "nt":
if grade := self.ratings.get(self.grade_table[app_name].get("grade")):
self.grade.setText(self.tr("ProtonDB rating: ") + grade)
else:
self.grade.setText(self.tr("ProtonDB rating: Error"))
if len(self.verify_threads.keys()) == 0 or not self.verify_threads.get(app_name):
self.game_actions.verify_widget.setCurrentIndex(0)
elif self.verify_threads.get(app_name):

View file

@ -0,0 +1,51 @@
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QLabel
from custom_legendary.core import LegendaryCore
from custom_legendary.models.game import Game
class UninstalledInfo(QWidget):
game: Game
install_game = pyqtSignal(str)
def __init__(self, core: LegendaryCore):
super(UninstalledInfo, self).__init__()
self.layout = QVBoxLayout()
self.core = core
self.top_layout = QHBoxLayout()
self.image = QLabel()
self.top_layout.addWidget(self.image)
self.right_layout = QVBoxLayout()
self.back = QPushButton(self.tr("Back"))
self.right_layout.addWidget(self.back)
self.title = QLabel("Error")
self.right_layout.addWidget(self.title)
self.app_name = QLabel("Error")
self.right_layout.addWidget(self.app_name)
self.rating = QLabel("Rating: Error")
self.right_layout.addWidget(self.rating)
self.install_button = QPushButton(self.tr("Install"))
self.right_layout.addWidget(self.install_button)
self.top_layout.addLayout(self.right_layout)
self.layout.addLayout(self.top_layout)
self.setLayout(self.layout)
def update_game(self, app_name):
self.game = self.core.get_game(app_name)
self.title.setText(f"<h2>{self.game.app_title}</h2>")
self.app_name.setText(app_name)
# TODO get grade (Pull request)

View file

@ -24,6 +24,7 @@ class GameList(QStackedWidget):
update_game = pyqtSignal()
game_exited = pyqtSignal(str)
game_started = pyqtSignal(str)
show_uninstalled_info = pyqtSignal(str)
running_games = []
active_game = ("", 0)

View file

@ -1,10 +1,15 @@
import logging
import os
import requests
import json
from datetime import date
file = "game_list.json"
url = "https://api.steampowered.com/ISteamApps/GetAppList/v2/"
replace_chars = ",;.:-_ "
file = os.path.expanduser("~/.cache/rare/game_list.json")
url = "https://api.steampowered.com/ISteamApps/GetAppList/v2/"
def get_id(game_name):
global file
@ -18,17 +23,56 @@ def get_id(game_name):
return game_list[game_name.lower()]
def upgrade_content(): # this function uploads the ids database, aka game_list.json
def upgrade_content(games: list): # this function uploads the ids database, aka game_list.json
global url
global file
response = requests.get(url)
content = json.loads(response.text)
table = open(file, 'w')
game_list = {}
game_list = {} # {CrabEA: {id: 1234, grade: platinum}, ..}
for game in content['applist']['apps']:
game_list[game['name'].lower()] = game['appid']
steam_games = {}
for i in content["applist"]["apps"]:
name: str = i["name"].lower()
for c in replace_chars:
name = name.replace(c, "")
name = name.encode("ascii", "ignore").decode("ascii", "ignore")
steam_games[name] = i["appid"]
for i in games:
if i.app_title.lower() in steam_games.keys():
game_list[i.app_name] = {}
game_list[i.app_name]["id"] = steam_games[i.app_title.lower()]
continue
else:
app_title = i.app_title.lower()
app_title = app_title.encode("ascii", "ignore").decode("ascii", "ignore")
for c in replace_chars:
app_title = app_title.replace(c, "")
if app_title in steam_games.keys():
game_list[i.app_name] = {}
game_list[i.app_name]["id"] = steam_games[app_title]
else:
for game in steam_games:
if app_title.startswith(game):
game_list[i.app_name] = {}
game_list[i.app_name]["id"] = steam_games[game]
for game in game_list:
try:
grade = get_grade(game_list[game]["id"])
except json.decoder.JSONDecodeError as e:
logging.error(str(e))
game_list[game]["grade"] = "fail"
print(game) # debug
else:
game_list[game]["grade"] = grade
print(game_list)
# print(game_list)
# for game in content['applist']['apps']:
# game_list[game['name'].lower()] = game['appid']
# uploding date on json
today = date.today()
@ -36,11 +80,13 @@ def upgrade_content(): # this function uploads the ids database, aka game_list.j
for i in "ymd":
game_list["data"][i] = today.strftime('%' + i)
table = open(file, 'w')
json.dump(game_list, table)
table.close()
def check_time(): # this function check if it's time to update
def check_time(): # this function check if it's time to update
global file
text = open(file, 'r')
json_table = json.load(text)
@ -67,6 +113,7 @@ def get_grade(steam_code):
text = res.text
lista = json.loads(text)
# print(lista['tier']) # just for debug pourpouses!!!
return lista['tier']