Hearthstone deck tracker for Linux, first public version

Reads the game's own Power.log: no screen capture, no image
recognition, no memory reading.

- deck tracking (remaining cards, draw chance, played cards fade in place)
- opponent panel (revealed cards, hand and deck counts)
- decks read from the game's offline cache, matched to the match
- card art in rows, full card on hover
- overlay and window modes, adjustable transparency, tray icon
- English and Turkish interface
- consistency tests over a real log corpus, cross-checked against Zone.log
This commit is contained in:
yusufipk
2026-07-27 22:31:13 +07:00
commit c2a5a2d4d2
41 changed files with 4521 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
"""assets/deste.svg dosyasından PNG ikon boyutlarını üretir.
Plasma'nın tepsisi ve uygulama menüsü ikonu isimle çözüyor ve bazı yollarda
SVG yerine hazır PNG bekliyor. install.sh bunları hicolor temasına kopyalar.
Kullanım: python -m tools.make_icons
"""
from __future__ import annotations
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))
SIZES = (16, 22, 24, 32, 48, 64, 96, 128, 256)
ROOT = Path(__file__).resolve().parent.parent
SVG_PATH = ROOT / "assets" / "deste.svg"
OUT_DIR = ROOT / "assets" / "icons"
def main() -> int:
from PyQt6.QtCore import QSize, Qt
from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QApplication
if not SVG_PATH.exists():
print(f"SVG yok: {SVG_PATH}", file=sys.stderr)
return 1
# Referans tutulmazsa QApplication hemen toplanıyor ve ilk QPixmap
# çağrısında Qt "önce QGuiApplication kur" diyip abort ediyor.
app = QApplication(sys.argv) # noqa: F841
OUT_DIR.mkdir(parents=True, exist_ok=True)
icon = QIcon(str(SVG_PATH))
for size in SIZES:
pixmap = icon.pixmap(QSize(size, size))
if pixmap.isNull():
print(f"{size}px üretilemedi", file=sys.stderr)
continue
# Yüksek DPI ölçeklemesi devrede olabilir, istenen boyuta indir.
# Not: enum yerine düz sayı geçilirse PyQt6 sessizce abort ediyor.
if pixmap.width() != size:
pixmap = pixmap.scaled(
size,
size,
Qt.AspectRatioMode.KeepAspectRatio,
Qt.TransformationMode.SmoothTransformation,
)
target = OUT_DIR / f"deste-{size}.png"
pixmap.save(str(target))
print(f" {target.name} {pixmap.width()}x{pixmap.height()}")
return 0
if __name__ == "__main__":
raise SystemExit(main())