# 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*