Repository navigation
feat(mac): widgets for next lecture, due cards and exams - #59
Merged
Merged
Conversation
WidgetSnapshot (next lectures, due cards per module, upcoming exams) is the contract between the app and the widget extension; the app writes it as JSON into the App Group container, widgets only read it. WidgetSnapshotStore writes only changes, StudyAppLink encodes deep links from widgets into the app, and WidgetSnapshotBuilder turns the app's state into a snapshot. The new Shared folder belongs to the app target (and later the widget target). Refs #49 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TmmqmKmX8VDSfoPbzTS1ew
A WidgetKit extension with three widgets – „Nächste Vorlesung“ (small and medium, with due cards), „Fällige Karteikarten“ and „Klausur-Countdown“ – reads the snapshot from the App Group container. Its timeline adds an entry at every lecture start and end, so the lecture widget turns from „Als Nächstes“ to „Läuft“ on its own; clicks open the matching place through studyapp:// links. The project gets the StudyAppWidgets target (Shared + Widgets folders), embeds it into the app, and both share the App Group; the app registers the studyapp URL scheme. The QA build and the release script check that the extension is in the bundle. Refs #49 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TmmqmKmX8VDSfoPbzTS1ew
The app writes the widget snapshot on launch and with the five-minute loop; widgets reload only when it changed. studyapp:// links from the widgets open Today or a module section (slides resume reading). Refs #49 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TmmqmKmX8VDSfoPbzTS1ew
Refs #49 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TmmqmKmX8VDSfoPbzTS1ew
# Conflicts: # App/StudyAppApp.swift # docs/FEATURES.md
# Conflicts: # Config/Info.plist # docs/FEATURES.md
Owner
Author
|
CI: derselbe „test runner hung before establishing connection“ wie seit ca. 13 Uhr überall, nicht von den Widgets verursacht. Gegenprobe auf einem alten grünen Stand läuft. Main ist inzwischen hineingemerged. Generated by Claude Code |
# Conflicts: # App/StudyAppApp.swift # docs/FEATURES.md
# Conflicts: # App/StudyAppApp.swift # Presentation/Navigation/AppNavigation.swift # docs/FEATURES.md
Owner
Author
|
Ursache des CI-Hängers gefunden: Die Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #49
What changes and why?
Widgets for the desktop and Notification Center. One commit per change:
Shared/WidgetSnapshot.swift– the snapshot (next lectures, due cards per module, upcoming exams),WidgetSnapshotStore(App Group container, writes only changes) andStudyAppLink(studyapp://deep links);WidgetSnapshotBuilderturns the app state into a snapshot.Shared/is a new folder in the app target.StudyAppWidgets(Shared + Widgets folders) embedded via „Embed Foundation Extensions“; widgets „Nächste Vorlesung“ (small/medium), „Fällige Karteikarten“, „Klausur-Countdown“. The timeline adds entries at lecture starts/ends, so the widget switches to „Läuft“ without the app. App and extension share the App GroupVF66Y42L4U.germany.oldenburg.mueller.tristan.StudyApp; the app registers thestudyappURL scheme.qa.sh buildandrelease.shcheck that the extension is in the bundle.onOpenURL→AppNavigation.open(_:).Tests
WidgetSnapshotTests(running/next lecture, change dates, store writes only changes, link round trip),WidgetSnapshotBuilderTests,WidgetLinkNavigationTestsShared/andWidgets/)Checklist
Generated by Claude Code