Commit Graph

26 Commits

Author SHA1 Message Date
Fengqing Liu
5b736e3bb1 Migrate to Docker-ready web UI and remove legacy desktop GUI
Replace the legacy desktop/Tkinter client and packaging artifacts with a Docker-first, web-hosted approach.

- Add Docker quickstart and run-from-source instructions to the README to simplify deployment.
- Simplify launcher to invoke the new web backend module instead of the old desktop entrypoint.
- Update dependencies for a web UI stack (FastAPI, Uvicorn, python-socketio, Jinja2, etc.) and remove desktop/tray-specific packages.
- Remove legacy GUI, packaging and platform-specific helper code, along with obsolete build/pack scripts and AppImage assets to declutter the repo.
- Tidy project ignore rules to add runtime logs and editor metadata.

Rationale: streamline deployment, favor a browser-accessible interface, and reduce maintenance overhead from multiple platform-specific GUI/packaging implementations.
2025-10-16 21:54:43 +11:00
guihkx
01b26cf7b4 linux: pin PyGObject version to <3.51
PyGObject 3.51 (and newer) now requires girepository-2.0 as a build
dependency [1], which is a version we cannot easily install in the
Ubuntu version we use in CI/CD, so the build fails:

=======

$ python3 -m pip install -r requirements.txt
[ ... ]
Collecting PyGObject (from -r requirements.txt (line 4))
  Downloading pygobject-3.52.3.tar.gz (1.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 45.4 MB/s eta 0:00:00
  Installing build dependencies: started
  Installing build dependencies: finished with status 'done'
  Getting requirements to build wheel: started
  Getting requirements to build wheel: finished with status 'done'
  Preparing metadata (pyproject.toml): started
  Preparing metadata (pyproject.toml): finished with status 'error'
  error: subprocess-exited-with-error

  × Preparing metadata (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [216 lines of output]
      + meson setup /tmp/pip-install-nayte7bo/pygobject_097c5326983b4ca690e238e49ba4b29c /tmp/pip-install-nayte7bo/pygobject_097c5326983b4ca690e238e49ba4b29c/.mesonpy-sp71efmg -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md -Dtests=false -Dwheel=true --wrap-mode=nofallback --native-file=/tmp/pip-install-nayte7bo/pygobject_097c5326983b4ca690e238e49ba4b29c/.mesonpy-sp71efmg/meson-python-native-file.ini
      The Meson build system
      Version: 1.7.0
      Source dir: /tmp/pip-install-nayte7bo/pygobject_097c5326983b4ca690e238e49ba4b29c
      Build dir: /tmp/pip-install-nayte7bo/pygobject_097c5326983b4ca690e238e49ba4b29c/.mesonpy-sp71efmg
      Build type: native build
      Project name: pygobject
      Project version: 3.52.3
      C compiler for the host machine: cc (gcc 9.4.0 "cc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0")
      C linker for the host machine: cc ld.bfd 2.34
      Host machine cpu family: x86_64
      Host machine cpu: x86_64
      Program python3 found: YES (/opt/hostedtoolcache/Python/3.10.16/x64/bin/python3)
      Found pkg-config: YES (/usr/bin/pkg-config) 1.6.3
      Run-time dependency python found: YES 3.10
      Found CMake: /usr/local/bin/cmake (3.31.6)
      Run-time dependency girepository-2.0 found: NO (tried pkgconfig and cmake)
      Not looking for a fallback subproject for the dependency girepository-2.0 because:
      Use of fallback dependencies is disabled.

      ../meson.build:31:9: ERROR: Dependency 'girepository-2.0' is required but not found.

=======

Unfortunately, girepository-2.0 is only available in Ubuntu 24.10, a
version we can't easily use in GitHub Actions. But even if could, doing
so would also needlessly bump the minimum glibc version requirement for
Linux users, making TDM much less portable.

So, for now, let's pin PyGObject to <3.51.

[1]: d29f4e65fa/NEWS (L4-5)
2025-03-23 23:24:49 +01:00
guihkx
950f404e47 Remove Python version check for truststore
This follows what was done in commit 2f9467497c.
2024-11-16 20:11:24 +01:00
guihkx
49e8db9e22 linux/appimage: install meson and ninja from PyPI
Some systems (e.g. Ubuntu 22.04, which we use to make the AppImage),
have ancient versions of meson and ninja, which is not good when we
have dependencies like PyGObject 3.47+ (and more recently, one of its
transitive dependencies, pycairo 1.27+) requiring a fairly recent
version of meson to be able to be built.

So, instead of relying on whatever meson/ninja version the current
system provides us with to make the AppImage, this change will simply
install up-to-date, official wheels of meson/ninja directly from PyPI.

This also allows us to finally unpin PyGObject's version.
2024-09-11 11:47:05 +02:00
DevilXD
0baed05c21 Remove selenium, chrome and integrity handling 2024-06-20 22:55:36 +02:00
guihkx
27dcc9c280 linux: pin PyGObject version to <3.47
This fixes the broken "Linux (AppImage)" CI job.

PyGObject 3.47 has dropped setuptools in favor of meson-python, which
isn't a problem per se, but they also require meson 0.63.3, which we
don't currently have in the repositories of Ubuntu 20.04, which is
the oldest (yet supported) version we use to build our AppImage
package, in order to increase compatibility with as much Linux distros
as possible.

And since there's no real, compelling reason to upgrade to the latest
version of PyGObject right now, let's just pin it to version <3.46,
until we eventually upgrade the Ubuntu version we use for CI.
2024-04-30 14:14:32 +02:00
DevilXD
91f2dacbcc Use truststore on Windows in Python 3.10+ 2024-01-15 15:05:58 +01:00
DevilXD
a99227afbf Resolve RuntimeError: Await wasn't used with future 2023-12-02 14:38:08 +01:00
DevilXD
67cfc6603d Update Pillow to v10.0 2023-10-14 17:49:38 +02:00
DevilXD
dcd740d18d Allow pystray v0.19.5 to be installed 2023-10-14 17:49:38 +02:00
DevilXD
562627e657 Pin pillow version to <10 2023-07-02 19:17:19 +02:00
guihkx
e31dcd85b4 linux: add truststore as a dependency
Because Linux distributions don't have an 'universal' path for the
system certificate store, bundling libssl built on distro A might not
work on distro B, because distros tend to change path to the
certificate store at build time.

This means that creating a PyInstaller package on Ubuntu will include
the libssl built there, and if you try to run this package on a
different distro (e.g. Arch Linux), any attempt to create an SSL
connection will fail, because Arch Linux has a different path for the
certificate store than Ubuntu.

This issue is usually worked around by bundling certificates with the
app (usually using certifi), and then pointing the SSL_CERT_FILE
environment to it.

However, truststore seems to be a better alternative, since it tries to
use the certificate store from the system instead.

The list of benefits are listed on the project's page on GitHub:

https://github.com/sethmlarson/truststore
2023-06-11 16:58:18 +02:00
guihkx
7c1e7b0af1 linux: add PyGObject as a dependency
This dependency is required for proper support of the AppIndicator
backend from pystray:

https://github.com/moses-palmer/pystray/blob/v0.19.4/docs/faq.rst#how-do-i-use-pystray-in-a-virtualenv-on-linux
2023-06-11 16:58:18 +02:00
guihkx
f8c0dba1ee Use icon.visible to show or hide the tray icon on all systems
On Linux, pystray's icon.stop() currently doesn't work well with the
AppIndicator backend.

So, instead of destroying the icon when the user restores from tray
(only to later re-create it when the user minimizes to tray again), we
have the option to control the icon's visibility instead! Luckily, that
works on Windows too!

Note that for this change to work properly on Linux, we need to switch
to the master version of pystray, because we need this specific fix:

5943ed4e19

After pystray releases a version newer than 0.19.4, we can switch back.

Co-authored-by: DevilXD <bartosz.peszek@gmail.com>
2023-06-11 16:58:18 +02:00
DevilXD
330eb4f184 Remove undetected-chromedriver from dependencies 2023-04-23 10:06:07 +02:00
DevilXD
d3b9a76b5a Merge branch 'linux' into master 2022-11-30 22:15:38 +01:00
DevilXD
73a2a6145f Support new login flow via Chrome 2022-11-01 17:49:21 +01:00
DevilXD
1e035f1a36 Properly handle Windows shutdown message 2022-09-03 18:12:32 +02:00
DevilXD
8cd77bae2a Change websocket internals to use aiohttp instead 2022-04-08 22:04:53 +02:00
DevilXD
5af4ee79c3 Remove Game Selector;
Implement multi-game mining based on the priority list
2022-03-30 14:15:26 +02:00
DevilXD
423e51bc27 Handle maximum channels limit;
Proper handle of a case where the app ends up with more channels from ACLs than is supported
2022-02-13 20:13:11 +01:00
GenericPseudonym
3ccbff6065 Add websockets to requirements list
Since it won't run without it
2022-02-11 13:38:23 -08:00
DevilXD
34a1a5b12b Remove Pillow dependency 2022-01-12 21:36:47 +01:00
DevilXD
1aba5984d2 Protect 3p lib imports + update requirements 2022-01-11 20:29:13 +01:00
DevilXD
65069c1963 More accurate requirements 2021-12-04 16:07:45 +01:00
DevilXD
947fd6f148 Added requirements file 2021-12-03 22:28:59 +01:00