Compare commits

..
Author SHA1 Message Date
aclist 8aaa806cd3 chore: drop unused docs pages
Mirror to Codeberg / mirror-to-codeberg (push) Waiting to run
2026-11-12 06:11:48 +09:00
aclist e4dc545038 fix: URLs 2026-11-12 06:10:00 +09:00
aclist 439109d11d docs: update to DZGUI 7 spec 2026-11-12 02:07:49 +09:00
aclist a5374d1f1a Merge pull request #526 from aclist/fix/legacy-version-file
Mirror to Codeberg / mirror-to-codeberg (push) Waiting to run
fix: legacy version file
2026-11-11 05:08:14 +09:00
aclist dcc4cb494b Merge branch 'dzgui7' into fix/legacy-version-file
Mirror to Codeberg / mirror-to-codeberg (push) Waiting to run
2026-11-11 05:07:35 +09:00
aclist ff1e150eb1 change: suppress logger message 2026-11-11 05:04:50 +09:00
aclist c7ef91f02e Merge pull request #539 from aclist/fix/remove-from-history
fix: restore missing route
2026-11-11 05:00:34 +09:00
aclist 95bc05eab5 Merge pull request #536 from aclist/change/server-row-dataclass
change: marshal server row data
2026-11-11 04:59:58 +09:00
aclist 52c126ff8c fix: restore missing route 2026-11-11 04:29:36 +09:00
aclist 3677b01fdc fix: exception handling 2026-11-09 22:25:13 +09:00
aclist 4f6223f90b fix: strip invalid values from versions file 2026-11-09 22:24:26 +09:00
aclist 441066a1a0 chore: update comments 2026-11-09 22:23:37 +09:00
aclist fa1ac8fa31 chore: update imports 2026-11-09 22:23:27 +09:00
20 changed files with 169 additions and 307 deletions

No files matched your search

