Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rewrite entire backend #3719

Draft
wants to merge 53 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
53 commits
Select commit Hold shift + click to select a range
ac03773
backend: Remove connection checks
TheEvilSkeleton Jan 18, 2025
8137b72
frontend: Remove arg_bottle attribute
TheEvilSkeleton Jan 20, 2025
6bcd9f3
frontend: Remove CLI
TheEvilSkeleton Jan 21, 2025
4ab1f96
backend: Remove repair_bottle
TheEvilSkeleton Jan 21, 2025
bcb8ec0
backend: Remove RepositoryManager
TheEvilSkeleton Jan 21, 2025
a9811d2
backend: Remove support for removing temp files
TheEvilSkeleton Jan 21, 2025
fefe09e
globals: Add class method for retrieving list of paths
TheEvilSkeleton Jan 22, 2025
058d22d
manager: Use components_paths getter method
TheEvilSkeleton Jan 22, 2025
e9e04bd
frontend: Remove versioning
TheEvilSkeleton Jan 22, 2025
1c08016
backend: Remove versioning
TheEvilSkeleton Jan 22, 2025
c8209ca
frontend: Remove SteamManager
TheEvilSkeleton Jan 22, 2025
ec2d8a8
backend: Remove SteamManager
TheEvilSkeleton Jan 22, 2025
191e706
backend: Remove ComponentManager
TheEvilSkeleton Jan 23, 2025
94fd1d0
frontend: Remove InstallerManager
TheEvilSkeleton Jan 23, 2025
958b467
backend: Remove InstallerManager
TheEvilSkeleton Jan 23, 2025
b387792
backend: Remove DataManager
TheEvilSkeleton Jan 23, 2025
3f77323
backend: Remove DependencyManager
TheEvilSkeleton Jan 23, 2025
ce4ea49
meta: Remove logger
TheEvilSkeleton Feb 3, 2025
1a3ef75
meta: Remove JournalManager
TheEvilSkeleton Feb 3, 2025
b250217
frontend: Remove QueueManager
TheEvilSkeleton Feb 3, 2025
c84e769
backend: Remove QueueManager
TheEvilSkeleton Feb 3, 2025
099dac5
frontend: Remove RuntimeManager
TheEvilSkeleton Feb 3, 2025
894c206
backend: Remove RuntimeManager
TheEvilSkeleton Feb 3, 2025
4a86125
chore: Remove tests
TheEvilSkeleton Feb 3, 2025
88045e4
frontend: Remove ImporterManager
TheEvilSkeleton Feb 3, 2025
1ff2690
backend: Remove ImporterManager
TheEvilSkeleton Feb 3, 2025
d12a944
frontend: Remove EpicGamesStoreManager
TheEvilSkeleton Feb 3, 2025
ed1628c
backend: Remove EpicGamesStoreManager
TheEvilSkeleton Feb 3, 2025
90d29a0
frontend: Remove UbisoftConnectManager
TheEvilSkeleton Feb 3, 2025
a19c0f1
backend: Remove UbisoftConnectManager
TheEvilSkeleton Feb 3, 2025
f66852e
backend: Remove OriginManager
TheEvilSkeleton Feb 3, 2025
910004a
frontend: Remove BackupManager
TheEvilSkeleton Feb 4, 2025
6641638
backend: Remove BackupManager
TheEvilSkeleton Feb 4, 2025
19783f8
frontend: Remove LibraryManager
TheEvilSkeleton Feb 4, 2025
58f44c5
backend: Remove LibraryManager
TheEvilSkeleton Feb 4, 2025
90f792a
backend: Remove ThumbnailManager
TheEvilSkeleton Feb 4, 2025
d620ff4
backend: Remove TemplateManager
TheEvilSkeleton Feb 4, 2025
e2f74b8
backend: Remove ConfigManager
TheEvilSkeleton Feb 4, 2025
6a6ec45
backend: Remove SteamGridDBManager
TheEvilSkeleton Feb 4, 2025
3c4d9d5
backend: Remove SandboxManager
TheEvilSkeleton Feb 4, 2025
9bde418
backend: Remove SteamUtils
TheEvilSkeleton Feb 5, 2025
18091a4
backend: Remove leftover Steam
TheEvilSkeleton Feb 5, 2025
a1fb178
frontend: Remove MIDI SoundFont
TheEvilSkeleton Feb 5, 2025
6e2c27a
backend: Remove MIDI SoundFont
TheEvilSkeleton Feb 5, 2025
2cf11a4
backend: Remove hh
TheEvilSkeleton Feb 5, 2025
539c2b9
frontend: Remove LoadingView
TheEvilSkeleton Feb 7, 2025
dfaf372
main: Remove unnecessary locale variables
TheEvilSkeleton Feb 8, 2025
cd467c6
backend: Initial Bottle class
TheEvilSkeleton Feb 9, 2025
ab71a46
backend: Improve typing for BottleConfig
TheEvilSkeleton Feb 9, 2025
61d419d
frontend: Use Bottle class
TheEvilSkeleton Feb 9, 2025
59533f7
manager: Remove update methods
TheEvilSkeleton Feb 9, 2025
2fe2e4f
Rework config
TheEvilSkeleton Feb 11, 2025
4641c45
pre-commit
TheEvilSkeleton Feb 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions bottles/backend/bottle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
# bottle.py
#
# Copyright 2025 The Bottles Contributors
#
# This program 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, in version 3 of the License.
#
# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.

import os
import yaml
from dataclasses import dataclass

from bottles.backend.typing import WindowsAPI, VersionedComponent, Environment
from bottles.backend.models.config import BottleConfig


