feat: initiale Projektstruktur nach Framework 1.7

This commit is contained in:
darklithium
2026-06-01 17:16:02 +02:00
commit 9123c7465f
17 changed files with 1919 additions and 0 deletions
+194
View File
@@ -0,0 +1,194 @@
"""
UNIVERSELLES PYTHON-MODUL TEMPLATE für Ubuntu Touch Apps
Basierend auf metime und Referenz-App (Version 1.7)
VERWENDUNG:
1. Kopiere diese Datei nach src/<app-name>.py
2. Ersetze '<app-name>' mit deinem App-Namen
3. Füge deine Funktionen hinzu
WICHTIG (1.7):
- KEINE dbus-Importe in diesem Modul! (PyOtherSide-Kompatibilität)
- Keine Top-Level print() Statements
- Keine Top-Level Code-Ausführung
- Ein Modul reicht für 90% der Apps (modulare Trennung ist OPTIONAL)
"""
import os
import platform
# ============================================================================
# APP-METADATEN (Anpassen!)
# ============================================================================
APP_NAME = "<app-name>" # App-Name (z. B. "meine-app")
APP_VERSION = "0.1.0" # Version (Semantic Versioning)
MAINTAINER = "Christian Franz <dev@darklithium.de>" # Maintainer
# ============================================================================
# PLATTFORM-ERKENNUNG (1.7 Standard)
# ============================================================================
def get_platform():
"""
Gibt die aktuelle Plattform zurück (arm64/amd64).
Rückgabe:
str: "arm64" oder "amd64"
"""
machine = platform.machine().lower()
if "arm" in machine or "aarch" in machine:
return "arm64"
return "amd64"
# ============================================================================
# STATUS-FUNKTIONEN
# ============================================================================
def get_status_text():
"""
Gibt einen Status-Text für die UI zurück.
Rückgabe:
str: Status-Text mit App-Name, Version und Plattform
"""
plat = get_platform()
return f"{APP_NAME} v{APP_VERSION} | Plattform: {plat}"
def get_platform():
"""Alias für get_platform (für QML-Aufrufe)."""
return get_platform()
# ============================================================================
# UI-FUNKTIONEN (Beispiele - anpassen!)
# ============================================================================
def get_content_text():
"""
Gibt den aktuellen Inhaltstext zurück.
Rückgabe:
str: Text für die UI
"""
return "Button wurde geklickt! (Python → QML)"
def on_button_click():
"""
Wird aufgerufen, wenn der Button in QML geklickt wird.
Rückgabe:
bool: True bei Erfolg
"""
print("Button clicked") # Log für Debugging
return True
# ============================================================================
# DATENVERZEICHNIS (Optional - für persistente Daten)
# ============================================================================
def get_data_dir():
"""
Gibt das Datenverzeichnis der App zurück.
Rückgabe:
str: Pfad zum Datenverzeichnis
"""
app_dir = os.path.join(
os.path.expanduser("~"),
".local",
"share",
f"{APP_NAME}.darklithium"
)
os.makedirs(app_dir, exist_ok=True)
return app_dir
def get_data_file_path(filename):
"""
Gibt den Pfad zu einer Daten-Datei zurück.
Args:
filename (str): Dateiname
Rückgabe:
str: Vollständiger Pfad zur Datei
"""
return os.path.join(get_data_dir(), filename)
# ============================================================================
# BEISPIEL: DATEN LADEN/SPEICHERN
# ============================================================================
def load_data(filename="data.json"):
"""
Lädt JSON-Daten aus einer Datei.
Args:
filename (str): Dateiname
Rückgabe:
dict: Geladene Daten (oder {} bei Fehler)
"""
import json
file_path = get_data_file_path(filename)
try:
with open(file_path, "r") as f:
return json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
return {}
def save_data(data, filename="data.json"):
"""
Speichert Daten in eine JSON-Datei.
Args:
data (dict): Zu speichernde Daten
filename (str): Dateiname
Rückgabe:
bool: True bei Erfolg
"""
import json
file_path = get_data_file_path(filename)
try:
with open(file_path, "w") as f:
json.dump(data, f, indent=2)
return True
except Exception as e:
print(f"Fehler beim Speichern: {e}")
return False
# ============================================================================
# BEISPIEL: EINFACHE LOGIK
# ============================================================================
# Zähler für Button-Klicks (Beispiel)
_click_counter = 0
def increment_counter():
"""Inkrementiert den Klick-Zähler."""
global _click_counter
_click_counter += 1
return _click_counter
def get_counter():
"""Gibt den aktuellen Zählerstand zurück."""
global _click_counter
return _click_counter
# ============================================================================
# MAIN (wird nicht automatisch ausgeführt - PyOtherSide lädt nur Funktionen)
# ============================================================================
# Hinweis: In PyOtherSide wird nur importiert, was in QML aufgerufen wird.
# Top-Level Code wird NICHT ausgeführt!
# Beispiel für Initialisierung (wird erst beim ersten Aufruf ausgeführt):
_initialized = False
def init():
"""Initialisiert das Modul (wird beim ersten Aufruf aus QML ausgeführt)."""
global _initialized
if not _initialized:
print(f"{APP_NAME} Modul initialisiert")
_initialized = True
return _initialized