├── .gitattributes
├── .github
├── FUNDING.yml
├── dependabot.yml
└── workflows
│ ├── bandit.yml
│ ├── chocolatey-release.yml
│ ├── dependency-review.yml
│ ├── ossar.yml
│ ├── osv-scanner.yml
│ ├── pylint.yml
│ ├── pyre.yml
│ ├── python-app.yml
│ ├── stale.yml
│ ├── update-download-badge.yml
│ ├── update-version-badge.yml
│ └── winget-build.yml
├── .gitignore
├── .vscode
└── settings.json
├── DLSS-Updater.nuspec
├── DLSS_Updater.spec
├── LICENSE
├── README.md
├── VERIFICATION.TXT
├── dist
└── DLSS_Updater
│ ├── DLSS_Updater.exe
│ └── _internal
│ ├── PyQt6
│ ├── Qt6
│ │ ├── bin
│ │ │ ├── MSVCP140.dll
│ │ │ ├── MSVCP140_1.dll
│ │ │ ├── MSVCP140_2.dll
│ │ │ ├── Qt6Core.dll
│ │ │ ├── Qt6Gui.dll
│ │ │ ├── Qt6Network.dll
│ │ │ ├── Qt6Pdf.dll
│ │ │ ├── Qt6Svg.dll
│ │ │ ├── Qt6Widgets.dll
│ │ │ ├── VCRUNTIME140.dll
│ │ │ ├── VCRUNTIME140_1.dll
│ │ │ └── opengl32sw.dll
│ │ ├── plugins
│ │ │ ├── generic
│ │ │ │ └── qtuiotouchplugin.dll
│ │ │ ├── iconengines
│ │ │ │ └── qsvgicon.dll
│ │ │ ├── imageformats
│ │ │ │ ├── qgif.dll
│ │ │ │ ├── qicns.dll
│ │ │ │ ├── qico.dll
│ │ │ │ ├── qjpeg.dll
│ │ │ │ ├── qpdf.dll
│ │ │ │ ├── qsvg.dll
│ │ │ │ ├── qtga.dll
│ │ │ │ ├── qtiff.dll
│ │ │ │ ├── qwbmp.dll
│ │ │ │ └── qwebp.dll
│ │ │ ├── platforms
│ │ │ │ ├── qminimal.dll
│ │ │ │ ├── qoffscreen.dll
│ │ │ │ └── qwindows.dll
│ │ │ └── styles
│ │ │ │ └── qmodernwindowsstyle.dll
│ │ └── translations
│ │ │ ├── qt_ar.qm
│ │ │ ├── qt_bg.qm
│ │ │ ├── qt_ca.qm
│ │ │ ├── qt_cs.qm
│ │ │ ├── qt_da.qm
│ │ │ ├── qt_de.qm
│ │ │ ├── qt_en.qm
│ │ │ ├── qt_es.qm
│ │ │ ├── qt_fa.qm
│ │ │ ├── qt_fi.qm
│ │ │ ├── qt_fr.qm
│ │ │ ├── qt_gd.qm
│ │ │ ├── qt_gl.qm
│ │ │ ├── qt_he.qm
│ │ │ ├── qt_help_ar.qm
│ │ │ ├── qt_help_bg.qm
│ │ │ ├── qt_help_ca.qm
│ │ │ ├── qt_help_cs.qm
│ │ │ ├── qt_help_da.qm
│ │ │ ├── qt_help_de.qm
│ │ │ ├── qt_help_en.qm
│ │ │ ├── qt_help_es.qm
│ │ │ ├── qt_help_fr.qm
│ │ │ ├── qt_help_gl.qm
│ │ │ ├── qt_help_hr.qm
│ │ │ ├── qt_help_hu.qm
│ │ │ ├── qt_help_it.qm
│ │ │ ├── qt_help_ja.qm
│ │ │ ├── qt_help_ka.qm
│ │ │ ├── qt_help_ko.qm
│ │ │ ├── qt_help_nl.qm
│ │ │ ├── qt_help_nn.qm
│ │ │ ├── qt_help_pl.qm
│ │ │ ├── qt_help_pt_BR.qm
│ │ │ ├── qt_help_ru.qm
│ │ │ ├── qt_help_sk.qm
│ │ │ ├── qt_help_sl.qm
│ │ │ ├── qt_help_tr.qm
│ │ │ ├── qt_help_uk.qm
│ │ │ ├── qt_help_zh_CN.qm
│ │ │ ├── qt_help_zh_TW.qm
│ │ │ ├── qt_hr.qm
│ │ │ ├── qt_hu.qm
│ │ │ ├── qt_it.qm
│ │ │ ├── qt_ja.qm
│ │ │ ├── qt_ka.qm
│ │ │ ├── qt_ko.qm
│ │ │ ├── qt_lt.qm
│ │ │ ├── qt_lv.qm
│ │ │ ├── qt_nl.qm
│ │ │ ├── qt_nn.qm
│ │ │ ├── qt_pl.qm
│ │ │ ├── qt_pt_BR.qm
│ │ │ ├── qt_pt_PT.qm
│ │ │ ├── qt_ru.qm
│ │ │ ├── qt_sk.qm
│ │ │ ├── qt_sl.qm
│ │ │ ├── qt_sv.qm
│ │ │ ├── qt_tr.qm
│ │ │ ├── qt_uk.qm
│ │ │ ├── qt_zh_CN.qm
│ │ │ ├── qt_zh_TW.qm
│ │ │ ├── qtbase_ar.qm
│ │ │ ├── qtbase_bg.qm
│ │ │ ├── qtbase_ca.qm
│ │ │ ├── qtbase_cs.qm
│ │ │ ├── qtbase_da.qm
│ │ │ ├── qtbase_de.qm
│ │ │ ├── qtbase_en.qm
│ │ │ ├── qtbase_es.qm
│ │ │ ├── qtbase_fa.qm
│ │ │ ├── qtbase_fi.qm
│ │ │ ├── qtbase_fr.qm
│ │ │ ├── qtbase_gd.qm
│ │ │ ├── qtbase_he.qm
│ │ │ ├── qtbase_hr.qm
│ │ │ ├── qtbase_hu.qm
│ │ │ ├── qtbase_it.qm
│ │ │ ├── qtbase_ja.qm
│ │ │ ├── qtbase_ka.qm
│ │ │ ├── qtbase_ko.qm
│ │ │ ├── qtbase_lv.qm
│ │ │ ├── qtbase_nl.qm
│ │ │ ├── qtbase_nn.qm
│ │ │ ├── qtbase_pl.qm
│ │ │ ├── qtbase_pt_BR.qm
│ │ │ ├── qtbase_ru.qm
│ │ │ ├── qtbase_sk.qm
│ │ │ ├── qtbase_tr.qm
│ │ │ ├── qtbase_uk.qm
│ │ │ ├── qtbase_zh_CN.qm
│ │ │ └── qtbase_zh_TW.qm
│ ├── QtCore.pyd
│ ├── QtGui.pyd
│ ├── QtWidgets.pyd
│ └── sip.cp313-win_amd64.pyd
│ ├── VCRUNTIME140.dll
│ ├── VCRUNTIME140_1.dll
│ ├── _asyncio.pyd
│ ├── _bz2.pyd
│ ├── _ctypes.pyd
│ ├── _decimal.pyd
│ ├── _elementtree.pyd
│ ├── _hashlib.pyd
│ ├── _lzma.pyd
│ ├── _multiprocessing.pyd
│ ├── _overlapped.pyd
│ ├── _queue.pyd
│ ├── _socket.pyd
│ ├── _ssl.pyd
│ ├── _uuid.pyd
│ ├── _wmi.pyd
│ ├── api-ms-win-core-console-l1-1-0.dll
│ ├── api-ms-win-core-datetime-l1-1-0.dll
│ ├── api-ms-win-core-debug-l1-1-0.dll
│ ├── api-ms-win-core-errorhandling-l1-1-0.dll
│ ├── api-ms-win-core-fibers-l1-1-0.dll
│ ├── api-ms-win-core-fibers-l1-1-1.dll
│ ├── api-ms-win-core-file-l1-1-0.dll
│ ├── api-ms-win-core-file-l1-2-0.dll
│ ├── api-ms-win-core-file-l2-1-0.dll
│ ├── api-ms-win-core-handle-l1-1-0.dll
│ ├── api-ms-win-core-heap-l1-1-0.dll
│ ├── api-ms-win-core-interlocked-l1-1-0.dll
│ ├── api-ms-win-core-kernel32-legacy-l1-1-1.dll
│ ├── api-ms-win-core-libraryloader-l1-1-0.dll
│ ├── api-ms-win-core-localization-l1-2-0.dll
│ ├── api-ms-win-core-memory-l1-1-0.dll
│ ├── api-ms-win-core-namedpipe-l1-1-0.dll
│ ├── api-ms-win-core-processenvironment-l1-1-0.dll
│ ├── api-ms-win-core-processthreads-l1-1-0.dll
│ ├── api-ms-win-core-processthreads-l1-1-1.dll
│ ├── api-ms-win-core-profile-l1-1-0.dll
│ ├── api-ms-win-core-rtlsupport-l1-1-0.dll
│ ├── api-ms-win-core-string-l1-1-0.dll
│ ├── api-ms-win-core-synch-l1-1-0.dll
│ ├── api-ms-win-core-synch-l1-2-0.dll
│ ├── api-ms-win-core-sysinfo-l1-1-0.dll
│ ├── api-ms-win-core-sysinfo-l1-2-0.dll
│ ├── api-ms-win-core-timezone-l1-1-0.dll
│ ├── api-ms-win-core-util-l1-1-0.dll
│ ├── api-ms-win-crt-conio-l1-1-0.dll
│ ├── api-ms-win-crt-convert-l1-1-0.dll
│ ├── api-ms-win-crt-environment-l1-1-0.dll
│ ├── api-ms-win-crt-filesystem-l1-1-0.dll
│ ├── api-ms-win-crt-heap-l1-1-0.dll
│ ├── api-ms-win-crt-locale-l1-1-0.dll
│ ├── api-ms-win-crt-math-l1-1-0.dll
│ ├── api-ms-win-crt-process-l1-1-0.dll
│ ├── api-ms-win-crt-runtime-l1-1-0.dll
│ ├── api-ms-win-crt-stdio-l1-1-0.dll
│ ├── api-ms-win-crt-string-l1-1-0.dll
│ ├── api-ms-win-crt-time-l1-1-0.dll
│ ├── api-ms-win-crt-utility-l1-1-0.dll
│ ├── certifi
│ ├── cacert.pem
│ └── py.typed
│ ├── charset_normalizer
│ ├── md.cp313-win_amd64.pyd
│ └── md__mypyc.cp313-win_amd64.pyd
│ ├── dlss_updater
│ ├── __init__.py
│ ├── auto_updater.py
│ ├── config.py
│ ├── constants.py
│ ├── dll_repository.py
│ ├── dlss_updater.log
│ ├── icons
│ │ ├── battlenet.png
│ │ ├── dlss_updater.ico
│ │ ├── dlss_updater.png
│ │ ├── dlss_updater_full.png
│ │ ├── ea.png
│ │ ├── epic.png
│ │ ├── gog.png
│ │ ├── reset.png
│ │ ├── steam.png
│ │ ├── ubisoft.png
│ │ ├── update.png
│ │ └── xbox.png
│ ├── lib
│ │ └── threading_lib.py
│ ├── logger.py
│ ├── main_ui
│ │ ├── animated_toggle.py
│ │ └── main_window.py
│ ├── scanner.py
│ ├── updater.py
│ ├── utils.py
│ ├── version.py
│ └── whitelist.py
│ ├── icons
│ ├── battlenet.png
│ ├── dlss_updater.png
│ ├── dlss_updater_full.png
│ ├── ea.png
│ ├── epic.png
│ ├── gog.png
│ ├── reset.png
│ ├── steam.png
│ ├── ubisoft.png
│ ├── update.png
│ └── xbox.png
│ ├── libcrypto-3.dll
│ ├── libffi-8.dll
│ ├── libssl-3.dll
│ ├── pefile-2023.2.7.dist-info
│ ├── INSTALLER
│ ├── LICENSE
│ ├── METADATA
│ ├── RECORD
│ ├── REQUESTED
│ ├── WHEEL
│ └── top_level.txt
│ ├── psutil-7.0.0.dist-info
│ ├── INSTALLER
│ ├── LICENSE
│ ├── METADATA
│ ├── RECORD
│ ├── REQUESTED
│ ├── WHEEL
│ └── top_level.txt
│ ├── psutil
│ └── _psutil_windows.pyd
│ ├── pyexpat.pyd
│ ├── python3.dll
│ ├── python313.dll
│ ├── pywin32_system32
│ └── pywintypes313.dll
│ ├── release_notes.txt
│ ├── select.pyd
│ ├── setuptools
│ └── _vendor
│ │ ├── importlib_metadata-8.0.0.dist-info
│ │ ├── INSTALLER
│ │ ├── LICENSE
│ │ ├── METADATA
│ │ ├── RECORD
│ │ ├── REQUESTED
│ │ ├── WHEEL
│ │ └── top_level.txt
│ │ ├── jaraco
│ │ └── text
│ │ │ └── Lorem ipsum.txt
│ │ └── wheel-0.45.1.dist-info
│ │ ├── INSTALLER
│ │ ├── LICENSE.txt
│ │ ├── METADATA
│ │ ├── RECORD
│ │ ├── REQUESTED
│ │ ├── WHEEL
│ │ └── entry_points.txt
│ ├── ucrtbase.dll
│ ├── unicodedata.pyd
│ └── win32
│ └── win32api.pyd
├── dlss_updater
├── __init__.py
├── auto_updater.py
├── config.py
├── constants.py
├── dll_repository.py
├── dlss_updater.log
├── icons
│ ├── battlenet.png
│ ├── dlss_updater.ico
│ ├── dlss_updater.png
│ ├── dlss_updater_full.png
│ ├── ea.png
│ ├── epic.png
│ ├── gog.png
│ ├── reset.png
│ ├── steam.png
│ ├── ubisoft.png
│ ├── update.png
│ └── xbox.png
├── lib
│ └── threading_lib.py
├── logger.py
├── main_ui
│ ├── animated_toggle.py
│ └── main_window.py
├── scanner.py
├── updater.py
├── utils.py
├── version.py
└── whitelist.py
├── hooks
├── hook-dlss_updater.py
├── hook-pefile.py
└── hook-psutil.py
├── main.py
├── release_notes.txt
├── requirements.txt
├── tools
├── chocolateyInstall.ps1
└── chocolateyUninstall.ps1
├── version.svg
└── version.txt
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
12 | polar: # Replace with a single Polar username
13 | buy_me_a_coffee: decouk
14 | thanks_dev: # Replace with a single thanks.dev username
15 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
16 |
--------------------------------------------------------------------------------
/.github/dependabot.yml:
--------------------------------------------------------------------------------
1 | # To get started with Dependabot version updates, you'll need to specify which
2 | # package ecosystems to update and where the package manifests are located.
3 | # Please see the documentation for all configuration options:
4 | # https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
5 |
6 | version: 2
7 | updates:
8 | - package-ecosystem: "pip" # See documentation for possible values
9 | directory: "/" # Location of package manifests
10 | schedule:
11 | interval: "weekly"
12 |
13 | - package-ecosystem: "github-actions"
14 | directory: "/.github/workflows"
15 | schedule:
16 | interval: "weekly"
17 |
--------------------------------------------------------------------------------
/.github/workflows/bandit.yml:
--------------------------------------------------------------------------------
1 | # This workflow uses actions that are not certified by GitHub.
2 | # They are provided by a third-party and are governed by
3 | # separate terms of service, privacy policy, and support
4 | # documentation.
5 |
6 | # Bandit is a security linter designed to find common security issues in Python code.
7 | # This action will run Bandit on your codebase.
8 | # The results of the scan will be found under the Security tab of your repository.
9 |
10 | # https://github.com/marketplace/actions/bandit-scan is ISC licensed, by abirismyname
11 | # https://pypi.org/project/bandit/ is Apache v2.0 licensed, by PyCQA
12 |
13 | name: Bandit
14 | on:
15 | push:
16 | branches: [ "main" ]
17 | pull_request:
18 | # The branches below must be a subset of the branches above
19 | branches: [ "main" ]
20 | schedule:
21 | - cron: '32 21 * * 0'
22 |
23 | jobs:
24 | bandit:
25 | permissions:
26 | contents: read # for actions/checkout to fetch code
27 | security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
28 | actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status
29 |
30 | runs-on: ubuntu-latest
31 | steps:
32 | - uses: actions/checkout@v4
33 | - name: Bandit Scan
34 | uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c
35 | with: # optional arguments
36 | # exit with 0, even with results found
37 | exit_zero: true # optional, default is DEFAULT
38 | # Github token of the repository (automatically created by Github)
39 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information.
40 | # File or directory to run bandit on
41 | # path: # optional, default is .
42 | # Report only issues of a given severity level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything)
43 | # level: # optional, default is UNDEFINED
44 | # Report only issues of a given confidence level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything)
45 | # confidence: # optional, default is UNDEFINED
46 | # comma-separated list of paths (glob patterns supported) to exclude from scan (note that these are in addition to the excluded paths provided in the config file) (default: .svn,CVS,.bzr,.hg,.git,__pycache__,.tox,.eggs,*.egg)
47 | # excluded_paths: # optional, default is DEFAULT
48 | # comma-separated list of test IDs to skip
49 | # skips: # optional, default is DEFAULT
50 | # path to a .bandit file that supplies command line arguments
51 | # ini_path: # optional, default is DEFAULT
52 |
53 |
--------------------------------------------------------------------------------
/.github/workflows/chocolatey-release.yml:
--------------------------------------------------------------------------------
1 | name: Chocolatey Release
2 |
3 | on:
4 | release:
5 | types: [published]
6 | workflow_dispatch:
7 |
8 | jobs:
9 | build:
10 | runs-on: windows-latest
11 |
12 | steps:
13 | - uses: actions/checkout@v4
14 |
15 | - name: Set up Python
16 | uses: actions/setup-python@v5
17 | with:
18 | python-version: '3.x'
19 |
20 | - name: Install dependencies
21 | run: |
22 | python -m pip install --upgrade pip
23 | pip install -r requirements.txt
24 | pip install pyinstaller
25 |
26 | - name: Clean build and dist directories
27 | run: |
28 | if (Test-Path build) { Remove-Item -Recurse -Force build }
29 | if (Test-Path dist) { Remove-Item -Recurse -Force dist }
30 | shell: pwsh
31 |
32 | - name: Build application
33 | run: pyinstaller DLSS_Updater.spec --noconfirm
34 |
35 | - name: Get latest release version
36 | id: get_version
37 | run: |
38 | $latest_release = Invoke-RestMethod -Uri "https://api.github.com/repos/${{ github.repository }}/releases/latest"
39 | $version = $latest_release.tag_name -replace '^[vV]', ''
40 | echo "VERSION=$version" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
41 | shell: pwsh
42 |
43 | - name: Generate file hash
44 | run: |
45 | $hash = (Get-FileHash "dist\DLSS_Updater\DLSS_Updater.exe" -Algorithm SHA256).Hash
46 | echo "FILE_HASH=$hash" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
47 | shell: pwsh
48 | id: hash
49 |
50 | - name: Update VERIFICATION.txt
51 | run: |
52 | $content = Get-Content -Path VERIFICATION.txt -Raw
53 | $content = $content -replace 'path\\to\\DLSS_Updater.exe', 'DLSS_Updater.exe'
54 | $content += "`n`nChecksum (SHA256) for DLSS_Updater.exe: ${{ steps.hash.outputs.FILE_HASH }}"
55 | $content | Set-Content -Path VERIFICATION.txt
56 | shell: pwsh
57 |
58 | - name: Create Chocolatey package
59 | run: |
60 | choco pack DLSS-Updater.nuspec --version=${{ steps.get_version.outputs.VERSION }}
61 | shell: pwsh
62 |
63 | - name: Push to Chocolatey
64 | env:
65 | CHOCO_API_KEY: ${{ secrets.CHOCO_API_KEY }}
66 | run: |
67 | choco apikey --key $env:CHOCO_API_KEY --source https://push.chocolatey.org/
68 | choco push dlss-updater.${{ steps.get_version.outputs.VERSION }}.nupkg --source https://push.chocolatey.org/
69 | shell: pwsh
--------------------------------------------------------------------------------
/.github/workflows/dependency-review.yml:
--------------------------------------------------------------------------------
1 | # Dependency Review Action
2 | #
3 | # This Action will scan dependency manifest files that change as part of a Pull Request,
4 | # surfacing known-vulnerable versions of the packages declared or updated in the PR.
5 | # Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable
6 | # packages will be blocked from merging.
7 | #
8 | # Source repository: https://github.com/actions/dependency-review-action
9 | # Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
10 | name: 'Dependency review'
11 | on:
12 | pull_request:
13 | branches: [ "main" ]
14 |
15 | # If using a dependency submission action in this workflow this permission will need to be set to:
16 | #
17 | # permissions:
18 | # contents: write
19 | #
20 | # https://docs.github.com/en/enterprise-cloud@latest/code-security/supply-chain-security/understanding-your-software-supply-chain/using-the-dependency-submission-api
21 | permissions:
22 | contents: read
23 | # Write permissions for pull-requests are required for using the `comment-summary-in-pr` option, comment out if you aren't using this option
24 | pull-requests: write
25 |
26 | jobs:
27 | dependency-review:
28 | runs-on: ubuntu-latest
29 | steps:
30 | - name: 'Checkout repository'
31 | uses: actions/checkout@v4
32 | - name: 'Dependency Review'
33 | uses: actions/dependency-review-action@v4
34 | # Commonly enabled options, see https://github.com/actions/dependency-review-action#configuration-options for all available options.
35 | with:
36 | comment-summary-in-pr: always
37 | # fail-on-severity: moderate
38 | # deny-licenses: GPL-1.0-or-later, LGPL-2.0-or-later
39 | # retry-on-snapshot-warnings: true
40 |
--------------------------------------------------------------------------------
/.github/workflows/ossar.yml:
--------------------------------------------------------------------------------
1 | # This workflow uses actions that are not certified by GitHub.
2 | # They are provided by a third-party and are governed by
3 | # separate terms of service, privacy policy, and support
4 | # documentation.
5 |
6 | # This workflow integrates a collection of open source static analysis tools
7 | # with GitHub code scanning. For documentation, or to provide feedback, visit
8 | # https://github.com/github/ossar-action
9 | name: OSSAR
10 |
11 | on:
12 | push:
13 | branches: [ "main" ]
14 | pull_request:
15 | # The branches below must be a subset of the branches above
16 | branches: [ "main" ]
17 | schedule:
18 | - cron: '39 13 * * 0'
19 |
20 | permissions:
21 | contents: read
22 |
23 | jobs:
24 | OSSAR-Scan:
25 | # OSSAR runs on windows-latest.
26 | # ubuntu-latest and macos-latest support coming soon
27 | permissions:
28 | contents: read # for actions/checkout to fetch code
29 | security-events: write # for github/codeql-action/upload-sarif to upload SARIF results
30 | actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status
31 | runs-on: windows-latest
32 |
33 | steps:
34 | - name: Checkout repository
35 | uses: actions/checkout@v4
36 |
37 | # Ensure a compatible version of dotnet is installed.
38 | # The [Microsoft Security Code Analysis CLI](https://aka.ms/mscadocs) is built with dotnet v3.1.201.
39 | # A version greater than or equal to v3.1.201 of dotnet must be installed on the agent in order to run this action.
40 | # GitHub hosted runners already have a compatible version of dotnet installed and this step may be skipped.
41 | # For self-hosted runners, ensure dotnet version 3.1.201 or later is installed by including this action:
42 | # - name: Install .NET
43 | # uses: actions/setup-dotnet@v4
44 | # with:
45 | # dotnet-version: '3.1.x'
46 |
47 | # Run open source static analysis tools
48 | - name: Run OSSAR
49 | uses: github/ossar-action@v1
50 | id: ossar
51 |
52 | # Upload results to the Security tab
53 | - name: Upload OSSAR results
54 | uses: github/codeql-action/upload-sarif@v3
55 | with:
56 | sarif_file: ${{ steps.ossar.outputs.sarifFile }}
57 |
--------------------------------------------------------------------------------
/.github/workflows/osv-scanner.yml:
--------------------------------------------------------------------------------
1 | name: OSV-Scanner
2 |
3 | on:
4 | pull_request:
5 | branches: [ "main" ]
6 | merge_group:
7 | branches: [ "main" ]
8 | schedule:
9 | - cron: '45 6 * * 5'
10 | push:
11 | branches: [ "main" ]
12 |
13 | permissions:
14 | security-events: write
15 | contents: read
16 |
17 | jobs:
18 | scan-scheduled:
19 | if: ${{ github.event_name == 'push' || github.event_name == 'schedule' }}
20 | uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable.yml@v2.0.2"
21 | with:
22 | scan-args: |-
23 | -r
24 | --skip-git
25 | ./
26 |
27 | scan-pr:
28 | if: ${{ github.event_name == 'pull_request' || github.event_name == 'merge_group' }}
29 | uses: "google/osv-scanner-action/.github/workflows/osv-scanner-reusable-pr.yml@v2.0.2"
30 | with:
31 | scan-args: |-
32 | -r
33 | --skip-git
34 | ./
--------------------------------------------------------------------------------
/.github/workflows/pylint.yml:
--------------------------------------------------------------------------------
1 | name: Pylint
2 |
3 | on: [push]
4 |
5 | jobs:
6 | build:
7 | runs-on: ubuntu-latest
8 | strategy:
9 | matrix:
10 | python-version: ["3.10", "3.11", "3.12"]
11 | steps:
12 | - uses: actions/checkout@v4
13 | - name: Set up Python ${{ matrix.python-version }}
14 | uses: actions/setup-python@v5
15 | with:
16 | python-version: ${{ matrix.python-version }}
17 | - name: Install dependencies
18 | run: |
19 | python -m pip install --upgrade pip
20 | pip install pylint
21 | - name: Analysing the code with pylint
22 | run: |
23 | pylint $(git ls-files '*.py')
24 |
--------------------------------------------------------------------------------
/.github/workflows/pyre.yml:
--------------------------------------------------------------------------------
1 | name: Pyre
2 |
3 | on:
4 | push:
5 | branches: [main]
6 | pull_request:
7 | branches: [main]
8 |
9 | jobs:
10 | pyre:
11 | runs-on: ubuntu-latest
12 | steps:
13 | - uses: actions/checkout@v4
14 |
15 | - name: Run Pyre Action
16 | uses: facebook/pyre-action@v0.0.2
17 | with:
18 | repo-directory: './dlss_updater/'
19 | requirements-path: '../requirements.txt'
20 |
--------------------------------------------------------------------------------
/.github/workflows/python-app.yml:
--------------------------------------------------------------------------------
1 | # This workflow will install Python dependencies, run tests and lint with a single version of Python
2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python
3 |
4 | name: Python application
5 |
6 | on:
7 | push:
8 | branches: [ "main" ]
9 | pull_request:
10 | branches: [ "main" ]
11 |
12 | permissions:
13 | contents: read
14 |
15 | jobs:
16 | build:
17 |
18 | runs-on: ubuntu-latest
19 |
20 | steps:
21 | - uses: actions/checkout@v4
22 | - name: Set up Python 3.10
23 | uses: actions/setup-python@v5
24 | with:
25 | python-version: "3.10"
26 | - name: Install dependencies
27 | run: |
28 | python -m pip install --upgrade pip
29 | pip install flake8 pytest
30 | if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
31 | - name: Lint with flake8
32 | run: |
33 | # stop the build if there are Python syntax errors or undefined names
34 | flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
35 | # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
36 | flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
37 | - name: Test with pytest
38 | run: |
39 | pytest
40 |
--------------------------------------------------------------------------------
/.github/workflows/stale.yml:
--------------------------------------------------------------------------------
1 | # This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
2 | #
3 | # You can adjust the behavior by modifying this file.
4 | # For more information, see:
5 | # https://github.com/actions/stale
6 | name: Mark stale issues and pull requests
7 |
8 | on:
9 | schedule:
10 | - cron: '21 20 * * *'
11 |
12 | jobs:
13 | stale:
14 |
15 | runs-on: ubuntu-latest
16 | permissions:
17 | issues: write
18 | pull-requests: write
19 |
20 | steps:
21 | - uses: actions/stale@v9
22 | with:
23 | repo-token: ${{ secrets.GITHUB_TOKEN }}
24 | stale-issue-message: 'Stale issue message'
25 | stale-pr-message: 'Stale pull request message'
26 | stale-issue-label: 'no-issue-activity'
27 | stale-pr-label: 'no-pr-activity'
28 |
--------------------------------------------------------------------------------
/.github/workflows/update-download-badge.yml:
--------------------------------------------------------------------------------
1 | name: Update Download Count Badge
2 |
3 | on:
4 | schedule:
5 | - cron: '0 0 * * *' # Runs daily at midnight UTC
6 | workflow_dispatch: # Allows manual triggering
7 |
8 | jobs:
9 | update-badge:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - uses: actions/checkout@v4
13 |
14 | - name: Set up Python
15 | uses: actions/setup-python@v5
16 | with:
17 | python-version: '3.x'
18 |
19 | - name: Install dependencies
20 | run: |
21 | python -m pip install --upgrade pip
22 | pip install requests
23 |
24 | - name: Fetch download count and update README
25 | env:
26 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
27 | run: |
28 | import os
29 | import requests
30 |
31 | def get_total_downloads():
32 | total_downloads = 0
33 | page = 1
34 |
35 | while True:
36 | url = f"https://api.github.com/repos/Recol/DLSS-Updater/releases?page={page}&per_page=100"
37 | headers = {"Authorization": f"token {os.environ['GITHUB_TOKEN']}"}
38 | response = requests.get(url, headers=headers)
39 |
40 | if response.status_code != 200:
41 | print(f"Error fetching page {page}: {response.status_code}")
42 | break
43 |
44 | releases = response.json()
45 |
46 | if not releases: # No more releases
47 | break
48 |
49 | # Count downloads for this page
50 | for release in releases:
51 | for asset in release.get('assets', []):
52 | total_downloads += asset.get('download_count', 0)
53 |
54 | page += 1
55 |
56 | return total_downloads
57 |
58 | def update_readme(total_downloads):
59 | with open('README.md', 'r') as file:
60 | content = file.readlines()
61 |
62 | badge_url = f"https://img.shields.io/badge/Downloads-{total_downloads}-blue"
63 | new_badge = f""
64 |
65 | # Find the position to insert or update the downloads badge
66 | version_badge_index = next((i for i, line in enumerate(content) if '![Version]' in line), -1)
67 | downloads_badge_index = next((i for i, line in enumerate(content) if '![Downloads]' in line), -1)
68 |
69 | if downloads_badge_index != -1:
70 | # Update existing downloads badge
71 | content[downloads_badge_index] = new_badge + '\n'
72 | elif version_badge_index != -1:
73 | # Insert new downloads badge after version badge
74 | content.insert(version_badge_index + 1, new_badge + '\n')
75 | else:
76 | # If version badge not found, insert at the top of the file
77 | content.insert(0, new_badge + '\n')
78 |
79 | with open('README.md', 'w') as file:
80 | file.writelines(content)
81 |
82 | total_downloads = get_total_downloads()
83 | update_readme(total_downloads)
84 | print(f"Total downloads: {total_downloads}")
85 | shell: python
86 |
87 | - name: Commit and push if changed
88 | run: |
89 | git config --global user.name 'github-actions[bot]'
90 | git config --global user.email 'github-actions[bot]@users.noreply.github.com'
91 | git add README.md
92 | if git diff --staged --quiet; then
93 | echo "No changes to commit"
94 | else
95 | git commit -m "Update download count badge"
96 | git pull --rebase origin main
97 | git push
98 | fi
99 |
--------------------------------------------------------------------------------
/.github/workflows/update-version-badge.yml:
--------------------------------------------------------------------------------
1 | name: Update Version Badge
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | paths:
8 | - dlss_updater/version.py
9 | workflow_dispatch:
10 |
11 | jobs:
12 | update-version-badge:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Checkout repository
16 | uses: actions/checkout@v4
17 |
18 | - name: Read version from version.py
19 | id: get_version
20 | run: |
21 | VERSION=$(grep -oP '(?<=__version__ = ")[^"]+' dlss_updater/version.py)
22 | echo "VERSION=$VERSION" >> $GITHUB_ENV
23 |
24 | - name: Generate version badge
25 | run: |
26 | VERSION=${{ env.VERSION }}
27 | curl -o version.svg "https://img.shields.io/badge/version-$VERSION-blue"
28 |
29 | - name: Commit version badge
30 | env:
31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32 | run: |
33 | git config --global user.name 'github-actions[bot]'
34 | git config --global user.email 'github-actions[bot]@users.noreply.github.com'
35 | git add version.svg
36 | git commit -m "Update version badge to $VERSION"
37 | git push origin main
38 |
39 | - name: Debug
40 | run: |
41 | git remote -v
42 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.pyc
2 | *.zip
3 | *venv
4 | *build
5 | \.idea
6 | *.log
7 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "python.pythonPath": "C:\\Users\\deckl\\AppData\\Local\\Programs\\Python\\Python313\\python.exe"
3 | }
4 |
--------------------------------------------------------------------------------
/DLSS-Updater.nuspec:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | dlss-updater
5 | $version$
6 | DLSS Updater
7 | Deco
8 | https://github.com/Recol/DLSS-Updater
9 | https://github.com/Recol/DLSS-Updater/tree/main/dlss_updater
10 | https://github.com/Recol/DLSS-Updater/issues
11 | https://github.com/Recol/DLSS-Updater/blob/main/LICENSE
12 | https://github.com/Recol/DLSS-Updater?tab=readme-ov-file#execution-instructions
13 | true
14 | https://github.com/Recol/DLSS-Updater/releases
15 | https://github.com/Recol/DLSS-Updater/blob/main/dlss_updater/icons/dlss_updater.png
16 | A tool to update DLSS DLLs for various games and launchers.
17 | DLSS Updater is a utility that automatically updates DLSS (Deep Learning Super Sampling) DLLs for games across multiple platforms including Steam, EA Play, Ubisoft, Epic Games, GOG, and Battle.net. It simplifies the process of keeping your games up-to-date with the latest DLSS improvements.
18 |
19 | **Note: This application requires administrative privileges to run.**
20 |
21 | This package does not contain malware, it is a limitation of Pyinstaller with the binary not being signed, please see https://github.com/pyinstaller/pyinstaller/issues/6754#issuecomment-1100821249 for more details.
22 | https://github.com/Recol/DLSS-Updater/blob/main/release_notes.txt
23 | dlss nvidia gaming update-tool admin
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/DLSS_Updater.spec:
--------------------------------------------------------------------------------
1 | # -- mode: python ; coding: utf-8 --
2 |
3 | import pefile
4 | import psutil
5 | import os
6 | from PyInstaller.utils.hooks import collect_submodules, collect_data_files
7 |
8 | block_cipher = None
9 |
10 | dlss_updater_imports = collect_submodules('dlss_updater')
11 | dlss_updater_datas = collect_data_files('dlss_updater')
12 |
13 | a = Analysis(
14 | ['main.py'],
15 | pathex=['.'],
16 | binaries=[],
17 | datas=[
18 | ('dlss_updater', 'dlss_updater'),
19 | ('release_notes.txt', '.'),
20 | ('dlss_updater/icons/*.png', 'icons/'),
21 | ],
22 | hiddenimports=[
23 | 'pefile', 'psutil', 'importlib.metadata', 'packaging',
24 | 'concurrent.futures', 'pywin32', 'PyQt6'
25 | ] + dlss_updater_imports,
26 | hookspath=['./hooks'],
27 | hooksconfig={},
28 | runtime_hooks=[],
29 | excludes=[],
30 | win_no_prefer_redirects=False,
31 | win_private_assemblies=False,
32 | cipher=block_cipher,
33 | noarchive=False,
34 | optimize=2
35 | )
36 |
37 | pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
38 |
39 | exe = EXE(
40 | pyz,
41 | a.scripts,
42 | [],
43 | exclude_binaries=True,
44 | name='DLSS_Updater',
45 | version='version.txt',
46 | debug=False,
47 | bootloader_ignore_signals=False,
48 | strip=False,
49 | upx=True,
50 | console=True,
51 | optimize=2,
52 | icon='dlss_updater/icons/dlss_updater.ico'
53 | )
54 |
55 | coll = COLLECT(
56 | exe,
57 | a.binaries,
58 | a.zipfiles,
59 | a.datas,
60 | strip=False,
61 | upx=True,
62 | upx_exclude=[],
63 | name='DLSS_Updater',
64 | )
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DLSS Updater
2 |
3 | [](https://github.com/Recol/DLSS-Updater/actions?query=workflow%3ACodeQL)
4 | 
5 | 
6 | [](https://buymeacoffee.com/decouk)
7 |
8 |
9 | 
10 |
11 | What if you could update all the DLSS/XeSS DLLs for the games detected on your system?
12 | ## Features
13 |
14 | - Supports updating games from the following launchers:
15 | - Steam
16 | - Ubisoft
17 | - EA Play
18 | - Xbox Game Pass (PC)
19 | - Epic Games Launcher
20 | - GOG Galaxy
21 | - Battle.net (Note for Battle.net: Please ensure that the launcher is **open** before updating this launcher (this does not apply if you are entering a custom folder))
22 | - A soft backup system for allowing restoration with [DLSS Swapper](https://github.com/beeradmoore/dlss-swapper).
23 | - Support for updating Ray Reconstruction/Frame Generation/Streamline (Reflex Low Latency etc) DLL's.
24 | - Support for updating XeSS/FSR/DirectStorage DLL's.
25 | - A GUI!
26 | - Support for manual folder locations.
27 |
28 |
29 | The current supported DLL included is DLSS 4.
30 | The current supported XESS DLL included is 2.0.1, please see the limitations [here](https://github.com/intel/xess/releases/tag/v2.0.1) for game support.
31 |
32 | ## GUI
33 | 
34 |
35 | ## Blacklisted Games
36 |
37 | The list of games that are not supported (blacklisted) is now maintained in a separate repository as a CSV file. This allows for easier updates and potential future expansion of game-specific information without requiring changes to the main application. You can view the current list of blacklisted games here:
38 |
39 | [DLSS-Updater-Blacklist](https://github.com/Recol/DLSS-Updater-Whitelist/blob/main/whitelist.csv)
40 |
41 | The blacklist includes games that:
42 | - Use their own version of DLSS for testing (e.g., 3DMark)
43 | - Replace the DLL when the game is booted (e.g., Warframe)
44 | - Are using a DLSS version <2.0 (these are non-updatable)
45 | - Have specific compatibility issues with updated DLSS versions
46 |
47 | The games that are blacklisted can be disabled manually by clicking the "Manage Blacklist" button in the GUI. This will allow you to skip games for whatever reason.
48 |
49 | ## Restoring modified DLL's
50 | - In order to do this, simply rename the **.dlsss** file of the respective DLL which you wish to restore to **.dll** and overwrite the original file.
51 | - Support does not exist yet for being able to restore them using the program.
52 |
53 | ## Execution Instructions
54 |
55 | ### Running the Pre-built Application
56 |
57 | 1. Download the latest release from the [Releases](https://github.com/Recol/DLSS-Updater/releases) page.
58 | 2. Extract the downloaded folder.
59 | 3. Navigate to the `dist/DLSS_Updater` directory.
60 | 4. Run the `DLSS_Updater.exe` executable as an administrator.
61 | 5. The program will now boot.
62 |
63 | ## Winget
64 |
65 | 1. Download DLSS Updater using ``winget install DLSS Updater``.
66 |
67 | ## Chocolatey
68 |
69 | 1. Download DLSS Updater from [here](https://community.chocolatey.org/packages/dlss-updater/).
70 |
71 |
72 | ### Building from Source
73 |
74 | If you prefer to build the application yourself, follow these steps:
75 |
76 | #### Prerequisites
77 |
78 | - Python 3.12 or higher
79 | - Git
80 | - pip (Python package installer)
81 |
82 | #### Steps
83 |
84 | 1. **Clone the Repository:**
85 |
86 | ```sh
87 | git clone https://github.com/Recol/DLSS-Updater.git
88 | cd DLSS-Updater
89 | ```
90 |
91 | 2. **Create and Activate a Virtual Environment:**
92 |
93 | ```sh
94 | python -m venv venv
95 | venv\Scripts\activate
96 | ```
97 |
98 | 3. **Install Dependencies:**
99 |
100 | ```sh
101 | pip install -r requirements.txt
102 | ```
103 |
104 | 4. **Build the Executable:**
105 |
106 | Ensure you have `pyinstaller` installed:
107 |
108 | ```sh
109 | pip install pyinstaller
110 | ```
111 |
112 | Run PyInstaller to build the executable:
113 |
114 | ```sh
115 | pyinstaller DLSS_Updater.spec
116 | ```
117 |
118 | 5. **Run the Built Executable:**
119 |
120 | Navigate to the `dist` directory:
121 |
122 | ```sh
123 | cd dist/DLSS_Updater
124 | ```
125 |
126 | Run the `DLSS_Updater.exe` executable:
127 |
128 | ```sh
129 | .\DLSS_Updater.exe
130 | ```
131 |
132 | ## Easy Anti Cheat
133 | - The tool will not globally block games as some games do allow for this, with that being said i will whitelist games as they appear if they do not function for this.
134 |
135 | ## Future Features
136 |
137 | - Ability to restore and ~~create backups of DLL swaps~~. - This is currently being worked on, however support has been added for restoring with DLSS Swapper currently.
138 | - Support for a [database](https://github.com/Recol/DLSS-Updater/issues/9).
139 | - Insert xyz feature that wants to be requested.
140 | - Automation support with external software.
141 |
142 | ## Release Notes
143 |
144 | Each release includes detailed notes about new features, bug fixes, and other changes. You can find the release notes in the `release_notes.txt` file included with the application or in the Releases section.
145 |
146 | ## Troubleshooting
147 |
148 | If you encounter any issues, please refer to the Issues section on GitHub to see if your problem has already been reported. If not, feel free to open a new issue with detailed information about the problem.
149 |
150 | ## License
151 |
152 | This project is licensed under the GNU Affero General Public License. See the LICENSE file for more details.
153 |
154 | ## Credits
155 |
156 | This project uses Nvidia's DLSS (Deep Learning Super Sampling) technology. Please refer to Nvidia's [DLSS page](https://www.nvidia.com/en-us/geforce/technologies/dlss/) for more information. Special thanks to all contributors of open-source libraries used in this project, including but not limited to pefile, psutil, Pyinstaller and packaging. If any are not credited and should be, please inform the author and credit will be applied where required.
157 |
158 | This project also uses Intel's XESS (Xe Super Sampling) technology. Please refer to Intel's [XESS page](https://www.intel.com/content/www/us/en/content-details/726651/intel-xe-super-sampling-xess-an-ai-based-upscaling-for-real-time-rendering.html?wapkw=xess) for more information.
159 |
--------------------------------------------------------------------------------
/VERIFICATION.TXT:
--------------------------------------------------------------------------------
1 | VERIFICATION
2 | Verification is intended to assist the Chocolatey moderators and community
3 | in verifying that this package's contents are trustworthy.
4 |
5 | This package is published by the DLSS Updater Project itself. The binaries are
6 | identical to those published in the GitHub releases section.
7 |
8 | Project URL: https://github.com/Recol/DLSS-Updater
9 | Releases: https://github.com/Recol/DLSS-Updater/releases
10 |
11 | To verify the binaries:
12 |
13 | 1. Download the official release from the GitHub releases page
14 | 2. Generate a checksum using Get-FileHash in PowerShell
15 | Get-FileHash path\to\DLSS_Updater.exe -Algorithm SHA256
16 | 3. Compare the checksum with the one provided in the release notes or in this file
17 |
18 | Alternatively, you can use the verification methods provided by GitHub to ensure
19 | the release you're downloading matches the source code at the tagged commit.
20 |
21 | Note: This file will be updated with each release to include the specific
22 | checksum for the current version. Always refer to the VERIFICATION.txt
23 | included in the package for the most up-to-date verification information.
--------------------------------------------------------------------------------
/dist/DLSS_Updater/DLSS_Updater.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/DLSS_Updater.exe
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140_1.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140_1.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140_2.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/MSVCP140_2.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Core.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Core.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Gui.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Gui.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Network.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Network.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Pdf.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Pdf.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Svg.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Svg.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Widgets.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/Qt6Widgets.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/VCRUNTIME140.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/VCRUNTIME140.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/VCRUNTIME140_1.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/VCRUNTIME140_1.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/opengl32sw.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/bin/opengl32sw.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/generic/qtuiotouchplugin.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/generic/qtuiotouchplugin.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/iconengines/qsvgicon.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/iconengines/qsvgicon.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qgif.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qgif.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qicns.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qicns.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qico.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qico.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qjpeg.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qjpeg.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qpdf.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qpdf.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qsvg.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qsvg.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qtga.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qtga.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qtiff.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qtiff.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qwbmp.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qwbmp.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qwebp.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/imageformats/qwebp.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qminimal.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qminimal.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qoffscreen.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qoffscreen.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qwindows.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/platforms/qwindows.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/styles/qmodernwindowsstyle.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/plugins/styles/qmodernwindowsstyle.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ar.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ar.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_bg.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_bg.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ca.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ca.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_cs.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_cs.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_da.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_da.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_de.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_de.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_en.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_en.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_es.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_es.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fa.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fa.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fi.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fi.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fr.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_fr.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_gd.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_gd.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_gl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_gl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_he.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_he.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ar.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ar.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_bg.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_bg.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ca.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ca.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_cs.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_cs.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_da.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_da.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_de.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_de.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_en.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_en.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_es.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_es.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_fr.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_fr.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_gl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_gl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_hr.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_hr.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_hu.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_hu.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_it.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_it.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ja.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ja.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ka.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ka.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ko.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ko.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_nl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_nl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_nn.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_nn.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_pl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_pl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_pt_BR.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_pt_BR.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ru.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_ru.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_sk.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_sk.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_sl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_sl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_tr.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_tr.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_uk.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_uk.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_zh_CN.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_zh_CN.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_zh_TW.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_help_zh_TW.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_hr.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_hr.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_hu.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_hu.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_it.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_it.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ja.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ja.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ka.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ka.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ko.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ko.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_lt.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_lt.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_lv.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_lv.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_nl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_nl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_nn.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_nn.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pt_BR.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pt_BR.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pt_PT.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_pt_PT.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ru.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_ru.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sk.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sk.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sv.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_sv.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_tr.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_tr.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_uk.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_uk.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_zh_CN.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_zh_CN.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_zh_TW.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qt_zh_TW.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ar.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ar.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_bg.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_bg.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ca.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ca.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_cs.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_cs.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_da.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_da.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_de.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_de.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_en.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_en.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_es.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_es.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fa.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fa.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fi.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fi.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fr.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_fr.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_gd.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_gd.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_he.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_he.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_hr.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_hr.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_hu.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_hu.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_it.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_it.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ja.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ja.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ka.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ka.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ko.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ko.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_lv.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_lv.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_nl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_nl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_nn.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_nn.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_pl.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_pl.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_pt_BR.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_pt_BR.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ru.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_ru.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_sk.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_sk.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_tr.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_tr.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_uk.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_uk.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_zh_CN.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_zh_CN.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_zh_TW.qm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/Qt6/translations/qtbase_zh_TW.qm
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/QtCore.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/QtCore.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/QtGui.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/QtGui.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/QtWidgets.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/QtWidgets.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/PyQt6/sip.cp313-win_amd64.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/PyQt6/sip.cp313-win_amd64.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/VCRUNTIME140.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/VCRUNTIME140.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/VCRUNTIME140_1.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/VCRUNTIME140_1.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_asyncio.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_asyncio.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_bz2.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_bz2.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_ctypes.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_ctypes.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_decimal.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_decimal.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_elementtree.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_elementtree.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_hashlib.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_hashlib.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_lzma.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_lzma.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_multiprocessing.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_multiprocessing.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_overlapped.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_overlapped.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_queue.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_queue.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_socket.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_socket.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_ssl.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_ssl.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_uuid.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_uuid.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/_wmi.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/_wmi.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-console-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-console-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-datetime-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-datetime-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-debug-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-debug-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-errorhandling-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-errorhandling-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-fibers-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-fibers-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-fibers-l1-1-1.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-fibers-l1-1-1.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-file-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-file-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-file-l1-2-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-file-l1-2-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-file-l2-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-file-l2-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-handle-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-handle-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-heap-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-heap-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-interlocked-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-interlocked-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-kernel32-legacy-l1-1-1.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-kernel32-legacy-l1-1-1.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-libraryloader-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-libraryloader-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-localization-l1-2-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-localization-l1-2-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-memory-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-memory-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-namedpipe-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-namedpipe-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-processenvironment-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-processenvironment-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-processthreads-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-processthreads-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-processthreads-l1-1-1.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-processthreads-l1-1-1.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-profile-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-profile-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-rtlsupport-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-string-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-string-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-synch-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-synch-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-synch-l1-2-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-synch-l1-2-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-sysinfo-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-sysinfo-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-sysinfo-l1-2-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-sysinfo-l1-2-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-timezone-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-timezone-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-core-util-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-core-util-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-conio-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-conio-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-convert-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-convert-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-environment-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-environment-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-filesystem-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-filesystem-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-heap-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-heap-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-locale-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-locale-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-math-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-math-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-process-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-process-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-runtime-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-runtime-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-stdio-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-stdio-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-string-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-string-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-time-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-time-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/api-ms-win-crt-utility-l1-1-0.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/api-ms-win-crt-utility-l1-1-0.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/certifi/py.typed:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/certifi/py.typed
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/charset_normalizer/md.cp313-win_amd64.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/charset_normalizer/md.cp313-win_amd64.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/charset_normalizer/md__mypyc.cp313-win_amd64.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/charset_normalizer/md__mypyc.cp313-win_amd64.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/__init__.py:
--------------------------------------------------------------------------------
1 | from .scanner import (
2 | get_steam_install_path,
3 | get_steam_libraries,
4 | find_dlls,
5 | find_all_dlls_sync,
6 | )
7 | from .updater import update_dll
8 | from .whitelist import is_whitelisted
9 | from .version import __version__
10 | from .config import resource_path, initialize_dll_paths, config_manager
11 | from .logger import setup_logger
12 | from .constants import DLL_TYPE_MAP, DLL_GROUPS
13 | from .lib.threading_lib import ThreadManager, WorkerSignals
14 |
15 | # We rename find_dlss_dlls to find_dlls and keep it for backward compatibility
16 | find_dlss_dlls = find_dlls
17 |
18 | # Let's export find_all_dlls_sync instead of the async version
19 | find_all_dlss_dlls = find_all_dlls_sync
20 |
21 | # Don't initialize DLL paths at import time anymore
22 | # This will be done explicitly after admin check
23 | LATEST_DLL_PATHS = {}
24 |
25 | __all__ = [
26 | "get_steam_install_path",
27 | "get_steam_libraries",
28 | "find_dlss_dlls",
29 | "find_all_dlss_dlls",
30 | "update_dll",
31 | "is_whitelisted",
32 | "__version__",
33 | "LATEST_DLL_PATHS",
34 | "resource_path",
35 | "setup_logger",
36 | "DLL_TYPE_MAP",
37 | "DLL_GROUPS",
38 | "ThreadManager",
39 | "WorkerSignals",
40 | "config_manager",
41 | ]
42 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/auto_updater.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import json
3 | from urllib import request
4 | from urllib.error import URLError
5 | from packaging import version
6 | from dlss_updater.version import __version__
7 | from dlss_updater.logger import setup_logger
8 |
9 | logger = setup_logger()
10 |
11 | GITHUB_API_URL = "https://api.github.com/repos/Recol/DLSS-Updater/releases/latest"
12 | GITHUB_RELEASES_URL = "https://github.com/Recol/DLSS-Updater/releases/latest"
13 |
14 |
15 | def check_for_updates():
16 | """
17 | Check for available updates by comparing versions.
18 | Returns (latest_version, is_update_available) tuple or (None, False) if check fails.
19 | """
20 | try:
21 | logger.info("Checking for updates...")
22 | with request.urlopen(GITHUB_API_URL) as response:
23 | latest_release = json.loads(response.read().decode())
24 | latest_version = latest_release["tag_name"].lstrip("Vv")
25 |
26 | if version.parse(latest_version) > version.parse(__version__):
27 | logger.info(f"New version available: {latest_version}")
28 | return latest_version, True
29 | else:
30 | logger.info("You have the latest version.")
31 | return latest_version, False
32 | except URLError as e:
33 | logger.error(f"Error checking for updates: {e}")
34 | return None, False
35 | except Exception as e:
36 | logger.error(f"Unexpected error checking for updates: {e}")
37 | return None, False
38 |
39 |
40 | def get_releases_url():
41 | """Get the URL to the GitHub releases page"""
42 | return GITHUB_RELEASES_URL
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/constants.py:
--------------------------------------------------------------------------------
1 | DLL_TYPE_MAP = {
2 | "nvngx_dlss.dll": "DLSS DLL",
3 | "nvngx_dlssg.dll": "DLSS Frame Generation DLL",
4 | "nvngx_dlssd.dll": "DLSS Ray Reconstruction DLL",
5 | "libxess.dll": "XeSS DLL",
6 | "libxess_dx11.dll": "XeSS DX11 DLL",
7 | "dstorage.dll": "DirectStorage DLL",
8 | "dstoragecore.dll": "DirectStorage Core DLL",
9 | "sl.common.dll": "Streamline Shared Library DLL",
10 | "sl.dlss.dll": "Streamline DLSS Super Resolution DLL",
11 | "sl.dlss_g.dll": "Streamline DLSS Frame Generation DLL",
12 | "sl.interposer.dll": "Streamline Graphics API Interception DLL",
13 | "sl.pcl.dll": "Streamline Parameter/Platform Configuration DLL",
14 | "sl.reflex.dll": "Streamline Reflex Low-Latency DLL",
15 | "amd_fidelityfx_vk.dll": "AMD FidelityFX Super Resolution (FSR) Vulkan DLL",
16 | "amd_fidelityfx_dx12.dll": "AMD FidelityFX Super Resolution (FSR) DirectX 12 DLL",
17 | }
18 |
19 |
20 | DLL_GROUPS = {
21 | "DLSS": [
22 | "nvngx_dlss.dll",
23 | "nvngx_dlssg.dll",
24 | "nvngx_dlssd.dll",
25 | ],
26 | "Streamline": [
27 | "sl.common.dll",
28 | "sl.dlss.dll",
29 | "sl.dlss_g.dll",
30 | "sl.interposer.dll",
31 | "sl.pcl.dll",
32 | "sl.reflex.dll",
33 | ],
34 | "XeSS": [
35 | "libxess.dll",
36 | "libxess_dx11.dll",
37 | ],
38 | "DirectStorage": [
39 | "dstorage.dll",
40 | "dstoragecore.dll",
41 | ],
42 | "FSR": [
43 | "amd_fidelityfx_vk.dll",
44 | "amd_fidelityfx_dx12.dll",
45 | ],
46 | }
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/battlenet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/battlenet.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater.ico
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater_full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/dlss_updater_full.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/ea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/ea.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/epic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/epic.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/gog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/gog.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/reset.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/steam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/steam.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/ubisoft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/ubisoft.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/update.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/update.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/icons/xbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/dlss_updater/icons/xbox.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/lib/threading_lib.py:
--------------------------------------------------------------------------------
1 | from PyQt6.QtCore import QThreadPool, QRunnable, pyqtSignal, QObject
2 |
3 |
4 | class WorkerSignals(QObject):
5 | """Signals available from a running worker thread."""
6 |
7 | finished = pyqtSignal()
8 | result = pyqtSignal(object)
9 | error = pyqtSignal(tuple)
10 | progress = pyqtSignal(int)
11 |
12 |
13 | class Worker(QRunnable):
14 | """
15 | Worker thread for running background tasks.
16 |
17 | Inherits from QRunnable for better thread pool management.
18 | """
19 |
20 | def __init__(self, fn, progress_callback=None, *args, **kwargs):
21 | super().__init__()
22 |
23 | # Store constructor arguments (re-used for processing)
24 | self.fn = fn
25 | self.args = args
26 | self.kwargs = kwargs
27 |
28 | # Create signals for communication
29 | self.signals = WorkerSignals()
30 |
31 | # Store progress callback if provided
32 | self.progress_callback = progress_callback
33 | if self.progress_callback:
34 | self.signals.progress.connect(self.progress_callback)
35 |
36 | # Add an option to stop the worker if needed
37 | self.is_running = True
38 |
39 | def run(self):
40 | """
41 | Initialise the runner function with passed args, kwargs.
42 |
43 | Automatic handling of different function signatures and return values.
44 | """
45 | try:
46 | # Pass the signals to the function if it accepts them
47 | if "progress_signal" in self.kwargs:
48 | self.kwargs["progress_signal"] = self.signals.progress
49 |
50 | # Retrieve args/kwargs here; and fire processing using them
51 | result = self.fn(*self.args, **self.kwargs)
52 | except Exception as e:
53 | # If function raised an exception, capture it
54 | import traceback
55 |
56 | # Package the exception details
57 | exctype = type(e)
58 | value = str(e)
59 | tb = traceback.format_exc()
60 |
61 | # If still running, emit the error signal
62 | if self.is_running:
63 | self.signals.error.emit((exctype, value, tb))
64 | else:
65 | # If function successfully completed, emit result
66 | if self.is_running:
67 | if result is not None:
68 | self.signals.result.emit(result)
69 | finally:
70 | # Always emit finished signal
71 | if self.is_running:
72 | self.signals.finished.emit()
73 |
74 | def stop(self):
75 | """Set the running state to False to prevent further signal emissions."""
76 | self.is_running = False
77 |
78 |
79 | class ThreadManager:
80 | """
81 | Manages thread pool and worker creation for background tasks.
82 |
83 | Provides a simplified interface for running functions in a thread pool.
84 | """
85 |
86 | def __init__(self, parent=None):
87 | # Create a thread pool
88 | self.thread_pool = QThreadPool()
89 |
90 | # Set up maximum thread count (adjust as needed)
91 | self.thread_pool.setMaxThreadCount(8)
92 |
93 | # Store the current worker
94 | self.current_worker = None
95 |
96 | # Store the parent (optional)
97 | self.parent = parent
98 |
99 | # Signals to be connected from the current worker
100 | self.signals = None
101 |
102 | def assign_function(self, func, *args, **kwargs):
103 | """
104 | Assign a function to be run in a background thread.
105 |
106 | Stops any existing worker before creating a new one.
107 | """
108 | # Stop any existing worker
109 | if self.current_worker:
110 | self.current_worker.stop()
111 |
112 | # Create a new worker
113 | worker = Worker(func, *args, **kwargs)
114 |
115 | # Store the current worker
116 | self.current_worker = worker
117 |
118 | # Update signals reference
119 | self.signals = worker.signals
120 |
121 | def run(self):
122 | """
123 | Run the currently assigned worker in the thread pool.
124 |
125 | Adds the worker to the thread pool for execution.
126 | """
127 | if self.current_worker:
128 | # Add worker to thread pool
129 | self.thread_pool.start(self.current_worker)
130 |
131 | def waitForDone(self):
132 | """
133 | Wait for all threads in the pool to complete.
134 |
135 | Useful for clean shutdown of the application.
136 | """
137 | # Stop current worker if exists
138 | if self.current_worker:
139 | self.current_worker.stop()
140 |
141 | # Wait for thread pool to finish
142 | self.thread_pool.waitForDone()
143 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/logger.py:
--------------------------------------------------------------------------------
1 | import logging
2 | import sys
3 | from pathlib import Path
4 | from PyQt6.QtCore import QObject, pyqtSignal, Qt
5 | from PyQt6.QtWidgets import QTextBrowser
6 |
7 |
8 | class QLoggerLevelSignal(QObject):
9 | """Signals for the Logger QTextBrowser derived class."""
10 | debug = pyqtSignal()
11 | info = pyqtSignal()
12 | warning = pyqtSignal()
13 | error = pyqtSignal()
14 |
15 |
16 | class LoggerWindow(QTextBrowser):
17 | """A QTextBrowser subclass that have signals and a dict for ease of access to said signals."""
18 | def __init__(self, parent=None):
19 | super().__init__(parent)
20 | self.signals = QLoggerLevelSignal()
21 | self.signals_to_emit = {
22 | "DEBUG": self.signals.debug,
23 | "INFO": self.signals.info,
24 | "WARNING": self.signals.warning,
25 | "ERROR": self.signals.error,
26 | }
27 | # Set document max size to prevent memory issues with very large logs
28 | self.document().setMaximumBlockCount(5000) # Limit to last 5000 lines
29 | # Set text browser properties
30 | self.setReadOnly(True)
31 | self.setOpenExternalLinks(False)
32 | # Enable smooth scrolling
33 | self.verticalScrollBar().setSingleStep(2)
34 |
35 |
36 | class QLogger(logging.Handler, QObject):
37 | """Logger handler for the Qt GUI"""
38 | # Define the signal as a class attribute
39 | logMessage = pyqtSignal(str, str)
40 |
41 | def __init__(self, text_browser):
42 | logging.Handler.__init__(self)
43 | QObject.__init__(self) # Initialize QObject
44 |
45 | self.text_browser = text_browser
46 | self.colors_dict = {
47 | "DEBUG": "white",
48 | "INFO": "green",
49 | "WARNING": "yellow",
50 | "ERROR": "red",
51 | }
52 | # Connect the signal to the slot method
53 | self.logMessage.connect(self.write_log, Qt.ConnectionType.QueuedConnection)
54 |
55 | def emit(self, record):
56 | """
57 | Logs the record to the text browser object.
58 | @param record: LogRecord object to log.
59 | """
60 | msg = self.format(record)
61 | # Emit the signal with levelname and formatted message
62 | self.logMessage.emit(record.levelname, msg)
63 |
64 | def write_log(self, levelname, msg):
65 | """Write the log message to the text browser in the main thread."""
66 | color = self.colors_dict[levelname]
67 | formatted_msg = f'{msg}'
68 | self.text_browser.signals_to_emit[levelname].emit()
69 | self.text_browser.append(formatted_msg)
70 | # Scroll to bottom
71 | scrollbar = self.text_browser.verticalScrollBar()
72 | scrollbar.setValue(scrollbar.maximum())
73 |
74 |
75 | def setup_logger(log_file_name="dlss_updater.log"):
76 | """
77 | Setups the initial logger.
78 | param: log_file_name: filename to be used for the logfile.
79 | return: logger instance created.
80 | """
81 | logger = logging.getLogger("DLSSUpdater")
82 |
83 | # Check if the logger has already been configured
84 | if not logger.handlers:
85 | logger.setLevel(logging.DEBUG)
86 |
87 | log_file_path = (
88 | Path(sys.executable).parent / log_file_name
89 | if getattr(sys, "frozen", False)
90 | else Path(__file__).parent / log_file_name
91 | )
92 |
93 | # Create handlers
94 | console_handler = logging.StreamHandler(sys.stdout)
95 | file_handler = logging.FileHandler(log_file_path, encoding="utf-8")
96 |
97 | # Create formatter and add it to handlers
98 | log_format = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
99 | console_handler.setFormatter(log_format)
100 | file_handler.setFormatter(log_format)
101 |
102 | # Add handlers to the logger
103 | logger.addHandler(console_handler)
104 | logger.addHandler(file_handler)
105 |
106 | # Prevent propagation to avoid duplicate logs
107 | logger.propagate = False
108 |
109 | return logger
110 |
111 |
112 | def add_qt_handler(logger_to_extend, text_browser):
113 | """
114 | Add a QTextBrowser handler to an existing logger instance.
115 | @param: logger_to_extend: logger instance to be extended.
116 | @param: text_browser: QTextBrowser instance to be added as a logger.
117 | """
118 | # Remove any existing QLogger handlers
119 | for handler in logger_to_extend.handlers[:]:
120 | if isinstance(handler, QLogger):
121 | logger_to_extend.removeHandler(handler)
122 |
123 | # Create a new QLogger handler
124 | text_browser_handler = QLogger(text_browser)
125 | formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
126 | text_browser_handler.setFormatter(formatter)
127 | logger_to_extend.addHandler(text_browser_handler)
128 |
129 |
130 | # Usage example
131 | if __name__ == "__main__":
132 | logger = setup_logger()
133 | logger.info("This is a test log message")
134 | logger.info("This is a test logger.info message with an argument: %s", "test arg")
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/main_ui/animated_toggle.py:
--------------------------------------------------------------------------------
1 | from PyQt6.QtCore import (
2 | Qt,
3 | QSize,
4 | QPoint,
5 | QPointF,
6 | QRectF,
7 | QEasingCurve,
8 | QPropertyAnimation,
9 | QSequentialAnimationGroup,
10 | pyqtSlot,
11 | pyqtProperty,
12 | )
13 | from PyQt6.QtWidgets import QCheckBox
14 | from PyQt6.QtGui import QColor, QBrush, QPaintEvent, QPen, QPainter
15 |
16 |
17 | class AnimatedToggle(QCheckBox):
18 | def __init__(
19 | self,
20 | parent=None,
21 | track_color="#888888",
22 | thumb_color="#FFFFFF",
23 | track_active_color="#2D6E88",
24 | thumb_active_color="#FFFFFF",
25 | animation_duration=120,
26 | ):
27 | super().__init__(parent)
28 |
29 | # Colors
30 | self._track_color = QColor(track_color)
31 | self._thumb_color = QColor(thumb_color)
32 | self._track_active_color = QColor(track_active_color)
33 | self._thumb_active_color = QColor(thumb_active_color)
34 |
35 | # Dimensions
36 | self._track_radius = 11
37 | self._thumb_radius = 8
38 |
39 | # Animation
40 | self._animation_duration = animation_duration
41 | self._margin = max(0, self._thumb_radius - self._track_radius)
42 | self._offset = 0
43 | self._pulse_radius = 0
44 |
45 | # Setup animations
46 | self.animation = QPropertyAnimation(self, b"offset")
47 | self.animation.setEasingCurve(QEasingCurve.Type.InOutCubic)
48 | self.animation.setDuration(self._animation_duration)
49 |
50 | self.pulse_animation = QPropertyAnimation(self, b"pulse_radius")
51 | self.pulse_animation.setDuration(self._animation_duration)
52 | self.pulse_animation.setEasingCurve(QEasingCurve.Type.InOutCubic)
53 |
54 | self.animations_group = QSequentialAnimationGroup()
55 | self.animations_group.addAnimation(self.animation)
56 | self.animations_group.addAnimation(self.pulse_animation)
57 |
58 | # Setup initial state
59 | self.setFixedSize(
60 | self._track_radius * 4 + self._margin * 2,
61 | self._track_radius * 2 + self._margin * 2,
62 | )
63 | self.setCursor(Qt.CursorShape.PointingHandCursor)
64 |
65 | def sizeHint(self):
66 | return QSize(
67 | 4 * self._track_radius + 2 * self._margin,
68 | 2 * self._track_radius + 2 * self._margin,
69 | )
70 |
71 | def hitButton(self, pos: QPoint):
72 | return self.contentsRect().contains(pos)
73 |
74 | @pyqtSlot(int)
75 | def setChecked(self, checked):
76 | super().setChecked(checked)
77 | self.offset = 1 if checked else 0
78 |
79 | def paintEvent(self, e: QPaintEvent):
80 | # Set up painter
81 | p = QPainter(self)
82 | p.setRenderHint(QPainter.RenderHint.Antialiasing)
83 |
84 | # Get current state
85 | checked = self.isChecked()
86 | enabled = self.isEnabled()
87 |
88 | # Calculate sizes
89 | track_opacity = 0.6 if enabled else 0.3
90 | margin = self._margin
91 | thumb_radius = self._thumb_radius
92 | track_radius = self._track_radius
93 |
94 | # Get widget dimensions
95 | width = self.width() - 2 * margin
96 | height = self.height() - 2 * margin
97 |
98 | # Draw track
99 | track_brush = QBrush(self._track_active_color if checked else self._track_color)
100 | track_pen = QPen(Qt.PenStyle.NoPen)
101 |
102 | p.setBrush(track_brush)
103 | p.setPen(track_pen)
104 | p.setOpacity(track_opacity)
105 |
106 | p.drawRoundedRect(margin, margin, width, height, track_radius, track_radius)
107 |
108 | # Calculate thumb position
109 | total_offset = width - 2 * thumb_radius
110 | offset = total_offset * self.offset
111 |
112 | # Draw thumb
113 | p.setBrush(QBrush(self._thumb_active_color if checked else self._thumb_color))
114 | p.setPen(QPen(Qt.PenStyle.NoPen))
115 | p.setOpacity(1.0)
116 |
117 | p.drawEllipse(
118 | QPointF(margin + thumb_radius + offset, margin + height / 2),
119 | thumb_radius,
120 | thumb_radius,
121 | )
122 |
123 | # Draw pulse if animating
124 | if self._pulse_radius > 0:
125 | p.setBrush(QBrush(QColor(0, 0, 0, 0)))
126 | p.setPen(QPen(QColor(0, 0, 0, 0)))
127 | p.setOpacity(0.1)
128 |
129 | p.drawEllipse(
130 | QPointF(margin + thumb_radius + offset, margin + height / 2),
131 | self._pulse_radius,
132 | self._pulse_radius,
133 | )
134 |
135 | p.end()
136 |
137 | # Property animations
138 | @pyqtProperty(float)
139 | def offset(self):
140 | return self._offset
141 |
142 | @offset.setter
143 | def offset(self, value):
144 | self._offset = value
145 | self.update()
146 |
147 | @pyqtProperty(float)
148 | def pulse_radius(self):
149 | return self._pulse_radius
150 |
151 | @pulse_radius.setter
152 | def pulse_radius(self, value):
153 | self._pulse_radius = value
154 | self.update()
155 |
156 | # Override the change event to handle state changes
157 | def mouseReleaseEvent(self, e):
158 | super().mouseReleaseEvent(e)
159 |
160 | if self.isEnabled():
161 | if self.isChecked():
162 | self.animation.setStartValue(0)
163 | self.animation.setEndValue(1)
164 | else:
165 | self.animation.setStartValue(1)
166 | self.animation.setEndValue(0)
167 |
168 | self.animations_group.start()
169 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/version.py:
--------------------------------------------------------------------------------
1 | __version__ = "2.7.8"
2 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/dlss_updater/whitelist.py:
--------------------------------------------------------------------------------
1 | import os
2 | import csv
3 | from io import StringIO
4 | import asyncio
5 | from urllib.request import urlopen
6 | from urllib.error import URLError
7 | from dlss_updater.logger import setup_logger
8 | from dlss_updater.config import config_manager
9 |
10 | logger = setup_logger()
11 |
12 | WHITELIST_URL = (
13 | "https://raw.githubusercontent.com/Recol/DLSS-Updater-Whitelist/main/whitelist.csv"
14 | )
15 |
16 |
17 | def fetch_whitelist():
18 | try:
19 | with urlopen(WHITELIST_URL) as response:
20 | csv_data = StringIO(response.read().decode("utf-8"))
21 | reader = csv.reader(csv_data)
22 | return set(row[0].strip() for row in reader if row and row[0].strip())
23 | except URLError as e:
24 | logger.error(f"Failed to fetch whitelist: {e}")
25 | return set()
26 | except csv.Error as e:
27 | logger.error(f"Failed to parse whitelist CSV: {e}")
28 | return set()
29 |
30 |
31 | WHITELISTED_GAMES = fetch_whitelist()
32 |
33 |
34 | async def is_whitelisted(game_path):
35 | """
36 | Check if a game path matches any whitelisted games.
37 | Uses launcher pattern detection to find the actual game name.
38 | """
39 | logger.debug(f"Checking game against whitelist: {game_path}")
40 |
41 | # Extract path components
42 | path_parts = [p for p in game_path.split(os.path.sep) if p]
43 |
44 | # Skip if the path is too short
45 | if len(path_parts) < 3:
46 | return False
47 |
48 | # Look for known launcher patterns to identify the game directory
49 | game_dir = None
50 |
51 | # Epic Games pattern: :\Epic Games\\...
52 | if "Epic Games" in path_parts:
53 | epic_index = path_parts.index("Epic Games")
54 | if epic_index + 1 < len(path_parts):
55 | game_dir = path_parts[epic_index + 1]
56 |
57 | # Steam pattern: :\\steamapps\common\\...
58 | elif "steamapps" in path_parts and "common" in path_parts:
59 | common_index = path_parts.index("common")
60 | if common_index + 1 < len(path_parts):
61 | game_dir = path_parts[common_index + 1]
62 |
63 | # EA Games pattern: :\EA Games\\...
64 | elif "EA Games" in path_parts:
65 | ea_index = path_parts.index("EA Games")
66 | if ea_index + 1 < len(path_parts):
67 | game_dir = path_parts[ea_index + 1]
68 |
69 | # GOG pattern: :\GOG Games\\... or :\GOG Galaxy\Games\\...
70 | elif "GOG Games" in path_parts:
71 | gog_index = path_parts.index("GOG Games")
72 | if gog_index + 1 < len(path_parts):
73 | game_dir = path_parts[gog_index + 1]
74 | elif "GOG Galaxy" in path_parts:
75 | gog_index = path_parts.index("GOG Galaxy")
76 | if "Games" in path_parts:
77 | # Pattern: D:\GOG Galaxy\Games\\...
78 | games_index = path_parts.index("Games")
79 | if games_index + 1 < len(path_parts):
80 | game_dir = path_parts[games_index + 1]
81 | else:
82 | # Pattern: D:\GOG Galaxy\\...
83 | if gog_index + 1 < len(path_parts):
84 | game_dir = path_parts[gog_index + 1]
85 |
86 | # Ubisoft pattern: :\Ubisoft\Ubisoft Game Launcher\games\\...
87 | elif "Ubisoft Game Launcher" in path_parts and "games" in path_parts:
88 | games_index = path_parts.index("games")
89 | if games_index + 1 < len(path_parts):
90 | game_dir = path_parts[games_index + 1]
91 |
92 | # Battle.net pattern: :\Battle.net\\...
93 | elif "Battle.net" in path_parts:
94 | battlenet_index = path_parts.index("Battle.net")
95 | if battlenet_index + 1 < len(path_parts):
96 | game_dir = path_parts[battlenet_index + 1]
97 |
98 | # Xbox pattern: :\Xbox\\...
99 | elif "Xbox" in path_parts:
100 | xbox_index = path_parts.index("Xbox")
101 | if xbox_index + 1 < len(path_parts):
102 | game_dir = path_parts[xbox_index + 1]
103 |
104 | # Fallback: Just use the parent directory if we couldn't identify the game
105 | if not game_dir:
106 | logger.debug(
107 | "Could not identify game from path patterns, using parent directory"
108 | )
109 | game_dir = path_parts[-2]
110 |
111 | logger.debug(f"Identified game directory: {game_dir}")
112 |
113 | # Check for skip list first
114 | for game in WHITELISTED_GAMES:
115 | if config_manager.is_blacklist_skipped(game):
116 | if game.lower() == game_dir.lower():
117 | logger.info(
118 | f"Game '{game_dir}' is in whitelist but also in skip list - allowing update"
119 | )
120 | return False
121 |
122 | # Now check against whitelist
123 | for game in WHITELISTED_GAMES:
124 | # Skip if in skip list (already handled)
125 | if config_manager.is_blacklist_skipped(game):
126 | continue
127 |
128 | # Simple direct name comparison
129 | if game.lower() == game_dir.lower():
130 | logger.info(f"Whitelist match found: {game_dir}")
131 | return True
132 |
133 | logger.debug(f"No whitelist match found for: {game_dir}")
134 | return False
135 |
136 |
137 | def get_all_blacklisted_games():
138 | """Return the list of all blacklisted games for UI display"""
139 | return list(WHITELISTED_GAMES)
140 |
141 | async def check_whitelist_batch(game_paths):
142 | """Check multiple game paths against whitelist in parallel"""
143 | tasks = []
144 | for path in game_paths:
145 | task = asyncio.create_task(is_whitelisted(path))
146 | tasks.append((path, task))
147 |
148 | results = {}
149 | for path, task in tasks:
150 | try:
151 | results[path] = await task
152 | except Exception as e:
153 | logger.error(f"Error checking whitelist for {path}: {e}")
154 | results[path] = False
155 |
156 | return results
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/battlenet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/battlenet.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/dlss_updater.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/dlss_updater.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/dlss_updater_full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/dlss_updater_full.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/ea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/ea.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/epic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/epic.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/gog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/gog.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/reset.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/steam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/steam.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/ubisoft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/ubisoft.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/update.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/update.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/icons/xbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/icons/xbox.png
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/libcrypto-3.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/libcrypto-3.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/libffi-8.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/libffi-8.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/libssl-3.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/libssl-3.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/INSTALLER:
--------------------------------------------------------------------------------
1 | pip
2 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2004-2023 Ero Carrera
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/METADATA:
--------------------------------------------------------------------------------
1 | Metadata-Version: 2.1
2 | Name: pefile
3 | Version: 2023.2.7
4 | Summary: Python PE parsing module
5 | Home-page: https://github.com/erocarrera/pefile
6 | Download-URL: https://github.com/erocarrera/pefile/releases/download/v2023.2.7/pefile-2023.2.7.tar.gz
7 | Author: Ero Carrera
8 | Author-email: ero.carrera@gmail.com
9 | License: MIT
10 | Keywords: pe,exe,dll,pefile,pecoff
11 | Classifier: Development Status :: 5 - Production/Stable
12 | Classifier: Intended Audience :: Developers
13 | Classifier: Intended Audience :: Science/Research
14 | Classifier: Natural Language :: English
15 | Classifier: Operating System :: OS Independent
16 | Classifier: Programming Language :: Python
17 | Classifier: Topic :: Software Development :: Libraries :: Python Modules
18 | Requires-Python: >=3.6.0
19 | License-File: LICENSE
20 |
21 | pefile, Portable Executable reader module
22 |
23 | All the PE file basic structures are available with their default names as
24 | attributes of the instance returned.
25 |
26 | Processed elements such as the import table are made available with lowercase
27 | names, to differentiate them from the upper case basic structure names.
28 |
29 | pefile has been tested against many edge cases such as corrupted and malformed
30 | PEs as well as malware, which often attempts to abuse the format way beyond its
31 | standard use. To the best of my knowledge most of the abuse is handled
32 | gracefully.
33 |
34 | Copyright (c) 2005-2023 Ero Carrera
35 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/RECORD:
--------------------------------------------------------------------------------
1 | __pycache__/pefile.cpython-313.pyc,,
2 | __pycache__/peutils.cpython-313.pyc,,
3 | ordlookup/__init__.py,sha256=qV325Dvqk9HYGlF2BXkjSAU8NiAqGk9wg6bcGA7DMCY,784
4 | ordlookup/__pycache__/__init__.cpython-313.pyc,,
5 | ordlookup/__pycache__/oleaut32.cpython-313.pyc,,
6 | ordlookup/__pycache__/ws2_32.cpython-313.pyc,,
7 | ordlookup/oleaut32.py,sha256=g0bNcHLRuH_nW75xqZbtZZNWTrOVBbdEV8W7vxz0Ouc,10877
8 | ordlookup/ws2_32.py,sha256=gy-Vnrt6yVmzN8sbqLQESaNwFnZ2ojh4LsiAq5IDruA,3265
9 | pefile-2023.2.7.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
10 | pefile-2023.2.7.dist-info/LICENSE,sha256=v9S15PipnJYf1vlNcI44OWzBRr_o-8XSqG5jqin7Qgg,1083
11 | pefile-2023.2.7.dist-info/METADATA,sha256=Nj9cLDBVi_AkWhZ26GqGr5QYbkgh4f6azj7_HX75EgQ,1352
12 | pefile-2023.2.7.dist-info/RECORD,,
13 | pefile-2023.2.7.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14 | pefile-2023.2.7.dist-info/WHEEL,sha256=G16H4A3IeoQmnOrYV4ueZGKSjhipXx8zc8nu9FGlvMA,92
15 | pefile-2023.2.7.dist-info/top_level.txt,sha256=e_EleSuZUOQKcXHJLs2sSeGkxG4OZghULcCc_v6kQbo,25
16 | pefile.py,sha256=-ZRoz-0ZMOjpA2pL9Py5sjrLKMTlQh4hXONSpczcgR8,292005
17 | peutils.py,sha256=KmQ2JO3osgXgugJRGM__CdwNVcM3X6xzhuHucI_5v0g,18361
18 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/REQUESTED:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/REQUESTED
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/WHEEL:
--------------------------------------------------------------------------------
1 | Wheel-Version: 1.0
2 | Generator: bdist_wheel (0.37.1)
3 | Root-Is-Purelib: true
4 | Tag: py3-none-any
5 |
6 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/pefile-2023.2.7.dist-info/top_level.txt:
--------------------------------------------------------------------------------
1 | ordlookup
2 | pefile
3 | peutils
4 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/INSTALLER:
--------------------------------------------------------------------------------
1 | pip
2 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 3-Clause License
2 |
3 | Copyright (c) 2009, Jay Loden, Dave Daeschler, Giampaolo Rodola
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without modification,
7 | are permitted provided that the following conditions are met:
8 |
9 | * Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | * Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | * Neither the name of the psutil authors nor the names of its contributors
17 | may be used to endorse or promote products derived from this software without
18 | specific prior written permission.
19 |
20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
24 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
27 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/RECORD:
--------------------------------------------------------------------------------
1 | psutil-7.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
2 | psutil-7.0.0.dist-info/LICENSE,sha256=x63E1dEzelSLlnQh8fviWLkwM6BBdwj9b044-Oy864A,1577
3 | psutil-7.0.0.dist-info/METADATA,sha256=jEGY38opff7gdO5GOUIH8xeWXCXcGvitOIYrlUeVp8E,23136
4 | psutil-7.0.0.dist-info/RECORD,,
5 | psutil-7.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6 | psutil-7.0.0.dist-info/WHEEL,sha256=-EX5DQzNGQEoyL99Q-0P0-D-CXbfqafenaAeiSQ_Ufk,100
7 | psutil-7.0.0.dist-info/top_level.txt,sha256=gCNhn57wzksDjSAISmgMJ0aiXzQulk0GJhb2-BAyYgw,7
8 | psutil/__init__.py,sha256=lvZWdYQ3W0flcZeW1vbN5QgoSHuqofXBnMxHZLzwgrU,89075
9 | psutil/__pycache__/__init__.cpython-313.pyc,,
10 | psutil/__pycache__/_common.cpython-313.pyc,,
11 | psutil/__pycache__/_psaix.cpython-313.pyc,,
12 | psutil/__pycache__/_psbsd.cpython-313.pyc,,
13 | psutil/__pycache__/_pslinux.cpython-313.pyc,,
14 | psutil/__pycache__/_psosx.cpython-313.pyc,,
15 | psutil/__pycache__/_psposix.cpython-313.pyc,,
16 | psutil/__pycache__/_pssunos.cpython-313.pyc,,
17 | psutil/__pycache__/_pswindows.cpython-313.pyc,,
18 | psutil/_common.py,sha256=tPE7YVzC0ZIBhZzYdzqOFnh-geJVALbyBY3TSAwASXw,29592
19 | psutil/_psaix.py,sha256=CFBLwUi8DR5KsDC0yCs0jlLtLf2dhhyGArAhG_udqK8,18817
20 | psutil/_psbsd.py,sha256=UXd-QXUVk_H_wbFHWt2vshcChWxBrPwn38PX0HeYXfo,32727
21 | psutil/_pslinux.py,sha256=wKT1c3HX8XhnZ8sDNX1hiKRbVj7p53ASJ6VaniKaxs4,88323
22 | psutil/_psosx.py,sha256=LwFP6AtKp2hzNWRSaSLaWHB6nh1CiKSMu_KvP5009IE,16421
23 | psutil/_psposix.py,sha256=AJxyaRPf1h8dyT9rnsF8c-psHwXEbKqaNEt3OOm4Zuk,7349
24 | psutil/_pssunos.py,sha256=B58FY4JjbfndrdmbEV7QGX6lVi0v--V-g_Hxsg958MM,25654
25 | psutil/_psutil_windows.pyd,sha256=nH_IVdnRYU5wcFx9zG9Kw83Kta3-tqZ9OC9a3gnq3BU,67072
26 | psutil/_pswindows.py,sha256=is_Cq3yMuFnqGUfpOeiU8oWzZQNWmK_-Xt7asb8YCu4,37052
27 | psutil/tests/__init__.py,sha256=tFfa1RqnPJP9UuVe-JN7sAavHVoHlmqiN0pyk3I4KI0,66129
28 | psutil/tests/__main__.py,sha256=AQDwErrSFPsBGSY5wIKmh7LziqWTAARYKEqz_zrXMTc,321
29 | psutil/tests/__pycache__/__init__.cpython-313.pyc,,
30 | psutil/tests/__pycache__/__main__.cpython-313.pyc,,
31 | psutil/tests/__pycache__/test_aix.cpython-313.pyc,,
32 | psutil/tests/__pycache__/test_bsd.cpython-313.pyc,,
33 | psutil/tests/__pycache__/test_connections.cpython-313.pyc,,
34 | psutil/tests/__pycache__/test_contracts.cpython-313.pyc,,
35 | psutil/tests/__pycache__/test_linux.cpython-313.pyc,,
36 | psutil/tests/__pycache__/test_memleaks.cpython-313.pyc,,
37 | psutil/tests/__pycache__/test_misc.cpython-313.pyc,,
38 | psutil/tests/__pycache__/test_osx.cpython-313.pyc,,
39 | psutil/tests/__pycache__/test_posix.cpython-313.pyc,,
40 | psutil/tests/__pycache__/test_process.cpython-313.pyc,,
41 | psutil/tests/__pycache__/test_process_all.cpython-313.pyc,,
42 | psutil/tests/__pycache__/test_scripts.cpython-313.pyc,,
43 | psutil/tests/__pycache__/test_sunos.cpython-313.pyc,,
44 | psutil/tests/__pycache__/test_system.cpython-313.pyc,,
45 | psutil/tests/__pycache__/test_testutils.cpython-313.pyc,,
46 | psutil/tests/__pycache__/test_unicode.cpython-313.pyc,,
47 | psutil/tests/__pycache__/test_windows.cpython-313.pyc,,
48 | psutil/tests/test_aix.py,sha256=M84ZfM1EeSDRyzrf404JGu5zy_ErRn5MK3t3yT11lz0,4550
49 | psutil/tests/test_bsd.py,sha256=GRbzguegV7K2m-O4dQJlUJGh7M7UH9fI8jvE2UjFOks,20784
50 | psutil/tests/test_connections.py,sha256=1D4HEQl_bZfZbk_4g-hc4rnrDqUD7q42rb9aIoJ1Amc,21723
51 | psutil/tests/test_contracts.py,sha256=8enorS1KmOftKyC4XTINXtnWNnmh18qFEYdLHKtrknY,12326
52 | psutil/tests/test_linux.py,sha256=Gap-GA6Bv9TfKbRupph49NwZC0vjv1V5isa5l-Eg3VY,91187
53 | psutil/tests/test_memleaks.py,sha256=yGEhTOOllW2NV-R2S5lybD2S8iO9CiS7--ND2E9rZTY,15608
54 | psutil/tests/test_misc.py,sha256=eQUmQqnh7nM0aIND_yOtgO4-Lwyspw3tgt3aWje0BPY,30545
55 | psutil/tests/test_osx.py,sha256=Y_NubjMylA88A7WAepiDkYTZl4YWvwgtCRFvu23Rm8A,6512
56 | psutil/tests/test_posix.py,sha256=yKL9N6ixiFUPNmv5v7cBS1OaoOZl-bm7hGdf7m2_M0E,17675
57 | psutil/tests/test_process.py,sha256=lmVD9FO6GJp4GZqSxR0j4Wsr7dcG8Py2qWsiv-furbY,61548
58 | psutil/tests/test_process_all.py,sha256=MfKc2BpL3pFBKqdmkq5gJ1GDD4CZzxUvesQ7sgnzzJg,18882
59 | psutil/tests/test_scripts.py,sha256=a3z4vFdBNlto_2pKe37kOPK6zVenfWzCsibduzyeO1c,7965
60 | psutil/tests/test_sunos.py,sha256=FxIAhIC3hycvJhgdVK8_98AmmV1pTZgXtovBgDmD9RA,1229
61 | psutil/tests/test_system.py,sha256=gi5Mci_pL5za6Q1Wp3nOv4J6Bj7L-IeM76rR5-1rFZk,37086
62 | psutil/tests/test_testutils.py,sha256=IUc3mMHGKGdnPpf_mhMWbDq0UDK9sXI4DZZ2dwujS7A,18915
63 | psutil/tests/test_unicode.py,sha256=kH08SGFmi0bxnL-LHEA7JX0fwauGPvY9W3zfkQumgTw,10705
64 | psutil/tests/test_windows.py,sha256=Zpg4Ek9KHkloYHpgHtHIrYBDXIgSf8HppSWcgWgogWE,34128
65 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/REQUESTED:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/REQUESTED
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/WHEEL:
--------------------------------------------------------------------------------
1 | Wheel-Version: 1.0
2 | Generator: bdist_wheel (0.42.0)
3 | Root-Is-Purelib: false
4 | Tag: cp37-abi3-win_amd64
5 |
6 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/psutil-7.0.0.dist-info/top_level.txt:
--------------------------------------------------------------------------------
1 | psutil
2 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/psutil/_psutil_windows.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/psutil/_psutil_windows.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/pyexpat.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/pyexpat.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/python3.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/python3.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/python313.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/python313.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/pywin32_system32/pywintypes313.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/pywin32_system32/pywintypes313.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/release_notes.txt:
--------------------------------------------------------------------------------
1 | Version 2.6.4:
2 | Performance improvements for scanning directories.
3 | Rewrite of scanning subdirectories.
4 | There is now an output of the results in a box.
5 | Removal of the full banner from the GUI.
6 |
7 | Version 2.6.5:
8 | Updates the DLSS files to DLSS 4.0.
9 | Use at your own discretion :).
10 |
11 | Version 2.6.6:
12 | Bug fix for FG/RR DLL's being included in the skip for <2.0.0.
13 |
14 | Version 2.6.7:
15 | Updates to the DLL's to allow for profile K (refined version of profile J) to be the default for DLSS.
16 |
17 | Version 2.6.8:
18 | Updates to the RR DLL to version 310.2.1.0.
19 | Updates the frame generation DLL to version 310.2.1.0.
20 |
21 | Version 2.7.0:
22 | Added support for XeSS DLLs (libxess.dll and libxess_dx11.dll) - version 2.0.1.41.
23 | Added support for up to 4 custom game folders.
24 | Improved auto-updater to better handle update process and cleanup.
25 | Added ability to skip specific games in the blacklist.
26 | Enhanced UI with separated sections for launcher types.
27 | Fixed bug in game name extraction for better reporting.
28 | Introduction of animations for certain components, should be better for viewability.
29 |
30 | Version 2.7.1:
31 | UI spacing fixes with the logger output.
32 | Hover bug mentioned in the prior release fixed.
33 | Removal of the maximum span width so it's possible to resize the GUI fully.
34 | Few other erronous colour fixes.
35 |
36 | Version 2.7.2:
37 | Addition of DirectStorage.
38 | Offloading of the DLL's to a separate repository to strip down the file size.
39 | Addition of a checklist to allow selection on what is updated.
40 | Implemented DLL caching to check for new DLL's.
41 |
42 | Version 2.7.3:
43 | Updated support for handling DLSS Streamline components (Reflex/DLSS Streamline/FG etc).
44 |
45 | Version 2.7.4:
46 | Introduced parallelism for allowing multiple DLL's to be upgraded at once.
47 | Bug fix for DLL cache initialisation to only happen once on booting.
48 |
49 | Version 2.7.5:
50 | Added concurrency for parallel backups at once for multiple DLL's.
51 | Removal of auto-upgrades as a deprecated feature to cleanup code, added a "Check for update" button in the GUI.
52 | Parallelism for scanning Steam directories.
53 | Introduction of custom animations to properly track the update % correctly.
54 |
55 | Version 2.7.6:
56 | Added support for updating FSR 3.1.1+ games to 3.1.4.
57 | Increases to maximum thread pool allocations.
58 |
59 | Version 2.7.7:
60 | Update to address GOG Galaxy paths being erronous for some games.
61 |
62 | Version 2.7.8:
63 | Update to separate out Streamline DLL's to be their own components, and to be switched off by default due to incompatibility with some games.
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/select.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/select.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/INSTALLER:
--------------------------------------------------------------------------------
1 | pip
2 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/METADATA:
--------------------------------------------------------------------------------
1 | Metadata-Version: 2.1
2 | Name: importlib_metadata
3 | Version: 8.0.0
4 | Summary: Read metadata from Python packages
5 | Author-email: "Jason R. Coombs"
6 | Project-URL: Source, https://github.com/python/importlib_metadata
7 | Classifier: Development Status :: 5 - Production/Stable
8 | Classifier: Intended Audience :: Developers
9 | Classifier: License :: OSI Approved :: Apache Software License
10 | Classifier: Programming Language :: Python :: 3
11 | Classifier: Programming Language :: Python :: 3 :: Only
12 | Requires-Python: >=3.8
13 | Description-Content-Type: text/x-rst
14 | License-File: LICENSE
15 | Requires-Dist: zipp >=0.5
16 | Requires-Dist: typing-extensions >=3.6.4 ; python_version < "3.8"
17 | Provides-Extra: doc
18 | Requires-Dist: sphinx >=3.5 ; extra == 'doc'
19 | Requires-Dist: jaraco.packaging >=9.3 ; extra == 'doc'
20 | Requires-Dist: rst.linker >=1.9 ; extra == 'doc'
21 | Requires-Dist: furo ; extra == 'doc'
22 | Requires-Dist: sphinx-lint ; extra == 'doc'
23 | Requires-Dist: jaraco.tidelift >=1.4 ; extra == 'doc'
24 | Provides-Extra: perf
25 | Requires-Dist: ipython ; extra == 'perf'
26 | Provides-Extra: test
27 | Requires-Dist: pytest !=8.1.*,>=6 ; extra == 'test'
28 | Requires-Dist: pytest-checkdocs >=2.4 ; extra == 'test'
29 | Requires-Dist: pytest-cov ; extra == 'test'
30 | Requires-Dist: pytest-mypy ; extra == 'test'
31 | Requires-Dist: pytest-enabler >=2.2 ; extra == 'test'
32 | Requires-Dist: pytest-ruff >=0.2.1 ; extra == 'test'
33 | Requires-Dist: packaging ; extra == 'test'
34 | Requires-Dist: pyfakefs ; extra == 'test'
35 | Requires-Dist: flufl.flake8 ; extra == 'test'
36 | Requires-Dist: pytest-perf >=0.9.2 ; extra == 'test'
37 | Requires-Dist: jaraco.test >=5.4 ; extra == 'test'
38 | Requires-Dist: importlib-resources >=1.3 ; (python_version < "3.9") and extra == 'test'
39 |
40 | .. image:: https://img.shields.io/pypi/v/importlib_metadata.svg
41 | :target: https://pypi.org/project/importlib_metadata
42 |
43 | .. image:: https://img.shields.io/pypi/pyversions/importlib_metadata.svg
44 |
45 | .. image:: https://github.com/python/importlib_metadata/actions/workflows/main.yml/badge.svg
46 | :target: https://github.com/python/importlib_metadata/actions?query=workflow%3A%22tests%22
47 | :alt: tests
48 |
49 | .. image:: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/charliermarsh/ruff/main/assets/badge/v2.json
50 | :target: https://github.com/astral-sh/ruff
51 | :alt: Ruff
52 |
53 | .. image:: https://readthedocs.org/projects/importlib-metadata/badge/?version=latest
54 | :target: https://importlib-metadata.readthedocs.io/en/latest/?badge=latest
55 |
56 | .. image:: https://img.shields.io/badge/skeleton-2024-informational
57 | :target: https://blog.jaraco.com/skeleton
58 |
59 | .. image:: https://tidelift.com/badges/package/pypi/importlib-metadata
60 | :target: https://tidelift.com/subscription/pkg/pypi-importlib-metadata?utm_source=pypi-importlib-metadata&utm_medium=readme
61 |
62 | Library to access the metadata for a Python package.
63 |
64 | This package supplies third-party access to the functionality of
65 | `importlib.metadata `_
66 | including improvements added to subsequent Python versions.
67 |
68 |
69 | Compatibility
70 | =============
71 |
72 | New features are introduced in this third-party library and later merged
73 | into CPython. The following table indicates which versions of this library
74 | were contributed to different versions in the standard library:
75 |
76 | .. list-table::
77 | :header-rows: 1
78 |
79 | * - importlib_metadata
80 | - stdlib
81 | * - 7.0
82 | - 3.13
83 | * - 6.5
84 | - 3.12
85 | * - 4.13
86 | - 3.11
87 | * - 4.6
88 | - 3.10
89 | * - 1.4
90 | - 3.8
91 |
92 |
93 | Usage
94 | =====
95 |
96 | See the `online documentation `_
97 | for usage details.
98 |
99 | `Finder authors
100 | `_ can
101 | also add support for custom package installers. See the above documentation
102 | for details.
103 |
104 |
105 | Caveats
106 | =======
107 |
108 | This project primarily supports third-party packages installed by PyPA
109 | tools (or other conforming packages). It does not support:
110 |
111 | - Packages in the stdlib.
112 | - Packages installed without metadata.
113 |
114 | Project details
115 | ===============
116 |
117 | * Project home: https://github.com/python/importlib_metadata
118 | * Report bugs at: https://github.com/python/importlib_metadata/issues
119 | * Code hosting: https://github.com/python/importlib_metadata
120 | * Documentation: https://importlib-metadata.readthedocs.io/
121 |
122 | For Enterprise
123 | ==============
124 |
125 | Available as part of the Tidelift Subscription.
126 |
127 | This project and the maintainers of thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use.
128 |
129 | `Learn more `_.
130 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/RECORD:
--------------------------------------------------------------------------------
1 | importlib_metadata-8.0.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
2 | importlib_metadata-8.0.0.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
3 | importlib_metadata-8.0.0.dist-info/METADATA,sha256=anuQ7_7h4J1bSEzfcjIBakPi2cyVQ7y7jklLHsBeH1k,4648
4 | importlib_metadata-8.0.0.dist-info/RECORD,,
5 | importlib_metadata-8.0.0.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6 | importlib_metadata-8.0.0.dist-info/WHEEL,sha256=mguMlWGMX-VHnMpKOjjQidIo1ssRlCFu4a4mBpz1s2M,91
7 | importlib_metadata-8.0.0.dist-info/top_level.txt,sha256=CO3fD9yylANiXkrMo4qHLV_mqXL2sC5JFKgt1yWAT-A,19
8 | importlib_metadata/__init__.py,sha256=tZNB-23h8Bixi9uCrQqj9Yf0aeC--Josdy3IZRIQeB0,33798
9 | importlib_metadata/__pycache__/__init__.cpython-312.pyc,,
10 | importlib_metadata/__pycache__/_adapters.cpython-312.pyc,,
11 | importlib_metadata/__pycache__/_collections.cpython-312.pyc,,
12 | importlib_metadata/__pycache__/_compat.cpython-312.pyc,,
13 | importlib_metadata/__pycache__/_functools.cpython-312.pyc,,
14 | importlib_metadata/__pycache__/_itertools.cpython-312.pyc,,
15 | importlib_metadata/__pycache__/_meta.cpython-312.pyc,,
16 | importlib_metadata/__pycache__/_text.cpython-312.pyc,,
17 | importlib_metadata/__pycache__/diagnose.cpython-312.pyc,,
18 | importlib_metadata/_adapters.py,sha256=rIhWTwBvYA1bV7i-5FfVX38qEXDTXFeS5cb5xJtP3ks,2317
19 | importlib_metadata/_collections.py,sha256=CJ0OTCHIjWA0ZIVS4voORAsn2R4R2cQBEtPsZEJpASY,743
20 | importlib_metadata/_compat.py,sha256=73QKrN9KNoaZzhbX5yPCCZa-FaALwXe8TPlDR72JgBU,1314
21 | importlib_metadata/_functools.py,sha256=PsY2-4rrKX4RVeRC1oGp1lB1pmC9eKN88_f-bD9uOoA,2895
22 | importlib_metadata/_itertools.py,sha256=cvr_2v8BRbxcIl5x5ldfqdHjhI8Yi8s8yk50G_nm6jQ,2068
23 | importlib_metadata/_meta.py,sha256=nxZ7C8GVlcBFAKWyVOn_dn7ot_twBcbm1NmvjIetBHI,1801
24 | importlib_metadata/_text.py,sha256=HCsFksZpJLeTP3NEk_ngrAeXVRRtTrtyh9eOABoRP4A,2166
25 | importlib_metadata/compat/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26 | importlib_metadata/compat/__pycache__/__init__.cpython-312.pyc,,
27 | importlib_metadata/compat/__pycache__/py311.cpython-312.pyc,,
28 | importlib_metadata/compat/__pycache__/py39.cpython-312.pyc,,
29 | importlib_metadata/compat/py311.py,sha256=uqm-K-uohyj1042TH4a9Er_I5o7667DvulcD-gC_fSA,608
30 | importlib_metadata/compat/py39.py,sha256=cPkMv6-0ilK-0Jw_Tkn0xYbOKJZc4WJKQHow0c2T44w,1102
31 | importlib_metadata/diagnose.py,sha256=nkSRMiowlmkhLYhKhvCg9glmt_11Cox-EmLzEbqYTa8,379
32 | importlib_metadata/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/REQUESTED:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/REQUESTED
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/WHEEL:
--------------------------------------------------------------------------------
1 | Wheel-Version: 1.0
2 | Generator: setuptools (70.1.1)
3 | Root-Is-Purelib: true
4 | Tag: py3-none-any
5 |
6 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/importlib_metadata-8.0.0.dist-info/top_level.txt:
--------------------------------------------------------------------------------
1 | importlib_metadata
2 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/jaraco/text/Lorem ipsum.txt:
--------------------------------------------------------------------------------
1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
2 | Curabitur pretium tincidunt lacus. Nulla gravida orci a odio. Nullam varius, turpis et commodo pharetra, est eros bibendum elit, nec luctus magna felis sollicitudin mauris. Integer in mauris eu nibh euismod gravida. Duis ac tellus et risus vulputate vehicula. Donec lobortis risus a elit. Etiam tempor. Ut ullamcorper, ligula eu tempor congue, eros est euismod turpis, id tincidunt sapien risus a quam. Maecenas fermentum consequat mi. Donec fermentum. Pellentesque malesuada nulla a mi. Duis sapien sem, aliquet nec, commodo eget, consequat quis, neque. Aliquam faucibus, elit ut dictum aliquet, felis nisl adipiscing sapien, sed malesuada diam lacus eget erat. Cras mollis scelerisque nunc. Nullam arcu. Aliquam consequat. Curabitur augue lorem, dapibus quis, laoreet et, pretium ac, nisi. Aenean magna nisl, mollis quis, molestie eu, feugiat in, orci. In hac habitasse platea dictumst.
3 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/INSTALLER:
--------------------------------------------------------------------------------
1 | pip
2 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/LICENSE.txt:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2012 Daniel Holth and contributors
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a
6 | copy of this software and associated documentation files (the "Software"),
7 | to deal in the Software without restriction, including without limitation
8 | the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 | and/or sell copies of the Software, and to permit persons to whom the
10 | Software is furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included
13 | in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 | THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21 | OTHER DEALINGS IN THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/METADATA:
--------------------------------------------------------------------------------
1 | Metadata-Version: 2.3
2 | Name: wheel
3 | Version: 0.45.1
4 | Summary: A built-package format for Python
5 | Keywords: wheel,packaging
6 | Author-email: Daniel Holth
7 | Maintainer-email: Alex Grönholm
8 | Requires-Python: >=3.8
9 | Description-Content-Type: text/x-rst
10 | Classifier: Development Status :: 5 - Production/Stable
11 | Classifier: Intended Audience :: Developers
12 | Classifier: Topic :: System :: Archiving :: Packaging
13 | Classifier: License :: OSI Approved :: MIT License
14 | Classifier: Programming Language :: Python
15 | Classifier: Programming Language :: Python :: 3 :: Only
16 | Classifier: Programming Language :: Python :: 3.8
17 | Classifier: Programming Language :: Python :: 3.9
18 | Classifier: Programming Language :: Python :: 3.10
19 | Classifier: Programming Language :: Python :: 3.11
20 | Classifier: Programming Language :: Python :: 3.12
21 | Requires-Dist: pytest >= 6.0.0 ; extra == "test"
22 | Requires-Dist: setuptools >= 65 ; extra == "test"
23 | Project-URL: Changelog, https://wheel.readthedocs.io/en/stable/news.html
24 | Project-URL: Documentation, https://wheel.readthedocs.io/
25 | Project-URL: Issue Tracker, https://github.com/pypa/wheel/issues
26 | Project-URL: Source, https://github.com/pypa/wheel
27 | Provides-Extra: test
28 |
29 | wheel
30 | =====
31 |
32 | This is a command line tool for manipulating Python wheel files, as defined in
33 | `PEP 427`_. It contains the following functionality:
34 |
35 | * Convert ``.egg`` archives into ``.whl``
36 | * Unpack wheel archives
37 | * Repack wheel archives
38 | * Add or remove tags in existing wheel archives
39 |
40 | .. _PEP 427: https://www.python.org/dev/peps/pep-0427/
41 |
42 | Historical note
43 | ---------------
44 |
45 | This project used to contain the implementation of the setuptools_ ``bdist_wheel``
46 | command, but as of setuptools v70.1, it no longer needs ``wheel`` installed for that to
47 | work. Thus, you should install this **only** if you intend to use the ``wheel`` command
48 | line tool!
49 |
50 | .. _setuptools: https://pypi.org/project/setuptools/
51 |
52 | Documentation
53 | -------------
54 |
55 | The documentation_ can be found on Read The Docs.
56 |
57 | .. _documentation: https://wheel.readthedocs.io/
58 |
59 | Code of Conduct
60 | ---------------
61 |
62 | Everyone interacting in the wheel project's codebases, issue trackers, chat
63 | rooms, and mailing lists is expected to follow the `PSF Code of Conduct`_.
64 |
65 | .. _PSF Code of Conduct: https://github.com/pypa/.github/blob/main/CODE_OF_CONDUCT.md
66 |
67 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/RECORD:
--------------------------------------------------------------------------------
1 | ../../bin/wheel,sha256=pBhV19bQIgjS-r541fG3kLU6QtcyKaKdQ2RE9YIzeiU,249
2 | wheel-0.45.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
3 | wheel-0.45.1.dist-info/LICENSE.txt,sha256=MMI2GGeRCPPo6h0qZYx8pBe9_IkcmO8aifpP8MmChlQ,1107
4 | wheel-0.45.1.dist-info/METADATA,sha256=mKz84H7m7jsxJyzeIcTVORiTb0NPMV39KvOIYhGgmjA,2313
5 | wheel-0.45.1.dist-info/RECORD,,
6 | wheel-0.45.1.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7 | wheel-0.45.1.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
8 | wheel-0.45.1.dist-info/entry_points.txt,sha256=rTY1BbkPHhkGMm4Q3F0pIzJBzW2kMxoG1oriffvGdA0,104
9 | wheel/__init__.py,sha256=mrxMnvdXACur_LWegbUfh5g5ysWZrd63UJn890wvGNk,59
10 | wheel/__main__.py,sha256=NkMUnuTCGcOkgY0IBLgBCVC_BGGcWORx2K8jYGS12UE,455
11 | wheel/__pycache__/__init__.cpython-311.pyc,,
12 | wheel/__pycache__/__main__.cpython-311.pyc,,
13 | wheel/__pycache__/_bdist_wheel.cpython-311.pyc,,
14 | wheel/__pycache__/_setuptools_logging.cpython-311.pyc,,
15 | wheel/__pycache__/bdist_wheel.cpython-311.pyc,,
16 | wheel/__pycache__/macosx_libfile.cpython-311.pyc,,
17 | wheel/__pycache__/metadata.cpython-311.pyc,,
18 | wheel/__pycache__/util.cpython-311.pyc,,
19 | wheel/__pycache__/wheelfile.cpython-311.pyc,,
20 | wheel/_bdist_wheel.py,sha256=UghCQjSH_pVfcZh6oRjzSw_TQhcf3anSx1OkiLSL82M,21694
21 | wheel/_setuptools_logging.py,sha256=-5KC-lne0ilOUWIDfOkqapUWGMFZhuKYDIavIZiB5kM,781
22 | wheel/bdist_wheel.py,sha256=tpf9WufiSO1RuEMg5oPhIfSG8DMziCZ_4muCKF69Cqo,1107
23 | wheel/cli/__init__.py,sha256=Npq6_jKi03dhIcRnmbuFhwviVJxwO0tYEnEhWMv9cJo,4402
24 | wheel/cli/__pycache__/__init__.cpython-311.pyc,,
25 | wheel/cli/__pycache__/convert.cpython-311.pyc,,
26 | wheel/cli/__pycache__/pack.cpython-311.pyc,,
27 | wheel/cli/__pycache__/tags.cpython-311.pyc,,
28 | wheel/cli/__pycache__/unpack.cpython-311.pyc,,
29 | wheel/cli/convert.py,sha256=Bi0ntEXb9nTllCxWeTRQ4j-nPs3szWSEKipG_GgnMkQ,12634
30 | wheel/cli/pack.py,sha256=CAFcHdBVulvsHYJlndKVO7KMI9JqBTZz5ii0PKxxCOs,3103
31 | wheel/cli/tags.py,sha256=lHw-LaWrkS5Jy_qWcw-6pSjeNM6yAjDnqKI3E5JTTCU,4760
32 | wheel/cli/unpack.py,sha256=Y_J7ynxPSoFFTT7H0fMgbBlVErwyDGcObgme5MBuz58,1021
33 | wheel/macosx_libfile.py,sha256=k1x7CE3LPtOVGqj6NXQ1nTGYVPaeRrhVzUG_KPq3zDs,16572
34 | wheel/metadata.py,sha256=JC4p7jlQZu2bUTAQ2fevkqLjg_X6gnNyRhLn6OUO1tc,6171
35 | wheel/util.py,sha256=aL7aibHwYUgfc8WlolL5tXdkV4DatbJxZHb1kwHFJAU,423
36 | wheel/vendored/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37 | wheel/vendored/__pycache__/__init__.cpython-311.pyc,,
38 | wheel/vendored/packaging/LICENSE,sha256=ytHvW9NA1z4HS6YU0m996spceUDD2MNIUuZcSQlobEg,197
39 | wheel/vendored/packaging/LICENSE.APACHE,sha256=DVQuDIgE45qn836wDaWnYhSdxoLXgpRRKH4RuTjpRZQ,10174
40 | wheel/vendored/packaging/LICENSE.BSD,sha256=tw5-m3QvHMb5SLNMFqo5_-zpQZY2S8iP8NIYDwAo-sU,1344
41 | wheel/vendored/packaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42 | wheel/vendored/packaging/__pycache__/__init__.cpython-311.pyc,,
43 | wheel/vendored/packaging/__pycache__/_elffile.cpython-311.pyc,,
44 | wheel/vendored/packaging/__pycache__/_manylinux.cpython-311.pyc,,
45 | wheel/vendored/packaging/__pycache__/_musllinux.cpython-311.pyc,,
46 | wheel/vendored/packaging/__pycache__/_parser.cpython-311.pyc,,
47 | wheel/vendored/packaging/__pycache__/_structures.cpython-311.pyc,,
48 | wheel/vendored/packaging/__pycache__/_tokenizer.cpython-311.pyc,,
49 | wheel/vendored/packaging/__pycache__/markers.cpython-311.pyc,,
50 | wheel/vendored/packaging/__pycache__/requirements.cpython-311.pyc,,
51 | wheel/vendored/packaging/__pycache__/specifiers.cpython-311.pyc,,
52 | wheel/vendored/packaging/__pycache__/tags.cpython-311.pyc,,
53 | wheel/vendored/packaging/__pycache__/utils.cpython-311.pyc,,
54 | wheel/vendored/packaging/__pycache__/version.cpython-311.pyc,,
55 | wheel/vendored/packaging/_elffile.py,sha256=hbmK8OD6Z7fY6hwinHEUcD1by7czkGiNYu7ShnFEk2k,3266
56 | wheel/vendored/packaging/_manylinux.py,sha256=P7sdR5_7XBY09LVYYPhHmydMJIIwPXWsh4olk74Uuj4,9588
57 | wheel/vendored/packaging/_musllinux.py,sha256=z1s8To2hQ0vpn_d-O2i5qxGwEK8WmGlLt3d_26V7NeY,2674
58 | wheel/vendored/packaging/_parser.py,sha256=4tT4emSl2qTaU7VTQE1Xa9o1jMPCsBezsYBxyNMUN-s,10347
59 | wheel/vendored/packaging/_structures.py,sha256=q3eVNmbWJGG_S0Dit_S3Ao8qQqz_5PYTXFAKBZe5yr4,1431
60 | wheel/vendored/packaging/_tokenizer.py,sha256=alCtbwXhOFAmFGZ6BQ-wCTSFoRAJ2z-ysIf7__MTJ_k,5292
61 | wheel/vendored/packaging/markers.py,sha256=_TSPI1BhJYO7Bp9AzTmHQxIqHEVXaTjmDh9G-w8qzPA,8232
62 | wheel/vendored/packaging/requirements.py,sha256=dgoBeVprPu2YE6Q8nGfwOPTjATHbRa_ZGLyXhFEln6Q,2933
63 | wheel/vendored/packaging/specifiers.py,sha256=IWSt0SrLSP72heWhAC8UL0eGvas7XIQHjqiViVfmPKE,39778
64 | wheel/vendored/packaging/tags.py,sha256=fedHXiOHkBxNZTXotXv8uXPmMFU9ae-TKBujgYHigcA,18950
65 | wheel/vendored/packaging/utils.py,sha256=XgdmP3yx9-wQEFjO7OvMj9RjEf5JlR5HFFR69v7SQ9E,5268
66 | wheel/vendored/packaging/version.py,sha256=PFJaYZDxBgyxkfYhH3SQw4qfE9ICCWrTmitvq14y3bs,16234
67 | wheel/vendored/vendor.txt,sha256=Z2ENjB1i5prfez8CdM1Sdr3c6Zxv2rRRolMpLmBncAE,16
68 | wheel/wheelfile.py,sha256=USCttNlJwafxt51YYFFKG7jnxz8dfhbyqAZL6jMTA9s,8411
69 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/REQUESTED:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/REQUESTED
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/WHEEL:
--------------------------------------------------------------------------------
1 | Wheel-Version: 1.0
2 | Generator: flit 3.10.1
3 | Root-Is-Purelib: true
4 | Tag: py3-none-any
5 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/setuptools/_vendor/wheel-0.45.1.dist-info/entry_points.txt:
--------------------------------------------------------------------------------
1 | [console_scripts]
2 | wheel=wheel.cli:main
3 |
4 | [distutils.commands]
5 | bdist_wheel=wheel.bdist_wheel:bdist_wheel
6 |
7 |
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/ucrtbase.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/ucrtbase.dll
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/unicodedata.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/unicodedata.pyd
--------------------------------------------------------------------------------
/dist/DLSS_Updater/_internal/win32/win32api.pyd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dist/DLSS_Updater/_internal/win32/win32api.pyd
--------------------------------------------------------------------------------
/dlss_updater/__init__.py:
--------------------------------------------------------------------------------
1 | from .scanner import (
2 | get_steam_install_path,
3 | get_steam_libraries,
4 | find_dlls,
5 | find_all_dlls_sync,
6 | )
7 | from .updater import update_dll
8 | from .whitelist import is_whitelisted
9 | from .version import __version__
10 | from .config import resource_path, initialize_dll_paths, config_manager
11 | from .logger import setup_logger
12 | from .constants import DLL_TYPE_MAP, DLL_GROUPS
13 | from .lib.threading_lib import ThreadManager, WorkerSignals
14 |
15 | # We rename find_dlss_dlls to find_dlls and keep it for backward compatibility
16 | find_dlss_dlls = find_dlls
17 |
18 | # Let's export find_all_dlls_sync instead of the async version
19 | find_all_dlss_dlls = find_all_dlls_sync
20 |
21 | # Don't initialize DLL paths at import time anymore
22 | # This will be done explicitly after admin check
23 | LATEST_DLL_PATHS = {}
24 |
25 | __all__ = [
26 | "get_steam_install_path",
27 | "get_steam_libraries",
28 | "find_dlss_dlls",
29 | "find_all_dlss_dlls",
30 | "update_dll",
31 | "is_whitelisted",
32 | "__version__",
33 | "LATEST_DLL_PATHS",
34 | "resource_path",
35 | "setup_logger",
36 | "DLL_TYPE_MAP",
37 | "DLL_GROUPS",
38 | "ThreadManager",
39 | "WorkerSignals",
40 | "config_manager",
41 | ]
42 |
--------------------------------------------------------------------------------
/dlss_updater/auto_updater.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import json
3 | from urllib import request
4 | from urllib.error import URLError
5 | from packaging import version
6 | from dlss_updater.version import __version__
7 | from dlss_updater.logger import setup_logger
8 |
9 | logger = setup_logger()
10 |
11 | GITHUB_API_URL = "https://api.github.com/repos/Recol/DLSS-Updater/releases/latest"
12 | GITHUB_RELEASES_URL = "https://github.com/Recol/DLSS-Updater/releases/latest"
13 |
14 |
15 | def check_for_updates():
16 | """
17 | Check for available updates by comparing versions.
18 | Returns (latest_version, is_update_available) tuple or (None, False) if check fails.
19 | """
20 | try:
21 | logger.info("Checking for updates...")
22 | with request.urlopen(GITHUB_API_URL) as response:
23 | latest_release = json.loads(response.read().decode())
24 | latest_version = latest_release["tag_name"].lstrip("Vv")
25 |
26 | if version.parse(latest_version) > version.parse(__version__):
27 | logger.info(f"New version available: {latest_version}")
28 | return latest_version, True
29 | else:
30 | logger.info("You have the latest version.")
31 | return latest_version, False
32 | except URLError as e:
33 | logger.error(f"Error checking for updates: {e}")
34 | return None, False
35 | except Exception as e:
36 | logger.error(f"Unexpected error checking for updates: {e}")
37 | return None, False
38 |
39 |
40 | def get_releases_url():
41 | """Get the URL to the GitHub releases page"""
42 | return GITHUB_RELEASES_URL
--------------------------------------------------------------------------------
/dlss_updater/constants.py:
--------------------------------------------------------------------------------
1 | DLL_TYPE_MAP = {
2 | "nvngx_dlss.dll": "DLSS DLL",
3 | "nvngx_dlssg.dll": "DLSS Frame Generation DLL",
4 | "nvngx_dlssd.dll": "DLSS Ray Reconstruction DLL",
5 | "libxess.dll": "XeSS DLL",
6 | "libxess_dx11.dll": "XeSS DX11 DLL",
7 | "dstorage.dll": "DirectStorage DLL",
8 | "dstoragecore.dll": "DirectStorage Core DLL",
9 | "sl.common.dll": "Streamline Shared Library DLL",
10 | "sl.dlss.dll": "Streamline DLSS Super Resolution DLL",
11 | "sl.dlss_g.dll": "Streamline DLSS Frame Generation DLL",
12 | "sl.interposer.dll": "Streamline Graphics API Interception DLL",
13 | "sl.pcl.dll": "Streamline Parameter/Platform Configuration DLL",
14 | "sl.reflex.dll": "Streamline Reflex Low-Latency DLL",
15 | "amd_fidelityfx_vk.dll": "AMD FidelityFX Super Resolution (FSR) Vulkan DLL",
16 | "amd_fidelityfx_dx12.dll": "AMD FidelityFX Super Resolution (FSR) DirectX 12 DLL",
17 | }
18 |
19 |
20 | DLL_GROUPS = {
21 | "DLSS": [
22 | "nvngx_dlss.dll",
23 | "nvngx_dlssg.dll",
24 | "nvngx_dlssd.dll",
25 | ],
26 | "Streamline": [
27 | "sl.common.dll",
28 | "sl.dlss.dll",
29 | "sl.dlss_g.dll",
30 | "sl.interposer.dll",
31 | "sl.pcl.dll",
32 | "sl.reflex.dll",
33 | ],
34 | "XeSS": [
35 | "libxess.dll",
36 | "libxess_dx11.dll",
37 | ],
38 | "DirectStorage": [
39 | "dstorage.dll",
40 | "dstoragecore.dll",
41 | ],
42 | "FSR": [
43 | "amd_fidelityfx_vk.dll",
44 | "amd_fidelityfx_dx12.dll",
45 | ],
46 | }
--------------------------------------------------------------------------------
/dlss_updater/dll_repository.py:
--------------------------------------------------------------------------------
1 | import os
2 | import json
3 | import requests
4 | from .logger import setup_logger
5 | import concurrent.futures
6 | from .config import initialize_dll_paths
7 |
8 | logger = setup_logger()
9 |
10 | # Configuration
11 | GITHUB_DLL_REPO = "Recol/DLSS-Updater-DLLs"
12 | GITHUB_API_BASE = f"https://api.github.com/repos/{GITHUB_DLL_REPO}"
13 | GITHUB_RAW_BASE = f"https://raw.githubusercontent.com/{GITHUB_DLL_REPO}/main"
14 | DLL_MANIFEST_URL = f"{GITHUB_RAW_BASE}/manifest.json"
15 | LOCAL_DLL_CACHE_DIR = os.path.join(
16 | os.path.expanduser("~"), ".dlss_updater", "dll_cache"
17 | )
18 |
19 |
20 | def ensure_cache_dir():
21 | """Ensure local cache directory exists"""
22 | os.makedirs(LOCAL_DLL_CACHE_DIR, exist_ok=True)
23 |
24 |
25 | def get_local_dll_path(dll_name):
26 | """Get path to cached DLL, download if newer version exists"""
27 | ensure_cache_dir()
28 | local_path = os.path.join(LOCAL_DLL_CACHE_DIR, dll_name)
29 |
30 | # If it doesn't exist locally, try to download
31 | if not os.path.exists(local_path):
32 | if download_latest_dll(dll_name):
33 | return local_path
34 | else:
35 | logger.error(f"Failed to download {dll_name} and no local copy exists")
36 | return None
37 |
38 | # Check for updates
39 | if check_for_dll_update(dll_name):
40 | download_latest_dll(dll_name)
41 |
42 | return local_path
43 |
44 |
45 | def get_remote_manifest():
46 | """Fetch the remote DLL manifest"""
47 | try:
48 | response = requests.get(DLL_MANIFEST_URL, timeout=10)
49 | response.raise_for_status()
50 | return response.json()
51 | except Exception as e:
52 | logger.error(f"Failed to fetch DLL manifest: {e}")
53 | return None
54 |
55 |
56 | def get_cached_manifest():
57 | """Get the cached manifest if available"""
58 | manifest_path = os.path.join(LOCAL_DLL_CACHE_DIR, "manifest.json")
59 | if os.path.exists(manifest_path):
60 | try:
61 | with open(manifest_path, "r") as f:
62 | return json.load(f)
63 | except Exception as e:
64 | logger.error(f"Failed to read cached manifest: {e}")
65 | return None
66 |
67 |
68 | def update_cached_manifest(manifest):
69 | """Update the cached manifest"""
70 | manifest_path = os.path.join(LOCAL_DLL_CACHE_DIR, "manifest.json")
71 | try:
72 | with open(manifest_path, "w") as f:
73 | json.dump(manifest, f, indent=2)
74 | return True
75 | except Exception as e:
76 | logger.error(f"Failed to update cached manifest: {e}")
77 | return False
78 |
79 |
80 | def check_for_dll_update(dll_name):
81 | """Check if a newer version of the DLL is available"""
82 | # Import parse_version and get_dll_version inside the function
83 | from .updater import get_dll_version, parse_version
84 |
85 | local_path = os.path.join(LOCAL_DLL_CACHE_DIR, dll_name)
86 | if not os.path.exists(local_path):
87 | logger.info(f"No local copy of {dll_name} exists, download needed")
88 | return True # No local copy, need to download
89 |
90 | local_version = get_dll_version(local_path)
91 | if not local_version:
92 | logger.info(
93 | f"Could not determine version of local {dll_name}, assuming update needed"
94 | )
95 | return True # Can't determine local version, assume update needed
96 |
97 | # Get remote version info
98 | manifest = get_remote_manifest() or get_cached_manifest()
99 | if not manifest:
100 | logger.warning("No manifest available, can't check for updates")
101 | return False
102 |
103 | if dll_name not in manifest:
104 | logger.warning(f"{dll_name} not found in manifest")
105 | return False
106 |
107 | remote_version = manifest[dll_name]["version"]
108 |
109 | # Compare versions with better error handling
110 | try:
111 | local_parsed = parse_version(local_version)
112 | remote_parsed = parse_version(remote_version)
113 |
114 | # Add detailed logging for debugging
115 | logger.info(
116 | f"Comparing versions for {dll_name}: local={local_version} ({local_parsed}) remote={remote_version} ({remote_parsed})"
117 | )
118 |
119 | if remote_parsed > local_parsed:
120 | logger.info(
121 | f"Update available for {dll_name}: {local_version} -> {remote_version}"
122 | )
123 | return True
124 | else:
125 | logger.info(
126 | f"{dll_name} is up to date (local: {local_version}, remote: {remote_version})"
127 | )
128 | return False
129 | except Exception as e:
130 | logger.error(f"Version comparison error for {dll_name}: {e}")
131 | # Assume update needed if we can't compare versions safely
132 | logger.info(
133 | f"Assuming update needed for {dll_name} due to version comparison error"
134 | )
135 | return True
136 |
137 |
138 | def download_latest_dll(dll_name):
139 | """Download the latest version of a DLL"""
140 | manifest = get_remote_manifest()
141 | if not manifest:
142 | logger.error("Failed to fetch manifest, cannot download DLL")
143 | return False
144 |
145 | if dll_name not in manifest:
146 | logger.error(f"{dll_name} not found in manifest")
147 | return False
148 |
149 | # Get download URL from manifest
150 | dll_info = manifest[dll_name]
151 | download_url = f"{GITHUB_RAW_BASE}/dlls/{dll_name}"
152 |
153 | # Download the DLL
154 | local_path = os.path.join(LOCAL_DLL_CACHE_DIR, dll_name)
155 | try:
156 | response = requests.get(download_url, stream=True, timeout=30)
157 | response.raise_for_status()
158 |
159 | # Save to temp file first, then rename to avoid partial downloads
160 | temp_path = f"{local_path}.tmp"
161 | with open(temp_path, "wb") as f:
162 | for chunk in response.iter_content(chunk_size=8192):
163 | f.write(chunk)
164 |
165 | # Replace existing file
166 | if os.path.exists(local_path):
167 | os.remove(local_path)
168 | os.rename(temp_path, local_path)
169 |
170 | logger.info(f"Successfully downloaded {dll_name} v{dll_info['version']}")
171 | return True
172 | except Exception as e:
173 | logger.error(f"Failed to download {dll_name}: {e}")
174 | return False
175 |
176 |
177 | _cache_initialized = False
178 |
179 |
180 | def initialize_dll_cache():
181 | """Initialize the DLL cache on application startup - parallel version"""
182 | global _cache_initialized
183 |
184 | if _cache_initialized:
185 | logger.debug("DLL cache already initialized, skipping")
186 | return
187 |
188 | logger.info("Initializing DLL cache")
189 | ensure_cache_dir()
190 |
191 | # Fetch latest manifest
192 | manifest = get_remote_manifest()
193 | if manifest:
194 | update_cached_manifest(manifest)
195 |
196 | # Check all DLLs for updates in parallel
197 | with concurrent.futures.ThreadPoolExecutor(max_workers=8) as executor:
198 | future_to_dll = {}
199 |
200 | for dll_name in manifest:
201 | if check_for_dll_update(dll_name):
202 | logger.info(
203 | f"Updating {dll_name} to version {manifest[dll_name]['version']}"
204 | )
205 | future = executor.submit(download_latest_dll, dll_name)
206 | future_to_dll[future] = dll_name
207 | else:
208 | logger.info(f"{dll_name} is up to date")
209 |
210 | # Wait for all downloads to complete
211 | for future in concurrent.futures.as_completed(future_to_dll):
212 | dll_name = future_to_dll[future]
213 | try:
214 | success = future.result()
215 | if not success:
216 | logger.error(f"Failed to download {dll_name}")
217 | except Exception as e:
218 | logger.error(f"Error downloading {dll_name}: {e}")
219 | else:
220 | logger.warning("Using cached manifest, updates may not be available")
221 |
222 | # Initialize DLL paths after cache initialization
223 | initialize_dll_paths()
224 | _cache_initialized = True
225 |
--------------------------------------------------------------------------------
/dlss_updater/icons/battlenet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/battlenet.png
--------------------------------------------------------------------------------
/dlss_updater/icons/dlss_updater.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/dlss_updater.ico
--------------------------------------------------------------------------------
/dlss_updater/icons/dlss_updater.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/dlss_updater.png
--------------------------------------------------------------------------------
/dlss_updater/icons/dlss_updater_full.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/dlss_updater_full.png
--------------------------------------------------------------------------------
/dlss_updater/icons/ea.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/ea.png
--------------------------------------------------------------------------------
/dlss_updater/icons/epic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/epic.png
--------------------------------------------------------------------------------
/dlss_updater/icons/gog.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/gog.png
--------------------------------------------------------------------------------
/dlss_updater/icons/reset.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/reset.png
--------------------------------------------------------------------------------
/dlss_updater/icons/steam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/steam.png
--------------------------------------------------------------------------------
/dlss_updater/icons/ubisoft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/ubisoft.png
--------------------------------------------------------------------------------
/dlss_updater/icons/update.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/update.png
--------------------------------------------------------------------------------
/dlss_updater/icons/xbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Recol/DLSS-Updater/0be02e455a69d3b09716c9ed5710646dde0293b3/dlss_updater/icons/xbox.png
--------------------------------------------------------------------------------
/dlss_updater/lib/threading_lib.py:
--------------------------------------------------------------------------------
1 | from PyQt6.QtCore import QThreadPool, QRunnable, pyqtSignal, QObject
2 |
3 |
4 | class WorkerSignals(QObject):
5 | """Signals available from a running worker thread."""
6 |
7 | finished = pyqtSignal()
8 | result = pyqtSignal(object)
9 | error = pyqtSignal(tuple)
10 | progress = pyqtSignal(int)
11 |
12 |
13 | class Worker(QRunnable):
14 | """
15 | Worker thread for running background tasks.
16 |
17 | Inherits from QRunnable for better thread pool management.
18 | """
19 |
20 | def __init__(self, fn, progress_callback=None, *args, **kwargs):
21 | super().__init__()
22 |
23 | # Store constructor arguments (re-used for processing)
24 | self.fn = fn
25 | self.args = args
26 | self.kwargs = kwargs
27 |
28 | # Create signals for communication
29 | self.signals = WorkerSignals()
30 |
31 | # Store progress callback if provided
32 | self.progress_callback = progress_callback
33 | if self.progress_callback:
34 | self.signals.progress.connect(self.progress_callback)
35 |
36 | # Add an option to stop the worker if needed
37 | self.is_running = True
38 |
39 | def run(self):
40 | """
41 | Initialise the runner function with passed args, kwargs.
42 |
43 | Automatic handling of different function signatures and return values.
44 | """
45 | try:
46 | # Pass the signals to the function if it accepts them
47 | if "progress_signal" in self.kwargs:
48 | self.kwargs["progress_signal"] = self.signals.progress
49 |
50 | # Retrieve args/kwargs here; and fire processing using them
51 | result = self.fn(*self.args, **self.kwargs)
52 | except Exception as e:
53 | # If function raised an exception, capture it
54 | import traceback
55 |
56 | # Package the exception details
57 | exctype = type(e)
58 | value = str(e)
59 | tb = traceback.format_exc()
60 |
61 | # If still running, emit the error signal
62 | if self.is_running:
63 | self.signals.error.emit((exctype, value, tb))
64 | else:
65 | # If function successfully completed, emit result
66 | if self.is_running:
67 | if result is not None:
68 | self.signals.result.emit(result)
69 | finally:
70 | # Always emit finished signal
71 | if self.is_running:
72 | self.signals.finished.emit()
73 |
74 | def stop(self):
75 | """Set the running state to False to prevent further signal emissions."""
76 | self.is_running = False
77 |
78 |
79 | class ThreadManager:
80 | """
81 | Manages thread pool and worker creation for background tasks.
82 |
83 | Provides a simplified interface for running functions in a thread pool.
84 | """
85 |
86 | def __init__(self, parent=None):
87 | # Create a thread pool
88 | self.thread_pool = QThreadPool()
89 |
90 | # Set up maximum thread count (adjust as needed)
91 | self.thread_pool.setMaxThreadCount(8)
92 |
93 | # Store the current worker
94 | self.current_worker = None
95 |
96 | # Store the parent (optional)
97 | self.parent = parent
98 |
99 | # Signals to be connected from the current worker
100 | self.signals = None
101 |
102 | def assign_function(self, func, *args, **kwargs):
103 | """
104 | Assign a function to be run in a background thread.
105 |
106 | Stops any existing worker before creating a new one.
107 | """
108 | # Stop any existing worker
109 | if self.current_worker:
110 | self.current_worker.stop()
111 |
112 | # Create a new worker
113 | worker = Worker(func, *args, **kwargs)
114 |
115 | # Store the current worker
116 | self.current_worker = worker
117 |
118 | # Update signals reference
119 | self.signals = worker.signals
120 |
121 | def run(self):
122 | """
123 | Run the currently assigned worker in the thread pool.
124 |
125 | Adds the worker to the thread pool for execution.
126 | """
127 | if self.current_worker:
128 | # Add worker to thread pool
129 | self.thread_pool.start(self.current_worker)
130 |
131 | def waitForDone(self):
132 | """
133 | Wait for all threads in the pool to complete.
134 |
135 | Useful for clean shutdown of the application.
136 | """
137 | # Stop current worker if exists
138 | if self.current_worker:
139 | self.current_worker.stop()
140 |
141 | # Wait for thread pool to finish
142 | self.thread_pool.waitForDone()
143 |
--------------------------------------------------------------------------------
/dlss_updater/logger.py:
--------------------------------------------------------------------------------
1 | import logging
2 | import sys
3 | from pathlib import Path
4 | from PyQt6.QtCore import QObject, pyqtSignal, Qt
5 | from PyQt6.QtWidgets import QTextBrowser
6 |
7 |
8 | class QLoggerLevelSignal(QObject):
9 | """Signals for the Logger QTextBrowser derived class."""
10 | debug = pyqtSignal()
11 | info = pyqtSignal()
12 | warning = pyqtSignal()
13 | error = pyqtSignal()
14 |
15 |
16 | class LoggerWindow(QTextBrowser):
17 | """A QTextBrowser subclass that have signals and a dict for ease of access to said signals."""
18 | def __init__(self, parent=None):
19 | super().__init__(parent)
20 | self.signals = QLoggerLevelSignal()
21 | self.signals_to_emit = {
22 | "DEBUG": self.signals.debug,
23 | "INFO": self.signals.info,
24 | "WARNING": self.signals.warning,
25 | "ERROR": self.signals.error,
26 | }
27 | # Set document max size to prevent memory issues with very large logs
28 | self.document().setMaximumBlockCount(5000) # Limit to last 5000 lines
29 | # Set text browser properties
30 | self.setReadOnly(True)
31 | self.setOpenExternalLinks(False)
32 | # Enable smooth scrolling
33 | self.verticalScrollBar().setSingleStep(2)
34 |
35 |
36 | class QLogger(logging.Handler, QObject):
37 | """Logger handler for the Qt GUI"""
38 | # Define the signal as a class attribute
39 | logMessage = pyqtSignal(str, str)
40 |
41 | def __init__(self, text_browser):
42 | logging.Handler.__init__(self)
43 | QObject.__init__(self) # Initialize QObject
44 |
45 | self.text_browser = text_browser
46 | self.colors_dict = {
47 | "DEBUG": "white",
48 | "INFO": "green",
49 | "WARNING": "yellow",
50 | "ERROR": "red",
51 | }
52 | # Connect the signal to the slot method
53 | self.logMessage.connect(self.write_log, Qt.ConnectionType.QueuedConnection)
54 |
55 | def emit(self, record):
56 | """
57 | Logs the record to the text browser object.
58 | @param record: LogRecord object to log.
59 | """
60 | msg = self.format(record)
61 | # Emit the signal with levelname and formatted message
62 | self.logMessage.emit(record.levelname, msg)
63 |
64 | def write_log(self, levelname, msg):
65 | """Write the log message to the text browser in the main thread."""
66 | color = self.colors_dict[levelname]
67 | formatted_msg = f'{msg}'
68 | self.text_browser.signals_to_emit[levelname].emit()
69 | self.text_browser.append(formatted_msg)
70 | # Scroll to bottom
71 | scrollbar = self.text_browser.verticalScrollBar()
72 | scrollbar.setValue(scrollbar.maximum())
73 |
74 |
75 | def setup_logger(log_file_name="dlss_updater.log"):
76 | """
77 | Setups the initial logger.
78 | param: log_file_name: filename to be used for the logfile.
79 | return: logger instance created.
80 | """
81 | logger = logging.getLogger("DLSSUpdater")
82 |
83 | # Check if the logger has already been configured
84 | if not logger.handlers:
85 | logger.setLevel(logging.DEBUG)
86 |
87 | log_file_path = (
88 | Path(sys.executable).parent / log_file_name
89 | if getattr(sys, "frozen", False)
90 | else Path(__file__).parent / log_file_name
91 | )
92 |
93 | # Create handlers
94 | console_handler = logging.StreamHandler(sys.stdout)
95 | file_handler = logging.FileHandler(log_file_path, encoding="utf-8")
96 |
97 | # Create formatter and add it to handlers
98 | log_format = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
99 | console_handler.setFormatter(log_format)
100 | file_handler.setFormatter(log_format)
101 |
102 | # Add handlers to the logger
103 | logger.addHandler(console_handler)
104 | logger.addHandler(file_handler)
105 |
106 | # Prevent propagation to avoid duplicate logs
107 | logger.propagate = False
108 |
109 | return logger
110 |
111 |
112 | def add_qt_handler(logger_to_extend, text_browser):
113 | """
114 | Add a QTextBrowser handler to an existing logger instance.
115 | @param: logger_to_extend: logger instance to be extended.
116 | @param: text_browser: QTextBrowser instance to be added as a logger.
117 | """
118 | # Remove any existing QLogger handlers
119 | for handler in logger_to_extend.handlers[:]:
120 | if isinstance(handler, QLogger):
121 | logger_to_extend.removeHandler(handler)
122 |
123 | # Create a new QLogger handler
124 | text_browser_handler = QLogger(text_browser)
125 | formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
126 | text_browser_handler.setFormatter(formatter)
127 | logger_to_extend.addHandler(text_browser_handler)
128 |
129 |
130 | # Usage example
131 | if __name__ == "__main__":
132 | logger = setup_logger()
133 | logger.info("This is a test log message")
134 | logger.info("This is a test logger.info message with an argument: %s", "test arg")
--------------------------------------------------------------------------------
/dlss_updater/main_ui/animated_toggle.py:
--------------------------------------------------------------------------------
1 | from PyQt6.QtCore import (
2 | Qt,
3 | QSize,
4 | QPoint,
5 | QPointF,
6 | QRectF,
7 | QEasingCurve,
8 | QPropertyAnimation,
9 | QSequentialAnimationGroup,
10 | pyqtSlot,
11 | pyqtProperty,
12 | )
13 | from PyQt6.QtWidgets import QCheckBox
14 | from PyQt6.QtGui import QColor, QBrush, QPaintEvent, QPen, QPainter
15 |
16 |
17 | class AnimatedToggle(QCheckBox):
18 | def __init__(
19 | self,
20 | parent=None,
21 | track_color="#888888",
22 | thumb_color="#FFFFFF",
23 | track_active_color="#2D6E88",
24 | thumb_active_color="#FFFFFF",
25 | animation_duration=120,
26 | ):
27 | super().__init__(parent)
28 |
29 | # Colors
30 | self._track_color = QColor(track_color)
31 | self._thumb_color = QColor(thumb_color)
32 | self._track_active_color = QColor(track_active_color)
33 | self._thumb_active_color = QColor(thumb_active_color)
34 |
35 | # Dimensions
36 | self._track_radius = 11
37 | self._thumb_radius = 8
38 |
39 | # Animation
40 | self._animation_duration = animation_duration
41 | self._margin = max(0, self._thumb_radius - self._track_radius)
42 | self._offset = 0
43 | self._pulse_radius = 0
44 |
45 | # Setup animations
46 | self.animation = QPropertyAnimation(self, b"offset")
47 | self.animation.setEasingCurve(QEasingCurve.Type.InOutCubic)
48 | self.animation.setDuration(self._animation_duration)
49 |
50 | self.pulse_animation = QPropertyAnimation(self, b"pulse_radius")
51 | self.pulse_animation.setDuration(self._animation_duration)
52 | self.pulse_animation.setEasingCurve(QEasingCurve.Type.InOutCubic)
53 |
54 | self.animations_group = QSequentialAnimationGroup()
55 | self.animations_group.addAnimation(self.animation)
56 | self.animations_group.addAnimation(self.pulse_animation)
57 |
58 | # Setup initial state
59 | self.setFixedSize(
60 | self._track_radius * 4 + self._margin * 2,
61 | self._track_radius * 2 + self._margin * 2,
62 | )
63 | self.setCursor(Qt.CursorShape.PointingHandCursor)
64 |
65 | def sizeHint(self):
66 | return QSize(
67 | 4 * self._track_radius + 2 * self._margin,
68 | 2 * self._track_radius + 2 * self._margin,
69 | )
70 |
71 | def hitButton(self, pos: QPoint):
72 | return self.contentsRect().contains(pos)
73 |
74 | @pyqtSlot(int)
75 | def setChecked(self, checked):
76 | super().setChecked(checked)
77 | self.offset = 1 if checked else 0
78 |
79 | def paintEvent(self, e: QPaintEvent):
80 | # Set up painter
81 | p = QPainter(self)
82 | p.setRenderHint(QPainter.RenderHint.Antialiasing)
83 |
84 | # Get current state
85 | checked = self.isChecked()
86 | enabled = self.isEnabled()
87 |
88 | # Calculate sizes
89 | track_opacity = 0.6 if enabled else 0.3
90 | margin = self._margin
91 | thumb_radius = self._thumb_radius
92 | track_radius = self._track_radius
93 |
94 | # Get widget dimensions
95 | width = self.width() - 2 * margin
96 | height = self.height() - 2 * margin
97 |
98 | # Draw track
99 | track_brush = QBrush(self._track_active_color if checked else self._track_color)
100 | track_pen = QPen(Qt.PenStyle.NoPen)
101 |
102 | p.setBrush(track_brush)
103 | p.setPen(track_pen)
104 | p.setOpacity(track_opacity)
105 |
106 | p.drawRoundedRect(margin, margin, width, height, track_radius, track_radius)
107 |
108 | # Calculate thumb position
109 | total_offset = width - 2 * thumb_radius
110 | offset = total_offset * self.offset
111 |
112 | # Draw thumb
113 | p.setBrush(QBrush(self._thumb_active_color if checked else self._thumb_color))
114 | p.setPen(QPen(Qt.PenStyle.NoPen))
115 | p.setOpacity(1.0)
116 |
117 | p.drawEllipse(
118 | QPointF(margin + thumb_radius + offset, margin + height / 2),
119 | thumb_radius,
120 | thumb_radius,
121 | )
122 |
123 | # Draw pulse if animating
124 | if self._pulse_radius > 0:
125 | p.setBrush(QBrush(QColor(0, 0, 0, 0)))
126 | p.setPen(QPen(QColor(0, 0, 0, 0)))
127 | p.setOpacity(0.1)
128 |
129 | p.drawEllipse(
130 | QPointF(margin + thumb_radius + offset, margin + height / 2),
131 | self._pulse_radius,
132 | self._pulse_radius,
133 | )
134 |
135 | p.end()
136 |
137 | # Property animations
138 | @pyqtProperty(float)
139 | def offset(self):
140 | return self._offset
141 |
142 | @offset.setter
143 | def offset(self, value):
144 | self._offset = value
145 | self.update()
146 |
147 | @pyqtProperty(float)
148 | def pulse_radius(self):
149 | return self._pulse_radius
150 |
151 | @pulse_radius.setter
152 | def pulse_radius(self, value):
153 | self._pulse_radius = value
154 | self.update()
155 |
156 | # Override the change event to handle state changes
157 | def mouseReleaseEvent(self, e):
158 | super().mouseReleaseEvent(e)
159 |
160 | if self.isEnabled():
161 | if self.isChecked():
162 | self.animation.setStartValue(0)
163 | self.animation.setEndValue(1)
164 | else:
165 | self.animation.setStartValue(1)
166 | self.animation.setEndValue(0)
167 |
168 | self.animations_group.start()
169 |
--------------------------------------------------------------------------------
/dlss_updater/version.py:
--------------------------------------------------------------------------------
1 | __version__ = "2.7.8"
2 |
--------------------------------------------------------------------------------
/dlss_updater/whitelist.py:
--------------------------------------------------------------------------------
1 | import os
2 | import csv
3 | from io import StringIO
4 | import asyncio
5 | from urllib.request import urlopen
6 | from urllib.error import URLError
7 | from dlss_updater.logger import setup_logger
8 | from dlss_updater.config import config_manager
9 |
10 | logger = setup_logger()
11 |
12 | WHITELIST_URL = (
13 | "https://raw.githubusercontent.com/Recol/DLSS-Updater-Whitelist/main/whitelist.csv"
14 | )
15 |
16 |
17 | def fetch_whitelist():
18 | try:
19 | with urlopen(WHITELIST_URL) as response:
20 | csv_data = StringIO(response.read().decode("utf-8"))
21 | reader = csv.reader(csv_data)
22 | return set(row[0].strip() for row in reader if row and row[0].strip())
23 | except URLError as e:
24 | logger.error(f"Failed to fetch whitelist: {e}")
25 | return set()
26 | except csv.Error as e:
27 | logger.error(f"Failed to parse whitelist CSV: {e}")
28 | return set()
29 |
30 |
31 | WHITELISTED_GAMES = fetch_whitelist()
32 |
33 |
34 | async def is_whitelisted(game_path):
35 | """
36 | Check if a game path matches any whitelisted games.
37 | Uses launcher pattern detection to find the actual game name.
38 | """
39 | logger.debug(f"Checking game against whitelist: {game_path}")
40 |
41 | # Extract path components
42 | path_parts = [p for p in game_path.split(os.path.sep) if p]
43 |
44 | # Skip if the path is too short
45 | if len(path_parts) < 3:
46 | return False
47 |
48 | # Look for known launcher patterns to identify the game directory
49 | game_dir = None
50 |
51 | # Epic Games pattern: :\Epic Games\\...
52 | if "Epic Games" in path_parts:
53 | epic_index = path_parts.index("Epic Games")
54 | if epic_index + 1 < len(path_parts):
55 | game_dir = path_parts[epic_index + 1]
56 |
57 | # Steam pattern: :\\steamapps\common\\...
58 | elif "steamapps" in path_parts and "common" in path_parts:
59 | common_index = path_parts.index("common")
60 | if common_index + 1 < len(path_parts):
61 | game_dir = path_parts[common_index + 1]
62 |
63 | # EA Games pattern: :\EA Games\\...
64 | elif "EA Games" in path_parts:
65 | ea_index = path_parts.index("EA Games")
66 | if ea_index + 1 < len(path_parts):
67 | game_dir = path_parts[ea_index + 1]
68 |
69 | # GOG pattern: :\GOG Games\\... or :\GOG Galaxy\Games\\...
70 | elif "GOG Games" in path_parts:
71 | gog_index = path_parts.index("GOG Games")
72 | if gog_index + 1 < len(path_parts):
73 | game_dir = path_parts[gog_index + 1]
74 | elif "GOG Galaxy" in path_parts:
75 | gog_index = path_parts.index("GOG Galaxy")
76 | if "Games" in path_parts:
77 | # Pattern: D:\GOG Galaxy\Games\\...
78 | games_index = path_parts.index("Games")
79 | if games_index + 1 < len(path_parts):
80 | game_dir = path_parts[games_index + 1]
81 | else:
82 | # Pattern: D:\GOG Galaxy\\...
83 | if gog_index + 1 < len(path_parts):
84 | game_dir = path_parts[gog_index + 1]
85 |
86 | # Ubisoft pattern: :\Ubisoft\Ubisoft Game Launcher\games\\...
87 | elif "Ubisoft Game Launcher" in path_parts and "games" in path_parts:
88 | games_index = path_parts.index("games")
89 | if games_index + 1 < len(path_parts):
90 | game_dir = path_parts[games_index + 1]
91 |
92 | # Battle.net pattern: :\Battle.net\\...
93 | elif "Battle.net" in path_parts:
94 | battlenet_index = path_parts.index("Battle.net")
95 | if battlenet_index + 1 < len(path_parts):
96 | game_dir = path_parts[battlenet_index + 1]
97 |
98 | # Xbox pattern: :\Xbox\\...
99 | elif "Xbox" in path_parts:
100 | xbox_index = path_parts.index("Xbox")
101 | if xbox_index + 1 < len(path_parts):
102 | game_dir = path_parts[xbox_index + 1]
103 |
104 | # Fallback: Just use the parent directory if we couldn't identify the game
105 | if not game_dir:
106 | logger.debug(
107 | "Could not identify game from path patterns, using parent directory"
108 | )
109 | game_dir = path_parts[-2]
110 |
111 | logger.debug(f"Identified game directory: {game_dir}")
112 |
113 | # Check for skip list first
114 | for game in WHITELISTED_GAMES:
115 | if config_manager.is_blacklist_skipped(game):
116 | if game.lower() == game_dir.lower():
117 | logger.info(
118 | f"Game '{game_dir}' is in whitelist but also in skip list - allowing update"
119 | )
120 | return False
121 |
122 | # Now check against whitelist
123 | for game in WHITELISTED_GAMES:
124 | # Skip if in skip list (already handled)
125 | if config_manager.is_blacklist_skipped(game):
126 | continue
127 |
128 | # Simple direct name comparison
129 | if game.lower() == game_dir.lower():
130 | logger.info(f"Whitelist match found: {game_dir}")
131 | return True
132 |
133 | logger.debug(f"No whitelist match found for: {game_dir}")
134 | return False
135 |
136 |
137 | def get_all_blacklisted_games():
138 | """Return the list of all blacklisted games for UI display"""
139 | return list(WHITELISTED_GAMES)
140 |
141 | async def check_whitelist_batch(game_paths):
142 | """Check multiple game paths against whitelist in parallel"""
143 | tasks = []
144 | for path in game_paths:
145 | task = asyncio.create_task(is_whitelisted(path))
146 | tasks.append((path, task))
147 |
148 | results = {}
149 | for path, task in tasks:
150 | try:
151 | results[path] = await task
152 | except Exception as e:
153 | logger.error(f"Error checking whitelist for {path}: {e}")
154 | results[path] = False
155 |
156 | return results
--------------------------------------------------------------------------------
/hooks/hook-dlss_updater.py:
--------------------------------------------------------------------------------
1 | from PyInstaller.utils.hooks import collect_submodules, collect_data_files
2 |
3 | hiddenimports = collect_submodules('dlss_updater')
4 | datas = collect_data_files('dlss_updater')
--------------------------------------------------------------------------------
/hooks/hook-pefile.py:
--------------------------------------------------------------------------------
1 | from PyInstaller.utils.hooks import copy_metadata
2 |
3 | datas = copy_metadata('pefile')
4 |
--------------------------------------------------------------------------------
/hooks/hook-psutil.py:
--------------------------------------------------------------------------------
1 | from PyInstaller.utils.hooks import copy_metadata
2 |
3 | datas = copy_metadata('psutil')
4 |
--------------------------------------------------------------------------------
/main.py:
--------------------------------------------------------------------------------
1 | from dlss_updater.utils import *
2 | from dlss_updater.logger import setup_logger
3 | from dlss_updater.main_ui.main_window import MainWindow
4 | from PyQt6.QtWidgets import QApplication
5 | import os
6 | import sys
7 |
8 | logger = setup_logger()
9 |
10 | # Add the directory containing the executable to sys.path
11 | if getattr(sys, "frozen", False):
12 | application_path = os.path.dirname(sys.executable)
13 | sys.path.insert(0, application_path)
14 |
15 |
16 | def main():
17 | try:
18 | if gui_mode:
19 | log_file = os.path.join(os.path.dirname(sys.executable), "dlss_updater.log")
20 | sys.stdout = sys.stderr = open(log_file, "w")
21 | # Run the application with Qt GUI
22 | main_ui = QApplication(sys.argv)
23 | main_window = MainWindow(logger)
24 | main_window.show()
25 | main_window.get_current_settings()
26 | sys.exit(main_ui.exec())
27 | except Exception as e:
28 | logger.error(f"Critical error starting application: {e}")
29 | import traceback
30 |
31 | logger.error(traceback.format_exc())
32 | input("Press Enter to exit...") # Wait for user input before exiting
33 |
34 |
35 | if __name__ == "__main__":
36 | # Remove auto-update cleanup - no longer needed
37 | # Remove check_update_completion and check_update_error calls
38 |
39 | gui_mode = "--gui" in sys.argv
40 | logger.debug("Python executable: %s", sys.executable)
41 | logger.debug("sys.path: %s", sys.path)
42 | logger.info("DLSS Updater started")
43 |
44 | if not check_dependencies():
45 | sys.exit(1)
46 |
47 | # Check for admin rights and request if needed
48 | if not is_admin():
49 | logger.info("Requesting administrator privileges...")
50 | run_as_admin()
51 | sys.exit(0) # Exit after requesting admin privileges
52 | else:
53 | # Initialize DLL cache ONLY after we have admin privileges
54 | logger.debug("Starting DLL cache initialization after admin check")
55 | from dlss_updater.dll_repository import initialize_dll_cache
56 | from dlss_updater.config import initialize_dll_paths
57 | from dlss_updater import LATEST_DLL_PATHS
58 |
59 | initialize_dll_cache()
60 | # Update the global LATEST_DLL_PATHS
61 | LATEST_DLL_PATHS.update(initialize_dll_paths())
62 |
63 | logger.debug("DLL cache initialization completed")
64 | main()
65 |
--------------------------------------------------------------------------------
/release_notes.txt:
--------------------------------------------------------------------------------
1 | Version 2.6.4:
2 | Performance improvements for scanning directories.
3 | Rewrite of scanning subdirectories.
4 | There is now an output of the results in a box.
5 | Removal of the full banner from the GUI.
6 |
7 | Version 2.6.5:
8 | Updates the DLSS files to DLSS 4.0.
9 | Use at your own discretion :).
10 |
11 | Version 2.6.6:
12 | Bug fix for FG/RR DLL's being included in the skip for <2.0.0.
13 |
14 | Version 2.6.7:
15 | Updates to the DLL's to allow for profile K (refined version of profile J) to be the default for DLSS.
16 |
17 | Version 2.6.8:
18 | Updates to the RR DLL to version 310.2.1.0.
19 | Updates the frame generation DLL to version 310.2.1.0.
20 |
21 | Version 2.7.0:
22 | Added support for XeSS DLLs (libxess.dll and libxess_dx11.dll) - version 2.0.1.41.
23 | Added support for up to 4 custom game folders.
24 | Improved auto-updater to better handle update process and cleanup.
25 | Added ability to skip specific games in the blacklist.
26 | Enhanced UI with separated sections for launcher types.
27 | Fixed bug in game name extraction for better reporting.
28 | Introduction of animations for certain components, should be better for viewability.
29 |
30 | Version 2.7.1:
31 | UI spacing fixes with the logger output.
32 | Hover bug mentioned in the prior release fixed.
33 | Removal of the maximum span width so it's possible to resize the GUI fully.
34 | Few other erronous colour fixes.
35 |
36 | Version 2.7.2:
37 | Addition of DirectStorage.
38 | Offloading of the DLL's to a separate repository to strip down the file size.
39 | Addition of a checklist to allow selection on what is updated.
40 | Implemented DLL caching to check for new DLL's.
41 |
42 | Version 2.7.3:
43 | Updated support for handling DLSS Streamline components (Reflex/DLSS Streamline/FG etc).
44 |
45 | Version 2.7.4:
46 | Introduced parallelism for allowing multiple DLL's to be upgraded at once.
47 | Bug fix for DLL cache initialisation to only happen once on booting.
48 |
49 | Version 2.7.5:
50 | Added concurrency for parallel backups at once for multiple DLL's.
51 | Removal of auto-upgrades as a deprecated feature to cleanup code, added a "Check for update" button in the GUI.
52 | Parallelism for scanning Steam directories.
53 | Introduction of custom animations to properly track the update % correctly.
54 |
55 | Version 2.7.6:
56 | Added support for updating FSR 3.1.1+ games to 3.1.4.
57 | Increases to maximum thread pool allocations.
58 |
59 | Version 2.7.7:
60 | Update to address GOG Galaxy paths being erronous for some games.
61 |
62 | Version 2.7.8:
63 | Update to separate out Streamline DLL's to be their own components, and to be switched off by default due to incompatibility with some games.
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | pefile
2 | psutil
3 | packaging
4 | pywin32
5 | appdirs
6 | PyQt6
7 | pyinstaller
8 | requests
--------------------------------------------------------------------------------
/tools/chocolateyInstall.ps1:
--------------------------------------------------------------------------------
1 | $toolsDir = "$(Split-Path -parent $MyInvocation.MyCommand.Definition)"
2 | $fileLocation = Join-Path $toolsDir 'DLSS_Updater.exe'
3 |
4 | # Create a shortcut that runs as admin
5 | $shortcutPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "DLSS Updater.lnk"
6 | $shell = New-Object -ComObject WScript.Shell
7 | $shortcut = $shell.CreateShortcut($shortcutPath)
8 | $shortcut.TargetPath = $fileLocation
9 | $shortcut.Arguments = "--gui"
10 | $shortcut.Save()
11 |
12 | # Set the shortcut to run as administrator
13 | $bytes = [System.IO.File]::ReadAllBytes($shortcutPath)
14 | $bytes[0x15] = $bytes[0x15] -bor 0x20 # Set run as administrator flag
15 | [System.IO.File]::WriteAllBytes($shortcutPath, $bytes)
16 |
17 | $packageArgs = @{
18 | packageName = $env:ChocolateyPackageName
19 | fileType = 'exe'
20 | file = $fileLocation
21 | softwareName = 'DLSS Updater*'
22 | silentArgs = "--gui"
23 | validExitCodes= @(0)
24 | # Force running as admin
25 | requireAdmin = $true
26 | }
--------------------------------------------------------------------------------
/tools/chocolateyUninstall.ps1:
--------------------------------------------------------------------------------
1 | $shortcutPath = Join-Path ([Environment]::GetFolderPath("Desktop")) "DLSS Updater.lnk"
2 | if (Test-Path $shortcutPath) {
3 | Remove-Item $shortcutPath -Force
4 | }
5 |
6 | $packageArgs = @{
7 | packageName = $env:ChocolateyPackageName
8 | softwareName = 'DLSS Updater*'
9 | fileType = 'exe'
10 | }
--------------------------------------------------------------------------------
/version.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/version.txt:
--------------------------------------------------------------------------------
1 | VSVersionInfo(
2 | ffi=FixedFileInfo(
3 | filevers=(2, 2, 6, 0),
4 | prodvers=(2, 2, 6, 0),
5 | mask=0x3f,
6 | flags=0x0,
7 | OS=0x4,
8 | fileType=0x1,
9 | subtype=0x0,
10 | date=(0, 0)
11 | ),
12 | kids=[
13 | StringFileInfo([
14 | StringTable(
15 | u'040904B0',
16 | [StringStruct(u'CompanyName', u'Deco'),
17 | StringStruct(u'FileDescription', u'DLSS Updater'),
18 | StringStruct(u'FileVersion', u'2.4.3'),
19 | StringStruct(u'InternalName', u'DLSS_Updater'),
20 | StringStruct(u'LegalCopyright', u'Copyright (c) Deco'),
21 | StringStruct(u'OriginalFilename', u'DLSS_Updater.exe'),
22 | StringStruct(u'ProductName', u'DLSS Updater'),
23 | StringStruct(u'ProductVersion', u'2.7.8')])
24 | ]),
25 | VarFileInfo([VarStruct(u'Translation', [1033, 1200])])
26 | ]
27 | )
--------------------------------------------------------------------------------