feat: v1.0.8 mit Lautstärke-Fix und neuen Listen

This commit is contained in:
darklithium
2026-06-04 21:39:13 +02:00
parent 4c5268a528
commit bdbbf43b90
10 changed files with 680 additions and 118 deletions
+230
View File
@@ -0,0 +1,230 @@
# Lektionen & Erkenntnisse - 03.06.2026
## 📌 Projekt: FortuneCookie App (Ubuntu Touch 24.04 / Lomiri)
---
## 🎯 Heute erreichte Meilensteine
| Aufgabe | Status | Lösung |
|---------|--------|--------|
| Aktive Liste unten links anzeigen | ✅ | `Label` mit `currentFortuneListDescription` |
| Nur Beschreibung (ohne Name/Anzahl) | ✅ | Eigene Property für reine Beschreibung |
| Listen-Beschreibung auf Icon-Höhe | ✅ | `verticalCenter: musicButton.verticalCenter` |
| Audio-Button verkleinern | ✅ | 10×10 gu → 8×8 gu, Font: xxx-large → xx-large |
| Lautstärke-Regelung (SW) | ❌ | **Funktioniert nicht in Ubuntu Touch** |
| Lautstärke-Anpassung (HW) | ✅ | `chinese_music.mp3` per FFmpeg auf 30% reduziert |
| Alle Listen ≥100 Sprüche | ✅ | farmer wisdom, UNfortune, sandman, famous quotes ergänzt |
| Neue Listen hinzufügen | ✅ | sandman (Bettgehzeit!), famous quotes (Berühmte Zitate) |
| Autoren zu Zitaten | ✅ | Format: "Zitat - Autor" |
---
## 🔧 Technische Erkenntnisse
### 1. **Lomiri/Ubuntu Touch - Medienwiedergabe**
| Problem | Erkenntnis | Lösung |
|---------|-----------|--------|
| `MediaPlayer.volume` wirkt nicht | QtMultimedia Volume-Property wird in Ubuntu Touch ignoriert | **Dateiebene anpassen** mit FFmpeg |
| PyOtherSide sync-Aufrufe blockieren UI | Deadlock-Gefahr | **Asynchrone** `py.call()` verwenden |
| Lautstärke-Slider ohne Effekt | Plattform-Limitierung | Slider entfernt, feste Volumes |
**FFmpeg-Befehl zum Lautstärke reduzieren:**
```bash
ffmpeg -i input.mp3 -af "volume=0.3" -y output.mp3
```
### 2. **Qt/QML Best Practices**
#### ✅ Funktioniert:
```qml
// Property-Binding für automatische Synchronisation
MediaPlayer {
volume: root.musicVolume // Wird automatisch aktualisiert
}
```
#### ❌ Problem: Binding wird gebrochen durch:
```qml
// Direkte Zuweisung zerstört das Binding!
mediaPlayer.volume = value; // ❌
```
#### ✅ Richtig:
```qml
// Nur die Property setzen, Binding überträgt automatisch
root.musicVolume = value; // ✅
```
#### Anker-Positionierung:
```qml
// Vertikal zentriert mit anderem Element
Label {
anchors {
left: parent.left
verticalCenter: musicButton.verticalCenter // ✅
leftMargin: units.gu(2)
}
}
```
---
## 🌿 Branches-System
### Aktuelle Struktur:
```
main → Stabil (Releases)
└── daily → Entwicklung (aktuell)
```
### Regeln:
1. **Daily-Branch** für alle Entwicklungen nutzen
2. **Main-Branch** nur für getestete Releases
3. **Vor Merge:**
- App testen auf Gerät
- Alle Funktionen prüfen
- Keine debug-Logs im Production-Code
4. **Versionierung:**
- `manifest.json.in`: App-Version (1.0.x)
- `fortunecookie.py`: Modul-Version (1.1.x)
### Heute genutzt:
```bash
# Im daily-branch arbeiten
git checkout daily
# Ändern, bauen, installieren
clickable build && clickable install
```
---
## 📚 Referenzquellen & Zeitersparnis
### 🔍 **Referenz-Apps studieren!**
- **metime** (Lomiri) - Gute Beispiele für:
- UI/UX-Patterns
- MediaPlayer-Integration
- Einstellungen-Handling
- Python-QML-Kommunikation
### ⏱️ **Fehlerbehebung beschleunigen:**
1. **Zuerst Referenz-Apps prüfen** (metime, andere Lomiri-Apps)
2. **Lomiri-Dokumentation:** https://docs.ubuntu-touch.io/
3. **QtMultimedia Limitations:** Ubuntu Touch hat Einschränkungen bei Volume-Control
4. **PyOtherSide:** Immer asynchron arbeiten
### 📖 **Wichtige Dateien im Projekt:**
```
qml/Main.qml # Haupt-UI
src/fortunecookie.py # Python-Backend
assets/fortunes/*.json # Spruchlisten
manifest.json.in # App-Metadaten
fortunecookie.apparmor # Berechtigungen
```
---
## 📁 Dateistruktur FortuneCookie
```
fortunecookie-neu/
├── testing/ # Entwicklungszweig
│ ├── qml/
│ │ └── Main.qml # Haupt-UI (Navigation, MediaPlayer, Einstellungen)
│ ├── src/
│ │ └── fortunecookie.py # Backend (Sprüche laden, Einstellungen)
│ ├── assets/
│ │ ├── fortunes/ # Spruchlisten
│ │ │ ├── fortune.json (140 Sprüche)
│ │ │ ├── farmer wisdom.json (114 Sprüche)
│ │ │ ├── UNfortune.json (100 Sprüche)
│ │ │ ├── sandman.json (100 Sprüche - Bettgehzeit!)
│ │ │ └── famous quotes.json (121 Sprüche - Berühmte Zitate)
│ │ ├── chinese_music.mp3 # Hintergrundmusik (30% Lautstärke)
│ │ └── cookie_crack.mp3 # Knack-Geräusch (100% Lautstärke)
│ └── manifest.json.in # App-Version: 1.0.8
└── build/ # Build-Output
```
---
## 🎓 Gelernte Lektionen
### 1. **Ubuntu Touch spezifisch**
- MediaPlayer.volume wird **ignoriert** → Lautstärke in Datei anpassen
- PyOtherSide: **Immer async** (`py.call()`, nicht `py.syncCall()`)
- UI-Elemente: `units.gu()` für konsistente Größen
- Icons: Emoji-Shortcodes funktionieren (z. B. `\uD83D\uDD0A` = 🎆)
### 2. **QML Best Practices**
- **Property-Bindings** nutzen statt manueller Zuweisungen
- **Anker** statt absoluter Positionen
- **Component.onCompleted** mit `Qt.callLater()` für verzögerte Initialisierung
- **Visible vs. Opacity:** `visible: false` entfernt Element komplett
### 3. **Python Backend**
- **Settings speichern:** `save_setting()` / `load_setting()`
- **JSON-Listen laden:** Automatisch aus `assets/fortunes/`
- **AVAILABLE_FORTUNE_LISTS** muss alle Listen enthalten
### 4. **Projektmanagement**
- **Referenz-Apps vor Implementierung prüfen** (spart Stunden!)
- **Branches diszipliniert nutzen** (daily für Entwicklung)
- **Kleine, testbare Änderungen** statt großer Refactorings
- **Fehler dokumentieren** für zukünftige Referenz
---
## 🚀 Empfehlungen für zukünftige Sessions
### ✅ DO:
- [ ] Vor Implementierung: Referenz-Apps (metime) prüfen
- [ ] QtMultimedia-Limitations in Ubuntu Touch beachten
- [ ] Immer im **daily-branch** arbeiten
- [ ] Änderungen in kleinen Schritten testen
- [ ] FFmpeg für Audio-Bearbeitung nutzen
- [ ] Property-Bindings statt direkter Zuweisungen
### ❌ DON'T:
- [ ] `MediaPlayer.volume` für Lautstärke-Regelung erwarten
- [ ] Sync PyOtherSide-Aufrufe in Timern
- [ ] Direkte MediaPlayer-Property-Zuweisungen (bricht Bindings)
- [ ] Main-Branch für Entwicklung nutzen
- [ ] Ohne Test auf Gerät deployen
---
## 📊 Versionen & Änderungen
| Datum | Version (App) | Version (Modul) | Änderungen |
|-------|---------------|------------------|-----------|
| 03.06.2026 | 1.0.8 | 1.1.1 | Listen-Beschreibung, Lautstärke-Fix, neue Listen |
### Detailed Changelog:
```
1.0.8 (03.06.2026):
- FEAT: sandman-List (100 Sprüche, "Bettgehzeit!")
- FEAT: famous quotes-List (121 Zitate mit Autoren)
- FEAT: Alle Listen auf ≥100 Sprüche ergänzt
- FIX: Musik-Lautstärke via FFmpeg auf 30% reduziert
- FIX: Listen-Beschreibung vertikal zentriert mit Audio-Button
- FIX: Audio-Button verkleinert (8×8 gu)
- FIX: Lautstärke-Slider entfernt (funktioniert nicht in UT)
- REFACTOR: Property-Bindings für MediaPlayer.volume
```
---
## 🔗 Nützliche Links
- [Lomiri Documentation](https://docs.ubuntu-touch.io/)
- [QtMultimedia Documentation](https://doc.qt.io/qt-5/qtmultimedia-index.html)
- [PyOtherSide GitHub](https://github.com/thp/pyotherside)
- [Ubuntu Touch Forum](https://forums.ubports.com/)
---
*Dokument erstellt: 03.06.2026 | Letzte Aktualisierung: 03.06.2026*