diff --git a/data/com.github.tkashkin.gamehub.gschema.xml b/data/com.github.tkashkin.gamehub.gschema.xml
index 876fd6bb..4aa84262 100644
--- a/data/com.github.tkashkin.gamehub.gschema.xml
+++ b/data/com.github.tkashkin.gamehub.gschema.xml
@@ -341,4 +341,12 @@
Preferred description source
+
+
+
+
+ []
+ Global tweaks list
+
+
diff --git a/data/meson.build b/data/meson.build
index 72b2dc2f..d10d6de9 100644
--- a/data/meson.build
+++ b/data/meson.build
@@ -19,6 +19,7 @@ install_data(
)
install_subdir('share/compat', install_dir: join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()))
+install_subdir('share/tweaks', install_dir: join_paths(get_option('prefix'), get_option('datadir'), meson.project_name()))
i18n.merge_file(
input: meson.project_name() + '.desktop.in',
diff --git a/data/share/tweaks/gamemode.json b/data/share/tweaks/gamemode.json
new file mode 100644
index 00000000..92e85a2c
--- /dev/null
+++ b/data/share/tweaks/gamemode.json
@@ -0,0 +1,7 @@
+{
+ "id": "gamemode",
+ "name": "Feral GameMode",
+ "description": "Temporarily apply a set of optimizations to a game process and OS. Requires Feral GameMode to be installed",
+ "url": "https://github.com/FeralInteractive/gamemode",
+ "command": "gamemoderun ${command}"
+}
diff --git a/data/share/tweaks/proton.json b/data/share/tweaks/proton.json
new file mode 100644
index 00000000..76d4b1fa
--- /dev/null
+++ b/data/share/tweaks/proton.json
@@ -0,0 +1,67 @@
+[
+ {
+ "id": "dx_dxvk_hud",
+ "name": "DXVK: Show HUD",
+ "description": "Enable DXVK HUD",
+ "url": "https://github.com/doitsujin/dxvk#hud",
+ "applicable_to": {
+ "platforms": ["windows"],
+ "compat": ["wine", "proton"]
+ },
+ "env": {
+ "DXVK_HUD": "devinfo,fps"
+ }
+ },
+ {
+ "id": "proton_dx_d9vk",
+ "name": "Proton: Use D9VK",
+ "description": "Use Vulkan-based D9VK instead of OpenGL-based WineD3D for D3D9",
+ "url": "https://github.com/ValveSoftware/Proton#runtime-config-options",
+ "applicable_to": {
+ "platforms": ["windows"],
+ "compat": ["proton"]
+ },
+ "env": {
+ "PROTON_USE_D9VK": "1"
+ }
+ },
+ {
+ "id": "proton_dx_wined3d",
+ "name": "Proton: Use WineD3D",
+ "description": "Use OpenGL-based WineD3D for D3D11 and D3D10 instead of Vulkan-based DXVK",
+ "url": "https://github.com/ValveSoftware/Proton#runtime-config-options",
+ "applicable_to": {
+ "platforms": ["windows"],
+ "compat": ["proton"]
+ },
+ "env": {
+ "PROTON_USE_WINED3D": "1"
+ }
+ },
+ {
+ "id": "proton_no_esync",
+ "name": "Proton: Disable esync",
+ "description": "Disable eventfd-based in-process synchronization primitives",
+ "url": "https://github.com/ValveSoftware/Proton#runtime-config-options",
+ "applicable_to": {
+ "platforms": ["windows"],
+ "compat": ["proton"]
+ },
+ "env": {
+ "PROTON_NO_ESYNC": "1"
+ }
+ },
+ {
+ "id": "proton_no_fsync",
+ "name": "Proton: Disable fsync",
+ "description": "Disable futex-based in-process synchronization primitives",
+ "url": "https://github.com/ValveSoftware/Proton#runtime-config-options",
+ "applicable_to": {
+ "platforms": ["windows"],
+ "compat": ["proton"]
+ },
+ "env": {
+ "PROTON_NO_FSYNC": "1"
+ }
+ }
+]
diff --git a/po/POTFILES b/po/POTFILES
index aa71a430..f737a4b4 100644
--- a/po/POTFILES
+++ b/po/POTFILES
@@ -53,6 +53,8 @@ src/data/providers/images/SteamGridDB.vala
src/data/providers/images/JinxSGVI.vala
src/data/providers/data/IGDB.vala
+src/data/tweaks/Tweak.vala
+
src/ui/windows/MainWindow.vala
src/ui/windows/WebAuthWindow.vala
@@ -63,6 +65,7 @@ src/ui/dialogs/SettingsDialog/pages/ui/Appearance.vala
src/ui/dialogs/SettingsDialog/pages/ui/Behavior.vala
src/ui/dialogs/SettingsDialog/pages/general/Collection.vala
src/ui/dialogs/SettingsDialog/pages/general/Controller.vala
+src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala
src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala
src/ui/dialogs/SettingsDialog/pages/sources/GOG.vala
src/ui/dialogs/SettingsDialog/pages/sources/Humble.vala
@@ -79,6 +82,7 @@ src/ui/dialogs/GameFSOverlaysDialog.vala
src/ui/dialogs/CompatRunDialog.vala
src/ui/dialogs/CorruptedInstallerDialog.vala
src/ui/dialogs/ImportEmulatedGamesDialog.vala
+src/ui/dialogs/GameTweaksDialog.vala
src/ui/views/BaseView.vala
src/ui/views/WelcomeView.vala
@@ -119,6 +123,7 @@ src/ui/widgets/ModeButton.vala
src/ui/widgets/OverlayBar.vala
src/ui/widgets/Welcome.vala
src/ui/widgets/SettingsSidebar.vala
+src/ui/widgets/TweaksList.vala
src/utils/Utils.vala
src/utils/ImageCache.vala
@@ -134,6 +139,7 @@ src/settings/Auth.vala
src/settings/Compat.vala
src/settings/Providers.vala
src/settings/Controller.vala
+src/settings/Tweaks.vala
src/utils/downloader/Downloader.vala
src/utils/downloader/SoupDownloader.vala
diff --git a/po/ar.po b/po/ar.po
index 7959a6e9..56275f1e 100644
--- a/po/ar.po
+++ b/po/ar.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-10-19 08:53+0000\n"
"Last-Translator: abidin toumi \n"
"Language-Team: Arabic =11 ? 4 : 5;\n"
"X-Generator: Weblate 3.9.1-dev\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "عرض التعليمات"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "عرض اصدار التطبيق والخروج"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr "أعد التشغيل بإرفاق منقح GDB"
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr ""
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr ""
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "عرض النافذة الرئيسية"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr "اعرض اعدادات التطبيق"
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr "أظهر نافذة حول"
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr "العدد الاقصى للخيوط"
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "شغل اللعبة"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr "اعرض اعدادات التوافق"
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "اعرض معلومات اللعبة"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr "افتح خصائص اللعبة"
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr ""
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
msgstr "سجل عملية المصادقة والمعلومات الحساسة مثل رموز المصادقة"
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr ""
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr ""
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr "عطل فلترت رسائل السجل"
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "خيارات اللعبة:"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "اعرض التعليمات لخيارت اللعبة"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr "خيارات الولوج:"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr "اعرض التعليمات لخيارات الولوج"
@@ -186,52 +186,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr "مُحاكى"
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "يشتغل"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "مثبت"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "تثبيت"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr "التحقق من صحة المثبت"
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "بدأ التحميل"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "لم تثبت"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "تم التثيت"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "تثبيت"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "يحمل"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "لم يثبت"
@@ -253,12 +253,12 @@ msgstr ""
"لم يُعثر على ملف اعدادات ستيم.\n"
"سجل دخولك في عميل ستيم ثم عد الى GameHub"
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr "%s: المثبت غير متوفر"
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -314,11 +314,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr "مخفي"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "عدل البرنامج النصي"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "عدل برنامج نصي مخصص"
@@ -344,8 +344,8 @@ msgstr "شغل"
msgid "Show WineWrap menu"
msgstr ""
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr ""
@@ -353,60 +353,19 @@ msgstr ""
msgid "Proton prefix"
msgstr ""
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr "عطل esync"
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr ""
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr "عطل طبقة توافق DirectX 11"
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr "استخدم WineD3D11 كطبقة توافق DirectX 11"
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr ""
-
-#: src/data/compat/Proton.vala:58
-#, fuzzy
-msgid "Enable DirectX 9 compatibility layer"
-msgstr "عطل طبقة توافق DirectX 11"
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr "تثبيت صامت"
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr "تثبيت اكثر صمتاَ"
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr ""
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr "بدون واجهة"
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr ""
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr "شغل اعدادات wine"
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr "شَغِّل winetricks"
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr "شغل مدير المهام"
@@ -809,6 +768,32 @@ msgstr "غادر"
msgid "Disabled"
msgstr "مٌعطل"
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "مصادر اللعبة"
@@ -856,6 +841,7 @@ msgstr "موثق"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "ثبت"
@@ -1257,6 +1243,11 @@ msgstr ""
msgid "Select directory to import"
msgstr ""
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr ""
@@ -1421,7 +1412,7 @@ msgid "Sort"
msgstr ""
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr ""
@@ -1481,7 +1472,7 @@ msgstr ""
msgid "Uninstall"
msgstr ""
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr ""
@@ -1712,23 +1703,32 @@ msgstr ""
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "عدل البرنامج النصي"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr ""
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
@@ -1823,3 +1823,25 @@ msgstr ""
msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr ""
+
+#~ msgid "Disable esync"
+#~ msgstr "عطل esync"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "عطل طبقة توافق DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "استخدم WineD3D11 كطبقة توافق DirectX 11"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "عطل طبقة توافق DirectX 11"
+
+#~ msgid "Silent installation"
+#~ msgstr "تثبيت صامت"
+
+#~ msgid "Very silent installation"
+#~ msgstr "تثبيت اكثر صمتاَ"
+
+#~ msgid "No GUI"
+#~ msgstr "بدون واجهة"
diff --git a/po/ca.po b/po/ca.po
index 18f709f0..e9c96a02 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-12-31 12:21+0000\n"
"Last-Translator: Marc Riera \n"
"Language-Team: Catalan %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Orígens de jocs"
@@ -857,6 +843,7 @@ msgstr "Autenticat"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Instal·la"
@@ -1266,6 +1253,11 @@ msgstr "Selecciona-ho tot"
msgid "Select directory to import"
msgstr "Seleccioneu un directori per a importar-lo"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s: Capes"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "No hi ha cap origen de jocs habilitat"
@@ -1429,7 +1421,7 @@ msgid "Sort"
msgstr "Ordena"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Etiquetes"
@@ -1489,7 +1481,7 @@ msgstr "Obre el directori de captures de pantalla"
msgid "Uninstall"
msgstr "Desinstal·la"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Propietats"
@@ -1698,23 +1690,32 @@ msgstr "Capa de compatibilitat:"
msgid "Configure"
msgstr "Configura"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Afegeix una etiqueta"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Seleccioneu un fitxer"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%d h"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%d min"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
@@ -1808,3 +1809,34 @@ msgstr "S'ha cancel·lat la baixada"
msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "%1$d%% (%2$s / %3$s) [%4$s/s]"
+
+#~ msgid "Disable esync"
+#~ msgstr "Inhabilita l'esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "Força el senyalador LARGE_ADDRESS_AWARE"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Inhabilita la capa de compatibilitat amb el DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr ""
+#~ "Utilitza el WineD3D11 com a capa de compatibilitat amb el DirectX 11"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "Superposa la informació del DXVK"
+
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Habilita la capa de compatibilitat amb el DirectX 9"
+
+#~ msgid "Silent installation"
+#~ msgstr "Instal·lació silenciosa"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Instal·lació molt silenciosa"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Suprimeix els missatges"
+
+#~ msgid "No GUI"
+#~ msgstr "Sense GUI"
diff --git a/po/com.github.tkashkin.gamehub.pot b/po/com.github.tkashkin.gamehub.pot
index 90d625dc..fd6a0ca0 100644
--- a/po/com.github.tkashkin.gamehub.pot
+++ b/po/com.github.tkashkin.gamehub.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -18,97 +18,97 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr ""
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr ""
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr ""
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr ""
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr ""
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr ""
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr ""
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr ""
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr ""
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr ""
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr ""
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr ""
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr ""
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr ""
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
msgstr ""
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr ""
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr ""
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr ""
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr ""
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr ""
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr ""
@@ -181,52 +181,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr ""
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr ""
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr ""
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr ""
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr ""
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr ""
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr ""
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr ""
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr ""
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr ""
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr ""
@@ -246,12 +246,12 @@ msgid ""
"Login into your account in Steam client and return to GameHub"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -305,11 +305,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr ""
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr ""
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr ""
@@ -333,8 +333,8 @@ msgstr ""
msgid "Show WineWrap menu"
msgstr ""
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr ""
@@ -342,59 +342,19 @@ msgstr ""
msgid "Proton prefix"
msgstr ""
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr ""
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr ""
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr ""
-
-#: src/data/compat/Proton.vala:58
-msgid "Enable DirectX 9 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr ""
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr ""
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr ""
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr ""
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr ""
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr ""
@@ -795,6 +755,32 @@ msgstr ""
msgid "Disabled"
msgstr ""
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr ""
@@ -842,6 +828,7 @@ msgstr ""
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr ""
@@ -1234,6 +1221,11 @@ msgstr ""
msgid "Select directory to import"
msgstr ""
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr ""
@@ -1394,7 +1386,7 @@ msgid "Sort"
msgstr ""
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr ""
@@ -1454,7 +1446,7 @@ msgstr ""
msgid "Uninstall"
msgstr ""
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr ""
@@ -1657,23 +1649,31 @@ msgstr ""
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+msgid "Edit file"
+msgstr ""
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr ""
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
diff --git a/po/de.po b/po/de.po
index 7d1277b2..6451eac0 100644
--- a/po/de.po
+++ b/po/de.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-09-18 18:27+0000\n"
"Last-Translator: tinect \n"
"Language-Team: German %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Spielquellen"
@@ -878,6 +863,7 @@ msgstr "Authentifiziert"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Installieren"
@@ -1291,6 +1277,11 @@ msgstr "Installationsprogramm auswählen"
msgid "Select directory to import"
msgstr "Ordner auswählen"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s: Overlays"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Keine aktivierten Spielquellen"
@@ -1458,7 +1449,7 @@ msgid "Sort"
msgstr "Sortieren:"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Tags"
@@ -1521,7 +1512,7 @@ msgstr "Präfixverzeichnis öffnen"
msgid "Uninstall"
msgstr "Deinstallieren"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Eigenschaften"
@@ -1727,23 +1718,33 @@ msgstr "Kompatibilitätsschicht:"
msgid "Configure"
msgstr "Konfigurieren"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Tag hinzufügen"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+#, fuzzy
+msgid "No description"
+msgstr "Beschreibung"
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Datei auswählen"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%d h"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%d m"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1840,8 +1841,36 @@ msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "Herunterladen: %d %% (%s / %s) [%s/s]"
-#~ msgid "Description"
-#~ msgstr "Beschreibung"
+#~ msgid "Disable esync"
+#~ msgstr "esync deaktivieren"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "LARGE_ADDRESS_AWARE-Flag erzwingen"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "DirectX11-Kompatibilitätsschicht deaktivieren"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "WineD3D11 als Kompatibilitätsschicht für DirectX 11 verwenden"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "DXVK-Info-Overlay anzeigen"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "DirectX11-Kompatibilitätsschicht deaktivieren"
+
+#~ msgid "Silent installation"
+#~ msgstr "Stille Installation"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Sehr stille Installation"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Nachrichten unterdrücken"
+
+#~ msgid "No GUI"
+#~ msgstr "Kein GUI"
#~ msgid "Disable fullscreen"
#~ msgstr "Vollbild deaktivieren"
diff --git a/po/el.po b/po/el.po
index 0612f5a8..acec4201 100644
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -16,97 +16,97 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr ""
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr ""
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr ""
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr ""
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr ""
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr ""
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr ""
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr ""
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr ""
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr ""
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr ""
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr ""
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr ""
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr ""
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
msgstr ""
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr ""
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr ""
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr ""
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr ""
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr ""
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr ""
@@ -179,52 +179,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr ""
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr ""
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr ""
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr ""
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr ""
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr ""
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr ""
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr ""
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr ""
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr ""
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr ""
@@ -244,12 +244,12 @@ msgid ""
"Login into your account in Steam client and return to GameHub"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -303,11 +303,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr ""
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr ""
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr ""
@@ -331,8 +331,8 @@ msgstr ""
msgid "Show WineWrap menu"
msgstr ""
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr ""
@@ -340,59 +340,19 @@ msgstr ""
msgid "Proton prefix"
msgstr ""
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr ""
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr ""
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr ""
-
-#: src/data/compat/Proton.vala:58
-msgid "Enable DirectX 9 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr ""
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr ""
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr ""
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr ""
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr ""
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr ""
@@ -793,6 +753,32 @@ msgstr ""
msgid "Disabled"
msgstr ""
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr ""
@@ -840,6 +826,7 @@ msgstr ""
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr ""
@@ -1232,6 +1219,11 @@ msgstr ""
msgid "Select directory to import"
msgstr ""
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr ""
@@ -1392,7 +1384,7 @@ msgid "Sort"
msgstr ""
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr ""
@@ -1452,7 +1444,7 @@ msgstr ""
msgid "Uninstall"
msgstr ""
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr ""
@@ -1655,23 +1647,31 @@ msgstr ""
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+msgid "Edit file"
+msgstr ""
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr ""
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
diff --git a/po/es_MX.po b/po/es_MX.po
index 41865b0c..71149cee 100644
--- a/po/es_MX.po
+++ b/po/es_MX.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-11-19 07:04+0000\n"
"Last-Translator: juliomorales98 \n"
"Language-Team: Spanish (Mexico) %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Fuentes de juegos"
@@ -877,6 +859,7 @@ msgstr "Autenticado"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Instalar"
@@ -1280,6 +1263,11 @@ msgstr "Seleccionar todo"
msgid "Select directory to import"
msgstr "Seleccionar directorio a importar"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Sin fuentes de juegos habilitadas"
@@ -1449,7 +1437,7 @@ msgid "Sort"
msgstr "Ordenar"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Etiquetas"
@@ -1509,7 +1497,7 @@ msgstr "Abrir directorio de capturas de pantalla"
msgid "Uninstall"
msgstr "Desinstalar"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Propiedades"
@@ -1730,23 +1718,32 @@ msgstr "Capa de compatibilidad:"
msgid "Configure"
msgstr "Configurar"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Añadir etiqueta"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Seleccionar archivo"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dh"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dm"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1843,3 +1840,31 @@ msgstr "Descarga cancelada"
msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "Descargando: %d%% (%s / %s) [%s/s]"
+
+#, fuzzy
+#~ msgid "Disable esync"
+#~ msgstr "Deshabilitar esync"
+
+#, fuzzy
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "Forzar bandera LARGE_ADDRESS_AWARE"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Deshabilitar capa de compatibilidad con DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Usar WineD3D11 como capa de compatibilidad de DirectX 11"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Deshabilitar capa de compatibilidad con DirectX 11"
+
+#~ msgid "Silent installation"
+#~ msgstr "Instalación silenciosa"
+
+#, fuzzy
+#~ msgid "Very silent installation"
+#~ msgstr "Instalación muy silenciosa"
+
+#~ msgid "No GUI"
+#~ msgstr "Sin GUI"
diff --git a/po/fa.po b/po/fa.po
index a7a19cc8..fca33f97 100644
--- a/po/fa.po
+++ b/po/fa.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-08-03 20:23+0000\n"
"Last-Translator: Goudarz Jafari \n"
"Language-Team: Persian 1;\n"
"X-Generator: Weblate 3.8-dev\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "نمایش راهنما"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "نمایش نسخه برنامه و خروج"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr ""
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr ""
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr ""
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "نمایش پنجره اصلی"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr ""
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr ""
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr ""
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "اجرای بازی"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr ""
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "جزئیات بازی را باز کن"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr ""
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr ""
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
msgstr ""
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr ""
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr ""
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr ""
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "تنظیمات بازی:"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "نمایش راهنمای تنظیمات بازی"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr ""
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr ""
@@ -181,52 +181,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr ""
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "در حال اجرا"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "نصب شده"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "در حال نصب"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr ""
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "دانلود شروع شد"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "نصب نشد"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "نصب شده"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "در حال نصب"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "در حال دانلود"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "نصب نشد"
@@ -248,12 +248,12 @@ msgstr ""
"پرونده پیکربندی استیم یافت نشد.\n"
"وارد حساب کاربری خود در استیم کلاینت شوید و به GameHub بازگردید"
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -307,11 +307,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr ""
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "ویرایش اسکریپت"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "ویرایش اسکریپت سفارشی"
@@ -335,8 +335,8 @@ msgstr "اجرا"
msgid "Show WineWrap menu"
msgstr "نمایش منوی WineWrap"
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr ""
@@ -344,59 +344,19 @@ msgstr ""
msgid "Proton prefix"
msgstr ""
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr ""
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr ""
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr ""
-
-#: src/data/compat/Proton.vala:58
-msgid "Enable DirectX 9 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr ""
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr ""
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr ""
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr ""
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr ""
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr ""
@@ -798,6 +758,32 @@ msgstr ""
msgid "Disabled"
msgstr ""
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr ""
@@ -845,6 +831,7 @@ msgstr ""
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr ""
@@ -1237,6 +1224,11 @@ msgstr ""
msgid "Select directory to import"
msgstr ""
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr ""
@@ -1397,7 +1389,7 @@ msgid "Sort"
msgstr ""
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr ""
@@ -1457,7 +1449,7 @@ msgstr ""
msgid "Uninstall"
msgstr ""
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr ""
@@ -1660,23 +1652,32 @@ msgstr ""
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "ویرایش اسکریپت"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr ""
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
diff --git a/po/fi.po b/po/fi.po
index 9c2b122c..74f797fd 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-11-24 10:39+0000\n"
"Last-Translator: Tuomas Lähteenmäki \n"
"Language-Team: Finnish %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Pelilähteet"
@@ -859,6 +844,7 @@ msgstr "Todennettu"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Asenna"
@@ -1268,6 +1254,11 @@ msgstr "Valitse kaikki"
msgid "Select directory to import"
msgstr "Valitse tuotava hakemisto"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s: Päällekkäiskuvat"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Ei pelilähteitä käytössä"
@@ -1430,7 +1421,7 @@ msgid "Sort"
msgstr "Lajittele"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Tunnisteet"
@@ -1490,7 +1481,7 @@ msgstr "Avaa kuvakaappaus hakemisto"
msgid "Uninstall"
msgstr "Poista"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Ominaisuudet"
@@ -1699,23 +1690,32 @@ msgstr "Yhteensopivuuskerros:"
msgid "Configure"
msgstr "Määritä"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Lisää tagi"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Valitse tiedosto"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dt"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dkk"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1811,3 +1811,34 @@ msgstr "Lataus peruutettu"
msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "Ladataan: %d%% (%s / %s) [%s/s]"
+
+#~ msgid "Disable esync"
+#~ msgstr "Poista esync käytöstä"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "Pakota LARGE_ADDRESS_AWARE lippu"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Poista DirectX 11 -yhteensopivuustaso käytöstä"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Käytä WineD3D11:sta DirectX 11 -yhteensopivuustason sijaan"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "Näytä DXVK infon yleiskerros"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Poista DirectX 11 -yhteensopivuustaso käytöstä"
+
+#~ msgid "Silent installation"
+#~ msgstr "Hiljainen asennus"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Erittäin hiljainen asennus"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Tukahduta viestit"
+
+#~ msgid "No GUI"
+#~ msgstr "Ei GUI:ta"
diff --git a/po/fr.po b/po/fr.po
index 3ec15ebf..3f1dc783 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-12-31 12:21+0000\n"
"Last-Translator: Nathan \n"
"Language-Team: French 1;\n"
"X-Generator: Weblate 3.10\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "Afficher l'aide"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "Afficher la version de l'application et quitter"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr "Redémarrer avec le débogueur GDB attaché"
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr "Afficher l'intégralité de la trace d'appels de GDB"
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr "Traiter les erreurs fatales comme critiques et fermer l’application"
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "Afficher la fenêtre principale"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr "Afficher les paramètres de l'application"
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr "À propos de Gamehub"
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr "Nombre maximal de tâches d’arrière-plan"
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "Lancer le jeu"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr "Ouvrir les options de compatibilité"
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "Ouvrir les détails du jeu"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr "Ouvrir les propriétés du jeu"
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr "Activer la journalisation du débogage"
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
@@ -86,35 +86,35 @@ msgstr ""
"Journaliser le processus d'authentification et des informations sensibles "
"comme les clés d'authentification"
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr "Journaliser le gestionnaire de téléchargement"
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr "Journaliser les démarrages et arrêts des tâches d'arrière-plan"
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr "Désactiver le filtrage des messages du journal"
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr "Journalisation détaillée"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "Options de jeu :"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "Afficher l’aide pour les options de jeu"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr "Options de journalisation :"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr "Afficher l’aide pour les options de journalisation"
@@ -189,52 +189,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr "Émulé"
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "En exécution"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "Installé"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "En cours d'installation"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr "Vérification de l'intégrité de l'installateur"
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "Téléchargement commencé"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "Non installé"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "Installé"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "En cours d'installation"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "En cours de téléchargement"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "Non installé"
@@ -256,12 +256,12 @@ msgstr ""
"Fichier de configuration Steam introuvable.\n"
"Connectez-vous sur votre compte dans le client Steam et revenez dans GameHub"
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr "%s : aucun installateur disponible"
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -317,11 +317,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr "Caché"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "Modifier le script"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "Modifier le script personnalisé"
@@ -348,8 +348,8 @@ msgstr "Lancer"
msgid "Show WineWrap menu"
msgstr "Afficher le menu WineWrap"
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr "Arrêter les applications dans prefix"
@@ -357,59 +357,19 @@ msgstr "Arrêter les applications dans prefix"
msgid "Proton prefix"
msgstr "Préfixe de Proton"
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr "Désactiver esync"
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr "Forcer LARGE_ADDRESS_AWARE"
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr "Désactiver la couche de compatibilité pour DirectX 11"
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr "Utiliser WineD3D11 comme couche de compatibilité pour DirectX 11"
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr "Afficher les infos DXVK en surimpression"
-
-#: src/data/compat/Proton.vala:58
-msgid "Enable DirectX 9 compatibility layer"
-msgstr "Activer la couche de compatibilité pour DirectX 9"
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr "Installation silencieuse"
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr "Installation très silencieuse"
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr "Supprimer les messages"
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr "Pas d'interface graphique"
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr "Ouvrir le dossier prefix"
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr "Lancer winecfg"
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr "Lancer winetricks"
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr "Lancer taskmgr"
@@ -817,6 +777,32 @@ msgstr "Quitter"
msgid "Disabled"
msgstr "Désactivé"
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Sources des jeux"
@@ -864,6 +850,7 @@ msgstr "Authentifié"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Installer"
@@ -1273,6 +1260,11 @@ msgstr "Tout sélectionner"
msgid "Select directory to import"
msgstr "Sélectionner le dossier à importer"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s : superpositions"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Pas de source de jeu activée"
@@ -1435,7 +1427,7 @@ msgid "Sort"
msgstr "Trier"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Étiquettes"
@@ -1495,7 +1487,7 @@ msgstr "Ouvrir le dossier des captures d'écran"
msgid "Uninstall"
msgstr "Désinstaller"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Propriétés"
@@ -1704,23 +1696,32 @@ msgstr "Couche de compatibilité :"
msgid "Configure"
msgstr "Configurer"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Ajouter une étiquette"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Sélectionner le fichier"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dh"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dm"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
@@ -1815,6 +1816,36 @@ msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "%1$d%% (%2$s / %3$s) [%4$s/s]"
+#~ msgid "Disable esync"
+#~ msgstr "Désactiver esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "Forcer LARGE_ADDRESS_AWARE"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Désactiver la couche de compatibilité pour DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Utiliser WineD3D11 comme couche de compatibilité pour DirectX 11"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "Afficher les infos DXVK en surimpression"
+
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Activer la couche de compatibilité pour DirectX 9"
+
+#~ msgid "Silent installation"
+#~ msgstr "Installation silencieuse"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Installation très silencieuse"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Supprimer les messages"
+
+#~ msgid "No GUI"
+#~ msgstr "Pas d'interface graphique"
+
#~ msgid "Disable fullscreen"
#~ msgstr "Désactiver le plein écran"
diff --git a/po/hi.po b/po/hi.po
index 38182246..38c78e53 100644
--- a/po/hi.po
+++ b/po/hi.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -16,97 +16,97 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n > 1;\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr ""
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr ""
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr ""
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr ""
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr ""
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr ""
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr ""
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr ""
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr ""
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr ""
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr ""
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr ""
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr ""
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr ""
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
msgstr ""
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr ""
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr ""
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr ""
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr ""
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr ""
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr ""
@@ -179,52 +179,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr ""
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr ""
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr ""
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr ""
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr ""
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr ""
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr ""
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr ""
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr ""
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr ""
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr ""
@@ -244,12 +244,12 @@ msgid ""
"Login into your account in Steam client and return to GameHub"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -303,11 +303,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr ""
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr ""
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr ""
@@ -331,8 +331,8 @@ msgstr ""
msgid "Show WineWrap menu"
msgstr ""
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr ""
@@ -340,59 +340,19 @@ msgstr ""
msgid "Proton prefix"
msgstr ""
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr ""
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr ""
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr ""
-
-#: src/data/compat/Proton.vala:58
-msgid "Enable DirectX 9 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr ""
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr ""
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr ""
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr ""
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr ""
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr ""
@@ -793,6 +753,32 @@ msgstr ""
msgid "Disabled"
msgstr ""
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr ""
@@ -840,6 +826,7 @@ msgstr ""
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr ""
@@ -1232,6 +1219,11 @@ msgstr ""
msgid "Select directory to import"
msgstr ""
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr ""
@@ -1392,7 +1384,7 @@ msgid "Sort"
msgstr ""
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr ""
@@ -1452,7 +1444,7 @@ msgstr ""
msgid "Uninstall"
msgstr ""
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr ""
@@ -1655,23 +1647,31 @@ msgstr ""
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+msgid "Edit file"
+msgstr ""
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr ""
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
diff --git a/po/id.po b/po/id.po
index eb654a90..2703fc52 100644
--- a/po/id.po
+++ b/po/id.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-10-10 22:04+0000\n"
"Last-Translator: ekickx \n"
"Language-Team: Indonesian %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
#, fuzzy
msgid "Game sources"
@@ -881,6 +866,7 @@ msgstr "Mengautentikasi..."
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Pasang"
@@ -1299,6 +1285,11 @@ msgstr "Pilih berkas"
msgid "Select directory to import"
msgstr "Pilih direktori"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Tidak ada sumber permainan yang diaktifkan"
@@ -1466,7 +1457,7 @@ msgid "Sort"
msgstr "Sortir:"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Tanda"
@@ -1530,7 +1521,7 @@ msgstr "Buka direktori prefiks"
msgid "Uninstall"
msgstr "Copot pemasangan"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Properti"
@@ -1729,23 +1720,33 @@ msgstr "Lapisan kompatibilitas:"
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Tambahkan tanda"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+#, fuzzy
+msgid "No description"
+msgstr "Deskripsi"
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Pilih berkas"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%d j"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%d m"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1842,8 +1843,33 @@ msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "Mengunduh: %d%% (%s / %s) [%s/s]"
-#~ msgid "Description"
-#~ msgstr "Deskripsi"
+#~ msgid "Disable esync"
+#~ msgstr "Nonaktifkan esync"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Nonaktifkan lapisan kompatibilitas DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Gunakan WineD3D11 sebagai lapisan kompatibilitas DirectX 11"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "Tampilkan info overlay DXVK"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Nonaktifkan lapisan kompatibilitas DirectX 11"
+
+#~ msgid "Silent installation"
+#~ msgstr "Pemasangan senyap"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Pemasangan sangat senyap"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Menekan pesan"
+
+#~ msgid "No GUI"
+#~ msgstr "Tidak ada GUI"
#~ msgid "Disable fullscreen"
#~ msgstr "Nonaktifkan layar penuh"
diff --git a/po/it.po b/po/it.po
index 6c657273..97b2d1e8 100644
--- a/po/it.po
+++ b/po/it.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-11-25 09:22+0000\n"
"Last-Translator: Mirko Brombin \n"
"Language-Team: Italian 1;\n"
"X-Generator: Weblate 3.10-dev\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "Mostra aiuto"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "Mostra versione e chiudi"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr "Riavvia con il debugger GDB collegato"
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr "Mostra backtrace GDB completo"
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr "Tratta gli errori fatali come critici e l'applicazione di crash"
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "Mostra finestra principale"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr "Mostra impostazioni"
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr "Mostra informazioni"
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr "Numero massimo di worker thread in background"
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "Avvia gioco"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr "Mostra la finestra di dialogo delle opzioni di compatibilità"
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "Apri dettagli gioco"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr "Apri proprietà gioco"
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr "Abita log debug"
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
@@ -82,35 +82,35 @@ msgstr ""
"Registra il processo di autenticazione e informazioni sensibili come i token "
"di autenticazione"
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr "Log del download manager"
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr "Registra inizio/fine worker in background"
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr "Disattiva il filtro del log"
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr "Registrazione dettagliata"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "Opzioni Gioco:"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "Mostra aiuto opzioni gioco"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr "Opzioni Log:"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr "Mostra aiuto nelle opzioni log"
@@ -186,52 +186,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr "Emulato"
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "In esecuzione"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "Installato"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "Installando"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr "Verificando l'integrità dell'installer"
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "Download iniziato"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "Non installato"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "Installato"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "Installando"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "Scaricando"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "Non installato"
@@ -253,12 +253,12 @@ msgstr ""
"File di configurazione di Steam non trovato.\n"
"Accedi al tuo account nel client Steam e torna a GameHub"
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr "%s : nessun installer disponibile"
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -314,11 +314,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr "Nascosto"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "Modifica script"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "Modifica script personalizzato"
@@ -345,8 +345,8 @@ msgstr "Avvia"
msgid "Show WineWrap menu"
msgstr "Monstra menu WineWrap"
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr "Termina applicazioni nel prefisso"
@@ -354,60 +354,19 @@ msgstr "Termina applicazioni nel prefisso"
msgid "Proton prefix"
msgstr "Prefisso Proton"
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr "Disabilita esync"
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr "Forza la flag LARGE_ADDRESS_AWARE"
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr "Disattiva il livello di compatibilità per DirectX 11"
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr "Utilizza WineD3D11 come livello di compatibilità per DirectX 11"
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr "Mostra le informazioni DXVK su schermo"
-
-#: src/data/compat/Proton.vala:58
-#, fuzzy
-msgid "Enable DirectX 9 compatibility layer"
-msgstr "Disattiva il livello di compatibilità per DirectX 11"
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr "Installazione silenziosa"
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr "Vera installazione silenziosa"
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr "Sopprimi messaggi"
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr "Nessuna GUI"
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr "Apri la posizione del prefisso"
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr "Avvia winecfg"
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr "Avvia winetricks"
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr "Avvia taskmgr"
@@ -813,6 +772,32 @@ msgstr "Chiudi"
msgid "Disabled"
msgstr "Disattivato"
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Sorgenti gioco"
@@ -860,6 +845,7 @@ msgstr "Autenticato"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Installa"
@@ -1268,6 +1254,11 @@ msgstr "Seleziona tutto"
msgid "Select directory to import"
msgstr "Selezione posizione da importare"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s : Sovrapposizioni"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Nessun sorgente di gioco abilitato"
@@ -1431,7 +1422,7 @@ msgid "Sort"
msgstr "Ordina"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Tags"
@@ -1491,7 +1482,7 @@ msgstr "Apri posizione screenshosts"
msgid "Uninstall"
msgstr "Disinstalla"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Proprietà"
@@ -1700,23 +1691,32 @@ msgstr "Livello di compatibilità:"
msgid "Configure"
msgstr "Configura"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Aggiungi tag"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Seleziona file"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dh"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dm"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1813,6 +1813,37 @@ msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "Scaricando: %d%% (%s / %s) [%s/s]"
+#~ msgid "Disable esync"
+#~ msgstr "Disabilita esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "Forza la flag LARGE_ADDRESS_AWARE"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Disattiva il livello di compatibilità per DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Utilizza WineD3D11 come livello di compatibilità per DirectX 11"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "Mostra le informazioni DXVK su schermo"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Disattiva il livello di compatibilità per DirectX 11"
+
+#~ msgid "Silent installation"
+#~ msgstr "Installazione silenziosa"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Vera installazione silenziosa"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Sopprimi messaggi"
+
+#~ msgid "No GUI"
+#~ msgstr "Nessuna GUI"
+
#~ msgid "Disable fullscreen"
#~ msgstr "Disattiva fullscreen"
diff --git a/po/ko.po b/po/ko.po
index ddd8bd9e..396153a4 100644
--- a/po/ko.po
+++ b/po/ko.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
@@ -16,97 +16,97 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr ""
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr ""
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr ""
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr ""
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr ""
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr ""
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr ""
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr ""
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr ""
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr ""
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr ""
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr ""
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr ""
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr ""
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
msgstr ""
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr ""
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr ""
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr ""
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr ""
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr ""
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr ""
@@ -179,52 +179,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr ""
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr ""
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr ""
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr ""
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr ""
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr ""
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr ""
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr ""
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr ""
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr ""
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr ""
@@ -244,12 +244,12 @@ msgid ""
"Login into your account in Steam client and return to GameHub"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -303,11 +303,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr ""
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr ""
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr ""
@@ -331,8 +331,8 @@ msgstr ""
msgid "Show WineWrap menu"
msgstr ""
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr ""
@@ -340,59 +340,19 @@ msgstr ""
msgid "Proton prefix"
msgstr ""
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr ""
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr ""
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr ""
-
-#: src/data/compat/Proton.vala:58
-msgid "Enable DirectX 9 compatibility layer"
-msgstr ""
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr ""
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr ""
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr ""
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr ""
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr ""
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr ""
@@ -793,6 +753,32 @@ msgstr ""
msgid "Disabled"
msgstr ""
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr ""
@@ -840,6 +826,7 @@ msgstr ""
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr ""
@@ -1230,6 +1217,11 @@ msgstr ""
msgid "Select directory to import"
msgstr ""
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr ""
@@ -1389,7 +1381,7 @@ msgid "Sort"
msgstr ""
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr ""
@@ -1449,7 +1441,7 @@ msgstr ""
msgid "Uninstall"
msgstr ""
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr ""
@@ -1645,23 +1637,31 @@ msgstr ""
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+msgid "Edit file"
+msgstr ""
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr ""
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
diff --git a/po/nb_NO.po b/po/nb_NO.po
index 24bc09b4..e13eb15f 100644
--- a/po/nb_NO.po
+++ b/po/nb_NO.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2020-01-04 12:21+0000\n"
"Last-Translator: Allan Nordhøy \n"
"Language-Team: Norwegian Bokmål %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Spillkilder"
@@ -865,6 +850,7 @@ msgstr "Identitetsbekreftet"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Installer"
@@ -1273,6 +1259,11 @@ msgstr "Velg alt"
msgid "Select directory to import"
msgstr "Velg mappe å importere"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s: Overlag"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Ingen påskrudde spillkilder"
@@ -1436,7 +1427,7 @@ msgid "Sort"
msgstr "Sorter"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Etiketter"
@@ -1496,7 +1487,7 @@ msgstr "Åpne skjermavbildningsmappe"
msgid "Uninstall"
msgstr "Avinstaller"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Egenskaper"
@@ -1705,23 +1696,33 @@ msgstr "Kompabilitetslag:"
msgid "Configure"
msgstr "Sett opp"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Legg til etikett"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+#, fuzzy
+msgid "No description"
+msgstr "Beskrivelse"
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Velg fil"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dt"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dm"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1818,8 +1819,36 @@ msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "Laster ned: %d%% (%s / %s) [%s/s]"
-#~ msgid "Description"
-#~ msgstr "Beskrivelse"
+#~ msgid "Disable esync"
+#~ msgstr "Skru av esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "Påtving LARGE_ADDRESS_AWARE-flagg"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Skru av DirextX 11-kompabilitetslag"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Bruk WineD3D11 som DirectX 11-kompabilitetslag"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "Vis DXVK-infooverlag"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Skru av DirextX 11-kompabilitetslag"
+
+#~ msgid "Silent installation"
+#~ msgstr "Stille installasjon"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Veldig stille installasjon"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Undertrykk meldinger"
+
+#~ msgid "No GUI"
+#~ msgstr "Inget grensesnitt"
#~ msgctxt "igdb"
#~ msgid "%s on IGDB"
diff --git a/po/nl.po b/po/nl.po
index 83c865b8..e4bcabd0 100644
--- a/po/nl.po
+++ b/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-28 07:48+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-12-29 13:05+0000\n"
"Last-Translator: Heimen Stoffels \n"
"Language-Team: Dutch %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Spelbronnen"
@@ -859,6 +845,7 @@ msgstr "Geacthenticeerd"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Installeren"
@@ -1268,6 +1255,11 @@ msgstr "Alles selecteren"
msgid "Select directory to import"
msgstr "Kies de te importeren map"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s: Overlays"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Geen spelbronnen ingeschakeld"
@@ -1430,7 +1422,7 @@ msgid "Sort"
msgstr "Sorteren"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Labels"
@@ -1490,7 +1482,7 @@ msgstr "Schermafdrukmap openen"
msgid "Uninstall"
msgstr "Deïnstalleren"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Eigenschappen"
@@ -1699,23 +1691,33 @@ msgstr "Comptabiliteit:"
msgid "Configure"
msgstr "Instellen"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Label toevoegen"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+#, fuzzy
+msgid "No description"
+msgstr "Omschrijving"
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Kies bestand"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%du"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dm"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
@@ -1810,8 +1812,35 @@ msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "%1$d%% (%2$s / %3$s) [%4$s/s]"
-#~ msgid "Description"
-#~ msgstr "Omschrijving"
+#~ msgid "Disable esync"
+#~ msgstr "esync uitschakelen"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "LARE_ADDRESS_AWARE-functie afdwingen"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "DirectX 11-comptabiliteit uitschakelen"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "WineD3D11 gebruiken voor DirectX 11-comptabiliteit"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "DXVK-informatieoverlay tonen"
+
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "DirectX 9-comptabiliteit inschakelen"
+
+#~ msgid "Silent installation"
+#~ msgstr "Stille installatie"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Erg stille installatie"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Berichten onderdrukken"
+
+#~ msgid "No GUI"
+#~ msgstr "Zonder grafisch venster"
#~ msgctxt "igdb"
#~ msgid "%s on IGDB"
diff --git a/po/pl.po b/po/pl.po
index b33f17ca..fd2ae7ad 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-06-07 16:03+0000\n"
"Last-Translator: Antek Karaś \n"
"Language-Team: Polish =20) ? 1 : 2;\n"
"X-Generator: Weblate 3.7-dev\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "Pokaż pomoc"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "Pokaż wersję aplikacji i wyjdź"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr "Zrestartuj z załączonym debuggerem GDB"
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr "Pokaż pełen log z GDB"
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr ""
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "Pokaż główne okno"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr "Pokaż okno z ustawieniami aplikacji"
-#: src/app.vala:100
+#: src/app.vala:101
#, fuzzy
msgid "Show about dialog"
msgstr "Pokaż okno opcji kompatybilności"
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr "Maksymalna liczba wątków działających w tle"
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "Uruchom grę"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr "Pokaż okno opcji kompatybilności"
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "Otwórz szczegóły gry"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr "Otwórz właściwości gry"
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr "Włącz rejestrowanie debugowania"
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
@@ -86,35 +86,35 @@ msgstr ""
"Rejestruj proces uwierzytelniania i informacji poufnych takich jak tokeny "
"uwierzytelniania"
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr "Monitoruj menadżer pobierania"
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr "Rejestruj w tle zadania start/stop"
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr ""
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr "Pełne rejestrowanie"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "Opcje gry:"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "Pokaż pomoc dla opcji gry"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr "Opcje rejestrowania:"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr "Pokaż pomoc dotyczącą opcji rejestrowania"
@@ -190,52 +190,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr "Emulator"
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "Działa"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "Zainstalowany"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "Instalowanie"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr "Weryfikowanie integralności instalatora"
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "Pobieranie rozpoczęte"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "Nie zainstalowany"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "Zainstalowany"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "Instalowanie"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "Pobieranie"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "Nie zainstalowano"
@@ -258,12 +258,12 @@ msgstr ""
"Plik konfiguracji Steam nie znaleziony.\n"
"Zaloguj się na swoje konto w kliencie Steam i powróć do GameHub"
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr "%s: niema dostępnych instalatorów"
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -317,11 +317,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr "Ukryty"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "Edycja skryptu"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "Edycja niestandardowego skryptu"
@@ -345,8 +345,8 @@ msgstr "Uruchom"
msgid "Show WineWrap menu"
msgstr "Pokaż menu WineWrap"
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr "Zabij aplikacje w prefiksie"
@@ -354,60 +354,19 @@ msgstr "Zabij aplikacje w prefiksie"
msgid "Proton prefix"
msgstr "Proton prefiks"
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr "Wyłącz esync"
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr "Wymuś LARGE_ADDRESS_AWARE flagę"
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr "Wyłącz warstwę kompatybilności z DirectX 11"
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr "Użyj WineD3D11 jako warstwy kompatybilności z DirectX 11"
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr "Pokaż nakładkę informacyjną DXVK"
-
-#: src/data/compat/Proton.vala:58
-#, fuzzy
-msgid "Enable DirectX 9 compatibility layer"
-msgstr "Wyłącz warstwę kompatybilności z DirectX 11"
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr "Cicha instalacja"
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr "Bardzo cicha instalacja"
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr "Ukryj wiadomości"
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr "Bez GUI"
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr "Otwórz katalog prefiksu"
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr "Uruchom winecfg"
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr "Uruchom winetricks"
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr "Uruchom taskmgr"
@@ -826,6 +785,32 @@ msgstr ""
msgid "Disabled"
msgstr "Wyłącz esync"
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
#, fuzzy
msgid "Game sources"
@@ -877,6 +862,7 @@ msgstr "Uwierzytelnianie..."
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Instaluj"
@@ -1295,6 +1281,11 @@ msgstr "Wybierz instalator"
msgid "Select directory to import"
msgstr "Wybierz katalog"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s: Nakładki"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Brak aktywnych źródeł gry"
@@ -1461,7 +1452,7 @@ msgid "Sort"
msgstr "Sortuj:"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Tagi"
@@ -1524,7 +1515,7 @@ msgstr "Otwórz katalog prefiksu"
msgid "Uninstall"
msgstr "Odinstaluj"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Właściwości"
@@ -1737,23 +1728,33 @@ msgstr "Warstwa kompatybilności:"
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Dodaj tag"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+#, fuzzy
+msgid "No description"
+msgstr "Opis"
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Wybierz pliki"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dg"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dm"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1850,8 +1851,36 @@ msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "Pobieranie: %d%% (%s / %s) [%s/s]"
-#~ msgid "Description"
-#~ msgstr "Opis"
+#~ msgid "Disable esync"
+#~ msgstr "Wyłącz esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "Wymuś LARGE_ADDRESS_AWARE flagę"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Wyłącz warstwę kompatybilności z DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Użyj WineD3D11 jako warstwy kompatybilności z DirectX 11"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "Pokaż nakładkę informacyjną DXVK"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Wyłącz warstwę kompatybilności z DirectX 11"
+
+#~ msgid "Silent installation"
+#~ msgstr "Cicha instalacja"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Bardzo cicha instalacja"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Ukryj wiadomości"
+
+#~ msgid "No GUI"
+#~ msgstr "Bez GUI"
#~ msgid "Disable fullscreen"
#~ msgstr "Wyłącz pełen ekran"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 1b9f30da..168cd251 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-08-22 15:24+0000\n"
"Last-Translator: Wilker Santana da Silva \n"
"Language-Team: Portuguese (Brazil) 1;\n"
"X-Generator: Weblate 3.9-dev\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "Mostrar ajuda"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "Mostrar versão do aplicativo e sair"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr "Reiniciar com o depurador do GDB vinculado"
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr "Mostrar registro completo do GDB"
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr "Tratar erros fatais como críticos e fechar a aplicação"
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "Mostrar janela principal"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr "Mostrar diálogo de opções do aplicativo"
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr "Mostrar o dialogo de \"Sobre\""
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr "Número máximo de threads em trabalho em segundo plano"
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "Executar o jogo"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr "Mostrar caixa de diálogo de opções de compatibilidade"
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "Abrir detalhes do jogo"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr "Abrir propriedades do jogo"
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr "Ativar log de depuração"
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
@@ -86,35 +86,35 @@ msgstr ""
"Registrar processo de autenticação e informações sensíveis como tokens de "
"autenticação"
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr "Log do gerenciador de download"
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr "Registrar trabalhadores de fundo iniciar/parar"
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr "Desativar filtro de registro de mensagens"
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr "Registro detalhado"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "Opções do Jogo:"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "Mostrar ajuda de opções de jogo"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr "Opções de Logs:"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr "Mostrar ajuda sobre logs"
@@ -190,52 +190,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr "Emulado"
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "Correndo"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "Instalado"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "Instalando"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr "Verificando a integridade do instalador"
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "Download iniciado"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "Não instalado"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "Instalado"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "Instalando"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "Baixando"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "Não instalado"
@@ -257,12 +257,12 @@ msgstr ""
"Arquivo de configuração do Steam não encontrado.\n"
"Entre na sua conta no cliente Steam e retorne ao GameHub"
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr "%s: instaladores não disponíveis"
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -318,11 +318,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr "Escondido"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "Editar script"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "Editar script personalizado"
@@ -349,8 +349,8 @@ msgstr "Jogar"
msgid "Show WineWrap menu"
msgstr "Mostrar menu do WineWrap"
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr "Mate aplicativos no prefixo"
@@ -358,60 +358,19 @@ msgstr "Mate aplicativos no prefixo"
msgid "Proton prefix"
msgstr "Prefixo do Proton"
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr "Desativar esync"
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr "Forçar sinalizador LARGE_ADDRESS_AWARE"
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr "Desativar camada de compatibilidade do DirectX 11"
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr "Use WineD3D11 como camada de compatibilidade DirectX 11"
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr "Mostrar sobreposição de informações do DXVK"
-
-#: src/data/compat/Proton.vala:58
-#, fuzzy
-msgid "Enable DirectX 9 compatibility layer"
-msgstr "Desativar camada de compatibilidade do DirectX 11"
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr "Instalação silenciosa"
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr "Instalação muito silenciosa"
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr "Suprimir mensagens"
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr "Sem GUI"
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr "Abrir diretório de prefixo"
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr "Executar winecfg"
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr "Executar winetricks"
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr "Executar taskmgr"
@@ -817,6 +776,32 @@ msgstr "Sair"
msgid "Disabled"
msgstr "Desativado"
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Fontes de jogos"
@@ -865,6 +850,7 @@ msgstr "Autenticado"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Instalar"
@@ -1274,6 +1260,11 @@ msgstr "Selecionar tudo"
msgid "Select directory to import"
msgstr "Selecione o diretório para importar"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s: Sobreposições"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Nenhuma fonte de jogo habilitada"
@@ -1438,7 +1429,7 @@ msgid "Sort"
msgstr "Ordenar"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Tags"
@@ -1498,7 +1489,7 @@ msgstr "Abrir diretório de capturas de tela"
msgid "Uninstall"
msgstr "Desinstalar"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Propriedades"
@@ -1707,23 +1698,33 @@ msgstr "Camada de compatibilidade:"
msgid "Configure"
msgstr "Configurar"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Adicionar etiqueta"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+#, fuzzy
+msgid "No description"
+msgstr "Descrição"
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Selecione o arquivo"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dh"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dm"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1820,8 +1821,36 @@ msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "Baixando: %d%% (%s / %s) [%s/s]"
-#~ msgid "Description"
-#~ msgstr "Descrição"
+#~ msgid "Disable esync"
+#~ msgstr "Desativar esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "Forçar sinalizador LARGE_ADDRESS_AWARE"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Desativar camada de compatibilidade do DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Use WineD3D11 como camada de compatibilidade DirectX 11"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "Mostrar sobreposição de informações do DXVK"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Desativar camada de compatibilidade do DirectX 11"
+
+#~ msgid "Silent installation"
+#~ msgstr "Instalação silenciosa"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Instalação muito silenciosa"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Suprimir mensagens"
+
+#~ msgid "No GUI"
+#~ msgstr "Sem GUI"
#~ msgctxt "igdb"
#~ msgid "%s on IGDB"
diff --git a/po/pt_PT.po b/po/pt_PT.po
index 12042fa5..885457dd 100644
--- a/po/pt_PT.po
+++ b/po/pt_PT.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-09-07 12:25+0000\n"
"Last-Translator: Manuela Silva \n"
"Language-Team: Portuguese (Portugal) 1;\n"
"X-Generator: Weblate 3.9-dev\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "Mostrar ajuda"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "Mostrar versão da aplicação e sair"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr "Reiniciar com o depurador GDB anexado"
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr ""
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr ""
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "Mostrar janela principal"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr "Mostrar janela das definições da aplicação"
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr "Mostrar janela sobre"
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr ""
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "Iniciar jogo"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr "Mostrar janela das opções de compatibilidade"
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "Abrir detalhes do jogo"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr "Abrir propriedades do jogo"
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr "Ativar registo da depuração"
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
@@ -82,35 +82,35 @@ msgstr ""
"Processo de autenticação de registo e informação confidencial, tal como "
"códigos de autenticação"
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr "Gestor de transferências de registo"
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr ""
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr ""
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr ""
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "Opções do jogo:"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "Mostrar ajuda das opções do jogo"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr "Opções de registo:"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr "Mostrar ajuda das opções de registo"
@@ -183,52 +183,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr "Emulado"
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "Em execução"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "Instalado"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "A instalar"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr "A verificar a integridade do instalador"
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "Transferência iniciada"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "Não instalado"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "Instalado"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "A instalar"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "A transferir"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "Não instalado"
@@ -248,12 +248,12 @@ msgid ""
"Login into your account in Steam client and return to GameHub"
msgstr ""
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr "%s: sem instaladores disponíveis"
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -307,11 +307,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr "Ocultado"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "Editar script"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "Editar script personalizado"
@@ -335,8 +335,8 @@ msgstr "Executar"
msgid "Show WineWrap menu"
msgstr "Mostrar menu de WineWrap"
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr ""
@@ -344,60 +344,19 @@ msgstr ""
msgid "Proton prefix"
msgstr "Prefixo do Proton"
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr "Desativar esync"
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr ""
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr "Desativar camada de compatibilidade com DirectX 11"
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr "Utilizar WineD3D11 como camada de compatibilidade com DirectX 11"
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr ""
-
-#: src/data/compat/Proton.vala:58
-#, fuzzy
-msgid "Enable DirectX 9 compatibility layer"
-msgstr "Desativar camada de compatibilidade com DirectX 11"
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr ""
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr ""
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr "Sem GUI"
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr "Abrir diretoria de prefixos"
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr "Excecutar winecfg"
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr "Executar winetricks"
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr "Executar taskmgr"
@@ -798,6 +757,32 @@ msgstr "Sair"
msgid "Disabled"
msgstr "Desativado"
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Fontes de jogo"
@@ -845,6 +830,7 @@ msgstr "Autenticado"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Instalar"
@@ -1237,6 +1223,11 @@ msgstr "Selecionar todos"
msgid "Select directory to import"
msgstr "Selecionar diretoria para importar"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Sem fontes de jogo ativadas"
@@ -1398,7 +1389,7 @@ msgid "Sort"
msgstr "Ordenar"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Etiquetas"
@@ -1458,7 +1449,7 @@ msgstr "Abrir diretoria das capturas de ecrã"
msgid "Uninstall"
msgstr "Desinstalar"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Propriedades"
@@ -1661,23 +1652,32 @@ msgstr "Camada de compatibilidade:"
msgid "Configure"
msgstr "Configurar"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Adicionar etiqueta"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Selecionar ficheiro"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dh"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dm"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1773,3 +1773,19 @@ msgstr "Transferência cancelada"
msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "A transferir: %d%% (%s / %s) [%s/s]"
+
+#~ msgid "Disable esync"
+#~ msgstr "Desativar esync"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Desativar camada de compatibilidade com DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Utilizar WineD3D11 como camada de compatibilidade com DirectX 11"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Desativar camada de compatibilidade com DirectX 11"
+
+#~ msgid "No GUI"
+#~ msgstr "Sem GUI"
diff --git a/po/ru.po b/po/ru.po
index 7b90dd24..79d31985 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-01-14 12:25+0000\n"
"Last-Translator: Anatoliy Kashkin \n"
"Language-Team: Russian =20) ? 1 : 2;\n"
"X-Generator: Weblate 3.4-dev\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "Показать справку"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "Показать версию приложения и выйти"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr "Перезапустить с подключенным отладчиком GDB"
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr "Показывать полный стек вызовов в GDB"
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr "Считать фатальные ошибки критическими и завершать приложение"
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "Показать главное окно"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr "Показать диалог настроек приложения"
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr "Показать диалог информации о программе"
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr "Максимальное количество фоновых потоков"
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "Запустить игру"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr "Показать диалог опций совместимости"
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "Открыть информацию об игре"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr "Открыть свойства игры"
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr "Включить отладочные сообщения"
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
@@ -84,35 +84,35 @@ msgstr ""
"Выводить сообщения о процессе аутентификации и конфиденциальную информацию, "
"такую как токены аутентификации"
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr "Выводить сообщения менеджера загрузок"
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr "Выводить сообщения о запуске/остановке фоновых потоков"
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr "Отключить фильтрацию отладочных сообщений"
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr "Подробные сообщения"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "Параметры игр:"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "Показать справку о параметрах игр"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr "Параметры журналирования:"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr "Показать справку о параметрах журналирования"
@@ -187,52 +187,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr "Эмулируемые"
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "Запущена"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "Установлена"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "Установка"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr "Проверка целостности установщика"
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "Загрузка начата"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "Не установлена"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "Установленные"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "Установка"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "Загрузка"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "Не установленные"
@@ -254,12 +254,12 @@ msgstr ""
"Файл конфигурации Steam не найден.\n"
"Войдите в ваш аккаунт в клиенте Steam и вернитесь в GameHub"
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr "%s: нет доступных установщиков"
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -271,25 +271,25 @@ msgstr ""
#, c-format
msgctxt "itch_dl_status"
msgid "%s left;"
-msgstr ""
+msgstr "%s осталось;"
#: src/data/sources/itch/ItchDownloader.vala:195
#, c-format
msgctxt "itch_dl_status"
msgid "%d%%"
-msgstr ""
+msgstr "%d%%"
#: src/data/sources/itch/ItchDownloader.vala:198
#, c-format
msgctxt "itch_dl_status"
msgid "(%1$s / %2$s)"
-msgstr ""
+msgstr "(%1$s / %2$s)"
#: src/data/sources/itch/ItchDownloader.vala:201
#, c-format
msgctxt "itch_dl_status"
msgid "[%s/s]"
-msgstr ""
+msgstr "[%s/с]"
#: src/data/sources/user/User.vala:30
msgid "User games"
@@ -315,11 +315,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr "Скрытые"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "Редактировать скрипт"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "Редактировать пользовательский скрипт"
@@ -346,8 +346,8 @@ msgstr "Запустить"
msgid "Show WineWrap menu"
msgstr "Показать меню WineWrap"
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr "Завершить приложения в префиксе"
@@ -355,59 +355,19 @@ msgstr "Завершить приложения в префиксе"
msgid "Proton prefix"
msgstr "Префикс Proton"
-#: src/data/compat/Proton.vala:53
-msgid "Disable esync"
-msgstr "Выключить esync"
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr "Принудительно использовать флаг LARGE_ADDRESS_AWARE"
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr "Выключить слой совместимости с DirectX 11"
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr "Использовать WineD3D11 как слой совместимости DirectX 11"
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr "Показывать оверлей DXVK"
-
-#: src/data/compat/Proton.vala:58
-msgid "Enable DirectX 9 compatibility layer"
-msgstr "Выключить слой совместимости с DirectX 9"
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr "Тихая установка"
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr "Очень тихая установка"
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr "Подавить сообщения"
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr "Без интерфейса"
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr "Открыть директорию префикса"
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr "Запустить winecfg"
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr "Запустить winetricks"
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr "Запустить taskmgr"
@@ -811,6 +771,34 @@ msgstr "Выход"
msgid "Disabled"
msgstr "Отключено"
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr "Твики"
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr "Настройте опции запуска и применяйте их к играм автоматически"
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+"Твики загружаются из следующих директорий по порядку\n"
+"Последний твик перезаписывает предущие с одинаковым идентификатором"
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr "Кликните, чтобы открыть"
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr "Твики загружаются из %1$s и ещё %2$d директорий (?)"
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Источники игр"
@@ -858,6 +846,7 @@ msgstr "Авторизован"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Установить"
@@ -1268,6 +1257,11 @@ msgstr "Выделить всё"
msgid "Select directory to import"
msgstr "Выберите папку для импорта"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr "%s: Твики"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Нет активных источников игр"
@@ -1431,7 +1425,7 @@ msgid "Sort"
msgstr "Сортировка"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Теги"
@@ -1491,7 +1485,7 @@ msgstr "Открыть папку скриншотов"
msgid "Uninstall"
msgstr "Деинсталлировать"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Свойства"
@@ -1709,23 +1703,31 @@ msgstr "Слой совместимости:"
msgid "Configure"
msgstr "Настроить"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Добавить тег"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr "Нет описания"
+
+#: src/ui/widgets/TweaksList.vala:124
+msgid "Edit file"
+msgstr "Редактировать файл"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dч"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%dм"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
@@ -1820,8 +1822,35 @@ msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "%1$d%% (%2$s / %3$s) [%4$s/с]"
-#~ msgid "Description"
-#~ msgstr "Описание"
+#~ msgid "Disable esync"
+#~ msgstr "Выключить esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "Принудительно использовать флаг LARGE_ADDRESS_AWARE"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "Выключить слой совместимости с DirectX 11"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "Использовать WineD3D11 как слой совместимости DirectX 11"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "Показывать оверлей DXVK"
+
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "Выключить слой совместимости с DirectX 9"
+
+#~ msgid "Silent installation"
+#~ msgstr "Тихая установка"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Очень тихая установка"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Подавить сообщения"
+
+#~ msgid "No GUI"
+#~ msgstr "Без интерфейса"
#~ msgctxt "igdb"
#~ msgid "%s on IGDB"
diff --git a/po/te.po b/po/te.po
index d79d41dd..33681021 100644
--- a/po/te.po
+++ b/po/te.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-08-11 08:23+0000\n"
"Last-Translator: asher hrudai \n"
"Language-Team: Telugu %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr ""
@@ -842,6 +828,7 @@ msgstr ""
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr ""
@@ -1234,6 +1221,11 @@ msgstr ""
msgid "Select directory to import"
msgstr ""
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr ""
@@ -1394,7 +1386,7 @@ msgid "Sort"
msgstr ""
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr ""
@@ -1454,7 +1446,7 @@ msgstr ""
msgid "Uninstall"
msgstr ""
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr ""
@@ -1657,23 +1649,31 @@ msgstr ""
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+msgid "Edit file"
+msgstr ""
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr ""
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr ""
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
diff --git a/po/tr.po b/po/tr.po
index 026fa8ae..c03d2c14 100644
--- a/po/tr.po
+++ b/po/tr.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-28 07:48+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-12-29 13:05+0000\n"
"Last-Translator: Oğuz Ersen \n"
"Language-Team: Turkish %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "Oyun kaynakları"
@@ -858,6 +844,7 @@ msgstr "Kimlik doğrulandı"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "Yükle"
@@ -1266,6 +1253,11 @@ msgstr "Tümünü seç"
msgid "Select directory to import"
msgstr "İçe aktaracak dizini seç"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s: Bindirmeler"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "Etkinleştirilmiş oyun kaynağı yok"
@@ -1428,7 +1420,7 @@ msgid "Sort"
msgstr "Sırala"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "Etiketler"
@@ -1488,7 +1480,7 @@ msgstr "Ekran görüntüleri dizinini aç"
msgid "Uninstall"
msgstr "Kaldır"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "Özellikler"
@@ -1697,23 +1689,32 @@ msgstr "Uyumluluk katmanı:"
msgid "Configure"
msgstr "Yapılandır"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "Etiket ekle"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "Dosya seç"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%dsaat"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%ddk"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%ds"
@@ -1807,3 +1808,33 @@ msgstr "İndirme iptal edildi"
msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "%%%1$d (%2$s / %3$s) [%4$s/s]"
+
+#~ msgid "Disable esync"
+#~ msgstr "Esync'i devre dışı bırak"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "LARGE_ADDRESS_AWARE bayrağını zorla"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "DirectX 11 uyumluluk katmanını devre dışı bırak"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "WineD3D11'i DirectX 11 uyumluluk katmanı olarak kullan"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "DXVK bilgi paylaşımını göster"
+
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "DirectX 9 uyumluluk katmanını etkinleştir"
+
+#~ msgid "Silent installation"
+#~ msgstr "Sessiz kurulum"
+
+#~ msgid "Very silent installation"
+#~ msgstr "Çok sessiz kurulum"
+
+#~ msgid "Suppress messages"
+#~ msgstr "Mesajları bastır"
+
+#~ msgid "No GUI"
+#~ msgstr "GUI yok"
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 78c625fb..e4edf079 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-12-29 13:05+0000\n"
"Last-Translator: wangling12 \n"
"Language-Team: Chinese (Simplified) %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
msgid "Game sources"
msgstr "游戏源"
@@ -850,6 +836,7 @@ msgstr "已认证"
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
msgid "Install"
msgstr "安装"
@@ -1256,6 +1243,11 @@ msgstr "全选"
msgid "Select directory to import"
msgstr "选择要导入的目录"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, fuzzy, c-format
+msgid "%s: Tweaks"
+msgstr "%s:覆盖"
+
#: src/ui/views/WelcomeView.vala:52
msgid "No enabled game sources"
msgstr "未启用的游戏源"
@@ -1418,7 +1410,7 @@ msgid "Sort"
msgstr "排序"
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr "标签"
@@ -1478,7 +1470,7 @@ msgstr "打开屏幕截图目录"
msgid "Uninstall"
msgstr "卸载"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
msgid "Properties"
msgstr "属性"
@@ -1676,23 +1668,32 @@ msgstr "兼容层:"
msgid "Configure"
msgstr "配置"
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
msgid "Add tag"
msgstr "添加标记"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "选择文件"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dh"
msgstr "%d小时"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%d分钟"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1789,3 +1790,33 @@ msgstr "下载已取消"
msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr "正在下载: %d%%(%s / %s) [%s/s]"
+
+#~ msgid "Disable esync"
+#~ msgstr "禁止esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "强制使用LARGE_ADDRESS_AWARE"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "禁用 DirectX 11 兼容性层"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "使用 WineD3D11 作为 DirectX 11 兼容性层"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "显示 DXVK 信息叠加"
+
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "禁用 DirectX 9兼容性层"
+
+#~ msgid "Silent installation"
+#~ msgstr "静默安装"
+
+#~ msgid "Very silent installation"
+#~ msgstr "非常静默的安装"
+
+#~ msgid "Suppress messages"
+#~ msgstr "禁止显示消息"
+
+#~ msgid "No GUI"
+#~ msgstr "没有 GUI"
diff --git a/po/zh_HK.po b/po/zh_HK.po
index 06374b37..b2271358 100644
--- a/po/zh_HK.po
+++ b/po/zh_HK.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-07-11 16:11+0000\n"
"Last-Translator: Anatoliy Kashkin \n"
"Language: zh_HK\n"
@@ -19,97 +19,97 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.8-dev\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "显示帮助"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "显示版本并退出"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr "重新启动附加的GDB调试器"
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr "显示完整的GDB回溯"
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr "将致命错误视为关键和崩溃应用程序"
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "显示主窗口"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr "显示应用设置对话框"
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr "显示对话框"
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr "最大后台工作线程数"
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "运行游戏"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr "显示兼容性选项对话框"
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "打开游戏细节"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr "打开游戏属性"
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr "启用调试日志记录"
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
msgstr "记录身份验证过程和敏感信息,如身份验证令牌"
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr "日志管理器"
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr "日志后台工作开始/停止"
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr "关闭日志信息过滤"
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr "详细记录"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "游戏选项:"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "显示游戏选项帮助"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr "记录选项:"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr "显示日志选项帮助"
@@ -184,52 +184,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr "模拟器"
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "正在运行"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "安装"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "安装"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr "验证安装程序完整性"
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "下载已开始"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "未安装"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "安装"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "安装"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "正在下载"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "未安装"
@@ -251,12 +251,12 @@ msgstr ""
"找不到Steam配置文件。\n"
"在Steam客户端登录您的帐户并返回GameHub"
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr "%s: 没有可用的安装程序"
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -312,11 +312,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr "隐藏的"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "编辑脚本"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "编辑自定义脚本"
@@ -342,8 +342,8 @@ msgstr "运行"
msgid "Show WineWrap menu"
msgstr "显示WineWrap菜单"
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr "终止前缀中的应用程序"
@@ -351,61 +351,19 @@ msgstr "终止前缀中的应用程序"
msgid "Proton prefix"
msgstr "Proton 前缀"
-#: src/data/compat/Proton.vala:53
-#, fuzzy
-msgid "Disable esync"
-msgstr "禁用esync"
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr "强制使用 LARGE_ADDRESS_AWARE 标志"
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr "禁用DirectX 11兼容层"
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr "使用wined3d11作为Directx11兼容层"
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr "显示dxvk信息覆盖"
-
-#: src/data/compat/Proton.vala:58
-#, fuzzy
-msgid "Enable DirectX 9 compatibility layer"
-msgstr "禁用DirectX 11兼容层"
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr "静默安装"
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr "非常安静的安装"
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr "禁止显示消息"
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr "无图形用户界面"
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr "打开前缀目录"
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr "运行winecfg"
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr "运行winetricks"
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr "运行任务管理器"
@@ -825,6 +783,32 @@ msgstr ""
msgid "Disabled"
msgstr ""
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
#, fuzzy
msgid "Game sources"
@@ -876,6 +860,7 @@ msgstr ""
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
#, fuzzy
msgid "Install"
msgstr "安装"
@@ -1298,6 +1283,11 @@ msgstr "选择"
msgid "Select directory to import"
msgstr "选择目录"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
#, fuzzy
msgid "No enabled game sources"
@@ -1466,7 +1456,7 @@ msgid "Sort"
msgstr ""
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr ""
@@ -1536,7 +1526,7 @@ msgstr "打开前缀目录"
msgid "Uninstall"
msgstr "安装"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
#, fuzzy
msgid "Properties"
msgstr "打开游戏属性"
@@ -1739,24 +1729,33 @@ msgstr "禁用DirectX 11兼容层"
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
#, fuzzy
msgid "Add tag"
msgstr "加游戏"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "选择"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%dh"
msgstr "%d分"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%d分"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1855,3 +1854,35 @@ msgstr "下载开始玩了"
msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr ""
+
+#, fuzzy
+#~ msgid "Disable esync"
+#~ msgstr "禁用esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "强制使用 LARGE_ADDRESS_AWARE 标志"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "禁用DirectX 11兼容层"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "使用wined3d11作为Directx11兼容层"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "显示dxvk信息覆盖"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "禁用DirectX 11兼容层"
+
+#~ msgid "Silent installation"
+#~ msgstr "静默安装"
+
+#~ msgid "Very silent installation"
+#~ msgstr "非常安静的安装"
+
+#~ msgid "Suppress messages"
+#~ msgstr "禁止显示消息"
+
+#~ msgid "No GUI"
+#~ msgstr "无图形用户界面"
diff --git a/po/zh_TW.po b/po/zh_TW.po
index 4fc8bd56..345e8be0 100644
--- a/po/zh_TW.po
+++ b/po/zh_TW.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: com.github.tkashkin.gamehub\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-12-29 05:30+0300\n"
+"POT-Creation-Date: 2020-01-12 17:59+0300\n"
"PO-Revision-Date: 2019-07-11 16:11+0000\n"
"Last-Translator: Anatoliy Kashkin \n"
"Language: zh_TW\n"
@@ -19,97 +19,97 @@ msgstr ""
"Plural-Forms: nplurals=1; plural=0;\n"
"X-Generator: Weblate 3.8-dev\n"
-#: src/app.vala:90
+#: src/app.vala:91
msgid "Show help"
msgstr "显示帮助"
-#: src/app.vala:91
+#: src/app.vala:92
msgid "Show application version and exit"
msgstr "显示版本并退出"
-#: src/app.vala:92
+#: src/app.vala:93
msgid "Restart with GDB debugger attached"
msgstr "重新启动附加的GDB调试器"
-#: src/app.vala:93
+#: src/app.vala:94
msgid "Show full GDB backtrace"
msgstr "显示完整的GDB回溯"
-#: src/app.vala:94
+#: src/app.vala:95
msgid "Treat fatal errors as criticals and crash application"
msgstr "将致命错误视为关键和崩溃应用程序"
-#: src/app.vala:98
+#: src/app.vala:99
msgid "Show main window"
msgstr "显示主窗口"
-#: src/app.vala:99
+#: src/app.vala:100
msgid "Show application settings dialog"
msgstr "显示应用设置对话框"
-#: src/app.vala:100
+#: src/app.vala:101
msgid "Show about dialog"
msgstr "显示对话框"
-#: src/app.vala:101
+#: src/app.vala:102
msgid "Maximum number of background worker threads"
msgstr "最大后台工作线程数"
-#: src/app.vala:105
+#: src/app.vala:106
msgid "Run game"
msgstr "运行游戏"
-#: src/app.vala:106
+#: src/app.vala:107
msgid "Show compatibility options dialog"
msgstr "显示兼容性选项对话框"
-#: src/app.vala:107
+#: src/app.vala:108
msgid "Open game details"
msgstr "打开游戏细节"
-#: src/app.vala:108
+#: src/app.vala:109
msgid "Open game properties"
msgstr "打开游戏属性"
-#: src/app.vala:112
+#: src/app.vala:113
msgid "Enable debug logging"
msgstr "启用调试日志记录"
-#: src/app.vala:113
+#: src/app.vala:114
msgid ""
"Log authentication process and sensitive information like authentication "
"tokens"
msgstr "记录身份验证过程和敏感信息,如身份验证令牌"
-#: src/app.vala:114
+#: src/app.vala:115
msgid "Log download manager"
msgstr "日志管理器"
-#: src/app.vala:115
+#: src/app.vala:116
msgid "Log background workers start/stop"
msgstr "日志后台工作开始/停止"
-#: src/app.vala:116
+#: src/app.vala:117
msgid "Disable log messages filtering"
msgstr "关闭日志信息过滤"
-#: src/app.vala:117
+#: src/app.vala:118
msgid "Verbose logging"
msgstr "详细记录"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Game Options:"
msgstr "游戏选项:"
-#: src/app.vala:246
+#: src/app.vala:247
msgid "Show game options help"
msgstr "显示游戏选项帮助"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Logging Options:"
msgstr "记录选项:"
-#: src/app.vala:254
+#: src/app.vala:255
msgid "Show logging options help"
msgstr "显示日志选项帮助"
@@ -184,52 +184,52 @@ msgctxt "platform"
msgid "Emulated"
msgstr "模拟器"
-#: src/data/Game.vala:547
+#: src/data/Game.vala:555
msgctxt "status"
msgid "Running"
msgstr "正在运行"
-#: src/data/Game.vala:550
+#: src/data/Game.vala:558
msgctxt "status"
msgid "Installed"
msgstr "安装"
-#: src/data/Game.vala:551
+#: src/data/Game.vala:559
msgctxt "status"
msgid "Installing"
msgstr "安装"
-#: src/data/Game.vala:552
+#: src/data/Game.vala:560
msgctxt "status"
msgid "Verifying installer integrity"
msgstr "验证安装程序完整性"
-#: src/data/Game.vala:553
+#: src/data/Game.vala:561
msgctxt "status"
msgid "Download started"
msgstr "下载已开始"
-#: src/data/Game.vala:555
+#: src/data/Game.vala:563
msgctxt "status"
msgid "Not installed"
msgstr "未安装"
-#: src/data/Game.vala:565
+#: src/data/Game.vala:573
msgctxt "status_header"
msgid "Installed"
msgstr "安装"
-#: src/data/Game.vala:566
+#: src/data/Game.vala:574
msgctxt "status_header"
msgid "Installing"
msgstr "安装"
-#: src/data/Game.vala:568
+#: src/data/Game.vala:576
msgctxt "status_header"
msgid "Downloading"
msgstr "正在下载"
-#: src/data/Game.vala:570
+#: src/data/Game.vala:578
msgctxt "status_header"
msgid "Not installed"
msgstr "未安装"
@@ -251,12 +251,12 @@ msgstr ""
"找不到Steam配置文件。\n"
"在Steam客户端登录您的帐户并返回GameHub"
-#: src/data/sources/humble/HumbleGame.vala:333
+#: src/data/sources/humble/HumbleGame.vala:341
#, c-format
msgid "%s: no available installers"
msgstr "%s: 没有可用的安装程序"
-#: src/data/sources/humble/HumbleGame.vala:334
+#: src/data/sources/humble/HumbleGame.vala:342
msgid ""
"Cannot get Trove download URL.\n"
"Make sure your Humble Monthly subscription is active."
@@ -312,11 +312,11 @@ msgctxt "tag"
msgid "Hidden"
msgstr "隐藏的"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit script"
msgstr "编辑脚本"
-#: src/data/compat/CustomScript.vala:59
+#: src/data/compat/CustomScript.vala:60
msgid "Edit custom script"
msgstr "编辑自定义脚本"
@@ -342,8 +342,8 @@ msgstr "运行"
msgid "Show WineWrap menu"
msgstr "显示WineWrap菜单"
-#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:132
-#: src/data/compat/Wine.vala:87
+#: src/data/compat/WineWrap.vala:67 src/data/compat/Proton.vala:122
+#: src/data/compat/Wine.vala:83
msgid "Kill apps in prefix"
msgstr "终止前缀中的应用程序"
@@ -351,61 +351,19 @@ msgstr "终止前缀中的应用程序"
msgid "Proton prefix"
msgstr "Proton 前缀"
-#: src/data/compat/Proton.vala:53
-#, fuzzy
-msgid "Disable esync"
-msgstr "禁用esync"
-
-#: src/data/compat/Proton.vala:54
-msgid "Force LARGE_ADDRESS_AWARE flag"
-msgstr "强制使用 LARGE_ADDRESS_AWARE 标志"
-
-#: src/data/compat/Proton.vala:55
-msgid "Disable DirectX 11 compatibility layer"
-msgstr "禁用DirectX 11兼容层"
-
-#: src/data/compat/Proton.vala:56
-msgid "Use WineD3D11 as DirectX 11 compatibility layer"
-msgstr "使用wined3d11作为Directx11兼容层"
-
-#: src/data/compat/Proton.vala:57
-msgid "Show DXVK info overlay"
-msgstr "显示dxvk信息覆盖"
-
-#: src/data/compat/Proton.vala:58
-#, fuzzy
-msgid "Enable DirectX 9 compatibility layer"
-msgstr "禁用DirectX 11兼容层"
-
-#: src/data/compat/Proton.vala:65 src/data/compat/Wine.vala:66
-msgid "Silent installation"
-msgstr "静默安装"
-
-#: src/data/compat/Proton.vala:66 src/data/compat/Wine.vala:67
-msgid "Very silent installation"
-msgstr "非常安静的安装"
-
-#: src/data/compat/Proton.vala:67 src/data/compat/Wine.vala:68
-msgid "Suppress messages"
-msgstr "禁止显示消息"
-
-#: src/data/compat/Proton.vala:68 src/data/compat/Wine.vala:69
-msgid "No GUI"
-msgstr "无图形用户界面"
-
-#: src/data/compat/Proton.vala:120 src/data/compat/Wine.vala:75
+#: src/data/compat/Proton.vala:110 src/data/compat/Wine.vala:71
msgid "Open prefix directory"
msgstr "打开前缀目录"
-#: src/data/compat/Proton.vala:123 src/data/compat/Wine.vala:78
+#: src/data/compat/Proton.vala:113 src/data/compat/Wine.vala:74
msgid "Run winecfg"
msgstr "运行winecfg"
-#: src/data/compat/Proton.vala:126 src/data/compat/Wine.vala:81
+#: src/data/compat/Proton.vala:116 src/data/compat/Wine.vala:77
msgid "Run winetricks"
msgstr "运行winetricks"
-#: src/data/compat/Proton.vala:129 src/data/compat/Wine.vala:84
+#: src/data/compat/Proton.vala:119 src/data/compat/Wine.vala:80
msgid "Run taskmgr"
msgstr "运行任务管理器"
@@ -825,6 +783,32 @@ msgstr ""
msgid "Disabled"
msgstr ""
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:33
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:47
+#: src/ui/dialogs/GameTweaksDialog.vala:53
+#: src/ui/views/GamesView/GameContextMenu.vala:183
+msgid "Tweaks"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:34
+msgid "Tweak launch options and apply them to games automatically"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:79
+msgid ""
+"Tweaks are loaded from following directories in order\n"
+"Last tweak overrides previous tweaks with same identifiers"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:83
+msgid "Click to open"
+msgstr ""
+
+#: src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala:93
+#, c-format
+msgid "Tweaks are loaded from %1$s and %2$d more directories (?)"
+msgstr ""
+
#: src/ui/dialogs/SettingsDialog/pages/sources/Steam.vala:38
#, fuzzy
msgid "Game sources"
@@ -876,6 +860,7 @@ msgstr ""
#: src/ui/views/GamesView/GameContextMenu.vala:80
#: src/ui/views/GameDetailsView/MultipleGamesDetailsView.vala:143
#: src/ui/views/GameDetailsView/GameDetailsPage.vala:233
+#: src/ui/widgets/TweaksList.vala:95
#, fuzzy
msgid "Install"
msgstr "安装"
@@ -1298,6 +1283,11 @@ msgstr "选择"
msgid "Select directory to import"
msgstr "选择目录"
+#: src/ui/dialogs/GameTweaksDialog.vala:40
+#, c-format
+msgid "%s: Tweaks"
+msgstr ""
+
#: src/ui/views/WelcomeView.vala:52
#, fuzzy
msgid "No enabled game sources"
@@ -1466,7 +1456,7 @@ msgid "Sort"
msgstr ""
#: src/ui/views/GamesView/FiltersPopover.vala:234
-#: src/ui/widgets/GameTagsList.vala:59
+#: src/ui/widgets/GameTagsList.vala:58
msgid "Tags"
msgstr ""
@@ -1536,7 +1526,7 @@ msgstr "打开前缀目录"
msgid "Uninstall"
msgstr "安装"
-#: src/ui/views/GamesView/GameContextMenu.vala:184
+#: src/ui/views/GamesView/GameContextMenu.vala:192
#, fuzzy
msgid "Properties"
msgstr "打开游戏属性"
@@ -1739,24 +1729,33 @@ msgstr "禁用DirectX 11兼容层"
msgid "Configure"
msgstr ""
-#: src/ui/widgets/GameTagsList.vala:110
+#: src/ui/widgets/GameTagsList.vala:109
#, fuzzy
msgid "Add tag"
msgstr "加游戏"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/ui/widgets/TweaksList.vala:86
+msgid "No description"
+msgstr ""
+
+#: src/ui/widgets/TweaksList.vala:124
+#, fuzzy
+msgid "Edit file"
+msgstr "选择"
+
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%dh"
msgstr "%d分"
-#: src/utils/Utils.vala:342 src/utils/Utils.vala:350
+#: src/utils/Utils.vala:427 src/utils/Utils.vala:435
#, c-format
msgctxt "time"
msgid "%dm"
msgstr "%d分"
-#: src/utils/Utils.vala:350
+#: src/utils/Utils.vala:435
#, fuzzy, c-format
msgctxt "time"
msgid "%ds"
@@ -1855,3 +1854,35 @@ msgstr "下载开始玩了"
msgctxt "dl_status"
msgid "%1$d%% (%2$s / %3$s) [%4$s/s]"
msgstr ""
+
+#, fuzzy
+#~ msgid "Disable esync"
+#~ msgstr "禁用esync"
+
+#~ msgid "Force LARGE_ADDRESS_AWARE flag"
+#~ msgstr "强制使用 LARGE_ADDRESS_AWARE 标志"
+
+#~ msgid "Disable DirectX 11 compatibility layer"
+#~ msgstr "禁用DirectX 11兼容层"
+
+#~ msgid "Use WineD3D11 as DirectX 11 compatibility layer"
+#~ msgstr "使用wined3d11作为Directx11兼容层"
+
+#~ msgid "Show DXVK info overlay"
+#~ msgstr "显示dxvk信息覆盖"
+
+#, fuzzy
+#~ msgid "Enable DirectX 9 compatibility layer"
+#~ msgstr "禁用DirectX 11兼容层"
+
+#~ msgid "Silent installation"
+#~ msgstr "静默安装"
+
+#~ msgid "Very silent installation"
+#~ msgstr "非常安静的安装"
+
+#~ msgid "Suppress messages"
+#~ msgstr "禁止显示消息"
+
+#~ msgid "No GUI"
+#~ msgstr "无图形用户界面"
diff --git a/src/app.vala b/src/app.vala
index 1c3da098..5739f4d2 100644
--- a/src/app.vala
+++ b/src/app.vala
@@ -27,6 +27,7 @@ using GameHub.Data.Sources.GOG;
using GameHub.Data.Sources.Humble;
using GameHub.Data.Sources.Itch;
using GameHub.Data.Sources.User;
+using GameHub.Data.Tweaks;
using GameHub.Utils;
namespace GameHub
@@ -338,7 +339,7 @@ namespace GameHub
};
info("Restarting with GDB");
- Utils.run(exec_cmd, Environment.get_current_dir());
+ Utils.run(exec_cmd).dir(Environment.get_current_dir()).run_sync();
exit_status = 0;
return true;
}
diff --git a/src/data/Emulator.vala b/src/data/Emulator.vala
index 56a4494c..75499bc4 100644
--- a/src/data/Emulator.vala
+++ b/src/data/Emulator.vala
@@ -172,7 +172,7 @@ namespace GameHub.Data
{
Runnable.IsLaunched = is_running = true;
- yield Utils.run_thread(get_args(null, executable), executable.get_parent().get_path(), null, true);
+ yield Utils.run(get_args(null, executable)).dir(executable.get_parent().get_path()).override_runtime(true).run_sync_thread();
Timeout.add_seconds(1, () => {
Runnable.IsLaunched = is_running = false;
@@ -200,7 +200,13 @@ namespace GameHub.Data
}
var dir = game != null && launch_in_game_dir ? game.install_dir : install_dir;
- yield Utils.run_thread(get_args(game, executable), dir.get_path(), null, true);
+
+ var task = Utils.run(get_args(game, executable)).dir(dir.get_path()).override_runtime(true);
+ if(game != null && game is TweakableGame)
+ {
+ task.tweaks(((TweakableGame) game).get_enabled_tweaks());
+ }
+ yield task.run_sync_thread();
Timeout.add_seconds(1, () => {
Runnable.IsLaunched = is_running = false;
diff --git a/src/data/Game.vala b/src/data/Game.vala
index 624f94e6..218e0dd5 100644
--- a/src/data/Game.vala
+++ b/src/data/Game.vala
@@ -21,6 +21,7 @@ using Gtk;
using GameHub.Utils;
using GameHub.Data.DB;
+using GameHub.Data.Tweaks;
namespace GameHub.Data
{
@@ -141,7 +142,14 @@ namespace GameHub.Data
last_launch = get_real_time() / 1000000;
save();
- yield Utils.run_thread(cmd, executable.get_parent().get_path(), null, true);
+
+ var task = Utils.run(cmd).dir(executable.get_parent().get_path()).override_runtime(true);
+ if(this is TweakableGame)
+ {
+ task.tweaks(((TweakableGame) this).get_enabled_tweaks());
+ }
+ yield task.run_sync_thread();
+
playtime_tracked += ((get_real_time() / 1000000) - last_launch) / 60;
save();
@@ -591,4 +599,23 @@ namespace GameHub.Data
public string? image { get { return unlocked ? image_unlocked : image_locked; } }
}
}
+
+ public interface TweakableGame: Game
+ {
+ public abstract string[]? tweaks { get; set; default = null; }
+
+ public Tweak[] get_enabled_tweaks(CompatTool? tool=null)
+ {
+ Tweak[] enabled_tweaks = {};
+ var all_tweaks = Tweak.load_tweaks();
+ foreach(var tweak in all_tweaks.values)
+ {
+ if(tweak.is_enabled(this) && tweak.is_applicable_to(this, tool))
+ {
+ enabled_tweaks += tweak;
+ }
+ }
+ return enabled_tweaks;
+ }
+ }
}
diff --git a/src/data/Runnable.vala b/src/data/Runnable.vala
index 5644e123..2b91f4d0 100644
--- a/src/data/Runnable.vala
+++ b/src/data/Runnable.vala
@@ -147,7 +147,7 @@ namespace GameHub.Data
executable = file;
if(executable != null && executable.query_exists())
{
- Utils.run({"chmod", "+x", executable.get_path()});
+ Utils.run({"chmod", "+x", executable.get_path()}).run_sync();
}
if(update)
@@ -194,7 +194,7 @@ namespace GameHub.Data
if(executable.query_exists())
{
- Utils.run({"chmod", "+x", executable.get_path()});
+ Utils.run({"chmod", "+x", executable.get_path()}).run_sync();
}
if(update)
@@ -219,7 +219,7 @@ namespace GameHub.Data
{
get
{
- return (!is_supported(null, false) && is_supported(null, true)) || (executable != null && executable.get_basename().has_suffix(".exe"));
+ return (!is_supported(null, false) && is_supported(null, true)) || (executable != null && executable.get_basename().down().has_suffix(".exe"));
}
}
@@ -361,7 +361,7 @@ namespace GameHub.Data
if(type != InstallerType.UNKNOWN) return type;
- var info = yield Utils.run_thread({"file", "-bi", file.get_path()});
+ var info = Utils.run({"file", "-bi", file.get_path()}).log(false).run_sync(true).output;
if(info != null && info.length > 0)
{
mime = info.split(";")[0];
@@ -481,7 +481,7 @@ namespace GameHub.Data
}
var path = file.get_path();
- Utils.run({"chmod", "+x", path});
+ Utils.run({"chmod", "+x", path}).run_sync();
FSUtils.mkdir(runnable.install_dir.get_path());
@@ -489,7 +489,7 @@ namespace GameHub.Data
if(type == InstallerType.WINDOWS_EXECUTABLE && tool is Compat.Innoextract)
{
- var desc = yield Utils.run_thread({"file", "-b", path});
+ var desc = Utils.run({"file", "-b", path}).log(false).run_sync(true).output;
if(desc != null && desc.length > 0 && NSIS_INSTALLER_DESCRIPTION in desc)
{
type = InstallerType.WINDOWS_NSIS_INSTALLER;
@@ -525,7 +525,7 @@ namespace GameHub.Data
if(cmd != null)
{
- yield Utils.run_async(cmd, null, null, false, true);
+ yield Utils.run(cmd).run_async();
}
if(type == InstallerType.WINDOWS_EXECUTABLE)
{
diff --git a/src/data/compat/CustomScript.vala b/src/data/compat/CustomScript.vala
index 5d345089..6f92dd09 100644
--- a/src/data/compat/CustomScript.vala
+++ b/src/data/compat/CustomScript.vala
@@ -17,6 +17,7 @@ along with GameHub. If not, see .
*/
using GameHub.Utils;
+using GameHub.Data.Tweaks;
using GameHub.Data.Sources.Steam;
@@ -72,7 +73,7 @@ GH_GAME_NAME_ESCAPED="${10}"
var script = gh_dir.get_child(SCRIPT);
if(script.query_exists())
{
- Utils.run({"chmod", "+x", script.get_path()});
+ Utils.run({"chmod", "+x", script.get_path()}).run_sync();
var executable_path = runnable.executable != null ? runnable.executable.get_path() : "null";
string[]? cmd = null;
if(runnable is Game)
@@ -84,7 +85,13 @@ GH_GAME_NAME_ESCAPED="${10}"
{
cmd = { script.get_path(), executable_path, runnable.id, runnable.name };
}
- yield Utils.run_thread(cmd, runnable.install_dir.get_path());
+
+ var task = Utils.run(cmd).dir(runnable.install_dir.get_path());
+ if(runnable is TweakableGame)
+ {
+ task.tweaks(((TweakableGame) runnable).get_enabled_tweaks(this));
+ }
+ yield task.run_sync_thread();
}
else
{
@@ -99,12 +106,18 @@ GH_GAME_NAME_ESCAPED="${10}"
var script = gh_dir.get_child(SCRIPT);
if(script.query_exists())
{
- Utils.run({"chmod", "+x", script.get_path()});
+ Utils.run({"chmod", "+x", script.get_path()}).run_sync();
var executable_path = emu.executable != null ? emu.executable.get_path() : "null";
var game_executable_path = game != null && game.executable != null ? game.executable.get_path() : "null";
string[] cmd = { script.get_path(), executable_path, emu.id, emu.name, game_executable_path, game.id, game.full_id, game.name, game.escaped_name };
var dir = game != null && launch_in_game_dir ? game.install_dir : emu.install_dir;
- yield Utils.run_thread(cmd, dir.get_path());
+
+ var task = Utils.run(cmd).dir(dir.get_path());
+ if(game is TweakableGame)
+ {
+ task.tweaks(((TweakableGame) game).get_enabled_tweaks(this));
+ }
+ yield task.run_sync_thread();
}
else
{
@@ -135,7 +148,7 @@ GH_GAME_NAME_ESCAPED="${10}"
warning("[CustomScript.edit_script] %s", e.message);
}
}
- Utils.run({"chmod", "+x", script.get_path()});
+ Utils.run({"chmod", "+x", script.get_path()}).run_sync();
Utils.open_uri(script.get_uri());
}
}
diff --git a/src/data/compat/DOSBox.vala b/src/data/compat/DOSBox.vala
index 73a9a5e1..82fe4738 100644
--- a/src/data/compat/DOSBox.vala
+++ b/src/data/compat/DOSBox.vala
@@ -50,47 +50,8 @@ namespace GameHub.Data.Compat
CompatTool.Option[] options = {};
additional_configs.clear();
- var data_path = ProjectConfig.PROJECT_NAME + "/compat/dosbox";
-
- string[] data_dirs = { FSUtils.file(ProjectConfig.DATADIR, data_path).get_path() };
- var user_data_dir = Environment.get_user_data_dir();
- var system_data_dirs = Environment.get_system_data_dirs();
-
- if(GameHub.Application.log_verbose)
- {
- debug("[DOSBox.init] ProjectConfig.DATADIR: '%s'", ProjectConfig.DATADIR);
- debug("[DOSBox.init] user_data_dir: '%s'", user_data_dir);
- }
-
- if(user_data_dir != null && user_data_dir.length > 0)
+ foreach(var data_dir in FSUtils.get_data_dirs("compat/dosbox"))
{
- var dir = FSUtils.file(user_data_dir, data_path).get_path();
- if(!(dir in data_dirs)) data_dirs += dir;
- }
-
- if(system_data_dirs != null && system_data_dirs.length > 0)
- {
- foreach(var system_data_dir in system_data_dirs)
- {
- if(GameHub.Application.log_verbose)
- {
- debug("[DOSBox.init] system_data_dir: '%s'", system_data_dir);
- }
- var dir = FSUtils.file(system_data_dir, data_path).get_path();
- if(!(dir in data_dirs)) data_dirs += dir;
- }
- }
-
- if(GameHub.Application.log_verbose)
- {
- debug("[DOSBox.init] data_dirs: {'%s'}", string.joinv("', '", data_dirs));
- }
-
- foreach(var dir in data_dirs)
- {
- var data_dir = FSUtils.file(dir);
- if(data_dir == null || !data_dir.query_exists()) continue;
-
if(GameHub.Application.log_verbose)
{
debug("[DOSBox.init] Config directory: '%s'", data_dir.get_path());
@@ -179,7 +140,7 @@ namespace GameHub.Data.Compat
private static bool is_dos_executable(File? file)
{
if(file == null || !file.query_exists()) return false;
- var type = Utils.run({"file", "-b", file.get_path()}, null, null, false, true, false);
+ var type = Utils.run({"file", "-b", file.get_path()}).log(false).run_sync(true).output;
if(type != null && type.length > 0)
{
return "DOS" in type;
@@ -254,7 +215,12 @@ namespace GameHub.Data.Compat
wdir = bundled_win_dosbox.get_parent();
}
- yield Utils.run_thread(combine_cmd_with_args(cmd, runnable), wdir.get_path());
+ var task = Utils.run(combine_cmd_with_args(cmd, runnable)).dir(wdir.get_path());
+ if(runnable is TweakableGame)
+ {
+ task.tweaks(((TweakableGame) runnable).get_enabled_tweaks(this));
+ }
+ yield task.run_sync_thread();
}
}
}
diff --git a/src/data/compat/Innoextract.vala b/src/data/compat/Innoextract.vala
index a693145c..e7b30200 100644
--- a/src/data/compat/Innoextract.vala
+++ b/src/data/compat/Innoextract.vala
@@ -46,7 +46,7 @@ namespace GameHub.Data.Compat
if(installed)
{
- version = Utils.run({ executable.get_path(), "-v", "-q", "-c", "0" }, null, null, false, true, false).replace(id, "").strip();
+ version = Utils.run({executable.get_path(), "-v", "-q", "-c", "0"}).log(false).run_sync(true).output.replace(id, "").strip();
name = name + " (" + version + ")";
if(Utils.compare_versions(Utils.parse_version(version), Innoextract.MIN_SUPPORTED_VERSION) < 0)
@@ -73,7 +73,7 @@ namespace GameHub.Data.Compat
string[] cmd = { executable.get_path(), "-e", "-m", "-d", runnable.install_dir.get_path() };
if(runnable is Sources.GOG.GOGGame) cmd += "--gog";
cmd += installer.get_path();
- yield Utils.run_thread(cmd, installer.get_parent().get_path());
+ yield Utils.run(cmd).dir(installer.get_parent().get_path()).run_sync_thread();
do
{
diff --git a/src/data/compat/Proton.vala b/src/data/compat/Proton.vala
index c698db8d..298eb373 100644
--- a/src/data/compat/Proton.vala
+++ b/src/data/compat/Proton.vala
@@ -49,23 +49,13 @@ namespace GameHub.Data.Compat
options = {
opt_prefix,
- opt_env,
- new CompatTool.BoolOption("PROTON_NO_ESYNC", _("Disable esync"), false),
- new CompatTool.BoolOption("PROTON_FORCE_LARGE_ADDRESS_AWARE", _("Force LARGE_ADDRESS_AWARE flag"), false),
- new CompatTool.BoolOption("PROTON_NO_D3D11", _("Disable DirectX 11 compatibility layer"), false),
- new CompatTool.BoolOption("PROTON_USE_WINED3D11", _("Use WineD3D11 as DirectX 11 compatibility layer"), false),
- new CompatTool.BoolOption("DXVK_HUD", _("Show DXVK info overlay"), true),
- new CompatTool.BoolOption("PROTON_USE_D9VK", _("Enable DirectX 9 compatibility layer"), false)
+ opt_env
};
install_options = {
opt_prefix,
opt_env,
- install_opt_innosetup_args,
- new CompatTool.BoolOption("/SILENT", _("Silent installation"), false),
- new CompatTool.BoolOption("/VERYSILENT", _("Very silent installation"), false),
- new CompatTool.BoolOption("/SUPPRESSMSGBOXES", _("Suppress messages"), false),
- new CompatTool.BoolOption("/NOGUI", _("No GUI"), false)
+ install_opt_innosetup_args
};
if(!is_latest)
@@ -143,7 +133,12 @@ namespace GameHub.Data.Compat
{
cmd = { executable.get_path(), "run", "msiexec", "/i", file.get_path() };
}
- yield Utils.run_thread(combine_cmd_with_args(cmd, runnable, args), dir.get_path(), prepare_env(runnable, parse_opts));
+ var task = Utils.run(combine_cmd_with_args(cmd, runnable, args)).dir(dir.get_path()).env(prepare_env(runnable, parse_opts));
+ if(runnable is TweakableGame)
+ {
+ task.tweaks(((TweakableGame) runnable).get_enabled_tweaks(this));
+ }
+ yield task.run_sync_thread();
}
public override File get_default_wineprefix(Runnable runnable)
@@ -155,7 +150,7 @@ namespace GameHub.Data.Compat
if(FSUtils.file(install_dir.get_path(), @"$(FSUtils.GAMEHUB_DIR)/$(binary)_$(arch)").query_exists())
{
- Utils.run({"bash", "-c", @"mv -f $(FSUtils.GAMEHUB_DIR)/$(id) $(FSUtils.GAMEHUB_DIR)/$(FSUtils.COMPAT_DATA_DIR)/$(id)"}, install_dir.get_path());
+ Utils.run({"bash", "-c", @"mv -f $(FSUtils.GAMEHUB_DIR)/$(id) $(FSUtils.GAMEHUB_DIR)/$(FSUtils.COMPAT_DATA_DIR)/$(id)"}).dir(install_dir.get_path()).run_sync();
FSUtils.rm(dosdevices.get_child("d:").get_path());
}
@@ -177,7 +172,7 @@ namespace GameHub.Data.Compat
{
if(dosdevices.get_path().has_prefix(runnable.install_dir.get_path()))
{
- Utils.run({"ln", "-nsf", "../../../../../", "d:"}, dosdevices.get_path());
+ Utils.run({"ln", "-nsf", "../../../../../", "d:"}).dir(dosdevices.get_path()).run_sync();
}
}
@@ -237,7 +232,10 @@ namespace GameHub.Data.Compat
if(!cmd.query_exists())
{
- yield Utils.run_thread({ executable.get_path(), "run", cmd.get_path(), "/c", "exit" }, runnable.install_dir.get_path(), prepare_env(runnable), false, true);
+ yield Utils.run({executable.get_path(), "run", cmd.get_path(), "/c", "exit"})
+ .dir(runnable.install_dir.get_path())
+ .env(prepare_env(runnable))
+ .run_sync_thread(true);
}
}
diff --git a/src/data/compat/RetroArch.vala b/src/data/compat/RetroArch.vala
index be67f7a1..ff7f465c 100644
--- a/src/data/compat/RetroArch.vala
+++ b/src/data/compat/RetroArch.vala
@@ -116,7 +116,7 @@ namespace GameHub.Data.Compat
string[] cmd = { executable.get_path(), "-L", core, runnable.executable.get_path() };
- yield Utils.run_thread(combine_cmd_with_args(cmd, runnable), runnable.install_dir.get_path());
+ yield Utils.run(combine_cmd_with_args(cmd, runnable)).dir(runnable.install_dir.get_path()).run_sync_thread();
}
}
}
diff --git a/src/data/compat/ScummVM.vala b/src/data/compat/ScummVM.vala
index 4779b0f3..1be0ca7c 100644
--- a/src/data/compat/ScummVM.vala
+++ b/src/data/compat/ScummVM.vala
@@ -47,7 +47,7 @@ namespace GameHub.Data.Compat
{
if(dir != null && dir.query_exists())
{
- var output = Utils.run({ executable.get_path(), "--detect" }, dir.get_path(), null, false, true, false);
+ var output = Utils.run({executable.get_path(), "--detect"}).dir(dir.get_path()).log(false).run_sync(true).output;
return !(SCUMMVM_NO_GAMES_WARNING in output);
}
return false;
@@ -73,7 +73,12 @@ namespace GameHub.Data.Compat
string[] cmd = { executable.get_path(), "--auto-detect" };
- yield Utils.run_thread(combine_cmd_with_args(cmd, runnable), dir.get_path());
+ var task = Utils.run(combine_cmd_with_args(cmd, runnable)).dir(dir.get_path());
+ if(runnable is TweakableGame)
+ {
+ task.tweaks(((TweakableGame) runnable).get_enabled_tweaks(this));
+ }
+ yield task.run_sync_thread();
}
}
}
diff --git a/src/data/compat/Wine.vala b/src/data/compat/Wine.vala
index 60695b57..60369411 100644
--- a/src/data/compat/Wine.vala
+++ b/src/data/compat/Wine.vala
@@ -62,11 +62,7 @@ namespace GameHub.Data.Compat
install_options = {
opt_prefix,
opt_env,
- install_opt_innosetup_args,
- new CompatTool.BoolOption("/SILENT", _("Silent installation"), false),
- new CompatTool.BoolOption("/VERYSILENT", _("Very silent installation"), false),
- new CompatTool.BoolOption("/SUPPRESSMSGBOXES", _("Suppress messages"), false),
- new CompatTool.BoolOption("/NOGUI", _("No GUI"), false)
+ install_opt_innosetup_args
};
if(installed)
@@ -171,7 +167,12 @@ namespace GameHub.Data.Compat
{
cmd = { executable.get_path(), "msiexec", "/i", file.get_path() };
}
- yield Utils.run_thread(combine_cmd_with_args(cmd, runnable, args), dir.get_path(), prepare_env(runnable));
+ var task = Utils.run(combine_cmd_with_args(cmd, runnable, args)).dir(dir.get_path()).env(prepare_env(runnable, parse_opts));
+ if(runnable is TweakableGame)
+ {
+ task.tweaks(((TweakableGame) runnable).get_enabled_tweaks(this));
+ }
+ yield task.run_sync_thread();
}
public virtual File get_default_wineprefix(Runnable runnable)
@@ -183,7 +184,7 @@ namespace GameHub.Data.Compat
if(FSUtils.file(install_dir.get_path(), @"$(FSUtils.GAMEHUB_DIR)/$(binary)_$(arch)").query_exists())
{
- Utils.run({"bash", "-c", @"mv -f $(FSUtils.GAMEHUB_DIR)/$(binary)_$(arch) $(FSUtils.GAMEHUB_DIR)/$(FSUtils.COMPAT_DATA_DIR)/$(binary)_$(arch)"}, install_dir.get_path());
+ Utils.run({"bash", "-c", @"mv -f $(FSUtils.GAMEHUB_DIR)/$(binary)_$(arch) $(FSUtils.GAMEHUB_DIR)/$(FSUtils.COMPAT_DATA_DIR)/$(binary)_$(arch)"}).dir(install_dir.get_path()).run_sync();
FSUtils.rm(dosdevices.get_child("d:").get_path());
}
@@ -205,7 +206,7 @@ namespace GameHub.Data.Compat
{
if(dosdevices.get_path().has_prefix(runnable.install_dir.get_path()))
{
- Utils.run({"ln", "-nsf", "../../../../", "d:"}, dosdevices.get_path());
+ Utils.run({"ln", "-nsf", "../../../../", "d:"}).dir(dosdevices.get_path()).run_sync();
}
}
@@ -280,17 +281,17 @@ namespace GameHub.Data.Compat
}
}
- yield Utils.run_thread(cmd, runnable.install_dir.get_path(), prepare_env(runnable));
+ yield Utils.run(cmd).dir(runnable.install_dir.get_path()).env(prepare_env(runnable)).run_sync_thread();
}
protected async void winetricks(Runnable runnable)
{
- yield Utils.run_thread({ "winetricks" }, runnable.install_dir.get_path(), prepare_env(runnable));
+ yield Utils.run({"winetricks"}).dir(runnable.install_dir.get_path()).env(prepare_env(runnable)).run_sync_thread();
}
public async string convert_path(Runnable runnable, File path)
{
- var win_path = (yield Utils.run_thread({ wine_binary.get_path(), "winepath", "-w", path.get_path() }, runnable.install_dir.get_path(), prepare_env(runnable), false, true)).strip();
+ var win_path = (yield Utils.run({wine_binary.get_path(), "winepath", "-w", path.get_path()}).dir(runnable.install_dir.get_path()).env(prepare_env(runnable)).log(false).run_sync_thread(true)).output.strip();
debug("[Wine.convert_path] '%s' -> '%s'", path.get_path(), win_path);
return win_path;
}
diff --git a/src/data/compat/WineWrap.vala b/src/data/compat/WineWrap.vala
index 70974df8..2f37389e 100644
--- a/src/data/compat/WineWrap.vala
+++ b/src/data/compat/WineWrap.vala
@@ -103,7 +103,7 @@ namespace GameHub.Data.Compat
if(wrapper == null || !wrapper.query_exists()) return;
string[] cmd = { "tar", "xf", wrapper.get_path(), "-C", wrapper_dir.get_path(), "--strip-components=1" };
- yield Utils.run_thread(cmd, wrapper_dir.get_path());
+ yield Utils.run(cmd).dir(wrapper_dir.get_path()).run_sync_thread();
var winewrap_env = Environ.get();
winewrap_env = Environ.set_variable(winewrap_env, "WINEWRAP_RESPATH", installer.get_parent().get_path());
@@ -113,7 +113,7 @@ namespace GameHub.Data.Compat
FSUtils.rm(runnable.install_dir.get_path(), null, "-rf");
cmd = { "bash", "-c", "./*_wine.sh -dirname=" + (runnable as GOGGame).escaped_name };
- yield Utils.run_thread(cmd, wrapper_dir.get_path(), winewrap_env);
+ yield Utils.run(cmd).dir(wrapper_dir.get_path()).env(winewrap_env).run_sync_thread();
runnable.executable = runnable.install_dir.get_child("start.sh");
}
@@ -139,7 +139,12 @@ namespace GameHub.Data.Compat
string[] cmd = { runnable.install_dir.get_child("start.sh").get_path(), action };
- yield Utils.run_thread(combine_cmd_with_args(cmd, runnable), runnable.install_dir.get_path());
+ var task = Utils.run(combine_cmd_with_args(cmd, runnable)).dir(runnable.install_dir.get_path());
+ if(runnable is TweakableGame)
+ {
+ task.tweaks(((TweakableGame) runnable).get_enabled_tweaks(this));
+ }
+ yield task.run_sync_thread();
}
}
}
diff --git a/src/data/db/Database.vala b/src/data/db/Database.vala
index d327df11..2199b089 100644
--- a/src/data/db/Database.vala
+++ b/src/data/db/Database.vala
@@ -29,7 +29,7 @@ namespace GameHub.Data.DB
{
public class Database
{
- public const int VERSION = 9;
+ public const int VERSION = 10;
public static Table[] TABLES;
public static Database instance;
diff --git a/src/data/db/tables/Games.vala b/src/data/db/tables/Games.vala
index 401c4e34..4562180d 100644
--- a/src/data/db/tables/Games.vala
+++ b/src/data/db/tables/Games.vala
@@ -53,6 +53,7 @@ namespace GameHub.Data.DB.Tables
public static Table.Field PLAYTIME_SOURCE;
public static Table.Field PLAYTIME_TRACKED;
public static Table.Field IMAGE_VERTICAL;
+ public static Table.Field TWEAKS;
public Games()
{
@@ -78,6 +79,7 @@ namespace GameHub.Data.DB.Tables
PLAYTIME_SOURCE = f(15);
PLAYTIME_TRACKED = f(16);
IMAGE_VERTICAL = f(17);
+ TWEAKS = f(18);
}
public override void migrate(Sqlite.Database db, int version)
@@ -120,6 +122,10 @@ namespace GameHub.Data.DB.Tables
case 8:
db.exec("ALTER TABLE `games` ADD `image_vertical` string");
break;
+
+ case 9:
+ db.exec("ALTER TABLE `games` ADD `tweaks` string");
+ break;
}
}
}
@@ -158,8 +164,9 @@ namespace GameHub.Data.DB.Tables
`last_launch`,
`playtime_source`,
`playtime_tracked`,
- `image_vertical`)
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", -1, out s);
+ `image_vertical`,
+ `tweaks`)
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", -1, out s);
if(res != Sqlite.OK)
{
@@ -181,6 +188,17 @@ namespace GameHub.Data.DB.Tables
tags += t.id;
}
+ string? tweaks = null;
+ if(game is TweakableGame && ((TweakableGame) game).tweaks != null)
+ {
+ tweaks = "";
+ foreach(var t in ((TweakableGame) game).tweaks)
+ {
+ if(tweaks.length > 0) tweaks += ",";
+ tweaks += t;
+ }
+ }
+
SOURCE.bind(s, game.source.id);
ID.bind(s, game.id);
NAME.bind(s, game.name);
@@ -199,6 +217,7 @@ namespace GameHub.Data.DB.Tables
PLAYTIME_SOURCE.bind_int64(s, game.playtime_source);
PLAYTIME_TRACKED.bind_int64(s, game.playtime_tracked);
IMAGE_VERTICAL.bind(s, game.image_vertical);
+ TWEAKS.bind(s, tweaks);
res = s.step();
diff --git a/src/data/sources/gog/GOGGame.vala b/src/data/sources/gog/GOGGame.vala
index 6bd314a8..908a2e09 100644
--- a/src/data/sources/gog/GOGGame.vala
+++ b/src/data/sources/gog/GOGGame.vala
@@ -22,8 +22,10 @@ using GameHub.Utils;
namespace GameHub.Data.Sources.GOG
{
- public class GOGGame: Game
+ public class GOGGame: Game, TweakableGame
{
+ public string[]? tweaks { get; set; default = null; }
+
public ArrayList? installers { get; protected set; default = new ArrayList(); }
public ArrayList? bonus_content { get; protected set; default = new ArrayList(); }
public ArrayList? dlc { get; protected set; default = new ArrayList(); }
@@ -140,6 +142,12 @@ namespace GameHub.Data.Sources.GOG
}
}
+ var tweaks_string = Tables.Games.TWEAKS.get(s);
+ if(tweaks_string != null)
+ {
+ tweaks = tweaks_string.split(",");
+ }
+
mount_overlays.begin();
update_status();
}
@@ -339,7 +347,7 @@ namespace GameHub.Data.Sources.GOG
{
uninstaller = FSUtils.expand(install_dir.get_path(), uninstaller);
debug("[GOGGame] Running uninstaller '%s'...", uninstaller);
- yield Utils.run_thread({uninstaller, "--noprompt", "--force"}, null, null, true);
+ yield Utils.run({uninstaller, "--noprompt", "--force"}).override_runtime(true).run_sync_thread();
}
else
{
diff --git a/src/data/sources/humble/HumbleGame.vala b/src/data/sources/humble/HumbleGame.vala
index f521415f..7fe1e7e3 100644
--- a/src/data/sources/humble/HumbleGame.vala
+++ b/src/data/sources/humble/HumbleGame.vala
@@ -22,8 +22,10 @@ using GameHub.Utils;
namespace GameHub.Data.Sources.Humble
{
- public class HumbleGame: Game
+ public class HumbleGame: Game, TweakableGame
{
+ public string[]? tweaks { get; set; default = null; }
+
public string order_id;
private bool game_info_updating = false;
@@ -155,6 +157,12 @@ namespace GameHub.Data.Sources.Humble
}
}
+ var tweaks_string = Tables.Games.TWEAKS.get(s);
+ if(tweaks_string != null)
+ {
+ tweaks = tweaks_string.split(",");
+ }
+
mount_overlays.begin();
update_status();
}
diff --git a/src/data/sources/user/UserGame.vala b/src/data/sources/user/UserGame.vala
index 8ab84f5f..3f81d475 100644
--- a/src/data/sources/user/UserGame.vala
+++ b/src/data/sources/user/UserGame.vala
@@ -22,8 +22,10 @@ using GameHub.Utils;
namespace GameHub.Data.Sources.User
{
- public class UserGame: Game
+ public class UserGame: Game, TweakableGame
{
+ public string[]? tweaks { get; set; default = null; }
+
private bool is_removed = false;
public signal void removed();
@@ -113,6 +115,12 @@ namespace GameHub.Data.Sources.User
}
}
+ var tweaks_string = Tables.Games.TWEAKS.get(s);
+ if(tweaks_string != null)
+ {
+ tweaks = tweaks_string.split(",");
+ }
+
mount_overlays.begin();
update_status();
}
diff --git a/src/data/tweaks/Tweak.vala b/src/data/tweaks/Tweak.vala
new file mode 100644
index 00000000..a417194c
--- /dev/null
+++ b/src/data/tweaks/Tweak.vala
@@ -0,0 +1,446 @@
+/*
+This file is part of GameHub.
+Copyright (C) 2018-2019 Anatoliy Kashkin
+
+GameHub is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GameHub is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GameHub. If not, see .
+*/
+
+using Gee;
+
+using GameHub.Utils;
+
+namespace GameHub.Data.Tweaks
+{
+ public class Tweak: Object
+ {
+ public string id { get; protected set; }
+ public string? name { get; protected set; default = null; }
+ public string? description { get; protected set; default = null; }
+ public string? url { get; protected set; default = null; }
+
+ public ApplicabilityOptions? applicability_options { get; protected set; default = null; }
+
+ public HashMap? env { get; protected set; default = null; }
+ public string? command { get; protected set; default = null; }
+ public File? file { get; protected set; default = null; }
+
+ public Tweak(string id, string? name, string? description, string? url, ApplicabilityOptions? applicability_options, HashMap? env, string? command, File? file)
+ {
+ Object(id: id, name: name, description: description, url: url, applicability_options: applicability_options, env: env, command: command, file: file);
+ }
+
+ public Tweak.from_json_object(Json.Object obj, File? file, string? default_id=null)
+ {
+ string id = default_id ?? "tweak";
+ string? name = null;
+ string? description = null;
+ string? url = null;
+ ApplicabilityOptions? applicability_options = null;
+ HashMap? env = null;
+ string? command = null;
+
+ if(obj.has_member("id")) id = obj.get_string_member("id");
+ if(obj.has_member("name")) name = obj.get_string_member("name");
+ if(obj.has_member("description")) description = obj.get_string_member("description");
+ if(obj.has_member("url")) url = obj.get_string_member("url");
+
+ if(obj.has_member("applicable_to"))
+ applicability_options = new ApplicabilityOptions.from_json(obj.get_member("applicable_to"));
+
+ if(obj.has_member("env"))
+ {
+ env = new HashMap();
+ var env_object = obj.get_object_member("env");
+ foreach(var env_var in env_object.get_members())
+ {
+ var env_value = env_object.get_member(env_var);
+ if(env_value.get_node_type() == Json.NodeType.VALUE)
+ {
+ env.set(env_var, env_value.get_string());
+ }
+ else
+ {
+ env.set(env_var, null);
+ }
+ }
+ }
+
+ if(obj.has_member("command")) command = obj.get_string_member("command");
+
+ Object(id: id, name: name, description: description, url: url, applicability_options: applicability_options, env: env, command: command, file: file);
+ }
+
+ public static ArrayList load_from_file(File file)
+ {
+ var loaded_tweaks = new ArrayList();
+ string id = file.get_basename().replace(".json", "");
+
+ var node = Parser.parse_json_file(file.get_path());
+ switch(node.get_node_type())
+ {
+ case Json.NodeType.OBJECT:
+ loaded_tweaks.add(new Tweak.from_json_object(node.get_object(), file, id));
+ break;
+
+ case Json.NodeType.ARRAY:
+ int i = 0;
+ foreach(var tweak_node in node.get_array().get_elements())
+ {
+ if(tweak_node.get_node_type() == Json.NodeType.OBJECT)
+ {
+ loaded_tweaks.add(new Tweak.from_json_object(tweak_node.get_object(), file, @"$(id)[$(i++)]"));
+ }
+ }
+ break;
+ }
+
+ return loaded_tweaks;
+ }
+
+ public bool is_applicable_to(TweakableGame game, CompatTool? compat_tool=null)
+ {
+ if(applicability_options == null) return true;
+ return applicability_options.is_applicable_to(game, compat_tool);
+ }
+
+ public bool is_enabled(TweakableGame? game=null)
+ {
+ if(game == null || game.tweaks == null)
+ {
+ return id in Settings.Tweaks.instance.global;
+ }
+ else
+ {
+ return id in game.tweaks;
+ }
+ }
+
+ public void set_enabled(bool enabled, TweakableGame? game=null)
+ {
+ if(game == null)
+ {
+ var global = Settings.Tweaks.instance.global;
+ if(!enabled && id in global)
+ {
+ string[] new_global = {};
+ foreach(var t in global)
+ {
+ if(t != id) new_global += t;
+ }
+ Settings.Tweaks.instance.global = new_global;
+ }
+ else if(enabled && !(id in global))
+ {
+ global += id;
+ Settings.Tweaks.instance.global = global;
+ }
+ }
+ else
+ {
+ var game_tweaks = game.tweaks ?? Settings.Tweaks.instance.global;
+ if(!enabled && id in game_tweaks)
+ {
+ string[] new_game_tweaks = {};
+ foreach(var t in game_tweaks)
+ {
+ if(t != id) new_game_tweaks += t;
+ }
+ game.tweaks = new_game_tweaks;
+ game.save();
+ }
+ else if(enabled && !(id in game_tweaks))
+ {
+ game_tweaks += id;
+ game.tweaks = game_tweaks;
+ game.save();
+ }
+ }
+ }
+
+ public string icon
+ {
+ owned get
+ {
+ var icon = "system-run-symbolic";
+ if(applicability_options != null)
+ {
+ if(applicability_options.platforms != null && applicability_options.platforms.size > 0)
+ {
+ icon = applicability_options.platforms.first().icon();
+ }
+
+ if(applicability_options.compat_tool_ids != null && applicability_options.compat_tool_ids.size > 0)
+ {
+ var tool_id = applicability_options.compat_tool_ids.first();
+ foreach(var tool in CompatTools)
+ {
+ if(tool.id == tool_id || tool.id.has_prefix(@"$(tool_id)_"))
+ {
+ icon = tool.icon;
+ break;
+ }
+ }
+ }
+ }
+ return icon;
+ }
+ }
+
+ private static HashMap? tweaks = null;
+ public static HashMap load_tweaks(bool refresh=false)
+ {
+ if(tweaks != null && tweaks.size > 0 && !refresh)
+ {
+ return tweaks;
+ }
+
+ tweaks = new HashMap();
+
+ foreach(var data_dir in FSUtils.get_data_dirs("tweaks"))
+ {
+ if(GameHub.Application.log_verbose)
+ {
+ debug("[Tweak.load_tweaks] Directory: '%s'", data_dir.get_path());
+ }
+
+ try
+ {
+ FileInfo? finfo = null;
+ var enumerator = data_dir.enumerate_children("standard::*", FileQueryInfoFlags.NOFOLLOW_SYMLINKS);
+ while((finfo = enumerator.next_file()) != null)
+ {
+ var fname = finfo.get_name();
+ if(fname.down().has_suffix(".json"))
+ {
+ var file = data_dir.get_child(fname);
+ var loaded_tweaks = load_from_file(file);
+
+ if(GameHub.Application.log_verbose)
+ {
+ debug("[Tweak.load_tweaks] File: '%s'; %d tweak(s):", file.get_path(), loaded_tweaks.size);
+ }
+
+ foreach(var tweak in loaded_tweaks)
+ {
+ tweaks.set(tweak.id, tweak);
+
+ if(GameHub.Application.log_verbose)
+ {
+ debug("[Tweak.load_tweaks] %s", Json.to_string(new Json.Node(Json.NodeType.OBJECT).init_object(tweak.to_json()), false));
+ }
+ }
+ }
+ }
+ }
+ catch(Error e)
+ {
+ warning("[Tweak.load_tweaks] %s", e.message);
+ }
+ }
+
+ return tweaks;
+ }
+
+ public Json.Object to_json()
+ {
+ var obj = new Json.Object();
+
+ obj.set_string_member("id", id);
+ if(name != null) obj.set_string_member("name", name);
+ if(description != null) obj.set_string_member("description", description);
+ if(url != null) obj.set_string_member("url", url);
+
+ if(applicability_options != null)
+ {
+ var options = applicability_options.to_json();
+ if(options != null) obj.set_member("applicable_to", options);
+ }
+
+ if(env != null && env.size > 0)
+ {
+ var env_obj = new Json.Object();
+ foreach(var env_var in env.entries)
+ {
+ if(env_var.value != null)
+ {
+ env_obj.set_string_member(env_var.key, env_var.value);
+ }
+ else
+ {
+ env_obj.set_null_member(env_var.key);
+ }
+ }
+ obj.set_object_member("env", env_obj);
+ }
+
+ if(command != null) obj.set_string_member("command", command);
+
+ return obj;
+ }
+
+ public class ApplicabilityOptions: Object
+ {
+ public ArrayList? platforms { get; protected set; default = null; }
+ public ArrayList? compat_tool_ids { get; protected set; default = null; }
+
+ public ApplicabilityOptions(ArrayList? platforms, ArrayList? compat_tool_ids)
+ {
+ Object(platforms: platforms, compat_tool_ids: compat_tool_ids);
+ }
+
+ public ApplicabilityOptions.from_json(Json.Node? json)
+ {
+ ArrayList? platforms = null;
+ ArrayList? compat_tool_ids = null;
+
+ if(json != null && json.get_node_type() == Json.NodeType.OBJECT)
+ {
+ var obj = json.get_object();
+
+ if(obj.has_member("platforms"))
+ {
+ var platforms_array = obj.get_array_member("platforms");
+ if(platforms_array.get_length() > 0)
+ {
+ platforms = new ArrayList();
+ foreach(var platform_node in platforms_array.get_elements())
+ {
+ if(platform_node.get_node_type() == Json.NodeType.VALUE)
+ {
+ var platform_id = platform_node.get_string();
+ if(platform_id != null)
+ {
+ foreach(var p in Platform.PLATFORMS)
+ {
+ if(platform_id == p.id() && !(p in platforms))
+ {
+ platforms.add(p);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if(obj.has_member("compat"))
+ {
+ var tools_array = obj.get_array_member("compat");
+ if(tools_array.get_length() > 0)
+ {
+ compat_tool_ids = new ArrayList();
+ foreach(var tool_node in tools_array.get_elements())
+ {
+ if(tool_node.get_node_type() == Json.NodeType.VALUE)
+ {
+ var tool_id = tool_node.get_string();
+ if(tool_id != null && !(tool_id in compat_tool_ids))
+ {
+ compat_tool_ids.add(tool_id);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Object(platforms: platforms, compat_tool_ids: compat_tool_ids);
+ }
+
+ public bool is_applicable_to(TweakableGame game, CompatTool? compat_tool=null)
+ {
+ if(platforms != null)
+ {
+ var has_platform = false;
+ foreach(var platform in platforms)
+ {
+ if(platform in game.platforms)
+ {
+ has_platform = true;
+ break;
+ }
+ }
+ if(!has_platform) return false;
+ }
+
+ string? compat_tool_id = null;
+ if(compat_tool != null)
+ {
+ compat_tool_id = compat_tool.id;
+ }
+ else
+ {
+ if(game.use_compat)
+ {
+ compat_tool_id = game.compat_tool;
+ }
+ }
+
+ if(compat_tool_ids != null)
+ {
+ var has_tool = false;
+ if(compat_tool_id != null)
+ {
+ foreach(var id in compat_tool_ids)
+ {
+ if(compat_tool_id == id || compat_tool_id.has_prefix(@"$(id)_"))
+ {
+ has_tool = true;
+ break;
+ }
+ }
+ }
+ if(!has_tool) return false;
+ }
+
+ return true;
+ }
+
+ public Json.Node? to_json()
+ {
+ if((platforms == null || platforms.size == 0) && (compat_tool_ids == null || compat_tool_ids.size == 0))
+ {
+ return null;
+ }
+
+ var node = new Json.Node(Json.NodeType.OBJECT);
+ var obj = new Json.Object();
+
+ if(platforms != null && platforms.size > 0)
+ {
+ var platforms_array = new Json.Array.sized(platforms.size);
+ foreach(var platform in platforms)
+ {
+ platforms_array.add_string_element(platform.id());
+ }
+ obj.set_array_member("platforms", platforms_array);
+ }
+
+ if(compat_tool_ids != null && compat_tool_ids.size > 0)
+ {
+ var tools_array = new Json.Array.sized(compat_tool_ids.size);
+ foreach(var tool_id in compat_tool_ids)
+ {
+ tools_array.add_string_element(tool_id);
+ }
+ obj.set_array_member("compat", tools_array);
+ }
+
+ node.set_object(obj);
+ return node;
+ }
+ }
+ }
+}
diff --git a/src/meson.build b/src/meson.build
index f34fccfd..741cecb2 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -89,6 +89,8 @@ sources = [
'data/providers/images/JinxSGVI.vala',
'data/providers/data/IGDB.vala',
+ 'data/tweaks/Tweak.vala',
+
'ui/windows/MainWindow.vala',
'ui/windows/WebAuthWindow.vala',
@@ -98,6 +100,7 @@ sources = [
'ui/dialogs/SettingsDialog/pages/ui/Appearance.vala',
'ui/dialogs/SettingsDialog/pages/ui/Behavior.vala',
'ui/dialogs/SettingsDialog/pages/general/Collection.vala',
+ 'ui/dialogs/SettingsDialog/pages/general/Tweaks.vala',
'ui/dialogs/SettingsDialog/pages/sources/Steam.vala',
'ui/dialogs/SettingsDialog/pages/sources/GOG.vala',
'ui/dialogs/SettingsDialog/pages/sources/Humble.vala',
@@ -114,6 +117,7 @@ sources = [
'ui/dialogs/CompatRunDialog.vala',
'ui/dialogs/CorruptedInstallerDialog.vala',
'ui/dialogs/ImportEmulatedGamesDialog.vala',
+ 'ui/dialogs/GameTweaksDialog.vala',
'ui/views/BaseView.vala',
'ui/views/WelcomeView.vala',
@@ -154,6 +158,7 @@ sources = [
'ui/widgets/OverlayBar.vala',
'ui/widgets/Welcome.vala',
'ui/widgets/SettingsSidebar.vala',
+ 'ui/widgets/TweaksList.vala',
'utils/Utils.vala',
'utils/ImageCache.vala',
@@ -169,6 +174,7 @@ sources = [
'settings/Compat.vala',
'settings/Providers.vala',
'settings/Controller.vala',
+ 'settings/Tweaks.vala',
'utils/downloader/Downloader.vala',
'utils/downloader/SoupDownloader.vala'
diff --git a/src/settings/Tweaks.vala b/src/settings/Tweaks.vala
new file mode 100644
index 00000000..3aafa1f7
--- /dev/null
+++ b/src/settings/Tweaks.vala
@@ -0,0 +1,45 @@
+/*
+This file is part of GameHub.
+Copyright (C) 2018-2019 Anatoliy Kashkin
+
+GameHub is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GameHub is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GameHub. If not, see .
+*/
+
+
+
+namespace GameHub.Settings
+{
+ public class Tweaks: SettingsSchema
+ {
+ public string[] global { get; set; }
+
+ public Tweaks()
+ {
+ base(ProjectConfig.PROJECT_NAME + ".tweaks");
+ }
+
+ private static Tweaks? _instance;
+ public static unowned Tweaks instance
+ {
+ get
+ {
+ if(_instance == null)
+ {
+ _instance = new Tweaks();
+ }
+ return _instance;
+ }
+ }
+ }
+}
diff --git a/src/ui/dialogs/GamePropertiesDialog.vala b/src/ui/dialogs/GamePropertiesDialog.vala
index b4ae9f9a..ad0382da 100644
--- a/src/ui/dialogs/GamePropertiesDialog.vala
+++ b/src/ui/dialogs/GamePropertiesDialog.vala
@@ -365,12 +365,9 @@ namespace GameHub.UI.Dialogs
return entry;
}
- private Box add_switch(string text, bool enabled, owned SwitchAction action)
+ private Box add_row(string text, Widget widget)
{
- var sw = new Switch();
- sw.active = enabled;
- sw.halign = Align.END;
- sw.notify["active"].connect(() => { action(sw.active); });
+ widget.halign = Align.END;
var label = new Label(text);
label.halign = Align.START;
@@ -381,7 +378,7 @@ namespace GameHub.UI.Dialogs
hbox.margin_start = 8;
hbox.add(label);
- hbox.add(sw);
+ hbox.add(widget);
hbox.show_all();
@@ -389,6 +386,14 @@ namespace GameHub.UI.Dialogs
return hbox;
}
+ private Box add_switch(string text, bool enabled, owned SwitchAction action)
+ {
+ var sw = new Switch();
+ sw.active = enabled;
+ sw.notify["active"].connect(() => { action(sw.active); });
+ return add_row(text, sw);
+ }
+
protected delegate void SwitchAction(bool active);
}
}
diff --git a/src/ui/dialogs/GameTweaksDialog.vala b/src/ui/dialogs/GameTweaksDialog.vala
new file mode 100644
index 00000000..5486ebc7
--- /dev/null
+++ b/src/ui/dialogs/GameTweaksDialog.vala
@@ -0,0 +1,80 @@
+/*
+This file is part of GameHub.
+Copyright (C) 2018-2019 Anatoliy Kashkin
+
+GameHub is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GameHub is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GameHub. If not, see .
+*/
+
+using Gtk;
+using Gdk;
+using Gee;
+
+using GameHub.Data;
+using GameHub.Data.DB;
+using GameHub.Utils;
+using GameHub.UI.Widgets;
+
+namespace GameHub.UI.Dialogs
+{
+ public class GameTweaksDialog: Dialog
+ {
+ public TweakableGame? game { get; construct; }
+
+ private Box content;
+ private TweaksList tweaks_list;
+ private ScrolledWindow tweaks_list_scroll;
+
+ public GameTweaksDialog(TweakableGame? game)
+ {
+ Object(transient_for: Windows.MainWindow.instance, resizable: false, title: _("%s: Tweaks").printf(game.name), game: game);
+ }
+
+ construct
+ {
+ get_style_context().add_class("rounded");
+ get_style_context().add_class(Gtk.STYLE_CLASS_FLAT);
+
+ gravity = Gdk.Gravity.NORTH;
+
+ content = new Box(Orientation.VERTICAL, 0);
+ content.margin_start = content.margin_end = 6;
+
+ var tweaks_header = Styled.H4Label(_("Tweaks"));
+ tweaks_header.xpad = 8;
+ content.add(tweaks_header);
+
+ tweaks_list = new TweaksList(game);
+ tweaks_list.get_style_context().add_class("separated-list");
+ tweaks_list.hexpand = false;
+
+ tweaks_list_scroll = new ScrolledWindow(null, null);
+ tweaks_list_scroll.get_style_context().add_class(Gtk.STYLE_CLASS_FRAME);
+ tweaks_list_scroll.hscrollbar_policy = PolicyType.NEVER;
+ tweaks_list_scroll.vexpand = true;
+ #if GTK_3_22
+ tweaks_list_scroll.propagate_natural_width = true;
+ tweaks_list_scroll.propagate_natural_height = true;
+ tweaks_list_scroll.max_content_height = 520;
+ #endif
+ tweaks_list_scroll.add(tweaks_list);
+
+ content.add(tweaks_list_scroll);
+
+ get_content_area().add(content);
+ get_content_area().set_size_request(480, -1);
+
+ show_all();
+ }
+ }
+}
diff --git a/src/ui/dialogs/ImportEmulatedGamesDialog.vala b/src/ui/dialogs/ImportEmulatedGamesDialog.vala
index d2eee873..517fe8aa 100644
--- a/src/ui/dialogs/ImportEmulatedGamesDialog.vala
+++ b/src/ui/dialogs/ImportEmulatedGamesDialog.vala
@@ -266,7 +266,7 @@ namespace GameHub.UI.Dialogs
sp = sp.substring(sp.index_of_nth_char(2));
}
- var files_list = Utils.run({"find", root.get_path(), "-path", "*/" + sp, "-type", "f"}, null, null, false, true, false);
+ var files_list = Utils.run({"find", root.get_path(), "-path", "*/" + sp, "-type", "f"}).log(false).run_sync(true).output;
var files = files_list.split("\n");
foreach(var file_path in files)
@@ -383,7 +383,7 @@ namespace GameHub.UI.Dialogs
ext = ext.strip();
if(ext in ignored_extensions) continue;
- var files_list = Utils.run({"find", root.get_path(), "-path", "*/*." + ext, "-type", "f"}, null, null, false, true, false);
+ var files_list = Utils.run({"find", root.get_path(), "-path", "*/*." + ext, "-type", "f"}).log(false).run_sync(true).output;
var files = files_list.split("\n");
foreach(var file_path in files)
@@ -629,7 +629,7 @@ namespace GameHub.UI.Dialogs
sp = sp.replace("${basename}", basename).replace("$basename", basename);
- var files_list = Utils.run({"find", directory.get_path(), "-path", "*/" + sp}, null, null, false, true, false);
+ var files_list = Utils.run({"find", directory.get_path(), "-path", "*/" + sp}).log(false).run_sync(true).output;
var files = files_list.split("\n");
foreach(var file_path in files)
diff --git a/src/ui/dialogs/SettingsDialog/SettingsDialog.vala b/src/ui/dialogs/SettingsDialog/SettingsDialog.vala
index faf1bea0..2c15973f 100644
--- a/src/ui/dialogs/SettingsDialog/SettingsDialog.vala
+++ b/src/ui/dialogs/SettingsDialog/SettingsDialog.vala
@@ -83,6 +83,7 @@ namespace GameHub.UI.Dialogs.SettingsDialog
add_page("ui/behavior", new Pages.UI.Behavior(this));
add_page("general/collection", new Pages.General.Collection(this));
+ add_page("general/tweaks", new Pages.General.Tweaks(this));
#if MANETTE
add_page("general/controller", new Pages.General.Controller(this));
#endif
diff --git a/src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala b/src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala
new file mode 100644
index 00000000..01654f7a
--- /dev/null
+++ b/src/ui/dialogs/SettingsDialog/pages/general/Tweaks.vala
@@ -0,0 +1,105 @@
+/*
+This file is part of GameHub.
+Copyright (C) 2018-2019 Anatoliy Kashkin
+
+GameHub is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GameHub is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GameHub. If not, see .
+*/
+
+using Gtk;
+
+using GameHub.Data;
+using GameHub.Utils;
+using GameHub.UI.Widgets;
+
+namespace GameHub.UI.Dialogs.SettingsDialog.Pages.General
+{
+ public class Tweaks: SettingsDialogPage
+ {
+ public Tweaks(SettingsDialog dlg)
+ {
+ Object(
+ dialog: dlg,
+ title: _("Tweaks"),
+ description: _("Tweak launch options and apply them to games automatically"),
+ icon_name: "system-run"
+ );
+ status = description;
+ }
+
+ construct
+ {
+ root_grid.margin = 0;
+ header_grid.margin = 12;
+ header_grid.margin_bottom = 0;
+ content_area.margin = 0;
+
+ var header = add_header(_("Tweaks"));
+ header.margin_start = header.margin_end = 12;
+
+ var tweaks_list_scroll = add_widget(new ScrolledWindow(null, null));
+ tweaks_list_scroll.get_style_context().add_class(Gtk.STYLE_CLASS_FRAME);
+ tweaks_list_scroll.hscrollbar_policy = PolicyType.NEVER;
+
+ tweaks_list_scroll.margin_start = 7;
+ tweaks_list_scroll.margin_end = 3;
+ tweaks_list_scroll.margin_top = 0;
+ tweaks_list_scroll.margin_bottom = 6;
+
+ var tweaks_list = new TweaksList();
+ tweaks_list.get_style_context().add_class("separated-list");
+
+ tweaks_list_scroll.add(tweaks_list);
+
+ #if GTK_3_22
+ tweaks_list_scroll.propagate_natural_width = true;
+ tweaks_list_scroll.propagate_natural_height = true;
+ #else
+ tweaks_list_scroll.expand = true;
+ #endif
+
+ add_dirs_info();
+ }
+
+ private void add_dirs_info()
+ {
+ var dirs = FSUtils.get_data_dirs("tweaks", true);
+ var last_dir = dirs.last();
+
+ var dirs_tooltip = """%s""".printf(_("Tweaks are loaded from following directories in order\nLast tweak overrides previous tweaks with same identifiers")) + "\n";
+ foreach(var dir in dirs)
+ {
+ if(dir == last_dir)
+ dirs_tooltip += "\n• %s (%s)".printf(dir.get_path(), _("Click to open"));
+ else
+ dirs_tooltip += "\n• %s".printf(dir.get_path());
+ }
+
+ var dirs_btn = new Button();
+ dirs_btn.hexpand = true;
+ dirs_btn.tooltip_markup = dirs_tooltip;
+ StyleClass.add(dirs_btn, Gtk.STYLE_CLASS_FLAT);
+
+ var dirs_btn_label = new Label(_("Tweaks are loaded from %1$s and %2$d more directories (?)").printf(last_dir.get_path(), dirs.size - 1));
+ dirs_btn_label.wrap = true;
+ dirs_btn_label.xalign = 0;
+ dirs_btn_label.use_markup = true;
+
+ dirs_btn.add(dirs_btn_label);
+
+ dirs_btn.clicked.connect(() => { Utils.open_uri(last_dir.get_uri()); });
+
+ add_widget(dirs_btn);
+ }
+ }
+}
diff --git a/src/ui/views/GamesView/GameContextMenu.vala b/src/ui/views/GamesView/GameContextMenu.vala
index 84e3ce37..c12d892e 100644
--- a/src/ui/views/GamesView/GameContextMenu.vala
+++ b/src/ui/views/GamesView/GameContextMenu.vala
@@ -176,6 +176,14 @@ namespace GameHub.UI.Views.GamesView
fs_overlays.activate.connect(() => new Dialogs.GameFSOverlaysDialog(game).show_all());
add(fs_overlays);
}
+
+ if(game is TweakableGame)
+ {
+ add(new Gtk.SeparatorMenuItem());
+ var tweaks = new Gtk.MenuItem.with_label(_("Tweaks"));
+ tweaks.activate.connect(() => new Dialogs.GameTweaksDialog((TweakableGame) game).show_all());
+ add(tweaks);
+ }
}
if(!(game is Sources.GOG.GOGGame.DLC))
diff --git a/src/ui/widgets/GameTagsList.vala b/src/ui/widgets/GameTagsList.vala
index e3323bd5..8ba2ccf2 100644
--- a/src/ui/widgets/GameTagsList.vala
+++ b/src/ui/widgets/GameTagsList.vala
@@ -20,7 +20,6 @@ using Gtk;
using Gdk;
using Gee;
-
using GameHub.Data;
using GameHub.Data.DB;
diff --git a/src/ui/widgets/TweaksList.vala b/src/ui/widgets/TweaksList.vala
new file mode 100644
index 00000000..80770767
--- /dev/null
+++ b/src/ui/widgets/TweaksList.vala
@@ -0,0 +1,145 @@
+/*
+This file is part of GameHub.
+Copyright (C) 2018-2019 Anatoliy Kashkin
+
+GameHub is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+GameHub is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GameHub. If not, see .
+*/
+
+using Gtk;
+using Gdk;
+using Gee;
+
+using GameHub.Data;
+using GameHub.Data.Tweaks;
+
+namespace GameHub.UI.Widgets
+{
+ public class TweaksList: ListBox
+ {
+ public TweakableGame? game { get; construct; default = null; }
+
+ public TweaksList(TweakableGame? game=null)
+ {
+ Object(game: game, selection_mode: SelectionMode.NONE);
+ }
+
+ construct
+ {
+ update();
+ }
+
+ public void update(CompatTool? compat_tool=null)
+ {
+ this.foreach(w => w.destroy());
+
+ var tweaks = Tweak.load_tweaks(game == null);
+
+ foreach(var tweak in tweaks.values)
+ {
+ if(game == null || tweak.is_applicable_to(game, compat_tool))
+ {
+ add(new TweakRow(tweak, game));
+ }
+ }
+ }
+
+ private class TweakRow: ListBoxRow
+ {
+ public Tweak tweak { get; construct; }
+ public TweakableGame? game { get; construct; default = null; }
+
+ public TweakRow(Tweak tweak, TweakableGame? game=null)
+ {
+ Object(tweak: tweak, game: game);
+ }
+
+ construct
+ {
+ var grid = new Grid();
+ grid.column_spacing = 12;
+ grid.margin_start = grid.margin_end = 8;
+ grid.margin_top = grid.margin_bottom = 4;
+
+ var icon = new Image.from_icon_name(tweak.icon, IconSize.LARGE_TOOLBAR);
+ icon.valign = Align.CENTER;
+
+ var name = new Label(tweak.name ?? tweak.id);
+ name.get_style_context().add_class("category-label");
+ name.set_size_request(96, -1);
+ name.hexpand = true;
+ name.ellipsize = Pango.EllipsizeMode.END;
+ name.max_width_chars = 60;
+ name.xalign = 0;
+ name.valign = Align.CENTER;
+
+ var description = new Label(tweak.description ?? _("No description"));
+ description.tooltip_text = tweak.description;
+ description.get_style_context().add_class(Gtk.STYLE_CLASS_DIM_LABEL);
+ description.hexpand = true;
+ description.ellipsize = Pango.EllipsizeMode.END;
+ description.max_width_chars = 60;
+ description.xalign = 0;
+ description.valign = Align.CENTER;
+
+ var install = new Button.with_label(_("Install"));
+ install.valign = Align.CENTER;
+ install.sensitive = false;
+
+ var enabled = new Switch();
+ enabled.active = tweak.is_enabled(game);
+ enabled.valign = Align.CENTER;
+
+ grid.attach(icon, 0, 0, 1, 2);
+ grid.attach(name, 1, 0);
+ grid.attach(description, 1, 1);
+
+ if(tweak.url != null)
+ {
+ var url = new Button.from_icon_name("web-browser-symbolic", IconSize.SMALL_TOOLBAR);
+ url.tooltip_text = tweak.url;
+ url.valign = Align.CENTER;
+ url.get_style_context().add_class(Gtk.STYLE_CLASS_FLAT);
+
+ url.clicked.connect(() => {
+ Utils.open_uri(tweak.url);
+ });
+
+ grid.attach(url, 2, 0, 1, 2);
+ }
+
+ if(tweak.file != null && tweak.file.query_exists())
+ {
+ var edit = new Button.from_icon_name("accessories-text-editor-symbolic", IconSize.SMALL_TOOLBAR);
+ edit.tooltip_text = _("Edit file");
+ edit.valign = Align.CENTER;
+ edit.get_style_context().add_class(Gtk.STYLE_CLASS_FLAT);
+
+ edit.clicked.connect(() => {
+ Utils.open_uri(tweak.file.get_uri());
+ });
+
+ grid.attach(edit, 3, 0, 1, 2);
+ }
+
+ grid.attach(enabled, 4, 0, 1, 2);
+
+ enabled.notify["active"].connect(() => {
+ tweak.set_enabled(enabled.active, game);
+ });
+
+ child = grid;
+ }
+ }
+ }
+}
diff --git a/src/utils/FSOverlay.vala b/src/utils/FSOverlay.vala
index 974d24f8..aacf9e5a 100644
--- a/src/utils/FSOverlay.vala
+++ b/src/utils/FSOverlay.vala
@@ -102,16 +102,16 @@ namespace GameHub.Utils
yield polkit_authenticate();
- yield Utils.run_thread({"pkexec", POLKIT_HELPER, "mount", id, options, target.get_path()}, null, null, false, false, GameHub.Application.log_verbose);
+ yield Utils.run({"pkexec", POLKIT_HELPER, "mount", id, options, target.get_path()}).log(GameHub.Application.log_verbose).run_sync_thread();
}
public async void umount()
{
yield polkit_authenticate();
- while(id in (yield Utils.run_thread({"mount"}, null, null, false, true, false)))
+ while(id in (yield Utils.run({"mount"}).log(false).run_sync_thread(true)).output)
{
- yield Utils.run_thread({"pkexec", POLKIT_HELPER, "umount", id}, null, null, false, false, GameHub.Application.log_verbose);
+ yield Utils.run({"pkexec", POLKIT_HELPER, "umount", id}).log(GameHub.Application.log_verbose).run_sync_thread();
yield Utils.sleep_async(500);
}
diff --git a/src/utils/FSUtils.vala b/src/utils/FSUtils.vala
index e67dfd95..b0d34c20 100644
--- a/src/utils/FSUtils.vala
+++ b/src/utils/FSUtils.vala
@@ -63,7 +63,7 @@ namespace GameHub.Utils
public class Cache
{
- public const string Home = "~/.cache/com.github.tkashkin.gamehub";
+ public const string Home = "~/.cache/" + ProjectConfig.PROJECT_NAME;
public const string Cookies = FSUtils.Paths.Cache.Home + "/cookies";
@@ -78,6 +78,20 @@ namespace GameHub.Utils
public const string Sources = FSUtils.Paths.Cache.Home + "/sources";
}
+ public class LocalData
+ {
+ public const string Home = "~/.local/share/" + ProjectConfig.PROJECT_NAME;
+ public const string Tweaks = FSUtils.Paths.LocalData.Home + "/tweaks";
+ public const string DOSBoxConfigs = FSUtils.Paths.LocalData.Home + "/compat/dosbox";
+ }
+
+ public class Config
+ {
+ public const string Home = "~/.config/" + ProjectConfig.PROJECT_NAME;
+ public const string Tweaks = FSUtils.Paths.Config.Home + "/tweaks";
+ public const string DOSBoxConfigs = FSUtils.Paths.Config.Home + "/compat/dosbox";
+ }
+
public class Steam
{
public static string Home { owned get { return FSUtils.Paths.Settings.instance.steam_home; } }
@@ -290,6 +304,8 @@ namespace GameHub.Utils
}
}
expanded_path = Utils.replace_prefix(expanded_path, "~/.cache", Environment.get_user_cache_dir());
+ expanded_path = Utils.replace_prefix(expanded_path, "~/.local/share", Environment.get_user_data_dir());
+ expanded_path = Utils.replace_prefix(expanded_path, "~/.config", Environment.get_user_config_dir());
expanded_path = Utils.replace_prefix(expanded_path, "~", Environment.get_home_dir());
expanded_path = expanded_path + (file != null && file != "" ? "/" + file : "");
#if OS_WINDOWS
@@ -351,6 +367,50 @@ namespace GameHub.Utils
return null;
}
+ public static ArrayList get_data_dirs(string? subdir=null, bool with_nonexistent=false)
+ {
+ var data_path = ProjectConfig.PROJECT_NAME + (subdir != null ? @"/$(subdir)" : "");
+
+ string[] data_dirs = { FSUtils.file(ProjectConfig.DATADIR, data_path).get_path() };
+ var system_data_dirs = Environment.get_system_data_dirs();
+ var user_data_dir = Environment.get_user_data_dir();
+ var user_config_dir = Environment.get_user_config_dir();
+
+ if(system_data_dirs != null && system_data_dirs.length > 0)
+ {
+ foreach(var system_data_dir in system_data_dirs)
+ {
+ var dir = FSUtils.file(system_data_dir, data_path).get_path();
+ if(!(dir in data_dirs)) data_dirs += dir;
+ }
+ }
+
+ if(user_data_dir != null && user_data_dir.length > 0)
+ {
+ var dir = FSUtils.file(user_data_dir, data_path).get_path();
+ if(!(dir in data_dirs)) data_dirs += dir;
+ }
+
+ if(user_config_dir != null && user_config_dir.length > 0)
+ {
+ var dir = FSUtils.file(user_config_dir, data_path).get_path();
+ if(!(dir in data_dirs)) data_dirs += dir;
+ }
+
+ var dirs = new ArrayList();
+
+ foreach(var d in data_dirs)
+ {
+ var dir = FSUtils.file(d);
+ if(dir != null && (with_nonexistent || dir.query_exists()))
+ {
+ dirs.add(dir);
+ }
+ }
+
+ return dirs;
+ }
+
public static File? mkdir(string? path, string? file=null, HashMap? variables=null)
{
try
@@ -368,7 +428,7 @@ namespace GameHub.Utils
public static void rm(string path, string? file=null, string flags="-f", HashMap? variables=null)
{
- Utils.run({"bash", "-c", "rm " + flags + " " + FSUtils.expand(path, file, variables).replace(" ", "\\ ") }, null, null, false, false, false);
+ Utils.run({"bash", "-c", "rm " + flags + " " + FSUtils.expand(path, file, variables).replace(" ", "\\ ")}).run_sync();
}
public static void mv_up(File? path, string dirname)
@@ -425,6 +485,14 @@ namespace GameHub.Utils
mkdir(FSUtils.Paths.Cache.Graphics);
mkdir(FSUtils.Paths.Humble.Cache);
+ mkdir(FSUtils.Paths.LocalData.Home);
+ mkdir(FSUtils.Paths.LocalData.Tweaks);
+ mkdir(FSUtils.Paths.LocalData.DOSBoxConfigs);
+
+ mkdir(FSUtils.Paths.Config.Home);
+ mkdir(FSUtils.Paths.Config.Tweaks);
+ mkdir(FSUtils.Paths.Config.DOSBoxConfigs);
+
// remove old images cache
var old_images_cache = file(FSUtils.Paths.Cache.OldImages);
if(old_images_cache != null && old_images_cache.query_exists())
diff --git a/src/utils/Utils.vala b/src/utils/Utils.vala
index cbd9b7c9..0bc0fe32 100644
--- a/src/utils/Utils.vala
+++ b/src/utils/Utils.vala
@@ -18,6 +18,8 @@ along with GameHub. If not, see .
using Gtk;
+using GameHub.Data;
+using GameHub.Data.Tweaks;
namespace GameHub.Utils
{
@@ -79,125 +81,208 @@ namespace GameHub.Utils
return null;
}
- public static string run(string[] cmd, string? dir=null, string[]? env=null, bool override_runtime=false, bool capture_output=false, bool log=true)
+ public class RunTask
{
- string sout = "";
- string serr = "";
+ private string[] _cmd;
+ private string? _dir = null;
+ private string[]? _env = null;
+ private bool _override_runtime = false;
+ private bool _log = true;
+ private Tweak[]? _tweaks = null;
- var cdir = dir ?? Environment.get_home_dir();
- var cenv = env ?? Environ.get();
+ public RunTask(string[] cmd) { _cmd = cmd; }
- #if FLATPAK
- if(override_runtime && ProjectConfig.RUNTIME.length > 0)
- {
- cenv = Environ.set_variable(cenv, "LD_LIBRARY_PATH", ProjectConfig.RUNTIME);
- }
- string[] ccmd = { "flatpak-spawn", "--host" };
- foreach(var arg in cmd)
- {
- ccmd += arg;
- }
- #else
- string[] ccmd = cmd;
- #endif
-
- #if APPIMAGE
- cenv = Environ.unset_variable(cenv, "LD_LIBRARY_PATH");
- cenv = Environ.unset_variable(cenv, "LD_PRELOAD");
- #endif
+ public RunTask cmd(string[] cmd) { _cmd = cmd; return this; }
+ public RunTask dir(string? dir=null) { _dir = dir; return this; }
+ public RunTask env(string[]? env=null) { _env = env; return this; }
+ public RunTask override_runtime(bool override_runtime=false) { _override_runtime = override_runtime; return this; }
+ public RunTask log(bool log=true) { _log = log; return this; }
+ public RunTask tweaks(Tweak[]? tweaks=null) { _tweaks = tweaks; return this; }
- try
+ private void expand()
{
- #if OS_WINDOWS
- log = true;
- #endif
+ _dir = _dir ?? Environment.get_home_dir();
+ _env = _env ?? Environ.get();
- if(log) debug("[Utils.run] {'%s'}; dir: '%s'", string.joinv("' '", cmd), cdir);
+ #if APPIMAGE
+ _env = Environ.unset_variable(_env, "LD_LIBRARY_PATH");
+ _env = Environ.unset_variable(_env, "LD_PRELOAD");
+ #endif
- if(capture_output)
+ if(_tweaks != null)
{
- Process.spawn_sync(cdir, ccmd, cenv, SpawnFlags.SEARCH_PATH, null, out sout, out serr);
- sout = sout.strip();
- serr = serr.strip();
- if(log)
+ foreach(var tweak in _tweaks)
{
- if(sout.length > 0) print(sout + "\n");
- if(serr.length > 0) warning(serr);
+ if(tweak.env != null)
+ {
+ foreach(var env_var in tweak.env.entries)
+ {
+ if(env_var.value != null)
+ {
+ _env = Environ.set_variable(_env, env_var.key, env_var.value);
+ }
+ else
+ {
+ _env = Environ.unset_variable(_env, env_var.key);
+ }
+ }
+ }
+
+ if(tweak.command != null && tweak.command.length > 0)
+ {
+ string[] tweaked_cmd = _cmd;
+ var tweak_cmd = Utils.parse_args(tweak.command);
+ if(tweak_cmd != null)
+ {
+ if("$command" in tweak_cmd || "${command}" in tweak_cmd)
+ {
+ tweaked_cmd = {};
+ }
+ foreach(var arg in tweak_cmd)
+ {
+ if(arg == "$command" || arg == "${command}")
+ {
+ foreach(var a in _cmd)
+ {
+ tweaked_cmd += a;
+ }
+ }
+ else
+ {
+ tweaked_cmd += arg;
+ }
+ }
+ }
+ _cmd = tweaked_cmd;
+ }
}
}
- else
+
+ #if FLATPAK
+ if(_override_runtime && ProjectConfig.RUNTIME.length > 0)
{
- Process.spawn_sync(cdir, ccmd, cenv, SpawnFlags.SEARCH_PATH | SpawnFlags.CHILD_INHERITS_STDIN, null);
+ _env = Environ.set_variable(_env, "LD_LIBRARY_PATH", ProjectConfig.RUNTIME);
}
+ string[] cmd = { "flatpak-spawn", "--host" };
+ foreach(var arg in _cmd)
+ {
+ cmd += arg;
+ }
+ _cmd = cmd;
+ #endif
}
- catch (Error e)
+
+ public Result? run_sync(bool capture_output=false)
{
- warning("[Utils.run] %s", e.message);
- }
- return sout;
- }
+ expand();
+ try
+ {
+ #if OS_WINDOWS
+ log = true;
+ #endif
- public static async void run_async(string[] cmd, string? dir=null, string[]? env=null, bool override_runtime=false, bool wait=true, bool log=true)
- {
- Pid pid;
+ if(_log) debug("[RunTask.run_sync] {'%s'}; dir: '%s'", string.joinv("' '", _cmd), _dir);
- var cdir = dir ?? Environment.get_home_dir();
- var cenv = env ?? Environ.get();
+ int status;
+ if(capture_output)
+ {
+ string sout;
+ string serr;
+ Process.spawn_sync(_dir, _cmd, _env, SpawnFlags.SEARCH_PATH, null, out sout, out serr, out status);
+ sout = sout.strip();
+ serr = serr.strip();
+ if(_log)
+ {
+ if(sout.length > 0) print(sout + "\n");
+ if(serr.length > 0) warning(serr);
+ }
+ return new Result(status, sout, serr);
+ }
+ else
+ {
+ Process.spawn_sync(_dir, _cmd, _env, SpawnFlags.SEARCH_PATH | SpawnFlags.CHILD_INHERITS_STDIN | SpawnFlags.STDERR_TO_DEV_NULL, null, null, null, out status);
+ return new Result(status);
+ }
+ }
+ catch (Error e)
+ {
+ warning("[RunTask.run_sync] %s", e.message);
+ }
+ return null;
+ }
- #if FLATPAK
- if(override_runtime && ProjectConfig.RUNTIME.length > 0)
+ public async Result? run_sync_thread(bool capture_output=false)
{
- cenv = Environ.set_variable(cenv, "LD_LIBRARY_PATH", ProjectConfig.RUNTIME);
+ Result? result = null;
+ Utils.thread("RunTask.run_sync_thread", () => {
+ result = run_sync(capture_output);
+ Idle.add(run_sync_thread.callback);
+ }, _log);
+ yield;
+ return result;
}
- string[] ccmd = { "flatpak-spawn", "--host" };
- foreach(var arg in cmd)
+
+ public async Result? run_async(bool wait=true)
{
- ccmd += arg;
+ expand();
+ Result? result = null;
+ try
+ {
+ if(_log) debug("[RunTask.run_async] Running {'%s'} in '%s'", string.joinv("' '", _cmd), _dir);
+ Pid pid;
+ Process.spawn_async(_dir, _cmd, _env, SpawnFlags.SEARCH_PATH | SpawnFlags.DO_NOT_REAP_CHILD, null, out pid);
+ ChildWatch.add(pid, (pid, status) => {
+ Process.close_pid(pid);
+ result = new Result(status);
+ Idle.add(run_async.callback);
+ });
+ }
+ catch (Error e)
+ {
+ warning("[RunTask.run_async] %s", e.message);
+ }
+ if(wait) yield;
+ return result;
}
- #else
- string[] ccmd = cmd;
- #endif
- #if APPIMAGE
- cenv = Environ.unset_variable(cenv, "LD_LIBRARY_PATH");
- cenv = Environ.unset_variable(cenv, "LD_PRELOAD");
- #endif
-
- try
+ public class Result
{
- if(log) debug("[Utils.run_async] Running {'%s'} in '%s'", string.joinv("' '", cmd), cdir);
- Process.spawn_async(cdir, ccmd, cenv, SpawnFlags.SEARCH_PATH | SpawnFlags.DO_NOT_REAP_CHILD, null, out pid);
+ public int? status;
+ public int? exit_code;
+ public string? output;
+ public string? errors;
- ChildWatch.add(pid, (pid, status) => {
- Process.close_pid(pid);
- Idle.add(run_async.callback);
- });
- }
- catch (Error e)
- {
- warning("[Utils.run_async] %s", e.message);
- }
+ public Result(int? status, string? output=null, string? errors=null)
+ {
+ this.status = status;
+ this.output = output;
+ this.errors = errors;
+ if(this.status != null)
+ {
+ this.exit_code = Process.exit_status(this.status);
+ }
+ }
- if(wait) yield;
+ public bool check_status() throws Error
+ {
+ if(this.status != null)
+ {
+ return Process.check_exit_status(this.status);
+ }
+ return true;
+ }
+ }
}
- public static async string run_thread(string[] cmd, string? dir=null, string[]? env=null, bool override_runtime=false, bool capture_output=false, bool log=true)
+ public static RunTask run(string[] cmd)
{
- string sout = "";
-
- Utils.thread("Utils.run_thread", () => {
- sout = Utils.run(cmd, dir, env, override_runtime, capture_output, log);
- Idle.add(run_thread.callback);
- }, log);
-
- yield;
- return sout;
+ return new RunTask(cmd);
}
public static File? find_executable(string? name)
{
if(name == null || name.length == 0) return null;
- var which = Environment.find_program_in_path(name) ?? run({ "which", name }, null, null, false, true, false);
+ var which = Environment.find_program_in_path(name) ?? run({"which", name}).log(false).run_sync(true).output;
if(which == null || which.length == 0 || !which.has_prefix("/"))
{
return null;
@@ -226,7 +311,7 @@ namespace GameHub.Utils
if(distro != null) return distro;
#if OS_LINUX
- distro = Utils.run({"bash", "-c", "lsb_release -ds 2>/dev/null || cat /etc/*release 2>/dev/null | head -n1 || uname -om"}, null, null, false, true, false).replace("\"", "");
+ distro = Utils.run({"bash", "-c", "lsb_release -ds 2>/dev/null || cat /etc/*release 2>/dev/null | head -n1 || uname -om"}).log(false).run_sync(true).output.replace("\"", "");
#if APPIMAGE
distro = "[AppImage] " + distro;
#elif FLATPAK
@@ -290,7 +375,7 @@ namespace GameHub.Utils
#if APPIMAGE || FLATPAK || SNAP
return false;
#elif PM_APT
- var output = Utils.run({"dpkg-query", "-W", "-f=${Status}", package}, null, null, false, true, false);
+ var output = Utils.run({"dpkg-query", "-W", "-f=${Status}", package}).log(false).run_sync(true).output;
return "install ok installed" in output;
#else
return false;