+8 -9
View File
@@ -1,11 +1,11 @@
Submitting a ticket Submitting a ticket
========================== ==========================
Tickets are tracked at the `DZGUI issue tracker <https://github.com/aclist/dztui/issues>`_. Tickets are tracked at the `DZGUI issue tracker <https://github.com/aclist/dzgui/issues>`_.
You will need to `register for a GitHub account <https://github.com/signup>`_ in order to submit one. You will need to `register for a GitHub account <https://github.com/signup>`_ in order to submit one.
If have checked the :doc:`kb` and `closed issues <https://github.com/aclist/dztui/issues?q=is%3Aissue+is%3Aclosed>`_ area and did not find a solution, three ticket types are provided for your If have checked the :doc:`kb` and `closed issues <https://github.com/aclist/dzgui/issues?q=is%3Aissue+is%3Aclosed>`_ area and did not find a solution, three ticket types are provided for your
convenience: convenience:
- **Bug report**: for unexpected, breaking behavior in the application - **Bug report**: for unexpected, breaking behavior in the application
@@ -20,18 +20,17 @@ Below are some examples of how to format a constructive report that will ensure
A non-actionable report A non-actionable report
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Subject: add button Subject: BUG: add button
hi, you must add a button to show how long I have to wait to join a full server, the app is useless without this...do your job, guys!!! ;-) hi, you must add a button to show how long I have to wait to join a full server, the app is useless without this...do your job, guys!!! ;-)
This report exhibits a number of problems: This report exhibits a number of problems:
- Vague title and summary: in addition to being unclear, this will slow down filing the incoming report.
- Problem space is poorly defined: it is not clear where the issue lies, where the feature is supposed to be implemented, nor why.
- Lack of context: the feature may already exist, but there is not enough information to go on. Alternatively, the feature may be technically impossible to implement, but there is not enough
information to go on.
- Incorrect report type: this is a feature request filed as a bug report. - Incorrect report type: this is a feature request filed as a bug report.
- Vague title and summary: this will slow down filing the incoming report.
- Problem space is poorly defined: it is not clear where the issue lies, where the feature is supposed to be implemented, nor why.
- Lack of context: the feature may already exist, but there is not enough information to go on. Alternatively, the feature may be technically impossible to implement.
- Unprofessional tone: the message is disrespectful towards project members and inserts the user's subjective opinion. - Unprofessional tone: the message is disrespectful towards project members and inserts the user's subjective opinion.
An actionable report An actionable report
@@ -42,7 +41,7 @@ An actionable report
This occurs specifically on version 5.5.0-beta.2 if the setting ALLOW_MULTI is set to ON. I was able to reproduce it using the following steps: This occurs specifically on version 5.5.0-beta.2 if the setting ALLOW_MULTI is set to ON. I was able to reproduce it using the following steps:
Distribution: Fedora Distribution: Fedora
- Ensure that ALLOW_MULTI is set to ON - Ensure that ALLOW_MULTI is set to ON
- Open the application and immediately navigate to the Server Browser - Open the application and immediately navigate to the Server Browser
- Uses the Ctrl-click binding to select multiple rows in the table - Uses the Ctrl-click binding to select multiple rows in the table
@@ -56,5 +55,5 @@ This report is actionable because it is objective, specific, and detailed:
- The subject is clearly defined: specific details ensure it will be filed in a timely manner. - The subject is clearly defined: specific details ensure it will be filed in a timely manner.
- Scope is explicit: the specific version, settings, and conditions under which the problem occur were given. - Scope is explicit: the specific version, settings, and conditions under which the problem occur were given.
- Ample context: the user gave steps to reproduce the problem and clarified each one. - Ample context: the user gave steps to reproduce the problem and clarified each one.
- Courteous tone: the user interacted with project members in a professional manner.
- Supporting information: the user provided a crash dump to expedite resolution of the issue. - Supporting information: the user provided a crash dump to expedite resolution of the issue.
- Courteous tone: the user interacted with project members in a professional manner.
+2 -2
View File
@@ -36,5 +36,5 @@ html_show_copyright = False
html_show_sourcelink = False html_show_sourcelink = False
today_fmt = "%Y-%m-%d" today_fmt = "%Y-%m-%d"
release = "6.x.x - 7.x.x" release = "7.x.x"
version = "6.x.x - 7.x.x" version = "7.x.x"
+5 -10
View File
@@ -1,19 +1,14 @@
Developers Developers
=========== ===========
This project is open source under the GPLv3 license. You can find the source code on This project is open source under the GPLv3 license. You can find the source code on
`GitHub <https://github.com/aclist/dztui>`_. If you wish to contribute to `GitHub <https://github.com/aclist/dzgui>`_. If you wish to contribute to
development, you will find further help in the development, you will find further help in the
`CONTRIBUTING.md <https://github.com/aclist/dztui/blob/main/CONTRIBUTING.md>`_ `CONTRIBUTING.md <https://github.com/aclist/dzgui/blob/dzgui7/CONTRIBUTING.md>`_
file. file.
All contributors are expected to act in accordance with the project's All contributors are expected to act in accordance with the project's
`code of conduct <https://github.com/aclist/dztui/blob/main/CODE_OF_CONDUCT.md>`_, `code of conduct <https://github.com/aclist/dzgui/blob/dzgui7/CODE_OF_CONDUCT.md>`_,
and follow the project's standards and guidelines. and follow the project's standards and guidelines.
To install DZGUI and related dependencies for linting, testing, and version control, Detailed instructions on setting up a build environment and installing DZGUI from source code
invoke the command ``uv pip install .[dev]``. can be found in the `DEVELOPERS.md <https://github.com/aclist/dzgui/blob/dzgui7/DEVELOPERS.md>`_ file.
After this process, install the applicable pre-commit hooks by invoking the command ``pre-commit install``.
These pre-commit hooks enforce code checks that prevent making commits unless the relevant tests pass.
-110
View File
@@ -1,110 +0,0 @@
Installation (DZGUI 6 legacy)
==================
Basic runtime dependencies
---------------------------------
If not already installed, the below can be found in your system’s package manager.
If any dependencies are missing when the application starts, it will warn you, so you need not take any preemptive measures here.
- curl
- jq
- steam
- wmctrl or xdotool
- zenity
.. note::
All dependencies are installed out of the box on Steam Deck.
UI dependencies (Python and PyGObject)
---------------------------------------
.. important::
As of version 6.0.0, you must have a valid Python 3.13 and matching PyGObject environment.
Depending on your distribution, this may require additional manual intervention.
Arch Linux (vanilla variants)
^^^^^^^^^^^^^^^^^^^^^^
You will need the ``python3.13`` package, if it is not already installed.
Install the following build dependencies:
.. code:: console
sudo pacman -S cmake gcc pkgconf python-cairo
.. include:: venv.rst
CachyOS (Arch)
^^^^^^^^^^^^^^^^^^^^^^^
Refer to the build instructions for Arch Linux first.
The ``python3.13`` package is not available on CachyOS, so it is recommended to
use ``uv`` to manage Python versions.
.. code:: console
sudo pacman -S uv
.. include:: venv.rst
Manjaro 26 (Arch)
^^^^^^^^^^^^^^^^^^^^^^^
If Python 3.13 is not already available out of the box, refer to the build instructions for :ref:`Arch Linux (vanilla variants)`.
Debian 13 variants
^^^^^^^^^^^^^^^^^^^^^^^
Python 3.13 and PyGObject are available out of the box. No additional steps are necessary.
You can proceed to the :ref:`Installscript`.
Fedora 43 variants
^^^^^^^^^^^^^^^^^^^^^^^
Fedora 43 ships with a newer version of Python (3.14), so you must set up Python 3.13 in its own
virtual environment (venv) to prevent it from conflicting with the system package.
Install the following build dependencies:
.. code:: console
sudo dnf install cairo cairo-devel cairo-gobject-devel gcc python3.13 python3.13-devel
.. include:: venv.rst
Ubuntu 24 variants
^^^^^^^^^^^^^^^^^^^^^^
Ubuntu ships with an older version of Python (3.12). You must install additional dependencies.
Add the PPA below to add Python 3.13 to your sources:
.. code:: console
sudo add-apt-repository ppa:deadsnakes/ppa
Install the following build dependencies:
.. code:: console
sudo apt install python3.13 python3.13-venv python3.13-dev build-essential python3-gi-cairo pkg-config libgirepository-2.0-dev libcairo2-dev
.. include:: venv.rst
Installscript
-----------------------
Invoke the command below from a terminal. This script fetches the main DZGUI script from the repository,
makes it executable, and launches DZGUI's first-time setup. After running this installscript, you will
have the file ``dzgui.sh`` wherever you invoked the command.
.. code:: console
curl -s "https://codeberg.org/aclist/dztui/raw/branch/dzgui/install.sh" | bash
nixOS installation
----------------------
Two packages are independently maintained by other contributors. Each takes a slightly different approach.
nixOS packages are standalone and do not require cloning the git repository.
- https://github.com/lelgenio/dzgui-nix
- https://github.com/jiriks74/dzgui.flake
Next steps
---------------
Proceed to the :doc:`setup` section for setup instructions.
-33
View File
@@ -1,33 +0,0 @@
Installation (DZGUI 7 beta)
==================
In order to make the first-time setup experience easier for end-users, DZGUI 7 no longer requires
the tool to be installed from source code into a working Python environment. All necessary dependencies and the
runtime environment are built-in.
Turnkey installer
------------------------
- Visit the project's `Releases page <https://github.com/aclist/dztui/releases/latest>`_.
- Extract the DZGUI tarball from the top of the **Assets** list.
- From a terminal, run the command ``./dzgui`` or double click on the extracted file in
a file explorer.
- Once the setup wizard opens, follow the steps at the bottom of this page.
UI dependencies (Python and PyGObject)
---------------------------------------
On most major distributions, GObject introspection libraries should be available by default.
If you receive an error about a missing ``libgirepository-2.0`` dependency, install it via your system's package manager.
On Debian-based distributions (Ubuntu, etc.), this package is not explicitly installed on the system.
You can install it via the following set of commands:
.. code:: console
sudo apt update
sudo apt install libgirepository-2.0-0
Next steps
---------------
Proceed to the :doc:`setup` section for setup instructions.
+12
View File
@@ -0,0 +1,12 @@
Command line launch flags
==========================
When run from the terminal, DZGUI provides several flags:
``-d, --debug``: enable developer debugging features. This does not add hidden or extra functionality; it merely enables developers to track deprecation warnings and see values stored in memory.
End-users will gain no benefit from using this flag.
``-m, --map``: check and update system map count value. Unnecessary on most modern systems. If your system does not meet the threshold, the DZGUI setup wizard will prompt you to use this flag.
``-u, --uninstall``: uninstall: granular selection of which state/configuration files to remove.
``-v, --version``: displays the DZGUI version.
+3 -3
View File
@@ -15,8 +15,8 @@ A DayZ server browser/mod manager for Linux. Used to list official and community
Source code: Source code:
- `GitHub <https://www.github.com/aclist/dztui>`_ - `GitHub <https://www.github.com/aclist/dzgui>`_
- `Codeberg (mirror) <https://codeberg.org/aclist/dztui>`_ - `Codeberg (mirror) <https://codeberg.org/aclist/dzgui>`_
Installation Installation
------------- -------------
@@ -56,8 +56,8 @@ See: :doc:`kb` or :ref:`Submitting a ticket`.
:maxdepth: 3 :maxdepth: 3
:hidden: :hidden:
steam
locale locale
flags
.. toctree:: .. toctree::
:caption: Help :caption: Help
+25 -16
View File
@@ -1,28 +1,37 @@
Installation Installation
================== ==================
As of this writing, you have a choice of two DZGUI versions: .. note::
Version 6 of DZGUI 6 has been fully replaced with DZGUI 7.
Users on existing DZGUI 6 installations should migrate to the DZGUI 7 build.
- DZGUI 6: Legacy stable version, more complicated to install In order to make the first-time setup experience easier for end-users, DZGUI 7 no longer requires
- DZGUI 7: Unstable beta version, much easier to install the tool to be installed from source code into a working Python environment. All necessary dependencies and the
runtime environment are built-in.
DZGUI 6 Turnkey installer
-------------------- ------------------------
This version is no longer receiving feature updates, but will receive security updates until it is replaced by DZGUI 7.
DZGUI 6 must be installed from the source code and has many more package dependencies and prerequisites for it to function correctly. - Visit the project's `Releases page <https://github.com/aclist/dzgui/releases/latest>`_.
If you are looking for a one-click, self-contained installer, use :ref:`DZGUI 7` instead. - Download the DZGUI archive from the top of the **Assets** list. This file will be labeled ``dzgui-<VERSION>-x86_64-unknown-linux-musl.tar.gz``.
- Extract the archive's contents.
- From a terminal, run the command ``./dzgui`` or double click on the extracted file in a file explorer.
- Once the setup wizard opens, follow the steps at the bottom of this page.
To install **DZGUI 6**, visit :doc:`dzgui6`. UI dependencies (Python and PyGObject)
---------------------------------------
On most major distributions, GObject introspection libraries should be available by default.
If you receive an error about a missing ``libgirepository-2.0`` dependency, install it via your system's package manager.
DZGUI 7 On Debian-based distributions (Ubuntu, etc.), this package is not explicitly installed on the system.
-------------------- You can install it via the following set of commands:
This version is currently in beta testing and has all of the features found in DZGUI 6, but may be unstable.
DZGUI 7 has an all-in-one installer and setup wizard, and many new features not found in DZGUI 6. .. code:: console
However, this codebase is newer and is provided as a pre-release beta candidate.
If you want the simplest installer and don't mind experiencing the occasional bug, use this version. sudo apt update
sudo apt install libgirepository-2.0-0
To install **DZGUI 7**, visit :doc:`dzgui7`. Next steps
---------------
Proceed to the :doc:`setup` section for setup instructions.
+15 -2
View File
@@ -98,15 +98,28 @@ tend to have less headroom for simultaneous connections than their wired counter
DZG-009: Floating dialogs appear maximized on tiling window managers DZG-009: Floating dialogs appear maximized on tiling window managers
------------------------------------------------------------------- -------------------------------------------------------------------
The main DZGUI window and its child dialogs are expected to be rendered as floating by your window manager. The main DZGUI window and its child dialogs are expected to be rendered as floating by your window manager.
DZGUI sends window manager hints to this effect, but tiling window managers designed to bisect the screen into quadrants (e.g., i3 window manager) DZGUI sends window manager hints to this effect, but tiling window managers designed to bisect the screen into quadrants (e.g., i3 window manager)
may try to always launch applications in fullscreen. may try to always launch applications in fullscreen.
To resolve this, set specific exclusions or window hints in your WM's configuration file. To resolve this, set specific exclusions or window hints in your WM's configuration file.
For example, for i3, add the following to your `XDG_CONFIG_HOME/i3/config` file (defaults to `$HOME/.config/i3/config`): For example, for i3, add the following to your ``XDG_CONFIG_HOME/i3/config`` file (defaults to ``$HOME/.config/i3/config``):
.. code:: console .. code:: console
for_window [instance="DZGUI"] floating enable, move position center for_window [instance="DZGUI"] floating enable, move position center
for_window [instance="DZGUI - Dialog"] floating enable, move position center for_window [instance="DZGUI - Dialog"] floating enable, move position center
DZG-010: Maps combobox extends to full height of window when there are many maps to choose from
---------------------------------------------------------------------------------------------------
This is a limitation of GTK 3. If and when DZGUI is refactored to support the GTK 4 API, this visual glitch is expected to be resolved.
DZG-011: GTK reports "Failed to load module 'xapp-gtk3-module' when starting DZGUI
---------------------------------------------------------------------------------------------------
This is a purely cosmetic message that appears when Cinnamon (Xapp) desktop integations are not present.
While you can suppress this message by installing the package ``xapp``, if you are not actually using Cinnamon as
part of your desktop environment, it will pull in a large number of unnecessary dependencies.
DZG-012: After adding the DZGUI Steam shortcut via the installer, shortcut icons do not appear in the small library list
-------------------------------------------------------------------------------------------------------------------------
It can take 1-2 restarts of the Steam client for these icons to synchronize.
+14 -5
View File
@@ -19,14 +19,14 @@ You will need at a minimum a :ref:`Steam Web API key<steam_api>` in order to bro
Steam Web API key Steam Web API key
^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^
**This step is required**. **This step is required**.
Register for a `Steam Web API key <https://steamcommunity.com/dev/apikey>`_ (free) using your Steam account. You will be asked for a unique URL for your app when registering. Register for a `Steam Web API key <https://steamcommunity.com/dev/apikey>`_ (free) using your Steam account.
Since this key is for a personal use application and does not actually call back anywhere, set a generic local identifier here like "127.0.0.1" or some other name that is meaningful to you. You will be asked for a unique URL for your app when registering. Typically, an API would send logs back to your URL in the form of callbacks.
However, since these API queries will be used for local consumption by a single user only, you can set a generic local identifier here like ``127.0.0.1`` to have the server discard them.
Once configured, you can insert this key in the app when launching it for the first time. Once configured, you can insert this API key in the app when launching it for the first time.
.. note:: .. note::
If you are confused about this requirement, please refer to DZGUI Knowledge Base article :ref:`DZG-007<DZG-007>` for additional information. If you are confused about this requirement, please refer to DZGUI Knowledge Base article :ref:`DZG-007<DZG-007>` for additional information.
@@ -36,7 +36,16 @@ Battlemetrics API key
.. warning:: .. warning::
This feature is no longer supported in DZGUI. Battlemetrics has switched to a paid service. This feature is no longer supported in DZGUI. Battlemetrics has switched to a paid service.
Battlemetrics queries are expected to fail in DZGUI 6. In DZGUI 7, this feature has been removed entirely.
Choosing a Steam client
^^^^^^^^^^^^^^^^^^^^^^^^^
If multiple Steam clients are available (native Steam client/Flatpak Steam client), you will be
asked to choose which you want to use. Due to the way Steam's inter-process communication and internal URIs work,
if you choose one or the other, you should not run both clients simultaneously. This can lead DZGUI to send requests to the wrong one.
.. note::
If you decide to switch to using a different Steam client with DZGUI, please uninstall fully (``dzgui -u``) and re-run the first time setup.
Next steps Next steps
-------------- --------------
-94
View File
@@ -1,94 +0,0 @@
Steam integration
====================
.. note::
In :doc:`DZGUI 7 <dzgui7>`, Steam shortcut creation and cover art setup are handled automatically during setup. You can skip this step unless you are using DZGUI 6.
DZGUI can be added to Steam as a "non-Steam game" in order to facilitate integration with Steam Deck or desktop environments.
First, launch Steam in the **Large** (default) view.
.. attention::
Steam Deck users: Gaming Mode has limited support for configuration of custom games. You will need to switch to **Desktop Mode** in order to add a non-Steam game.
.. figure:: images/01.png
:scale: 70%
:alt: Adding a non-Steam game
Select **Add a Game** > **Add a Non-Steam Game** from the bottom left corner of the Steam client.
Navigate to ``$HOME/.local/share/applications`` and select ``dzgui.desktop``.
Select **Add Selected Programs** to add a shortcut to DZGUI.
Artwork
^^^^^^^^^^
DZGUI ships with custom artwork that provides various cover/splash images to allow it to integrate with the rest of your games library.
.. figure:: images/02.png
:scale: 70%
:alt: Adding a non-Steam game
From the main library view, navigate to the app’s details page and right-click the blank image header at the top.
.. figure:: images/03.png
:scale: 70%
:alt: Adding a non-Steam game
Select **Set Custom Background**
Select to display **All Files** from the **File type** dropdown
Navigate to ``$HOME/.local/share/dzgui`` and select ``hero.png``.
.. figure:: images/04.png
:scale: 70%
:alt: Adding a non-Steam game
Next, right-click the image background and select **Set Custom Logo**.
Navigate to ``$HOME/.local/share/dzgui`` and select ``logo.png``.
.. figure:: images/05.png
:scale: 70%
:alt: Adding a non-Steam game
Notice that this removes the redundant app name that occluded the image, as seen above.
.. figure:: images/06.png
:scale: 70%
:alt: Adding a non-Steam game
Next, navigate to your Library index (looks like a bookshelf of cover art) and find the DZGUI app.
Right-click its cover and select **Manage** > **Set custom artwork**.
Navigate to ``$HOME/.local/share/dzgui`` and select ``grid.png``.
.. figure:: images/07.png
:scale: 70%
:alt: Adding a non-Steam game
The final result will create box art looking like the above.
.. figure:: images/08.png
:scale: 100%
:alt: Adding a non-Steam game
Next, right-click the DZGUI entry in your Library and select **Properties** to open the properties dialog. Next to the **Shortcut** field, you will see a small square box which represents the game’s
icon. Click this to open a file explorer, navigate to ``$HOME/.local/share/dzgui``, and select ``icon.png``. This will add a small icon to the list view.
Finally, after you launch DZGUI for the first time, you should quit the application and return to the Library view. Select the **Recent Games** dropdown on the right-hand side.
Steam shows a collection of box art based on categories like "Play Next", "Recent Games", etc. Look for a **downward-pointing caret icon** and click it, then select the **Recent Games** category.
.. figure:: images/09.png
:scale: 100%
:alt: Adding a non-Steam game
If DZGUI was the last item played, it will be shown with a landscape, rather than portrait, orientation cover, which is initially blank.
To customize this cover, right click it and select **Manage** > **Set custom artwork**, navigate to ``$HOME/.local/share/dzgui``, then select ``hero.png``.
+3 -7
View File
@@ -1,12 +1,8 @@
Uninstallation Uninstallation
================== ==================
To uninstall DZGUI and its associated files, invoke ``./dzgui`` from the terminal with the ``-u`` or ``--uninstall`` flag.
To uninstall DZGUI and its associated files, invoke ``./dzgui.sh`` with the ``-u`` or ``--uninstall`` flag. You will be prompted to select atomic files you wish to remove.
Follow the prompts to choose from:
- **Full uninstall** -- removes the application and all user-defined configuration files
- **Partial uninstall** -- removes the application, but keeps user-defined configuration files
.. tip:: .. tip::
If you intend to reinstall DZGUI again, keeping your configuration files is recommended. If you intend to reinstall DZGUI again, keeping your configuration files at a minimum is recommended.
+12 -8
View File
@@ -1,25 +1,29 @@
Usage Usage
========= =========
It is always advised to have Steam running in the background. DZGUI is meant to run "on top of" Steam. It is always advised to have Steam running in the background. DZGUI is meant to run "on top of" Steam.
DZGUI can be launched in one of three ways. DZGUI can be launched in one of three ways.
From a terminal From a terminal
------------------ ------------------
Invoke the command ``./dzgui`` from wherever you downloaded DZGUI to.
Invoke the command ``./dzgui.sh`` from wherever you downloaded the DZGUI script to.
Launching from a terminal may give more verbose information in the event of a crash, and can be a good way of troubleshooting problems. Launching from a terminal may give more verbose information in the event of a crash, and can be a good way of troubleshooting problems.
From the shortcut shipped with the application From the shortcut shipped with the application
-------------------------------------------------- --------------------------------------------------
When completing the first-time setup, you will be asked if you want to create additional system shortcuts.
If applicable for yourDesktop Environment, these shortcuts can be created.
On most distributions, if you are using a desktop environment based on the Freedesktop specification, shortcuts will be installed for you. - One shortcut will be located under the ``Games`` category of your system’s applications list/start menu.
- The other is accessed via the ``DZGUI`` shortcut on the desktop
- One shortcut is located under the ``Games`` category of your system’s applications list/start menu.
- The other is accessed via the ``DZGUI`` desktop icon (Steam Deck only)
From Steam From Steam
-------------- --------------
See :doc:`steam`. DZGUI will also ask you if you want to add a "non-Steam game" shortcut to Steam.
This shortcut will launch DZGUI directly and comes with integrated grid and cover artwork.
You must restart Steam for this shortcut to take effect in your library.
.. note::
You can also pass DZGUI launch parameter's to the Steam shortcut via Steam's right-click menu. See :doc:`flags`.
+7 -5
View File
@@ -2,9 +2,10 @@ import hashlib
import logging import logging
import re import re
from concurrent.futures import wait from concurrent.futures import ThreadPoolExecutor, wait
from concurrent.futures import ThreadPoolExecutor from dataclasses import dataclass
from pathlib import Path from pathlib import Path
from typing import Any
from dzgui.api.steam import get_app_path from dzgui.api.steam import get_app_path
from dzgui.api.servers import get_rules, fqip_to_record from dzgui.api.servers import get_rules, fqip_to_record
@@ -17,8 +18,7 @@ from dzgui.const.constants import (
from dzgui.config.query import lookup from dzgui.config.query import lookup
from dzgui.const.enum import Preferences from dzgui.const.enum import Preferences
from dzgui.init.migrate import clean_legacy_versions_file
from typing import Any
logger = logging.getLogger(APP_NAME) logger = logging.getLogger(APP_NAME)
@@ -116,10 +116,12 @@ def remove_stale_signatures(
config: Path, versions: Path, ids: list[int] | None = None config: Path, versions: Path, ids: list[int] | None = None
) -> None: ) -> None:
if versions.is_file() is False: if versions.is_file() is False:
logger.warning("Creating new version signatures file") logger.debug("Creating new version signatures file")
versions.touch() versions.touch()
return return
clean_legacy_versions_file(versions)
path = lookup(config, Preferences.DEFAULT) path = lookup(config, Preferences.DEFAULT)
steam_path = Path(path) steam_path = Path(path)
if ids is None: if ids is None:
+1 -1
View File
@@ -18,8 +18,8 @@ from dzgui.config.query import lookup
from dzgui.config.userprefs import UserPrefs from dzgui.config.userprefs import UserPrefs
from dzgui.config.xdg import get_xdg_paths, parse_filepaths from dzgui.config.xdg import get_xdg_paths, parse_filepaths
from dzgui.init.migrate import ( from dzgui.init.migrate import (
has_new_config,
copy_state_files, copy_state_files,
has_new_config,
migrate_cols_file, migrate_cols_file,
) )
from dzgui.init.prereqs import has_flatpak_client, has_steam_client from dzgui.init.prereqs import has_flatpak_client, has_steam_client
+2 -1
View File
@@ -6,7 +6,8 @@ if TYPE_CHECKING:
from dzgui.util.ip import Coords from dzgui.util.ip import Coords
# NOTE: mutable dataclass, 'use_miles' key changes on demand # NOTE: mutable dataclass: 'use_miles' key changes on demand
# 'frozen' cannot be True
@dataclass(slots=True) @dataclass(slots=True)
class UserPrefs: class UserPrefs:
is_steam_deck: bool is_steam_deck: bool
+22 -1
View File
@@ -1,12 +1,21 @@
import json import json
import logging
import re
import shutil import shutil
from pathlib import Path from pathlib import Path
from typing import Any from typing import Any
from dzgui.const.constants import LEGACY_CONFIG_PATH, LEGACY_COLS_PATH, LEGACY_IPS_PATH from dzgui.const.constants import (
APP_NAME,
LEGACY_CONFIG_PATH,
LEGACY_COLS_PATH,
LEGACY_IPS_PATH,
)
from dzgui.config.convert import rc2json from dzgui.config.convert import rc2json
from dzgui.util._json import read_json, write_json from dzgui.util._json import read_json, write_json
logger = logging.getLogger(APP_NAME)
def migrate_legacy_conf(config: Path) -> Any: def migrate_legacy_conf(config: Path) -> Any:
old_conf = Path.home() / LEGACY_CONFIG_PATH old_conf = Path.home() / LEGACY_CONFIG_PATH
@@ -70,3 +79,15 @@ def copy_ipdb(ips_path: Path) -> None:
return return
# TODO: ensure that month file is copied # TODO: ensure that month file is copied
shutil.copy(legacy, ips_path) shutil.copy(legacy, ips_path)
def clean_legacy_versions_file(versions: Path) -> None:
# NOTE: handling for #523
try:
pat = r"^(\d+),(\d+)$"
lines = versions.read_text().splitlines()
clean = [line for line in lines if re.match(pat, line)]
concat = "\n".join(clean)
versions.write_text(concat)
except Exception as e:
logger.warning(e)
+9
View File
@@ -46,6 +46,15 @@ class ConfigManager:
ips.append(record) ips.append(record)
self.update_config(Preferences.IP_LIST, ips) self.update_config(Preferences.IP_LIST, ips)
def remove_from_history_file(self, fqip: str) -> None:
try:
history = self.prefs.paths.history
ips = [line.rstrip() for line in history.read_text().splitlines()]
ips.remove(fqip)
history.write_text("\n".join(ips))
except Exception as e:
logger.critical(e)
def update_history_file(self, fqip: str) -> None: def update_history_file(self, fqip: str) -> None:
try: try:
with open(self.prefs.paths.history, "r") as f: with open(self.prefs.paths.history, "r") as f:
+4
View File
@@ -281,6 +281,10 @@ class ServerModelManager:
def remove_from_history(self, record: Servers.Record) -> None: def remove_from_history(self, record: Servers.Record) -> None:
proxy_man = self._get_proxy_man() proxy_man = self._get_proxy_man()
proxy_man.remove_row_from_control(record) proxy_man.remove_row_from_control(record)
fqip = Servers.record_to_fqip(record)
config_man = self.controller.get_config_man()
config_man.remove_from_history_file(fqip)
self.update_history() self.update_history()
@call_on_thread(dialog.querying) @call_on_thread(dialog.querying)
+25
View File
@@ -0,0 +1,25 @@
from typing import TYPE_CHECKING
from dzgui.init.migrate import clean_legacy_versions_file
if TYPE_CHECKING:
from pathlib import Path
def test_null_signature_stripping(tmp_path: "Path") -> None:
tmp = tmp_path.joinpath("dzg.versions")
lines = [
"1111,2222",
"3333,4444",
"5555,null",
"foo",
",4555",
"1111",
" ",
",,,",
"-1",
]
expect = ["1111,2222", "3333,4444"]
tmp.write_text("\n".join(lines))
clean_legacy_versions_file(tmp)
assert expect == tmp.read_text().splitlines()