Skip to content

Releases: jordanlambrecht/calendarr

v1.5.1

14 Apr 19:18

Choose a tag to compare

v1.5.0

14 Apr 17:55

Choose a tag to compare

2025-04-15

Added

  • Custom Footers: Added support for customizable footers for both Discord and Slack announcements.
    • Controlled via ENABLE_CUSTOM_DISCORD_FOOTER and ENABLE_CUSTOM_SLACK_FOOTER environment variables.
    • Reads content from Markdown files (discord_footer.md, slack_footer.md).
    • Default footer template files are now included in the Docker image.
    • Added an entrypoint script (entrypoint.sh) to automatically copy default footer templates to a user's mounted volume (/app/custom_footers) on first run if the files don't already exist there, simplifying customization.

Changed

  • Discord custom footer is now sent as a separate message after all daily embeds.
  • Slack custom footer is now sent as a separate message using a context block (resulting in smaller text per Slack standards).

Fixed

  • Resolved configuration loading errors ("can't set attribute") during application startup.
  • Fixed TypeError when formatting days for Discord due to an incorrect argument.
  • Corrected Slack message assembly to ensure header blocks are consistently sent along with daily attachments.

Full Changelog: v1.4.2...v1.5.0

v1.4.2

14 Apr 15:35

Choose a tag to compare

v1.4.2 Pre-release
Pre-release

Full Changelog: v1.4.1...v1.4.2

[1.4.2] 2025-04-15

Fixed

  • Movie release lists were showing times and missing their 🎬 emoji. Movies should never display release times
  • Slack was not correctly formatting markdown in the header/subheader

Changed

  • Some hard-coded messages were instead moved to the constants file

v1.4.1

13 Apr 10:42

Choose a tag to compare

debugging

v1.4.0

13 Apr 05:48

Choose a tag to compare

View the full change log here

[1.4.0] 2025-04-12

Added

  • Event deduplication feature to prevent duplicate entries when using multiple Sonarr/Radarr instances
  • New configuration option DEDUPLICATE_EVENTS to control deduplication (defaults to true)
  • pyproject.toml to make the snoots happy
  • New EventItem class to provide a structured representation of events for display
  • Discord Mentions now provide instructions on how a user can be notified
  • Configuration option DISCORD_HIDE_MENTION_INSTRUCTIONS to hide the help text below Discord role mentions
  • Fallback support for MENTION_ROLE_ID environment variable for backward compatibility.
  • Markdown styling constants (DISCORD_BOLD_START, SLACK_ITALIC_END, etc.) to constants.py for easier maintenance.
  • TIMEZONE_NAME_MAP in constants to provide user-friendly names for common timezones (e.g., "Central Time" for "America/Chicago").
  • Configuration option SHOW_TIMEZONE_IN_SUBHEADER to display the configured timezone in the header message. (Addresses #6)
  • Refactored formatting functions to use new markdown styling constants.

Changed

  • Refactored platform-specific formatting to properly separate content from presentation
  • Enhanced Event model with comparison methods for reliable deduplication
  • Updated Day class to store structured event data instead of pre-formatted strings
  • Improved formatting of processed event summary log message.

Fixed

  • Discord Embed Size Limit: Implemented "smart batching" for Discord messages. Embeds are now grouped intelligently to stay under the 6000-character payload limit and 10-embed count limit, preventing failures on large weekly schedules while minimizing message spam. (Fixes #3)
  • Improved TV event formatting (Discord & Slack): Correctly applies italics to descriptive episode details (like dates, guest names, or non-standard identifiers) while leaving standard SxxExx numbers unitalicized. This fixes inconsistent bolding/italics, especially for daily shows. (Fixes #4)
  • Correctly generate Day.name when creating Day objects in FormatterService.
  • Deduplication: Issue with duplicate show entries appearing when using multiple Sonarr instances (Fixes #5)
  • Removed incorrect end_time validation from Event.__post_init__.
  • Pass source_type correctly when creating Event objects instead of modifying raw iCal event data.
  • Platform-specific formatting logic that was previously hardcoded
  • Removed duplicate "Sending to..." log messages in PlatformService.
  • Correctly pass stats dictionary keys when calling platform.format_header.

Removed

  • Removed unused --debug command-line argument. Debug mode is controlled via the DEBUG environment variable.
  • Removed unused build_content_summary_parts and join_content_parts functions from format_utils.py.

v1.3.0

07 Apr 21:49

Choose a tag to compare

Added

  • Ability to mention roles in Discord via MENTION_ROLE_ID

Full Changelog: v1.2.0...v1.3.0

v1.2.0

07 Apr 20:38

Choose a tag to compare

Added

  • Premiere count to the subheader
  • Ability to switch between 12/24 hr format via USE_24_HOUR variable
  • Ability to hide times via DISPLAY_TIME variable
  • Ability to hide date range from the header via SHOW_DATE_RANGE variable
  • Daily/Weekly mode toggle, set using SCHEDULE_TYPE
  • RUN_TIME variable for setting time of day
  • Improved logging. Now outputs to a log file. Featuring lots of Emojis because I'm basic like that
  • Debug mode
  • Healthchecks
  • Passed event handling along with a shiney new PASSED_EVENT_HANDLING env variable
  • Better docstrings

Refactored

  • Broke large segments down into smaller functions to make it more "Pythonic"
  • We now are using a small Flask app w/ exposed port to keep the container alive and using apscheduler instead of cron jobs for more reliability
  • Dataclasses and Abstraction

Fixed

  • START_WEEK_ON_MONDAY: false was not being respected
  • Issue with different timezones not displaying the correct times/dates

Full Changelog: v1.1.0...v1.2.0

v1.1.0

05 Apr 04:18

Choose a tag to compare

Full Changelog: v1.0.4...v1.1.0

v1.0.4

04 Apr 09:55

Choose a tag to compare

Full Changelog: v1.0.3...v1.0.4

v1.0.3

04 Apr 09:01

Choose a tag to compare

Full Changelog: v1.0.2...v1.0.3