Skip to content

Repository files navigation

LogMyTimeTray

Windows-Tray-App zur schnellen Zeiterfassung mit LogMyTime.

Ein Klick auf das Tray-Icon → Projekt wählen → Timer läuft. Kein Hauptfenster, kein Browser-Tab, kein Kontextwechsel — die Zeiterfassung wohnt im System-Tray.

.NET 8 Platform License

Features

  • Timer starten & wechseln mit 2 Klicks — Projekt aus dem Tray-Menü wählen, Tätigkeit dazu, fertig. Ein laufender Timer wird beim Wechsel serverseitig automatisch beendet und als Zeiteintrag gespeichert.
  • Recent-Projekte zuerst — das Menü zeigt die zuletzt genutzten Projekte oben (Anzahl konfigurierbar, Standard 10), der Rest liegt alphabetisch unter „Weitere Projekte".
  • Lückenlose Zeiterfassung — beim Stoppen schließt die Startzeit automatisch an das Ende des vorherigen Eintrags desselben Tages an. Keine Minuten-Lücken durch Rundung.
  • ⏸ Pause — unterbricht die Anschluss-Logik bewusst (Mittagspause etc.), ohne einen Server-Eintrag zu erzeugen.
  • Kaufmännische Viertelstunden-Rundung — Start-/Endzeiten werden beim Stoppen auf die nächste Viertelstunde gerundet.
  • Zeiteinträge verwalten — anzeigen (mit Tagesgruppierung und Summen), bearbeiten, löschen und manuell anlegen, direkt aus der App.
  • Pflicht-Zusatzfelder — konfigurierte Custom-Felder (z. B. Auswahllisten) werden beim Start abgefragt und korrekt an die API weitergereicht.
  • Kommentar beim Stoppen — optionaler Dialog mit Schnellauswahl der letzten 10 Kommentare.
  • Mini-Ansicht — kleines, randloses Fenster, das immer oben bleibt: laufendes Projekt, Laufzeit und Tagessumme im Blick, mit Direkt-Buttons für Wechseln, Pause und Stopp. Halbtransparent (Deckkraft einstellbar), beim Überfahren mit der Maus voll sichtbar. Wahlweise frei verschiebbar oder fest in einer Bildschirmecke angedockt (einstellbar); je größer gezogen, desto mehr zeigt sie (bis hin zu allen Einträgen des Tages).
  • Leiste — eine Leiste am Bildschirmrand (oben, unten, links oder rechts), die echten Platz reserviert: andere Fenster maximieren nur bis dorthin, nichts verdeckt sie. Zeigt Projekt, Tätigkeit, Laufzeit und die Direkt-Buttons für Wechseln, Pause und Stopp. Parallel zur Mini-Ansicht nutzbar.
  • Toast-Benachrichtigungen — für Start, Wechsel, Stopp und Fehler; global abschaltbar. Beim ersten erfolgreichen Start erscheint ein Info-Hinweis zur Taskleisten-Integration (einmalig).
  • Dark Mode — folgt automatisch der Windows-System-Einstellung (DevExpress WXI-Skin).
  • Autostart mit Windows — per Checkbox in den Einstellungen.
  • Sparsamer API-Umgang — hartes Budget von 500 Requests/24 h wird respektiert: kein Polling, Laufzeit wird lokal berechnet, Delta-Sync via GetChangesDigest, lokaler Cache für Projekte/Tätigkeiten.
  • Sicherer API-Key — DPAPI-verschlüsselt (Windows-Benutzerkonto), nie im Klartext gespeichert oder geloggt.

Voraussetzungen

  • Windows 10/11 (x64)
  • Ein LogMyTime-Konto mit API-Key (zu erzeugen in LogMyTime unter Verwaltung → Eigenes Profil)

Die veröffentlichte EXE ist self-contained — keine .NET-Installation nötig.

Installation

  1. Aktuelles Setup (LogMyTimeTray-Setup-x.y.z.exe) von der Releases-Seite herunterladen und ausführen.
  2. App starten — beim Erststart öffnet sich der Einstellungsdialog.
  3. API-Key eintragen, „Verbindung testen", speichern. Fertig.

