pentagon pizza index menubar
|
valentin sentis
da6f2f04a9
fix: corrections audit pré-commit
- setActivationPolicy .regular → .accessory (supprime icône Dock) - Info.plist: ajout LSUIElement=true (menubar-only) - Info.plist: ajout CFBundleVersion manquant - Suppression paramètre index inutilisé dans updateMenuBar - Gestion erreur réseau: affiche 🍕⚠️ en cas d'échec Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| PizzINT | fix: corrections audit pré-commit | |
| PizzINT.xcodeproj | initialization repo | |
| project.yml | initialization repo | |
| README.md | initialization repo | |
PizzINT — Pentagon Pizza Index · App menubar macOS
App menubar macOS en Swift natif qui affiche le Pentagon Pizza Index en temps réel depuis pizzint.watch.
Fonctionnalités
- 🍕 Icône menubar avec niveau DEFCON en temps réel (
🍕 D3) - 📊 Popover détaillé : index global animé, liste des 6 pizzerias avec fréquentation relative vs baseline
- 🚨 Notifications macOS déclenchées automatiquement à DEFCON 4 et 5 (son critique à DEFCON 5)
- ♻️ Polling automatique toutes les 60 secondes
- 🔄 Rafraîchissement manuel via le bouton dans le popover
Endpoint API
GET https://www.pizzint.watch/api/dashboard-data?_t={timestamp_ms}
Le _t= est un cache-buster — timestamp Unix en millisecondes, généré automatiquement par l'app à chaque requête.
⚠️ Adapter le modèle JSON
Je n'ai pas pu inspecter la réponse JSON directement. Au premier lancement, si le parsing échoue, la console Xcode affichera le JSON brut :
[PizzaService] ⚠️ JSON brut — adapter Models.swift :
{ ... }
Ouvre Models.swift et ajuste les CodingKeys pour qu'elles correspondent aux clés exactes retournées par l'API. Les noms supposés actuellement :
| Clé JSON supposée | Champ Swift |
|---|---|
defcon_level |
defconLevel |
overall_index |
overallIndex |
last_updated |
lastUpdated |
alert_message |
alertMessage |
pizzerias[].id |
id |
pizzerias[].name |
name |
pizzerias[].distance |
distance |
current_busyness |
currentBusyness |
normal_busyness |
normalBusyness |
percentage_above_normal |
percentageAboveNormal |
is_open |
isOpen |
Créer le projet Xcode
- Xcode → File → New → Project → macOS → App
- Paramètres :
- Product Name :
PizzINT - Bundle Identifier :
com.pizzint.menubar - Interface : SwiftUI · Language : Swift
- Product Name :
- Supprime les fichiers générés par défaut (
ContentView.swift,PizzINTApp.swift) - Glisse les 6 fichiers
.swiftdans le navigateur Xcode - Remplace le
Info.plistgénéré par celui fourni ici
Build Settings :
- Deployment Target : macOS 13.0
- Signing : ton Apple ID personnel (développement local)
Structure des fichiers
PizzINT/
├── PizzaIndexApp.swift — Point d'entrée @main (pas de fenêtre principale)
├── AppDelegate.swift — NSStatusItem + popover + observe le service
├── PizzaService.swift — Réseau, polling, parsing JSON ← endpoint configuré ici
├── Models.swift — PizzaDefcon (enum 1–5), Pizzeria, PizzaIndexResponse ← adapter CodingKeys ici
├── PizzaIndexView.swift — Interface SwiftUI du popover
├── NotificationManager.swift — Alertes DEFCON 4/5
└── Info.plist — LSUIElement = true (pas de Dock), permissions réseau
Lancement au démarrage (optionnel)
Préférences Système → Général → Éléments de connexion → Ajouter PizzINT.app
Données à titre informatif et expérimental. Cf. pizzint.watch/terms.