Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ Format basiert auf [Keep a Changelog](https://keepachangelog.com/de/1.1.0/).

## [Unreleased]

### Store-Paket 1.0.7.0 (T-20260928-288887892, 2026-09-28)
- Desktop-, Fenster-, EXE-, Mobile- und Legacy-Icons nutzen jetzt das vom Nutzer ausgewählte neue Store-Kachelmotiv. `scripts/gen_store_icons.py` erzeugt daraus alle benötigten Größen einschließlich der MSIX-`targetsize`- und `altform`-Varianten.
- `scripts/build_store_msix.ps1` erzeugt die Icons vor dem PyInstaller-Build, prüft den Quellbaum und ruft den Store-Builder mit Paket-Gate auf. Dadurch wird `resources.pri` in das MSIX aufgenommen.
- Der Store-Readiness-Check prüft jetzt den versionierten Paketpfad `releases/windowsstore/v1.0.7/ExplorerPro.msix`.
- Das Paket wurde lokal gebaut und aus seinem entpackten Inhalt gestartet. Eine Store-Einreichung ist nicht erfolgt.

## [1.0.7] - 2026-09-26

### Behoben / Fixed (Store-Icon weißer Rand — T-20260820-729932431)
Expand Down
Binary file modified DesktopIcon.ico
Binary file not shown.
Binary file modified DesktopIcon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified ExplorerPro.ico
Binary file not shown.
9 changes: 5 additions & 4 deletions STORE_ISSUES.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ Lokaler Paketbefund vom 28.09.2026: `Geiger.ExplorerPro_1.0.0.0_neutral__9jp3kxz

| Ticket | Schwere | Beschreibung | Fundort | Status |
|---|---|---|---|---|
| T-20260928-288887892 | P1 | Sidebar und Vorschau können nach einem Neustart trotz aktivierter Ansicht auf Breite null bleiben. | `src/app.py`, `src/gui/main_window.py` | IN ARBEIT |
| T-20260928-288887892 | P1 | Ein Ordnerwechsel aktualisiert den Pfad, lädt aber keine Dateizeilen; dadurch bleiben Vorschau, Umbenennen und Dateiaktionen unerreichbar. | `src/gui/browser/file_browser.py` | IN ARBEIT |
| T-20260928-288887892 | P1 | Umbenennen und Kontextmenü-Aktionen müssen am installierten Paket und am neuen Build tatsächlich ausgelöst werden; der installierte Binärstand enthält den Fix vom 26.09.2026 nicht. | `src/gui/browser/file_browser.py`, Paketversion | IN ARBEIT |
| T-20260928-288887892 | P1 | „Python-Skript ausführen“ startet im gefrorenen Build erneut ExplorerPro statt eines Python-Interpreters. | `src/modules/editor/quick_editor.py` | IN ARBEIT |
| T-20260928-288887892 | P1 | Sidebar und Vorschau können nach einem Neustart trotz aktivierter Ansicht auf Breite null bleiben. | `src/app.py`, `src/gui/main_window.py` | GEFIXT (GitHub); Pakettest grün, Store nicht eingereicht |
| T-20260928-288887892 | P1 | Ein Ordnerwechsel aktualisiert den Pfad, lädt aber keine Dateizeilen; dadurch bleiben Vorschau, Umbenennen und Dateiaktionen unerreichbar. | `src/gui/browser/file_browser.py` | GEFIXT (GitHub); Pakettest grün, Store nicht eingereicht |
| T-20260928-288887892 | P1 | Umbenennen und Kontextmenü-Aktionen müssen am installierten Paket und am neuen Build tatsächlich ausgelöst werden; der installierte Binärstand enthält den Fix vom 26.09.2026 nicht. | `src/gui/browser/file_browser.py`, Paketversion | GEFIXT (GitHub); Pakettest grün, Store nicht eingereicht |
| T-20260928-288887892 | P1 | „Python-Skript ausführen“ startet im gefrorenen Build erneut ExplorerPro statt eines Python-Interpreters. | `src/modules/editor/quick_editor.py` | GEFIXT (GitHub); Pakettest grün, Store nicht eingereicht |
| T-20260928-288887892 | P1 | Desktop- und EXE-Icon weichen vom neuen Store-Motiv ab; im Paket fehlt `resources.pri`. | `scripts/gen_store_icons.py`, `scripts/build_store_msix.ps1`, `store_assets/` | GEFIXT (GitHub); Paket-Gate grün, Store nicht eingereicht |

## Geplanter nächster Build: 1.0.7.0

Expand Down
Binary file modified assets/DesktopIcon.ico
Binary file not shown.
Binary file modified assets/DesktopIcon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/ExplorerPro.ico
Binary file not shown.
Binary file modified assets/ExplorerPro.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/apple-touch-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/favicon-64.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/favicon.ico
Binary file not shown.
Binary file modified assets/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified assets/icon.ico
Binary file not shown.
Binary file modified assets/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified icon.ico
Binary file not shown.
Binary file modified icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/apple-touch-icon-180.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/apple-touch-icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/favicon.ico
Binary file not shown.
Binary file modified mobile_icons/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icon-192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icon-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icon-maskable-192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icon-maskable-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icons/Icon-192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icons/Icon-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icons/Icon-maskable-192.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icons/Icon-maskable-512.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified mobile_icons/icons/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
38 changes: 38 additions & 0 deletions scripts/build_store_msix.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
param([switch]$CheckToolsOnly)

$ErrorActionPreference = 'Stop'
$projectRoot = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
if (-not [string]::IsNullOrWhiteSpace($env:STORE_TOOLS_ROOT)) {
$storeToolsRoot = $env:STORE_TOOLS_ROOT
} elseif (-not [string]::IsNullOrWhiteSpace($env:OneDrive)) {
$storeToolsRoot = Join-Path $env:OneDrive '.TOPICS\.SOFTWARE\_STORE'
} else {
Write-Error 'Store tools root is missing. Set STORE_TOOLS_ROOT or OneDrive.' -ErrorAction Continue
exit 1
}
$builder = Join-Path $storeToolsRoot 'msstore_build_msix.ps1'
$iconGate = Join-Path $storeToolsRoot 'icon_consistency_check.py'
foreach ($tool in @($builder, $iconGate)) {
if (-not (Test-Path -LiteralPath $tool -PathType Leaf)) {
Write-Error "Required Store tool is missing: $tool" -ErrorAction Continue
exit 1
}
}
if ($CheckToolsOnly) {
Write-Output "Store tools found: $builder; $iconGate"
return
}
$config = Get-Content (Join-Path $projectRoot 'store_package.json') -Raw | ConvertFrom-Json
$releaseVersion = $config.version -replace '\.0$', ''
$output = Join-Path $projectRoot "releases\windowsstore\v$releaseVersion\ExplorerPro.msix"
$exe = Join-Path $projectRoot 'dist\ExplorerPro\ExplorerPro.exe'

$env:PYTHONIOENCODING = 'utf-8'
& python (Join-Path $PSScriptRoot 'gen_store_icons.py')
if ($LASTEXITCODE -ne 0) { throw 'Icon generation failed.' }
& python $iconGate $projectRoot
if ($LASTEXITCODE -ne 0) { throw 'Source icon gate failed.' }
& (Join-Path $projectRoot 'build_exe.bat')
if ($LASTEXITCODE -ne 0) { throw 'PyInstaller build failed.' }
& $builder -ProjectRoot $projectRoot -ExePath $exe -OutputMsix $output
if ($LASTEXITCODE -ne 0) { throw 'MSIX builder or package gate failed.' }
15 changes: 12 additions & 3 deletions scripts/check_store_readiness.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,20 @@ def check_store_icon_assets(project_root: Path) -> List[str]:

def check_msix_package(project_root: Path) -> List[str]:
errors = []
msix_path = project_root / "releases" / "ExplorerPro.msix"
config_path = project_root / "store_package.json"
if not config_path.is_file():
return errors # The missing metadata is reported by check_store_package_json.
try:
version = json.loads(config_path.read_text(encoding="utf-8")).get("version", "").removesuffix(".0")
except (ValueError, AttributeError):
return errors # Invalid metadata is reported by check_store_package_json.
if not version:
return errors
msix_path = project_root / "releases" / "windowsstore" / f"v{version}" / "ExplorerPro.msix"
if not msix_path.exists():
errors.append("releases/ExplorerPro.msix is missing.")
errors.append(f"{msix_path.relative_to(project_root)} is missing.")
elif msix_path.stat().st_size < 1_000_000:
errors.append(f"releases/ExplorerPro.msix is suspiciously small ({msix_path.stat().st_size} bytes).")
errors.append(f"{msix_path.relative_to(project_root)} is suspiciously small ({msix_path.stat().st_size} bytes).")
return errors


Expand Down
63 changes: 63 additions & 0 deletions scripts/gen_store_icons.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
"""Build every ExplorerPro icon from the approved Store tile artwork."""

from pathlib import Path

from PIL import Image


ROOT = Path(__file__).resolve().parents[1]
STORE = ROOT / "store_assets"
SOURCE = STORE / "Square310x310Logo.png"
SIZES = (16, 20, 24, 30, 32, 36, 40, 48, 60, 64, 72, 80, 96, 256)
FORMS = ("", "_altform-unplated", "_altform-lightunplated")


def main() -> None:
master = Image.open(SOURCE).convert("RGBA")
# The Store tile is the user-approved design. Keep all runtime fallbacks
# and the embedded EXE icon on the same artwork.
desktop = master.resize((1024, 1024), Image.Resampling.LANCZOS)
for relative in ("icon.png", "DesktopIcon.png", "assets/icon.png", "assets/DesktopIcon.png", "assets/ExplorerPro.png", "mobile_icons/icon.png"):
desktop.save(ROOT / relative, optimize=True)
for relative in (
"icon.ico", "DesktopIcon.ico", "ExplorerPro.ico", "assets/icon.ico",
"assets/DesktopIcon.ico", "assets/ExplorerPro.ico", "mobile_icons/favicon.ico",
):
desktop.save(ROOT / relative, format="ICO", sizes=[(size, size) for size in (16, 24, 32, 48, 64, 128, 256)])
desktop.save(ROOT / "assets/favicon.ico", format="ICO", sizes=[(size, size) for size in (16, 24, 32, 48)])
for relative, size in (
("assets/favicon.png", 32), ("assets/favicon-64.png", 64),
("assets/apple-touch-icon.png", 180),
("mobile_icons/favicon.png", 32), ("mobile_icons/apple-touch-icon.png", 180),
("mobile_icons/apple-touch-icon-180.png", 180),
("mobile_icons/icon-192.png", 192),
("mobile_icons/icon-512.png", 512), ("mobile_icons/icon-maskable-192.png", 192),
("mobile_icons/icon-maskable-512.png", 512),
("mobile_icons/icons/favicon.png", 32),
("mobile_icons/icons/Icon-192.png", 192),
("mobile_icons/icons/Icon-512.png", 512),
("mobile_icons/icons/Icon-maskable-192.png", 192),
("mobile_icons/icons/Icon-maskable-512.png", 512),
):
master.resize((size, size), Image.Resampling.LANCZOS).save(ROOT / relative, optimize=True)
for relative, size in (
("icon_44x44.png", 44), ("icon_50x50.png", 50),
("icon_150x150.png", 150), ("icon_310x310.png", 310),
):
master.resize((size, size), Image.Resampling.LANCZOS).save(STORE / relative, optimize=True)
# The wide legacy mirror should use the same layout as the manifest logo.
(STORE / "icon_310x150.png").write_bytes((STORE / "Wide310x150Logo.png").read_bytes())
for size in SIZES:
base = master.resize((size, size), Image.Resampling.LANCZOS)
for form in FORMS:
frame = base.copy()
if form:
alpha = frame.getchannel("A")
corner = max(1, size // 8)
alpha.paste(0, (0, 0, corner, corner))
frame.putalpha(alpha)
frame.save(STORE / f"Square44x44Logo.targetsize-{size}{form}.png", optimize=True)


if __name__ == "__main__":
main()
Binary file added store_assets/Square44x44Logo.targetsize-16.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added store_assets/Square44x44Logo.targetsize-20.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added store_assets/Square44x44Logo.targetsize-24.png
Binary file added store_assets/Square44x44Logo.targetsize-256.png
Binary file added store_assets/Square44x44Logo.targetsize-30.png
Binary file added store_assets/Square44x44Logo.targetsize-32.png
Binary file added store_assets/Square44x44Logo.targetsize-40.png
Binary file added store_assets/Square44x44Logo.targetsize-48.png
Binary file added store_assets/Square44x44Logo.targetsize-60.png
Binary file added store_assets/Square44x44Logo.targetsize-64.png
Binary file added store_assets/Square44x44Logo.targetsize-72.png
Binary file added store_assets/Square44x44Logo.targetsize-80.png
Binary file added store_assets/Square44x44Logo.targetsize-96.png
Binary file modified store_assets/icon_150x150.png
Binary file modified store_assets/icon_310x150.png
Binary file modified store_assets/icon_310x310.png
Binary file modified store_assets/icon_44x44.png
Binary file modified store_assets/icon_50x50.png
Loading