Add developer property
This commit is contained in:
@@ -99,6 +99,20 @@ template CartridgesWindow : Adw.ApplicationWindow {
|
|||||||
"title-1",
|
"title-1",
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Label overview_developer {
|
||||||
|
margin-top: 3;
|
||||||
|
hexpand: true;
|
||||||
|
halign: start;
|
||||||
|
wrap: true;
|
||||||
|
wrap-mode: word_char;
|
||||||
|
natural-wrap-mode: word;
|
||||||
|
|
||||||
|
styles [
|
||||||
|
"heading"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
Label overview_added {
|
Label overview_added {
|
||||||
margin-top: 12;
|
margin-top: 12;
|
||||||
hexpand: true;
|
hexpand: true;
|
||||||
|
|||||||
@@ -29,20 +29,7 @@
|
|||||||
"*.a"
|
"*.a"
|
||||||
],
|
],
|
||||||
"modules" : [
|
"modules" : [
|
||||||
{
|
"python3-modules.json",
|
||||||
"name": "python3-PyYAML",
|
|
||||||
"buildsystem": "simple",
|
|
||||||
"build-commands": [
|
|
||||||
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"PyYAML>=6.0\" --no-build-isolation"
|
|
||||||
],
|
|
||||||
"sources": [
|
|
||||||
{
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://files.pythonhosted.org/packages/36/2b/61d51a2c4f25ef062ae3f74576b01638bebad5e045f747ff12643df63844/PyYAML-6.0.tar.gz",
|
|
||||||
"sha256": "68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "blueprint-compiler",
|
"name": "blueprint-compiler",
|
||||||
"buildsystem": "meson",
|
"buildsystem": "meson",
|
||||||
|
|||||||
75
python3-modules.json
Normal file
75
python3-modules.json
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
{
|
||||||
|
"name": "python3-modules",
|
||||||
|
"buildsystem": "simple",
|
||||||
|
"build-commands": [],
|
||||||
|
"modules": [
|
||||||
|
{
|
||||||
|
"name": "python3-pyyaml",
|
||||||
|
"buildsystem": "simple",
|
||||||
|
"build-commands": [
|
||||||
|
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"pyyaml\" --no-build-isolation"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/36/2b/61d51a2c4f25ef062ae3f74576b01638bebad5e045f747ff12643df63844/PyYAML-6.0.tar.gz",
|
||||||
|
"sha256": "68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "python3-steam",
|
||||||
|
"buildsystem": "simple",
|
||||||
|
"build-commands": [
|
||||||
|
"pip3 install --verbose --exists-action=i --no-index --find-links=\"file://${PWD}\" --prefix=${FLATPAK_DEST} \"steam\" --no-build-isolation"
|
||||||
|
],
|
||||||
|
"sources": [
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/db/14/2b48a834d349eee94677e8702ea2ef98b7c674b090153ea8d3f6a788584e/cachetools-5.3.0-py3-none-any.whl",
|
||||||
|
"sha256": "429e1a1e845c008ea6c85aa35d4b98b65d6a9763eeef3e37e92728a12d1de9d4"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/71/4c/3db2b8021bd6f2f0ceb0e088d6b2d49147671f25832fb17970e9b583d742/certifi-2022.12.7-py3-none-any.whl",
|
||||||
|
"sha256": "4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/ff/d7/8d757f8bd45be079d76309248845a04f09619a7b17d6dfc8c9ff6433cac2/charset-normalizer-3.1.0.tar.gz",
|
||||||
|
"sha256": "34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/fc/34/3030de6f1370931b9dbb4dad48f6ab1015ab1d32447850b9fc94e60097be/idna-3.4-py3-none-any.whl",
|
||||||
|
"sha256": "90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/3d/07/cfd8f52b9068877801317d26dc7225e19421bc659e1395d2cd6933b1a351/pycryptodomex-3.17.tar.gz",
|
||||||
|
"sha256": "0af93aad8d62e810247beedef0261c148790c52f3cd33643791cc6396dd217c1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/d2/f4/274d1dbe96b41cf4e0efb70cbced278ffd61b5c7bb70338b62af94ccb25b/requests-2.28.2-py3-none-any.whl",
|
||||||
|
"sha256": "64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/9a/31/62ac25584988182dee5ee949395e08943ff8b11634dc33abab7078d28433/steam-1.4.4.tar.gz",
|
||||||
|
"sha256": "2b5bd6911c0d4a7312f441b8d162b9d8d47c8bebb8efc6c8867393b0323fa52e"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/7b/f5/890a0baca17a61c1f92f72b81d3c31523c99bec609e60c292ea55b387ae8/urllib3-1.26.15-py2.py3-none-any.whl",
|
||||||
|
"sha256": "aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://files.pythonhosted.org/packages/96/60/6456b687cf55cf60020dcd01f9bc51561c3cc84f05fd8e0feb71ce60f894/vdf-3.4-py2.py3-none-any.whl",
|
||||||
|
"sha256": "68c1a125cc49e343d535af2dd25074e9cb0908c6607f073947c4a04bbe234534"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -46,11 +46,8 @@ class game(Gtk.Box):
|
|||||||
self.hidden = data["hidden"]
|
self.hidden = data["hidden"]
|
||||||
self.last_played = data["last_played"]
|
self.last_played = data["last_played"]
|
||||||
self.name = data["name"]
|
self.name = data["name"]
|
||||||
|
self.developer = data["developer"] if "developer" in data.keys() else None
|
||||||
if "removed" in data.keys():
|
self.removed = "removed" in data.keys()
|
||||||
self.removed = True
|
|
||||||
else:
|
|
||||||
self.removed = False
|
|
||||||
|
|
||||||
self.pixbuf = get_cover(self.game_id, self.parent_widget)
|
self.pixbuf = get_cover(self.game_id, self.parent_widget)
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ from .save_games import save_games
|
|||||||
|
|
||||||
def create_details_window(parent_widget, game_id=None):
|
def create_details_window(parent_widget, game_id=None):
|
||||||
window = Adw.Window(
|
window = Adw.Window(
|
||||||
modal=True, default_width=450, default_height=650, transient_for=parent_widget
|
modal=True, default_width=450, default_height=750, transient_for=parent_widget
|
||||||
)
|
)
|
||||||
|
|
||||||
games = parent_widget.games
|
games = parent_widget.games
|
||||||
@@ -41,11 +41,15 @@ def create_details_window(parent_widget, game_id=None):
|
|||||||
window.set_title(_("Add New Game"))
|
window.set_title(_("Add New Game"))
|
||||||
cover = Gtk.Picture.new_for_pixbuf(parent_widget.placeholder_pixbuf)
|
cover = Gtk.Picture.new_for_pixbuf(parent_widget.placeholder_pixbuf)
|
||||||
name = Gtk.Entry()
|
name = Gtk.Entry()
|
||||||
|
developer = Gtk.Entry()
|
||||||
executable = Gtk.Entry()
|
executable = Gtk.Entry()
|
||||||
apply_button = Gtk.Button.new_with_label(_("Confirm"))
|
apply_button = Gtk.Button.new_with_label(_("Confirm"))
|
||||||
else:
|
else:
|
||||||
window.set_title(_("Edit Game Details"))
|
window.set_title(_("Edit Game Details"))
|
||||||
cover = Gtk.Picture.new_for_pixbuf(get_cover(game_id, parent_widget))
|
cover = Gtk.Picture.new_for_pixbuf(get_cover(game_id, parent_widget))
|
||||||
|
developer = Gtk.Entry.new_with_buffer(
|
||||||
|
Gtk.EntryBuffer.new(games[game_id].developer, -1)
|
||||||
|
)
|
||||||
name = Gtk.Entry.new_with_buffer(Gtk.EntryBuffer.new(games[game_id].name, -1))
|
name = Gtk.Entry.new_with_buffer(Gtk.EntryBuffer.new(games[game_id].name, -1))
|
||||||
executable = Gtk.Entry.new_with_buffer(
|
executable = Gtk.Entry.new_with_buffer(
|
||||||
Gtk.EntryBuffer.new((games[game_id].executable), -1)
|
Gtk.EntryBuffer.new((games[game_id].executable), -1)
|
||||||
@@ -92,6 +96,12 @@ def create_details_window(parent_widget, game_id=None):
|
|||||||
)
|
)
|
||||||
title_group.add(name)
|
title_group.add(name)
|
||||||
|
|
||||||
|
developer_group = Adw.PreferencesGroup(
|
||||||
|
title=_("Developer"),
|
||||||
|
description=_("The developer or publisher (optional)"),
|
||||||
|
)
|
||||||
|
developer_group.add(developer)
|
||||||
|
|
||||||
exec_group = Adw.PreferencesGroup(
|
exec_group = Adw.PreferencesGroup(
|
||||||
title=_("Executable"),
|
title=_("Executable"),
|
||||||
description=_("File to open or command to run when launching the game"),
|
description=_("File to open or command to run when launching the game"),
|
||||||
@@ -101,6 +111,7 @@ def create_details_window(parent_widget, game_id=None):
|
|||||||
general_page = Adw.PreferencesPage()
|
general_page = Adw.PreferencesPage()
|
||||||
general_page.add(cover_group)
|
general_page.add(cover_group)
|
||||||
general_page.add(title_group)
|
general_page.add(title_group)
|
||||||
|
general_page.add(developer_group)
|
||||||
general_page.add(exec_group)
|
general_page.add(exec_group)
|
||||||
|
|
||||||
cancel_button = Gtk.Button.new_with_label(_("Cancel"))
|
cancel_button = Gtk.Button.new_with_label(_("Cancel"))
|
||||||
@@ -142,6 +153,7 @@ def create_details_window(parent_widget, game_id=None):
|
|||||||
values = {}
|
values = {}
|
||||||
|
|
||||||
final_name = name.get_buffer().get_text()
|
final_name = name.get_buffer().get_text()
|
||||||
|
final_developer = developer.get_buffer().get_text()
|
||||||
final_executable = executable.get_buffer().get_text()
|
final_executable = executable.get_buffer().get_text()
|
||||||
|
|
||||||
if game_id is None:
|
if game_id is None:
|
||||||
@@ -195,6 +207,7 @@ def create_details_window(parent_widget, game_id=None):
|
|||||||
save_cover(None, parent_widget, None, pixbuf, game_id)
|
save_cover(None, parent_widget, None, pixbuf, game_id)
|
||||||
|
|
||||||
values["name"] = final_name
|
values["name"] = final_name
|
||||||
|
values["developer"] = final_developer if final_developer else None
|
||||||
values["executable"] = final_executable
|
values["executable"] = final_executable
|
||||||
|
|
||||||
path = os.path.join(
|
path = os.path.join(
|
||||||
|
|||||||
@@ -113,6 +113,7 @@ def heroic_parser(parent_widget, action):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
values["name"] = game["title"]
|
values["name"] = game["title"]
|
||||||
|
values["developer"] = game["developer"]
|
||||||
values["executable"] = "xdg-open heroic://launch/" + app_name
|
values["executable"] = "xdg-open heroic://launch/" + app_name
|
||||||
values["hidden"] = False
|
values["hidden"] = False
|
||||||
values["source"] = "heroic_epic"
|
values["source"] = "heroic_epic"
|
||||||
@@ -153,7 +154,7 @@ def heroic_parser(parent_widget, action):
|
|||||||
):
|
):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Get game title from library.json as it's not present in installed.json
|
# Get game title and developer from library.json as they are not present in installed.json
|
||||||
with open(
|
with open(
|
||||||
os.path.join(heroic_dir, "gog_store", "library.json"), "r"
|
os.path.join(heroic_dir, "gog_store", "library.json"), "r"
|
||||||
) as open_file:
|
) as open_file:
|
||||||
@@ -162,6 +163,7 @@ def heroic_parser(parent_widget, action):
|
|||||||
library = json.loads(data)
|
library = json.loads(data)
|
||||||
for game in library["games"]:
|
for game in library["games"]:
|
||||||
if game["app_name"] == app_name:
|
if game["app_name"] == app_name:
|
||||||
|
values["developer"] = game["developer"]
|
||||||
values["name"] = game["title"]
|
values["name"] = game["title"]
|
||||||
image_path = os.path.join(
|
image_path = os.path.join(
|
||||||
heroic_dir,
|
heroic_dir,
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import re
|
|||||||
import time
|
import time
|
||||||
|
|
||||||
from gi.repository import GLib, Gtk
|
from gi.repository import GLib, Gtk
|
||||||
|
from steam.utils.appcache import parse_appinfo
|
||||||
|
|
||||||
from .create_dialog import create_dialog
|
from .create_dialog import create_dialog
|
||||||
from .save_cover import save_cover
|
from .save_cover import save_cover
|
||||||
@@ -92,6 +93,17 @@ def steam_parser(parent_widget, action):
|
|||||||
if os.path.isfile(path) and "appmanifest" in open_file:
|
if os.path.isfile(path) and "appmanifest" in open_file:
|
||||||
appmanifests.append(path)
|
appmanifests.append(path)
|
||||||
|
|
||||||
|
with open("/home/kramo/.steam/steam/appcache/appinfo.vdf", "rb") as open_file:
|
||||||
|
_header, apps = parse_appinfo(open_file)
|
||||||
|
|
||||||
|
developers = {
|
||||||
|
app["appid"]: app["data"]["appinfo"]["common"]["associations"]["0"]["name"]
|
||||||
|
for app in apps
|
||||||
|
if "common" in app["data"]["appinfo"]
|
||||||
|
and "associations" in app["data"]["appinfo"]["common"]
|
||||||
|
and "0" in app["data"]["appinfo"]["common"]["associations"]
|
||||||
|
}
|
||||||
|
|
||||||
for appmanifest in appmanifests:
|
for appmanifest in appmanifests:
|
||||||
values = {}
|
values = {}
|
||||||
with open(appmanifest, "r") as open_file:
|
with open(appmanifest, "r") as open_file:
|
||||||
@@ -114,6 +126,10 @@ def steam_parser(parent_widget, action):
|
|||||||
values["source"] = "steam"
|
values["source"] = "steam"
|
||||||
values["added"] = current_time
|
values["added"] = current_time
|
||||||
values["last_played"] = 0
|
values["last_played"] = 0
|
||||||
|
try:
|
||||||
|
values["developer"] = developers[int(values["appid"])]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
if os.path.isfile(
|
if os.path.isfile(
|
||||||
os.path.join(
|
os.path.join(
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ class CartridgesWindow(Adw.ApplicationWindow):
|
|||||||
overview_launch = Gtk.Template.Child()
|
overview_launch = Gtk.Template.Child()
|
||||||
overview_blurred_cover = Gtk.Template.Child()
|
overview_blurred_cover = Gtk.Template.Child()
|
||||||
overview_menu_button = Gtk.Template.Child()
|
overview_menu_button = Gtk.Template.Child()
|
||||||
|
overview_developer = Gtk.Template.Child()
|
||||||
overview_added = Gtk.Template.Child()
|
overview_added = Gtk.Template.Child()
|
||||||
overview_last_played = Gtk.Template.Child()
|
overview_last_played = Gtk.Template.Child()
|
||||||
|
|
||||||
@@ -231,6 +232,12 @@ class CartridgesWindow(Adw.ApplicationWindow):
|
|||||||
def show_overview(self, _widget, game_id):
|
def show_overview(self, _widget, game_id):
|
||||||
current_game = self.games[game_id]
|
current_game = self.games[game_id]
|
||||||
|
|
||||||
|
if current_game.developer:
|
||||||
|
self.overview_developer.set_label(current_game.developer)
|
||||||
|
self.overview_developer.set_visible(True)
|
||||||
|
else:
|
||||||
|
self.overview_developer.set_visible(False)
|
||||||
|
|
||||||
if not current_game.hidden:
|
if not current_game.hidden:
|
||||||
self.overview_menu_button.set_menu_model(self.game_options)
|
self.overview_menu_button.set_menu_model(self.game_options)
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user