Alternativ liegt jedem Release auch die portable Einzeldatei LogMyTimeTray.exe bei.

Bedienung

Aktion Weg
Timer starten Links- oder Rechtsklick aufs Tray-Icon → Projekt → Tätigkeit
Timer wechseln Einfach das nächste Projekt anklicken — der alte Timer wird automatisch beendet
Timer stoppen Menüpunkt „Stopp" (fragt optional nach einem Kommentar)
Pause machen Menüpunkt „⏸ Pause" — stoppt ggf. den Timer und verhindert den lückenlosen Anschluss des nächsten Eintrags
Laufzeit sehen Mauszeiger über das Tray-Icon (Tooltip mit Projekt und Laufzeit)
Mini-Ansicht ein-/ausblenden Menüpunkt „Mini-Ansicht"
Leiste ein-/ausblenden Menüpunkt „Leiste anzeigen/ausblenden" — reserviert Platz am Bildschirmrand
Einträge verwalten Menüpunkt „Zeiteinträge…"
Projekte aktualisieren Menüpunkt „Aktualisieren" (lädt Projekte/Tätigkeiten neu, budgetschonend per Delta-Sync)

Das Icon signalisiert den Zustand: grau = kein Timer, farbig = Timer läuft, rot = Fehler.

Aus dem Quellcode bauen

Hinweis: Das Projekt verwendet DevExpress 25.1 WinForms-Controls. Zum Bauen wird eine gültige DevExpress-Lizenz und der Zugriff auf den DevExpress-NuGet-Feed benötigt (nuget.config erwartet eine entsprechend konfigurierte Quelle).

# Bauen
dotnet build LogMyTimeTray.sln

# Tests ausführen
dotnet test

# Self-contained Single-File-EXE erzeugen
dotnet publish src/LogMyTimeTray -c Release -r win-x64 --self-contained -p:PublishSingleFile=true
# oder bequemer:
./publish.ps1

Der Installer wird mit Inno Setup aus installer.iss gebaut.

Architektur (Kurzfassung)

src/LogMyTimeTray/
├── Program.cs                 # Single-Instance-Mutex, ApplicationContext, Skin
├── TrayApplicationContext.cs  # Tray-Icon, Menüaufbau, Icon-Zustand
├── Api/                       # LogMyTime-API-Client (OData V2, MERGE-Updates)
├── Core/                      # TimerService, CacheService, Settings, Rundung,
│                              # Request-Zähler, Toasts, Logging, OverlayState
└── UI/                        # Einstellungen, Kommentar-/Custom-Fields-Dialoge,
                               # Zeiteinträge-Grid, Icon-Factory, OverlayForm
tests/LogMyTimeTray.Tests/     # xUnit — API-Client gegen gemockten HttpMessageHandler

Zentrale Designentscheidungen:

  • Kein Polling. Der einzige Timer in der App aktualisiert sekündlich den Tooltip — rein lokal. Alle API-Requests laufen sequenziell durch eine Queue und werden über einen rollierenden 24-h-Zähler protokolliert.
  • Updates nur per HTTP-MERGE, nie PUT — PUT würde nicht übergebene Felder serverseitig auf Defaults zurücksetzen.
  • 404 bei CurrentStopWatch ist kein Fehler, sondern der Zustand „kein Timer läuft".
  • Die vollständige Spezifikation steht in DESIGN.md.

Konfigurationsdateien

Datei Ort Inhalt
settings.json %APPDATA%\LogMyTimeTray Einstellungen, API-Key (DPAPI-verschlüsselt)
cache.json %APPDATA%\LogMyTimeTray Projekte, Tätigkeiten, letzte Einträge, Sync-Zeitstempel
requests.json %APPDATA%\LogMyTimeTray Rollierender 24-h-Request-Zähler
debug.log neben der EXE Datei-Log, rolliert bei 1 MB

Lizenz

Privates Projekt. Die verwendeten DevExpress-Komponenten unterliegen der DevExpress-Lizenz — zum Bauen ist eine eigene Lizenz erforderlich.

Dieses Projekt steht in keiner Verbindung zur LogMyTime GmbH; LogMyTime ist eine Marke der jeweiligen Rechteinhaber.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages