import QtQuick 2.7 import QtQuick.Layouts 1.3 import QtMultimedia 5.0 import Lomiri.Components 1.3 import Lomiri.Components.Popups 1.3 import io.thp.pyotherside 1.4 MainView { id: root applicationName: "fortunecookie.darklithium" width: units.gu(45) height: units.gu(75) theme.name: "Lomiri.Components.Themes.SuruDark" property bool fortuneOpened: false property string currentFortune: "" property bool musicPlaying: false property bool musicButtonVisible: false Python { id: py Component.onCompleted: { addImportPath(Qt.resolvedUrl("../src")); importModule("fortunecookie", function() { console.log("Python-Modul fortunecookie geladen"); }); } } MediaPlayer { id: mediaPlayer source: Qt.resolvedUrl("../assets/chinese_music.mp3") loops: MediaPlayer.Infinite volume: 0.5 } MediaPlayer { id: crackMediaPlayer source: Qt.resolvedUrl("../assets/cookie_crack.mp3") volume: 1.0 } Page { id: mainPage anchors.fill: parent header: PageHeader { title: "Fortune Cookie" } Timer { id: initTimer interval: 1000 // Warte 1 Sekunde auf Python-Ladung running: true repeat: false onTriggered: { try { currentFortuneLabel.text = py.call_sync("fortunecookie.get_initial_fortune", []); cookieImage.source = Qt.resolvedUrl("../assets/cookie_closed2.png"); musicPlaying = py.call_sync("fortunecookie.get_music_enabled", []); console.log("DEBUG QML: musicPlaying loaded from Python: " + musicPlaying); if (musicPlaying) { mediaPlayer.play(); } musicButtonVisible = true; } catch (e) { console.log("ERROR QML: Failed to initialize: " + e); } } } Image { id: cookieImage anchors.centerIn: parent width: fortuneOpened ? units.gu(36) : units.gu(32) height: fortuneOpened ? units.gu(28) : units.gu(24) source: fortuneOpened ? Qt.resolvedUrl("../assets/cookie_open2.png") : Qt.resolvedUrl("../assets/cookie_closed2.png") fillMode: Image.PreserveAspectFit MouseArea { anchors.fill: parent property real startY: 0 onPressed: startY = mouseY onReleased: { if (mouseY < startY - units.gu(2)) { py.call("fortunecookie.open_fortune", [], function() { crackMediaPlayer.play(); fortuneOpened = true; currentFortune = py.call_sync("fortunecookie.get_current_fortune", []); currentFortuneLabel.text = currentFortune; cookieImage.source = Qt.resolvedUrl("../assets/cookie_open2.png"); }); } } } MouseArea { anchors.fill: parent hoverEnabled: true onClicked: { if (!fortuneOpened) { py.call("fortunecookie.open_fortune", [], function() { crackMediaPlayer.play(); fortuneOpened = true; currentFortune = py.call_sync("fortunecookie.get_current_fortune", []); currentFortuneLabel.text = currentFortune; currentFortuneLabel.visible = true; cookieImage.source = Qt.resolvedUrl("../assets/cookie_open2.png"); }); } else { fortuneOpened = false; currentFortuneLabel.text = ""; currentFortuneLabel.visible = false; cookieImage.source = Qt.resolvedUrl("../assets/cookie_closed2.png"); } } } } Label { id: currentFortuneLabel anchors { top: cookieImage.bottom topMargin: units.gu(2) left: parent.left right: parent.right leftMargin: units.gu(2) rightMargin: units.gu(2) } text: "" fontSize: "large" horizontalAlignment: Text.AlignHCenter visible: fortuneOpened wrapMode: Text.WordWrap MouseArea { anchors.fill: parent onClicked: { py.call("fortunecookie.get_new_fortune", [], function() { fortuneOpened = false; currentFortune = py.call_sync("fortunecookie.get_current_fortune", []); currentFortuneLabel.text = currentFortune; cookieImage.source = Qt.resolvedUrl("../assets/cookie_closed2.png"); }); } } } Item { id: musicButtonContainer anchors { right: parent.right bottom: parent.bottom margins: units.gu(2) } width: units.gu(10) height: units.gu(10) visible: musicButtonVisible Label { id: musicButton text: musicPlaying ? "\uD83D\uDD0A" : "\uD83D\uDD07" fontSize: "x-large" anchors.centerIn: parent MouseArea { anchors.fill: parent hoverEnabled: true onClicked: { console.log("DEBUG QML: Music button clicked, current musicPlaying: " + musicPlaying); if (musicPlaying) { mediaPlayer.stop(); } else { mediaPlayer.play(); } musicPlaying = !musicPlaying; console.log("DEBUG QML: Setting music enabled to: " + musicPlaying); py.call("fortunecookie.set_music_enabled", [musicPlaying]); } } } } } }