Some improvements
This commit is contained in:
parent
337b738599
commit
676c253a13
8 changed files with 114 additions and 144 deletions
|
@ -1,5 +1,3 @@
|
||||||
import webbrowser
|
|
||||||
|
|
||||||
from PyQt5.QtCore import QSize, pyqtSignal
|
from PyQt5.QtCore import QSize, pyqtSignal
|
||||||
from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction
|
from PyQt5.QtWidgets import QMenu, QTabWidget, QWidget, QWidgetAction
|
||||||
from qtawesome import icon
|
from qtawesome import icon
|
||||||
|
@ -26,32 +24,23 @@ class TabWidget(QTabWidget):
|
||||||
disabled_tab = 4 if not offline else 1
|
disabled_tab = 4 if not offline else 1
|
||||||
self.core = core
|
self.core = core
|
||||||
self.setTabBar(TabBar(disabled_tab))
|
self.setTabBar(TabBar(disabled_tab))
|
||||||
|
|
||||||
# Generate Tabs
|
# Generate Tabs
|
||||||
self.games_tab = GameTab(core, self, offline)
|
self.games_tab = GameTab(core, self, offline)
|
||||||
self.addTab(self.games_tab, self.tr("Games"))
|
self.addTab(self.games_tab, self.tr("Games"))
|
||||||
|
|
||||||
if not offline:
|
if not offline:
|
||||||
updates = self.games_tab.default_widget.game_list.updates
|
updates = self.games_tab.default_widget.game_list.updates
|
||||||
self.downloadTab = DownloadTab(core, updates, self)
|
self.downloadTab = DownloadTab(core, updates, self)
|
||||||
self.addTab(self.downloadTab, "Downloads" + (" (" + str(len(updates)) + ")" if len(updates) != 0 else ""))
|
self.addTab(self.downloadTab, "Downloads" + (" (" + str(len(updates)) + ")" if len(updates) != 0 else ""))
|
||||||
|
|
||||||
self.cloud_saves = SyncSaves(core, self)
|
self.cloud_saves = SyncSaves(core, self)
|
||||||
self.addTab(self.cloud_saves, "Cloud Saves")
|
self.addTab(self.cloud_saves, "Cloud Saves")
|
||||||
|
|
||||||
self.store = Shop()
|
self.store = Shop()
|
||||||
self.addTab(self.store, self.tr("Store"))
|
self.addTab(self.store, self.tr("Store (Beta)"))
|
||||||
|
|
||||||
self.settings = SettingsTab(core, self)
|
self.settings = SettingsTab(core, self)
|
||||||
|
|
||||||
# Space Tab
|
# Space Tab
|
||||||
self.addTab(QWidget(), "")
|
self.addTab(QWidget(), "")
|
||||||
self.setTabEnabled(disabled_tab, False)
|
self.setTabEnabled(disabled_tab, False)
|
||||||
# Buttons
|
# Button
|
||||||
store_button = TabButtonWidget(core, 'fa.shopping-cart', 'Epic Games Store')
|
|
||||||
store_button.pressed.connect(lambda: webbrowser.open("https://www.epicgames.com/store"))
|
|
||||||
self.tabBar().setTabButton(disabled_tab, self.tabBar().RightSide, store_button)
|
|
||||||
|
|
||||||
self.account = QWidget()
|
self.account = QWidget()
|
||||||
self.addTab(self.account, "")
|
self.addTab(self.account, "")
|
||||||
self.setTabEnabled(disabled_tab + 1, False)
|
self.setTabEnabled(disabled_tab + 1, False)
|
||||||
|
@ -151,8 +140,7 @@ class TabWidget(QTabWidget):
|
||||||
self.setTabText(1, "Downloads" + ((" (" + str(downloads) + ")") if downloads != 0 else ""))
|
self.setTabText(1, "Downloads" + ((" (" + str(downloads) + ")") if downloads != 0 else ""))
|
||||||
self.downloadTab.update_text.setVisible(len(self.downloadTab.update_widgets) == 0)
|
self.downloadTab.update_text.setVisible(len(self.downloadTab.update_widgets) == 0)
|
||||||
|
|
||||||
# Update gamelist and set text of Downlaods to "Downloads"
|
# Update gamelist and set text of Downloads to "Downloads"
|
||||||
|
|
||||||
def dl_finished(self, update_list):
|
def dl_finished(self, update_list):
|
||||||
if update_list[0]:
|
if update_list[0]:
|
||||||
self.games_tab.default_widget.game_list.update_list(update_list[1])
|
self.games_tab.default_widget.game_list.update_list(update_list[1])
|
||||||
|
|
|
@ -22,6 +22,7 @@ class Shop(QStackedWidget):
|
||||||
self.addWidget(self.info)
|
self.addWidget(self.info)
|
||||||
self.info.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
|
self.info.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
|
||||||
|
|
||||||
|
self.search_results.back_button.clicked.connect(lambda: self.setCurrentIndex(0))
|
||||||
self.shop.show_info.connect(self.show_info)
|
self.shop.show_info.connect(self.show_info)
|
||||||
self.shop.show_game.connect(self.show_game_info)
|
self.shop.show_game.connect(self.show_game_info)
|
||||||
|
|
||||||
|
@ -37,4 +38,3 @@ class Shop(QStackedWidget):
|
||||||
def show_info(self, data):
|
def show_info(self, data):
|
||||||
self.search_results.show_results(data)
|
self.search_results.show_results(data)
|
||||||
self.setCurrentIndex(1)
|
self.setCurrentIndex(1)
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ class SearchResults(QWidget):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(SearchResults, self).__init__()
|
super(SearchResults, self).__init__()
|
||||||
self.main_layout = QVBoxLayout()
|
self.main_layout = QVBoxLayout()
|
||||||
self.back_button = QPushButton()
|
self.back_button = QPushButton(self.tr("Back"))
|
||||||
self.main_layout.addWidget(self.back_button)
|
self.main_layout.addWidget(self.back_button)
|
||||||
self.main_layout.addWidget(self.back_button)
|
self.main_layout.addWidget(self.back_button)
|
||||||
self.result_area = QScrollArea()
|
self.result_area = QScrollArea()
|
||||||
|
|
|
@ -36,7 +36,7 @@ class ShopGame:
|
||||||
else:
|
else:
|
||||||
self.links = []
|
self.links = []
|
||||||
self.languages = langs
|
self.languages = langs
|
||||||
self.reqs = reqs # {"Betriebssystem":win7, processor:i9 9900k, ram...}; Note: name from language
|
self.reqs = reqs
|
||||||
self.publisher = publisher
|
self.publisher = publisher
|
||||||
self.developer = developer
|
self.developer = developer
|
||||||
self.price = original_price
|
self.price = original_price
|
||||||
|
@ -44,7 +44,6 @@ class ShopGame:
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_json(cls, api_data: dict, search_data: dict):
|
def from_json(cls, api_data: dict, search_data: dict):
|
||||||
print(api_data)
|
|
||||||
if isinstance(api_data, list):
|
if isinstance(api_data, list):
|
||||||
for product in api_data:
|
for product in api_data:
|
||||||
if product["_title"] == "home":
|
if product["_title"] == "home":
|
||||||
|
@ -66,8 +65,10 @@ class ShopGame:
|
||||||
for i, system in enumerate(api_data["data"]["requirements"]["systems"]):
|
for i, system in enumerate(api_data["data"]["requirements"]["systems"]):
|
||||||
tmp.reqs[system["systemType"]] = {}
|
tmp.reqs[system["systemType"]] = {}
|
||||||
for req in system["details"]:
|
for req in system["details"]:
|
||||||
|
try:
|
||||||
tmp.reqs[system["systemType"]][req["title"]] = (req["minimum"], req["recommended"])
|
tmp.reqs[system["systemType"]][req["title"]] = (req["minimum"], req["recommended"])
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
tmp.publisher = api_data["data"]["meta"].get("publisher", "undefined")
|
tmp.publisher = api_data["data"]["meta"].get("publisher", "undefined")
|
||||||
tmp.developer = api_data["data"]["meta"].get("developer", "undefined")
|
tmp.developer = api_data["data"]["meta"].get("developer", "undefined")
|
||||||
tmp.price = search_data['price']['totalPrice']['fmtPrice']['originalPrice']
|
tmp.price = search_data['price']['totalPrice']['fmtPrice']['originalPrice']
|
||||||
|
|
|
@ -6,17 +6,18 @@ from json import JSONDecodeError
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from PyQt5 import QtGui
|
from PyQt5 import QtGui
|
||||||
from PyQt5.QtCore import Qt, pyqtSignal, QUrl, QByteArray, QJsonDocument, QJsonParseError, \
|
from PyQt5.QtCore import Qt, pyqtSignal, QUrl, QJsonDocument, QJsonParseError, \
|
||||||
QStringListModel
|
QStringListModel
|
||||||
from PyQt5.QtGui import QPixmap
|
from PyQt5.QtGui import QPixmap
|
||||||
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
|
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
|
||||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QHBoxLayout, QCompleter
|
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QCompleter, QGroupBox, QHBoxLayout
|
||||||
|
|
||||||
from rare.ui.components.tabs.store.store import Ui_ShopWidget
|
from rare.ui.components.tabs.store.store import Ui_ShopWidget
|
||||||
from rare.utils.extra_widgets import WaitingSpinner, ImageLabel
|
from rare.utils.extra_widgets import WaitingSpinner, ImageLabel, FlowLayout
|
||||||
from rare.utils.utils import get_lang
|
from rare.utils.utils import get_lang
|
||||||
|
|
||||||
|
|
||||||
|
# noinspection PyAttributeOutsideInit,PyBroadException
|
||||||
class ShopWidget(QWidget, Ui_ShopWidget):
|
class ShopWidget(QWidget, Ui_ShopWidget):
|
||||||
show_info = pyqtSignal(list)
|
show_info = pyqtSignal(list)
|
||||||
show_game = pyqtSignal(dict)
|
show_game = pyqtSignal(dict)
|
||||||
|
@ -25,10 +26,17 @@ class ShopWidget(QWidget, Ui_ShopWidget):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(ShopWidget, self).__init__()
|
super(ShopWidget, self).__init__()
|
||||||
self.setupUi(self)
|
self.setupUi(self)
|
||||||
self.search_results.setVisible(False)
|
|
||||||
self.manager = QNetworkAccessManager()
|
self.manager = QNetworkAccessManager()
|
||||||
|
self.free_games_widget = QWidget()
|
||||||
|
self.free_games_widget.setLayout(FlowLayout())
|
||||||
|
self.free_games_now = QGroupBox(self.tr("Free Games"))
|
||||||
|
self.free_games_now.setLayout(QHBoxLayout())
|
||||||
|
self.free_games_widget.layout().addWidget(self.free_games_now)
|
||||||
|
self.coming_free_games = QGroupBox(self.tr("Free Games next week"))
|
||||||
|
self.coming_free_games.setLayout(QHBoxLayout())
|
||||||
|
self.free_games_widget.layout().addWidget(self.coming_free_games)
|
||||||
self.free_games_stack.addWidget(WaitingSpinner())
|
self.free_games_stack.addWidget(WaitingSpinner())
|
||||||
self.free_games_stack.setCurrentIndex(1)
|
self.free_games_stack.addWidget(self.free_games_widget)
|
||||||
self.search.textChanged.connect(self.search_games)
|
self.search.textChanged.connect(self.search_games)
|
||||||
self.completer = QCompleter()
|
self.completer = QCompleter()
|
||||||
self.completer.setCaseSensitivity(Qt.CaseInsensitive)
|
self.completer.setCaseSensitivity(Qt.CaseInsensitive)
|
||||||
|
@ -45,8 +53,7 @@ class ShopWidget(QWidget, Ui_ShopWidget):
|
||||||
os.makedirs(self.path)
|
os.makedirs(self.path)
|
||||||
url = "https://store-site-backend-static.ak.epicgames.com/freeGamesPromotions"
|
url = "https://store-site-backend-static.ak.epicgames.com/freeGamesPromotions"
|
||||||
self.free_game_request = self.manager.get(QNetworkRequest(QUrl(url)))
|
self.free_game_request = self.manager.get(QNetworkRequest(QUrl(url)))
|
||||||
self.free_game_request.readyRead.connect(self.add_free_games)
|
self.free_game_request.finished.connect(self.add_free_games)
|
||||||
self.free_game_request.finished.connect(self.free_game_request.deleteLater if self.free_game_request else None)
|
|
||||||
|
|
||||||
# free_games = api_utils.get_free_games()
|
# free_games = api_utils.get_free_games()
|
||||||
|
|
||||||
|
@ -71,20 +78,30 @@ class ShopWidget(QWidget, Ui_ShopWidget):
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
# parse datetime
|
# parse datetime
|
||||||
|
try:
|
||||||
end_date = datetime.datetime.strptime(
|
end_date = datetime.datetime.strptime(
|
||||||
game["promotions"].get("promotionalOffers", game["promotions"].get("upcomingPromotionalOffers"))[0][
|
game["promotions"]["upcomingPromotionalOffers"][0]["promotionalOffers"][0]["endDate"],
|
||||||
"promotionalOffers"][0]["endDate"],
|
|
||||||
'%Y-%m-%dT%H:%M:%S.%fZ')
|
'%Y-%m-%dT%H:%M:%S.%fZ')
|
||||||
|
except Exception:
|
||||||
|
try:
|
||||||
|
end_date = datetime.datetime.strptime(
|
||||||
|
game["promotions"]["promotionalOffers"][0]["promotionalOffers"][0]["endDate"],
|
||||||
|
'%Y-%m-%dT%H:%M:%S.%fZ')
|
||||||
|
except Exception:
|
||||||
|
continue
|
||||||
|
try:
|
||||||
start_date = datetime.datetime.strptime(
|
start_date = datetime.datetime.strptime(
|
||||||
game["promotions"].get("promotionalOffers", game["promotions"].get("upcomingPromotionalOffers"))[0][
|
game["promotions"]["upcomingPromotionalOffers"][0]["promotionalOffers"][0]["startDate"],
|
||||||
"promotionalOffers"][0]["startDate"],
|
|
||||||
'%Y-%m-%dT%H:%M:%S.%fZ')
|
'%Y-%m-%dT%H:%M:%S.%fZ')
|
||||||
except IndexError:
|
except Exception:
|
||||||
print("index error")
|
try:
|
||||||
continue
|
start_date = datetime.datetime.strptime(
|
||||||
except KeyError:
|
game["promotions"]["promotionalOffers"][0]["promotionalOffers"][0]["startDate"],
|
||||||
print("keyerror")
|
'%Y-%m-%dT%H:%M:%S.%fZ')
|
||||||
|
except Exception as e:
|
||||||
|
print(e)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
except TypeError:
|
except TypeError:
|
||||||
print("type error")
|
print("type error")
|
||||||
continue
|
continue
|
||||||
|
@ -95,30 +112,29 @@ class ShopWidget(QWidget, Ui_ShopWidget):
|
||||||
|
|
||||||
for free_game in free_games_now:
|
for free_game in free_games_now:
|
||||||
w = GameWidget(free_game, self.path)
|
w = GameWidget(free_game, self.path)
|
||||||
w.show_info.connect(lambda x: self.search_games(x, True))
|
w.show_info.connect(self.show_game.emit)
|
||||||
self.free_game_now.layout().addWidget(w)
|
self.free_games_now.layout().addWidget(w)
|
||||||
self.free_game_widgets.append(w)
|
self.free_game_widgets.append(w)
|
||||||
self.free_game_group_box_2.setMinimumHeight(200)
|
|
||||||
|
|
||||||
|
self.free_games_now.layout().addStretch(1)
|
||||||
for free_game in coming_free_games:
|
for free_game in coming_free_games:
|
||||||
w = GameWidget(free_game, self.path)
|
w = GameWidget(free_game, self.path)
|
||||||
if free_game["title"] != "Mystery Game":
|
if free_game["title"] != "Mystery Game":
|
||||||
w.show_info.connect(self.show_info)
|
w.show_info.connect(self.show_game.emit)
|
||||||
self.comming_free_game.layout().addWidget(w)
|
self.coming_free_games.layout().addWidget(w)
|
||||||
self.free_game_widgets.append(w)
|
self.free_game_widgets.append(w)
|
||||||
self.free_games_stack.setCurrentIndex(0)
|
self.coming_free_games.layout().addStretch(1)
|
||||||
|
# self.coming_free_games.setFixedWidth(int(40 + len(coming_free_games) * 300))
|
||||||
|
self.free_games_stack.setCurrentIndex(1)
|
||||||
|
self.free_game_request.deleteLater()
|
||||||
|
|
||||||
def search_games(self, text, show_direct=False):
|
def search_games(self, text, show_direct=False):
|
||||||
if text == "":
|
if text == "":
|
||||||
self.search_results.setVisible(False)
|
self.search_results.setVisible(False)
|
||||||
else:
|
else:
|
||||||
locale = get_lang()
|
locale = get_lang()
|
||||||
payload = QByteArray()
|
|
||||||
payload.append(
|
|
||||||
"query=query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, $keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, $sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean = false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, $effectiveDate: String) {\n Catalog {\n searchStore(\n allowCountries: $allowCountries\n category: $category\n count: $count\n country: $country\n keywords: $keywords\n locale: $locale\n namespace: $namespace\n itemNs: $itemNs\n sortBy: $sortBy\n sortDir: $sortDir\n releaseDate: $releaseDate\n start: $start\n tag: $tag\n priceRange: $priceRange\n freeGame: $freeGame\n onSale: $onSale\n effectiveDate: $effectiveDate\n ) {\n elements {\n title\n id\n namespace\n description\n effectiveDate\n keyImages {\n type\n url\n }\n currentPrice\n seller {\n id\n name\n }\n productSlug\n urlSlug\n url\n tags {\n id\n }\n items {\n id\n namespace\n }\n customAttributes {\n key\n value\n }\n categories {\n path\n }\n catalogNs @include(if: $withMapping) {\n mappings(pageType: \"productHome\") {\n pageSlug\n pageType\n }\n }\n offerMappings @include(if: $withMapping) {\n pageSlug\n pageType\n }\n price(country: $country) @include(if: $withPrice) {\n totalPrice {\n discountPrice\n originalPrice\n voucherDiscount\n discount\n currencyCode\n currencyInfo {\n decimals\n }\n fmtPrice(locale: $locale) {\n originalPrice\n discountPrice\n intermediatePrice\n }\n }\n lineOffers {\n appliedRules {\n id\n endDate\n discountSetting {\n discountType\n }\n }\n }\n }\n promotions(category: $category) @include(if: $withPromotions) {\n promotionalOffers {\n promotionalOffers {\n startDate\n endDate\n discountSetting {\n discountType\n discountPercentage\n }\n }\n }\n upcomingPromotionalOffers {\n promotionalOffers {\n startDate\n endDate\n discountSetting {\n discountType\n discountPercentage\n }\n }\n }\n }\n }\n paging {\n count\n total\n }\n }\n }\n}\n")
|
|
||||||
|
|
||||||
payload = json.dumps({
|
payload = json.dumps({
|
||||||
"query": "query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, $keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, $sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean = false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, $effectiveDate: String) {\n Catalog {\n searchStore(\n allowCountries: $allowCountries\n category: $category\n count: $count\n country: $country\n keywords: $keywords\n locale: $locale\n namespace: $namespace\n itemNs: $itemNs\n sortBy: $sortBy\n sortDir: $sortDir\n releaseDate: $releaseDate\n start: $start\n tag: $tag\n priceRange: $priceRange\n freeGame: $freeGame\n onSale: $onSale\n effectiveDate: $effectiveDate\n ) {\n elements {\n title\n id\n namespace\n description\n effectiveDate\n keyImages {\n type\n url\n }\n currentPrice\n seller {\n id\n name\n }\n productSlug\n urlSlug\n url\n tags {\n id\n }\n items {\n id\n namespace\n }\n customAttributes {\n key\n value\n }\n categories {\n path\n }\n catalogNs @include(if: $withMapping) {\n mappings(pageType: \"productHome\") {\n pageSlug\n pageType\n }\n }\n offerMappings @include(if: $withMapping) {\n pageSlug\n pageType\n }\n price(country: $country) @include(if: $withPrice) {\n totalPrice {\n discountPrice\n originalPrice\n voucherDiscount\n discount\n currencyCode\n currencyInfo {\n decimals\n }\n fmtPrice(locale: $locale) {\n originalPrice\n discountPrice\n intermediatePrice\n }\n }\n lineOffers {\n appliedRules {\n id\n endDate\n discountSetting {\n discountType\n }\n }\n }\n }\n promotions(category: $category) @include(if: $withPromotions) {\n promotionalOffers {\n promotionalOffers {\n startDate\n endDate\n discountSetting {\n discountType\n discountPercentage\n }\n }\n }\n upcomingPromotionalOffers {\n promotionalOffers {\n startDate\n endDate\n discountSetting {\n discountType\n discountPercentage\n }\n }\n }\n }\n }\n paging {\n count\n total\n }\n }\n }\n}\n",
|
"query": query,
|
||||||
"variables": {"category": "games/edition/base|bundles/games|editors|software/edition/base", "count": 10,
|
"variables": {"category": "games/edition/base|bundles/games|editors|software/edition/base", "count": 10,
|
||||||
"country": "DE", "keywords": text, "locale": locale, "sortDir": "DESC",
|
"country": "DE", "keywords": text, "locale": locale, "sortDir": "DESC",
|
||||||
"allowCountries": locale.upper(),
|
"allowCountries": locale.upper(),
|
||||||
|
@ -127,7 +143,6 @@ class ShopWidget(QWidget, Ui_ShopWidget):
|
||||||
request = QNetworkRequest(QUrl("https://www.epicgames.com/graphql"))
|
request = QNetworkRequest(QUrl("https://www.epicgames.com/graphql"))
|
||||||
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
|
request.setHeader(QNetworkRequest.ContentTypeHeader, "application/json")
|
||||||
self.search_request = self.manager.post(request, payload)
|
self.search_request = self.manager.post(request, payload)
|
||||||
# self.search_request = self.manager.post(QNetworkRequest(QUrl("https://www.epicgames.com/graphql")), payload)
|
|
||||||
self.search_request.finished.connect(lambda: self.show_search_results(show_direct))
|
self.search_request.finished.connect(lambda: self.show_search_results(show_direct))
|
||||||
|
|
||||||
def show_search_results(self, show_direct=False):
|
def show_search_results(self, show_direct=False):
|
||||||
|
@ -167,16 +182,22 @@ class ShopWidget(QWidget, Ui_ShopWidget):
|
||||||
if self.data:
|
if self.data:
|
||||||
self.show_info.emit(self.data)
|
self.show_info.emit(self.data)
|
||||||
else:
|
else:
|
||||||
self.show_game.emit(self.data[0])
|
try:
|
||||||
|
result = self.data[0]
|
||||||
|
except IndexError:
|
||||||
|
print("error")
|
||||||
|
return
|
||||||
|
self.show_game.emit(result)
|
||||||
|
|
||||||
|
|
||||||
class GameWidget(QWidget):
|
class GameWidget(QWidget):
|
||||||
show_info = pyqtSignal(str)
|
show_info = pyqtSignal(dict)
|
||||||
|
|
||||||
def __init__(self, json_info, path: str):
|
def __init__(self, json_info, path: str):
|
||||||
super(GameWidget, self).__init__()
|
super(GameWidget, self).__init__()
|
||||||
self.layout = QVBoxLayout()
|
self.layout = QVBoxLayout()
|
||||||
self.image = ImageLabel()
|
self.image = ImageLabel()
|
||||||
|
self.json_info = json_info
|
||||||
for img in json_info["keyImages"]:
|
for img in json_info["keyImages"]:
|
||||||
if img["type"] in ["DieselStoreFrontWide", "VaultClosed"]:
|
if img["type"] in ["DieselStoreFrontWide", "VaultClosed"]:
|
||||||
width = 300
|
width = 300
|
||||||
|
@ -213,4 +234,36 @@ class GameWidget(QWidget):
|
||||||
self.setLayout(self.layout)
|
self.setLayout(self.layout)
|
||||||
|
|
||||||
def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:
|
def mousePressEvent(self, a0: QtGui.QMouseEvent) -> None:
|
||||||
self.show_info.emit(self.title)
|
self.show_info.emit(self.json_info)
|
||||||
|
|
||||||
|
|
||||||
|
query = "query searchStoreQuery($allowCountries: String, $category: String, $count: Int, $country: String!, " \
|
||||||
|
"$keywords: String, $locale: String, $namespace: String, $withMapping: Boolean = false, $itemNs: String, " \
|
||||||
|
"$sortBy: String, $sortDir: String, $start: Int, $tag: String, $releaseDate: String, $withPrice: Boolean = " \
|
||||||
|
"false, $withPromotions: Boolean = false, $priceRange: String, $freeGame: Boolean, $onSale: Boolean, " \
|
||||||
|
"$effectiveDate: String) {\n Catalog {\n searchStore(\n allowCountries: $allowCountries\n " \
|
||||||
|
"category: $category\n count: $count\n country: $country\n keywords: $keywords\n locale: " \
|
||||||
|
"$locale\n namespace: $namespace\n itemNs: $itemNs\n sortBy: $sortBy\n sortDir: " \
|
||||||
|
"$sortDir\n releaseDate: $releaseDate\n start: $start\n tag: $tag\n priceRange: " \
|
||||||
|
"$priceRange\n freeGame: $freeGame\n onSale: $onSale\n effectiveDate: $effectiveDate\n ) {" \
|
||||||
|
"\n elements {\n title\n id\n namespace\n description\n " \
|
||||||
|
"effectiveDate\n keyImages {\n type\n url\n }\n currentPrice\n " \
|
||||||
|
"seller {\n id\n name\n }\n productSlug\n urlSlug\n url\n " \
|
||||||
|
" tags {\n id\n }\n items {\n id\n namespace\n }\n " \
|
||||||
|
"customAttributes {\n key\n value\n }\n categories {\n path\n " \
|
||||||
|
"}\n catalogNs @include(if: $withMapping) {\n mappings(pageType: \"productHome\") {\n " \
|
||||||
|
" pageSlug\n pageType\n }\n }\n offerMappings @include(if: $withMapping) " \
|
||||||
|
"{\n pageSlug\n pageType\n }\n price(country: $country) @include(if: " \
|
||||||
|
"$withPrice) {\n totalPrice {\n discountPrice\n originalPrice\n " \
|
||||||
|
"voucherDiscount\n discount\n currencyCode\n currencyInfo {\n " \
|
||||||
|
"decimals\n }\n fmtPrice(locale: $locale) {\n originalPrice\n " \
|
||||||
|
"discountPrice\n intermediatePrice\n }\n }\n lineOffers {\n " \
|
||||||
|
" appliedRules {\n id\n endDate\n discountSetting {\n " \
|
||||||
|
"discountType\n }\n }\n }\n }\n promotions(category: " \
|
||||||
|
"$category) @include(if: $withPromotions) {\n promotionalOffers {\n promotionalOffers {\n " \
|
||||||
|
" startDate\n endDate\n discountSetting {\n " \
|
||||||
|
"discountType\n discountPercentage\n }\n }\n }\n " \
|
||||||
|
"upcomingPromotionalOffers {\n promotionalOffers {\n startDate\n " \
|
||||||
|
"endDate\n discountSetting {\n discountType\n discountPercentage\n " \
|
||||||
|
" }\n }\n }\n }\n }\n paging {\n count\n " \
|
||||||
|
"total\n }\n }\n }\n}\n "
|
||||||
|
|
|
@ -20,54 +20,32 @@ class Ui_ShopWidget(object):
|
||||||
self.search = QtWidgets.QLineEdit(ShopWidget)
|
self.search = QtWidgets.QLineEdit(ShopWidget)
|
||||||
self.search.setObjectName("search")
|
self.search.setObjectName("search")
|
||||||
self.verticalLayout.addWidget(self.search)
|
self.verticalLayout.addWidget(self.search)
|
||||||
self.search_results = QtWidgets.QGroupBox(ShopWidget)
|
self.free_game_group_box = QtWidgets.QGroupBox(ShopWidget)
|
||||||
self.search_results.setFlat(False)
|
self.free_game_group_box.setObjectName("free_game_group_box")
|
||||||
self.search_results.setObjectName("search_results")
|
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.free_game_group_box)
|
||||||
self.verticalLayout.addWidget(self.search_results)
|
|
||||||
self.free_game_group_box_2 = QtWidgets.QGroupBox(ShopWidget)
|
|
||||||
self.free_game_group_box_2.setObjectName("free_game_group_box_2")
|
|
||||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.free_game_group_box_2)
|
|
||||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||||
self.free_games_stack = QtWidgets.QStackedWidget(self.free_game_group_box_2)
|
self.free_games_stack = QtWidgets.QStackedWidget(self.free_game_group_box)
|
||||||
self.free_games_stack.setObjectName("free_games_stack")
|
self.free_games_stack.setObjectName("free_games_stack")
|
||||||
self.free_games_page = QtWidgets.QWidget()
|
|
||||||
self.free_games_page.setObjectName("free_games_page")
|
|
||||||
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.free_games_page)
|
|
||||||
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
|
||||||
self.free_game_now = QtWidgets.QGroupBox(self.free_games_page)
|
|
||||||
self.free_game_now.setObjectName("free_game_now")
|
|
||||||
self.horizontalLayout = QtWidgets.QHBoxLayout(self.free_game_now)
|
|
||||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
|
||||||
self.horizontalLayout_3.addWidget(self.free_game_now)
|
|
||||||
self.comming_free_game = QtWidgets.QGroupBox(self.free_games_page)
|
|
||||||
self.comming_free_game.setObjectName("comming_free_game")
|
|
||||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.comming_free_game)
|
|
||||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
|
||||||
self.horizontalLayout_3.addWidget(self.comming_free_game)
|
|
||||||
self.free_games_stack.addWidget(self.free_games_page)
|
|
||||||
self.verticalLayout_2.addWidget(self.free_games_stack)
|
self.verticalLayout_2.addWidget(self.free_games_stack)
|
||||||
self.verticalLayout.addWidget(self.free_game_group_box_2)
|
self.verticalLayout.addWidget(self.free_game_group_box)
|
||||||
self.games_groupbox_2 = QtWidgets.QGroupBox(ShopWidget)
|
self.games_groupbox = QtWidgets.QGroupBox(ShopWidget)
|
||||||
self.games_groupbox_2.setObjectName("games_groupbox_2")
|
self.games_groupbox.setObjectName("games_groupbox")
|
||||||
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.games_groupbox_2)
|
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.games_groupbox)
|
||||||
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
|
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
|
||||||
self.verticalLayout.addWidget(self.games_groupbox_2)
|
self.verticalLayout.addWidget(self.games_groupbox)
|
||||||
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
|
||||||
self.verticalLayout.addItem(spacerItem)
|
self.verticalLayout.addItem(spacerItem)
|
||||||
|
|
||||||
self.retranslateUi(ShopWidget)
|
self.retranslateUi(ShopWidget)
|
||||||
self.free_games_stack.setCurrentIndex(0)
|
self.free_games_stack.setCurrentIndex(-1)
|
||||||
QtCore.QMetaObject.connectSlotsByName(ShopWidget)
|
QtCore.QMetaObject.connectSlotsByName(ShopWidget)
|
||||||
|
|
||||||
def retranslateUi(self, ShopWidget):
|
def retranslateUi(self, ShopWidget):
|
||||||
_translate = QtCore.QCoreApplication.translate
|
_translate = QtCore.QCoreApplication.translate
|
||||||
ShopWidget.setWindowTitle(_translate("ShopWidget", "Form"))
|
ShopWidget.setWindowTitle(_translate("ShopWidget", "Form"))
|
||||||
self.search.setPlaceholderText(_translate("ShopWidget", "Search Games"))
|
self.search.setPlaceholderText(_translate("ShopWidget", "Search Games"))
|
||||||
self.search_results.setTitle(_translate("ShopWidget", "Search results"))
|
self.free_game_group_box.setTitle(_translate("ShopWidget", "Free Games"))
|
||||||
self.free_game_group_box_2.setTitle(_translate("ShopWidget", "Free Games"))
|
self.games_groupbox.setTitle(_translate("ShopWidget", "Other nice games"))
|
||||||
self.free_game_now.setTitle(_translate("ShopWidget", "Free Game"))
|
|
||||||
self.comming_free_game.setTitle(_translate("ShopWidget", "Comming Free Game"))
|
|
||||||
self.games_groupbox_2.setTitle(_translate("ShopWidget", "Other nice games"))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -22,17 +22,7 @@
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="search_results">
|
<widget class="QGroupBox" name="free_game_group_box">
|
||||||
<property name="title">
|
|
||||||
<string>Search results</string>
|
|
||||||
</property>
|
|
||||||
<property name="flat">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QGroupBox" name="free_game_group_box_2">
|
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Free Games</string>
|
<string>Free Games</string>
|
||||||
</property>
|
</property>
|
||||||
|
@ -40,35 +30,15 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QStackedWidget" name="free_games_stack">
|
<widget class="QStackedWidget" name="free_games_stack">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>-1</number>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="free_games_page">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
|
||||||
<item>
|
|
||||||
<widget class="QGroupBox" name="free_game_now">
|
|
||||||
<property name="title">
|
|
||||||
<string>Free Game</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout"/>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QGroupBox" name="comming_free_game">
|
|
||||||
<property name="title">
|
|
||||||
<string>Comming Free Game</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_2"/>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="games_groupbox_2">
|
<widget class="QGroupBox" name="games_groupbox">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Other nice games</string>
|
<string>Other nice games</string>
|
||||||
</property>
|
</property>
|
||||||
|
|
20
test.py
20
test.py
|
@ -1,20 +0,0 @@
|
||||||
import sys
|
|
||||||
from PyQt5.QtCore import Qt, QStringListModel
|
|
||||||
from PyQt5.QtWidgets import QApplication, QCompleter, QLineEdit
|
|
||||||
|
|
||||||
def get_data(model):
|
|
||||||
model.setStringList(["completion", "data", "goes", "here"])
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
|
|
||||||
app = QApplication(sys.argv)
|
|
||||||
edit = QLineEdit()
|
|
||||||
completer = QCompleter()
|
|
||||||
edit.setCompleter(completer)
|
|
||||||
|
|
||||||
model = QStringListModel()
|
|
||||||
completer.setModel(model)
|
|
||||||
get_data(model)
|
|
||||||
|
|
||||||
edit.show()
|
|
||||||
sys.exit(app.exec_())
|
|
Loading…
Reference in a new issue