62 lines
5.6 KiB
Markdown
62 lines
5.6 KiB
Markdown
# 📜 G-Launcher Development History & Decision Logs
|
|
|
|
เอกสารนี้บันทึกประวัติการพัฒนา การตัดสินใจเชิงเทคนิค และที่มาของฟีเจอร์ต่างๆ ในโปรเจกต์ **G-Launcher**
|
|
|
|
---
|
|
|
|
## 🏛️ จุดกำเนิดและการผสานโค้ด (Origins & Merging)
|
|
|
|
G-Launcher เกิดจากการรวมจุดเด่นของ 2 โปรเจกต์ต้นแบบเข้าด้วยกัน:
|
|
|
|
### 1. `Firefly-Shelter/Firefly_Launcher` (รากฐานฝั่ง UI & Architecture)
|
|
* **สิ่งที่นำมาใช้:**
|
|
* โครงสร้าง UI หน้าต่าง Launcher สไตล์มินิมอล โมเดิร์น (TailwindCSS + DaisyUI)
|
|
* สถาปัตยกรรม Proxy และ Local Server Downloader
|
|
* ระบบเปลี่ยนภาษาหลายภาษาแบบไดนามิก (i18next)
|
|
* Zustand Store (`launcherStore`, `modalStore`)
|
|
|
|
### 2. `horoyoi-san/game-Launcher` (`sunbringer-launcher` branch) (ฟังก์ชันความปลอดภัย & เครื่องมือ)
|
|
* **สิ่งที่นำมาใช้:**
|
|
* เครื่องมือแพตช์ไฟล์ฟอร์แมต Zift (`.ziff`) ผ่าน `zift.exe`
|
|
* ระบบจัดเตรียม Portable MinGit อัตโนมัติ (`git_runtime.go`)
|
|
* การสำรองไฟล์เกมเดิมเป็น `.backup` ก่อนแก้ไข และระบบ Atomic Rollback
|
|
* การบันทึกพาธเกมแบบทนทานต่อ Crash ด้วย Windows API `MoveFileEx` (`game-selection.go`)
|
|
* สคริปต์คำนวณเวอร์ชันและแฮช SHA-256 (`scripts/launcher-release.mjs`)
|
|
* ระบบติดตั้งม็อดแปลภาษาไทย (`thai-patch.go`)
|
|
|
|
---
|
|
|
|
## 📅 ไทม์ไลน์การพัฒนา (Changelog & Milestone Timeline)
|
|
|
|
### Milestone 1: Rebranding & Repository Initial Setup
|
|
* ตั้งชื่อโปรเจกต์อย่างเป็นทางการว่า **G-Launcher** ภายใต้สังกัด **GaCy**
|
|
* สร้าง Git Remote: `https://gaytea.cod-algieba.ts.net/GaCy/G-Launcher.git`
|
|
* สร้างและตั้งค่าการทำงานบนสาขา **`Dev`** เป็นสาขาหลัก
|
|
* รีแบรนด์ Go Module เป็น `g-launcher`, ปรับปรุง `build/config.yml`, `Taskfile.yml`, `main.go`, และ `wails.exe.manifest`
|
|
* เพิ่มไฟล์ข้อกำหนดการพัฒนา [`AGENTS.md`](../AGENTS.md) และเอกสารแนะนำโปรเจกต์ [`README.md`](../README.md)
|
|
|
|
### Milestone 2: Thai Localization & Game Selection Persistence
|
|
* สร้างไฟล์คำแปลภาษาไทยฉบับเต็ม: `frontend/public/locales/th.json`
|
|
* เพิ่มปุ่มเลือกภาษาไทยใน `LanguageSwitcher`
|
|
* เชื่อมโยงระบบจำพาธเกมลงใน `%APPDATA%/g-launcher/game-selection.json` โดยใช้ `MoveFileEx` แบบ Atomic Write
|
|
|
|
### Milestone 3: CI/CD & Build Workflow
|
|
* ดัดแปลงสคริปต์คำนวณเวอร์ชัน `scripts/launcher-release.mjs` พร้อมชุดทดสอบอัตโนมัติ `launcher-release.test.mjs`
|
|
* สร้าง GitHub Actions Workflow: `.github/workflows/build-launcher.yml`
|
|
* แก้ไขข้อผิดพลาด Mermaid ELK parser บน Gitea (`Referenced shape does not exist: OS`) โดยปรับรูปแบบลูกศรในไดอะแกรมสถาปัตยกรรม
|
|
|
|
### Milestone 4: Zero-Dependency Local Auto-Updater
|
|
* พัฒนาสคริปต์ [`update-and-build.bat`](../update-and-build.bat) และ [`scripts/bootstrap.ps1`](../scripts/bootstrap.ps1)
|
|
* ระบบตรวจจับและดาวน์โหลด Portable MinGit, Go 1.24, Node.js v22 และ Wails v3 CLI อัตโนมัติลงใน `tools/`
|
|
* แก้ไขปัญหา Text Encoding ของ Windows PowerShell 5.1 ด้วยการบันทึกไฟล์เป็น UTF-8 with BOM
|
|
|
|
### Milestone 5: Isolated Temp Build & Rollback (Current Milestone)
|
|
* ปรับปรุงสถาปัตยกรรมการอัปเดตใหม่ตามกฎ:
|
|
> **"โหลด Temp มา -> Build ใหม่ใน Temp -> นำมาแทนของเก่า -> ลบ Temp ทิ้ง 100%"**
|
|
* ซอร์สโค้ดถูก clone ลง `temp/build_workspace` (หรือ `os.MkdirTemp`)
|
|
* คอมไพล์ Frontend และ Go Backend ภายในโฟลเดอร์ Temp
|
|
* สลับไฟล์ไบนารี `bin/G-Launcher.exe` อย่างปลอดภัยด้วยการสำรอง `.old` และมีระบบ Rollback อัตโนมัติหากเกิดข้อผิดพลาด
|
|
* ลบโฟลเดอร์ Temp ทิ้ง 100% ผ่านบล็อก `finally` / `defer`
|
|
* เพิ่มเมธอด `BuildAndUpdateFromSource` ใน Go `GitService`
|
|
* สร้างโฟลเดอร์เอกสารความจำถาวร [`Doc/`](./README.md) เพื่อป้องกัน AI ลืมบริบทหลัง Compact
|