Releases: jordanlambrecht/calendarr
Releases · jordanlambrecht/calendarr
v1.5.1
Full Changelog: v1.5.0...v1.5.1
v1.5.0
2025-04-15
Added
- Custom Footers: Added support for customizable footers for both Discord and Slack announcements.
- Controlled via
ENABLE_CUSTOM_DISCORD_FOOTERandENABLE_CUSTOM_SLACK_FOOTERenvironment 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.
- Controlled via
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
contextblock (resulting in smaller text per Slack standards).
Fixed
- Resolved configuration loading errors ("can't set attribute") during application startup.
- Fixed
TypeErrorwhen 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
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
debugging
v1.4.0
[1.4.0] 2025-04-12
Added
- Event deduplication feature to prevent duplicate entries when using multiple Sonarr/Radarr instances
- New configuration option
DEDUPLICATE_EVENTSto control deduplication (defaults to true) - pyproject.toml to make the snoots happy
- New
EventItemclass 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_INSTRUCTIONSto hide the help text below Discord role mentions - Fallback support for
MENTION_ROLE_IDenvironment variable for backward compatibility. - Markdown styling constants (
DISCORD_BOLD_START,SLACK_ITALIC_END, etc.) toconstants.pyfor easier maintenance. TIMEZONE_NAME_MAPin constants to provide user-friendly names for common timezones (e.g., "Central Time" for "America/Chicago").- Configuration option
SHOW_TIMEZONE_IN_SUBHEADERto 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
Eventmodel with comparison methods for reliable deduplication - Updated
Dayclass 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
SxxExxnumbers unitalicized. This fixes inconsistent bolding/italics, especially for daily shows. (Fixes #4) - Correctly generate
Day.namewhen creatingDayobjects inFormatterService. - Deduplication: Issue with duplicate show entries appearing when using multiple Sonarr instances (Fixes #5)
- Removed incorrect
end_timevalidation fromEvent.__post_init__. - Pass
source_typecorrectly when creatingEventobjects 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
--debugcommand-line argument. Debug mode is controlled via theDEBUGenvironment variable. - Removed unused
build_content_summary_partsandjoin_content_partsfunctions fromformat_utils.py.
v1.3.0
v1.2.0
Added
- Premiere count to the subheader
- Ability to switch between 12/24 hr format via
USE_24_HOURvariable - Ability to hide times via
DISPLAY_TIMEvariable - Ability to hide date range from the header via
SHOW_DATE_RANGEvariable - Daily/Weekly mode toggle, set using
SCHEDULE_TYPE RUN_TIMEvariable 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_HANDLINGenv 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: falsewas not being respected- Issue with different timezones not displaying the correct times/dates
Full Changelog: v1.1.0...v1.2.0
v1.1.0
Full Changelog: v1.0.4...v1.1.0
v1.0.4
Full Changelog: v1.0.3...v1.0.4
v1.0.3
Full Changelog: v1.0.2...v1.0.3