diff --git a/README.md b/README.md index 7a93a9db..4242b16a 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ curl -X POST http://your-pi-ip:5000/api/v3/plugins/install \ |--------|-------------|---------| | [Simple Clock](./plugins/clock-simple/) | Time and date display | clock-simple on an LED panel | | [7-Segment Clock](./plugins/7-segment-clock/) | Retro-style 7-segment clock with customizable colors | 7-segment-clock on an LED panel | -| [Google Calendar](./plugins/calendar/) | Upcoming events from Google Calendar | | +| [Google Calendar](./plugins/calendar/) | Upcoming events from Google Calendar | calendar on an LED panel | | [Geochron World Clock](./plugins/geochron/) | World map with the real-time day/night terminator | geochron on an LED panel | ### Weather (2) diff --git a/docs/assets/calendar/event-kinds.png b/docs/assets/calendar/event-kinds.png new file mode 100644 index 00000000..4d7ee9bb Binary files /dev/null and b/docs/assets/calendar/event-kinds.png differ diff --git a/docs/assets/calendar/hero.png b/docs/assets/calendar/hero.png new file mode 100644 index 00000000..4f4fe3a3 Binary files /dev/null and b/docs/assets/calendar/hero.png differ diff --git a/docs/assets/calendar/panel-sizes.png b/docs/assets/calendar/panel-sizes.png new file mode 100644 index 00000000..153a5f1f Binary files /dev/null and b/docs/assets/calendar/panel-sizes.png differ diff --git a/docs/assets/calendar/shots.json b/docs/assets/calendar/shots.json new file mode 100644 index 00000000..6f64fb8d --- /dev/null +++ b/docs/assets/calendar/shots.json @@ -0,0 +1,54 @@ +{ + "plugin": "calendar", + "defaults": { + "width": 128, + "height": 32, + "scale": 6, + "freeze_time": "2026-09-02T14:05:00+00:00", + "skip_update": true, + "config": { + "enabled": true + }, + "attrs": { + "events": [ + {"summary": "Team Standup", + "start": {"dateTime": "2026-09-03T09:30:00+00:00"}} + ] + } + }, + "shots": [ + { "name": "hero" }, + { "name": "timed", "standalone": false }, + { "name": "all-day", "standalone": false, + "attrs": { "events": [{"summary": "Ada's Birthday", "start": {"date": "2026-09-05"}}] } }, + { "name": "long-title", "standalone": false, + "attrs": { "events": [{"summary": "Quarterly Planning Review With Engineering", "start": {"dateTime": "2026-09-04T13:00:00+00:00"}}] } }, + { "name": "no-events", "standalone": false, "attrs": { "events": [] } }, + { "name": "size-64x32", "width": 64, "standalone": false }, + { "name": "size-128x32", "width": 128, "standalone": false }, + { "name": "size-128x64", "width": 128, "height": 64, "standalone": false }, + { "name": "size-256x32", "width": 256, "standalone": false } + ], + "composites": [ + { + "name": "event-kinds", + "columns": 1, + "cells": [ + {"shot": "timed", "label": "Timed event", "sublabel": "date, then start time"}, + {"shot": "all-day", "label": "All-day event", "sublabel": "date, then \"All Day\""}, + {"shot": "long-title", "label": "Long title", "sublabel": "wraps, then ellipsizes"}, + {"shot": "no-events", "label": "Nothing upcoming"} + ] + }, + { + "name": "panel-sizes", + "columns": 2, + "cells": [ + {"shot": "size-64x32", "label": "64 x 32"}, + {"shot": "size-128x32", "label": "128 x 32"}, + {"shot": "size-128x64", "label": "128 x 64"}, + {"shot": "size-256x32", "label": "256 x 32"} + ] + } + ] +} diff --git a/plugins.json b/plugins.json index 846f1cb6..061f7d4c 100644 --- a/plugins.json +++ b/plugins.json @@ -121,10 +121,10 @@ "plugin_path": "plugins/calendar", "stars": 0, "downloads": 0, - "last_updated": "2026-08-13", + "last_updated": "2026-09-02", "verified": true, "screenshot": "", - "latest_version": "1.2.3" + "latest_version": "1.2.4" }, { "id": "christmas-countdown", diff --git a/plugins/calendar/README.md b/plugins/calendar/README.md index 6ceb255e..17a80f77 100644 --- a/plugins/calendar/README.md +++ b/plugins/calendar/README.md @@ -15,6 +15,12 @@ Display upcoming events from Google Calendar with automatic updates, event rotation, and timezone support. +![An upcoming event on a 128x32 panel: the date and start time on one line, the +event title below it](../../docs/assets/calendar/hero.png) + +*Every image in this README is real plugin output, rendered at the true panel +size and scaled up so the pixels stay pixels.* + ## Features - **Google Calendar Integration**: OAuth2 authentication @@ -104,6 +110,7 @@ widget and first-time authentication) and rarely need editing by hand. |-----|---------|-------| | `enabled` | `false` | Enable or disable the plugin | | `credentials_file` | `"credentials.json"` | Google OAuth credentials file (uploaded via the config UI) | +| `google_auth` | `""` | Not a setting you type into. It is the **Step 2: Connect Your Google Account** button in the web UI (`x-widget: google-oauth`), which runs the consent flow described above. Google redirects to a page that fails to load — that is expected; copy the address back into the field to finish. | | `token_file` | `"token.pickle"` | Where the OAuth token is stored after first-time auth (auto-created) | | `calendars` | `["primary"]` | Calendar IDs to display — use the calendar picker after authenticating, or `"primary"` for your default | | `max_events` | `3` | Maximum upcoming events to show (1–10) | @@ -111,34 +118,29 @@ widget and first-time authentication) and rarely need editing by hand. | `event_rotation_interval` | `10` | Seconds between rotating displayed events (min 5) | | `display_duration` | `30` | Total seconds on screen before moving to the next plugin (min 5) | | `update_interval` | `3600` | Seconds between refreshes from Google (60–86400) | -| `customization.datetime_text.font` / `.font_size` | `PressStart2P-Regular.ttf` / `8` | Font family + size (4–16px) for the event date/time line | -| `customization.title_text.font` / `.font_size` | `PressStart2P-Regular.ttf` / `8` | Font family + size (4–16px) for the event title | +| `customization.datetime_text.font` | `PressStart2P-Regular.ttf` | Font for the date/time line | +| `customization.datetime_text.font_size` | `8` | Size of the date/time line in pixels (4–16) | +| `customization.title_text.font` | `PressStart2P-Regular.ttf` | Font for the event title | +| `customization.title_text.font_size` | `8` | Size of the event title in pixels (4–16) | ## Display Format -### Timed Event -``` - 03/15 2:30pm - - Team Meeting - -``` +The date sits on the top line with the start time beside it, and the event title +fills the space below, wrapped across as many lines as fit. -### All-Day Event -``` - 03/20 All Day - - Birthday Party - -``` +![Timed, all-day, long-title and empty screens](../../docs/assets/calendar/event-kinds.png) -### Long Title (Wrapped) -``` - 03/22 10:00am - - Project Review - and Planning -``` +- A **timed** event shows its start time next to the date. +- An **all-day** event shows `All Day` in place of the time. Set + `show_all_day_events` to `false` to leave these out. +- A **long title** wraps, and the last visible line is ellipsized rather than + simply stopping, so a title that did not fit is recognisable as truncated. +- When nothing upcoming is left, the panel shows `No Events`. + +The layout is the same on every panel; the taller the panel, the more lines of +title fit before ellipsis. + +![The same event on four panel sizes](../../docs/assets/calendar/panel-sizes.png) ## Multiple Calendars diff --git a/plugins/calendar/manifest.json b/plugins/calendar/manifest.json index 30ab02a5..986893d8 100644 --- a/plugins/calendar/manifest.json +++ b/plugins/calendar/manifest.json @@ -1,7 +1,7 @@ { "id": "calendar", "name": "Google Calendar", - "version": "1.2.3", + "version": "1.2.4", "author": "ChuckBuilds", "description": "Display upcoming events from Google Calendar with date, time, and event details. Shows next 1-3 events with automatic rotation and timezone support.", "category": "productivity", @@ -35,6 +35,12 @@ } ], "versions": [ + { + "version": "1.2.4", + "released": "2026-09-02", + "notes": "Documentation. The README's three ASCII mock-ups of the display are replaced with real rendered screenshots of the same four screens (timed, all-day, a long title being ellipsized, and the empty state) plus a panel-size sheet. Documents google_auth, which is the web UI's Connect Your Google Account button rather than a value you type, and splits the two combined font rows so each customization key appears on its own. All 13 schema settings are now documented by key.", + "ledmatrix_min_version": "3.3.0" + }, { "version": "1.2.3", "released": "2026-08-31", @@ -106,7 +112,7 @@ "ledmatrix_min_version": "2.0.0" } ], - "last_updated": "2026-08-13", + "last_updated": "2026-09-02", "stars": 0, "downloads": 0, "verified": true,