# BottleConfig(Name='d', Arch='win64', Windows='win10', Runner='sys-wine-10.0', WorkingDir='', DXVK='', NVAPI='', VKD3D='', LatencyFleX='', Path='d', Custom_Path=False, Environment='Application', Creation_Date='', Update_Date='', Versioning=False, Versioning_Exclusion_Patterns=[], State=0, Parameters=BottleParams(dxvk=False, dxvk_nvapi=False, vkd3d=False, latencyflex=False, mangohud=False, mangohud_display_on_game_start=True, obsvkc=False, vkbasalt=False, gamemode=False, gamescope=False, gamescope_game_width=0, gamescope_game_height=0, gamescope_window_width=0, gamescope_window_height=0, gamescope_fps=0, gamescope_fps_no_focus=0, gamescope_scaling=False, gamescope_borderless=False, gamescope_fullscreen=True, sync='wine', fsr=False, fsr_sharpening_strength=2, fsr_quality_mode='none', custom_dpi=96, renderer='gl', discrete_gpu=False, virtual_desktop=False, virtual_desktop_res='1280x720', pulseaudio_latency=False, fullscreen_capture=False, take_focus=False, mouse_warp=True, decorated=True, fixme_logs=False, use_runtime=False, use_eac_runtime=True, use_be_runtime=True, use_steam_runtime=False, sandbox=False, versioning_compression=False, versioning_automatic=False, versioning_exclusion_patterns=False, vmtouch=False, vmtouch_cache_cwd=False), Sandbox=BottleSandboxParams(share_net=False, share_sound=False), Environment_Variables={}, Installed_Dependencies=[], DLL_Overrides={}, External_Programs={}, Uninstallers={}, session_arguments='', run_in_terminal=False, Language='sys', CompatData='', data={}, RunnerPath='')
@dataclass
class BottleClass:
name: str
runner: str
environment: Environment
mangohud: bool = False
vkbasalt: bool = False
gamemode: bool = False
gamescope: bool = False
fidelityfx_super_resolution: bool = False
dxvk: VersionedComponent = False
nvapi: VersionedComponent = False
vkd3d: VersionedComponent = False
latencyflex: VersionedComponent = False
architecture: WindowsAPI = WindowsAPI.WIN64


class Bottle:
"""Class representing a bottle."""

@staticmethod
def generate_local_bottles_list(bottles_dir: str) -> dict[str, BottleConfig]:
"""Generate a list of local bottles."""

local_bottles = {}
local_bottles_list = os.listdir(bottles_dir)

for local_bottle in local_bottles_list:
local_bottle_dir = os.path.join(bottles_dir, local_bottle)
bottle_config_file_path = os.path.join(local_bottle_dir, "bottle.yml")
placeholder_file_path = os.path.join(local_bottle_dir, "placeholder.yml")

try:
with open(placeholder_file_path) as file:
configuration = yaml.safe_load(file)
bottle_config_file_path = configuration["Path"]
except FileNotFoundError:
pass

if not os.path.isfile(bottle_config_file_path):
continue

config_load = BottleConfig.load(bottle_config_file_path)

if not config_load.status:
raise TypeError(f"Unable to load {bottle_config_file_path}")

local_bottles[local_bottle] = config_load.data

return local_bottles
4 changes: 1 addition & 3 deletions bottles/backend/cabextract.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@
import shutil
import subprocess

from bottles.backend.logger import Logger

logging = Logger()
import logging


class CabExtract:
Expand Down
4 changes: 1 addition & 3 deletions bottles/backend/dlls/dll.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,12 @@
from abc import abstractmethod
from copy import deepcopy

from bottles.backend.logger import Logger
import logging
from bottles.backend.models.config import BottleConfig
from bottles.backend.models.enum import Arch
from bottles.backend.utils.manager import ManagerUtils
from bottles.backend.wine.reg import Reg

logging = Logger()


class DLLComponent:
base_path: str
Expand Down
4 changes: 1 addition & 3 deletions bottles/backend/dlls/nvapi.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,10 @@
from bottles.backend.dlls.dll import DLLComponent
from bottles.backend.models.config import BottleConfig
from bottles.backend.utils.manager import ManagerUtils
from bottles.backend.logger import Logger
import logging

from bottles.backend.utils.nvidia import get_nvidia_dll_path

logging = Logger()


class NVAPIComponent(DLLComponent):
dlls = {
Expand Down
4 changes: 1 addition & 3 deletions bottles/backend/downloader.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,11 @@

import requests

from bottles.backend.logger import Logger
import logging
from bottles.backend.models.result import Result
from bottles.backend.state import TaskStreamUpdateHandler
from bottles.backend.utils.file import FileUtils

logging = Logger()


class Downloader:
"""
Expand Down
18 changes: 18 additions & 0 deletions bottles/backend/globals.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,24 @@ def is_vkbasalt_available():
return True
return False

@classmethod
def get_components_paths(cls) -> list[str]:
"""Retrieve list of components' paths."""

return [
cls.temp,
cls.runtimes,
cls.winebridge,
cls.runners,
cls.bottles,
cls.steam,
cls.dxvk,
cls.vkd3d,
cls.nvapi,
cls.latencyflex,
cls.templates,
]


class TrdyPaths:
# External managers paths
Expand Down
3 changes: 0 additions & 3 deletions bottles/backend/health.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,12 @@
from bottles.backend.utils import yaml
import contextlib

from bottles.backend.logger import Logger
from bottles.backend.utils.display import DisplayUtils
from bottles.backend.utils.gpu import GPUUtils
from bottles.backend.utils.generic import is_glibc_min_available
from bottles.backend.utils.file import FileUtils
from bottles.backend.params import APP_VERSION

logging = Logger()


class HealthChecker:
x11: bool = False
Expand Down
113 changes: 0 additions & 113 deletions bottles/backend/logger.py

This file was deleted.

Loading
Loading