castopod/CHANGELOG.md

225 KiB
Raw Permalink Blame History

1.11.0 (4/17/2024)

Bug Fixes

  • premium: set itunes:block on premium feeds to prevent indexing (88851b0)
  • rss: generate podcast guid if empty (a5aef2a), closes #450

Features

  • add trailer tags to rss if trailer episodes are present (80fdd9c)
  • add transcript display to episode page (4d141fc), closes #411
  • platforms: add telegram to socials (004f804)
  • platforms: add truefans.fm and episodes.fm (d046ecc), closes #458 #459

1.10.5 (3/12/2024)

Bug Fixes

  • file-uploads: validate chapters json content + remove permit_empty rule to uploaded files (6289c42), closes #445

1.10.4 (2/26/2024)

Bug Fixes

  • display chapters in episode preview page (797516a), closes #445

1.10.3 (2/21/2024)

Bug Fixes

  • chapters: use episode cover when chapter img is an empty string (a343de4), closes #444
  • import: set episodes as premium if podcast is set as premium by default (dfd66be)

1.10.2 (2/20/2024)

Bug Fixes

  • podcast-import: move closing parenthasis when checking for owner name and email existence (cec7815)

1.10.1 (2/20/2024)

Bug Fixes

  • fediverse: use config name to get Fediverse config properties instead of hardcoded class string (5fd0980)

1.10.0 (2/19/2024)

Bug Fixes

  • op3: move op3 prefix to enclosure url instead of audio proxy (d580369)
  • podcast-import: rollback transaction before exception is thrown (419bb04), closes #429 #319 #443 #438

Features

  • add podcast:season and podcast:episode tags to rss feed (98c6658)
  • add support for podcasting 2.0 "medium" tag with podcast, music and audiobook (630e788), closes #439
  • display chapters in episode's public page (87cc437), closes #423
  • support VTT transcript file format in addition to SRT (7071b4b), closes #433

1.9.0 (1/31/2024)

Bug Fixes

  • i18n: escape language strings in form fields to prevent them from disappearing (3cb5ffd), closes #412
  • podcast-about: update stats query to discard scheduled episodes from episodes number (67c037c)
  • premium-subs: clear subscription list cache after insert (2accb0f), closes #430
  • s3: remove proxy, set objects acl to public-read, and serve files using their public urls (6a77a9d)

Features

  • add actor domain to handle in follow page (de099ac)
  • admin: add podcast's OP3 analytics dashboard link (5f3752b)

1.8.2 (1/17/2024)

Bug Fixes

  • transcript: add condition when concatenating sub text to prevent second line duplication (6cbfec0)

1.8.1 (1/16/2024)

Bug Fixes

  • models: set updatedField as empty string when not used (164f4d3)

1.8.0 (1/15/2024)

Bug Fixes

  • episode-form: add required validation rules for title and slug (30a3473), closes #420
  • import: check for empty string when generating podcast guid for feeds not including one (ac5336f)
  • install: add created superadmin to most powerful group in instance, ie. superadmin (2ed511f)
  • persons: delete person avatar when deleting a person (c1ec98c), closes #419
  • platforms: add matrix.org as a social platform (9178c3f), closes #421

Features

  • admin: add tooltip for not authorized routes (f7f9baf)
  • admin: emphasize unprivileged items in sidebar with "prohibited" icon (0bd7dde)
  • allow hiding owner's email in public RSS feed (222e02a)
  • persons: order persons by full_name ASC for easier list scanning (68a599f), closes #418

1.7.4 (1/3/2024)

Bug Fixes

  • media: add missing HEAD route for static assets served with S3 (b61a32c)

1.7.3 (12/21/2023)

Bug Fixes

  • analytics: upgrade opawg's user-agents-php to user-agents-v2-php (8cd7886)
  • platforms: add Threads and YouTube Music (9264a2d)

1.7.2 (12/12/2023)

Bug Fixes

  • episode-form: render episode number optional when episode type is trailer or bonus (694328f)

1.7.1 (12/1/2023)

Bug Fixes

  • housekeeping: add where clause to check episode_id is not null on reset comments count (119742c)

1.7.0 (11/29/2023)

Bug Fixes

  • admin-ux: hide navigation submenus in details panel for easier scanning (b047a3c)
  • admin: remove episode title truncation + display description in two lines in episode list (f4ffa30), closes #386
  • auth: display error messages from validator (5a834c0)
  • housekeeping: remove unnecessary $tablePrefix variable when resetting post count (97d793f), closes #383
  • import: handle bad values for location attributes (642981f)
  • import: use cocur/slugify library to handle non latin text (4ca7f9c)
  • move monetization outside of podcast form + add broadcast section to podcast menu (dff8516)
  • nodeinfo2: import database config + use dynamic table prefix for active local actors query (6a7ef01)
  • persons: set roles field as optional + set Cast > Host as default value (02132dc), closes #347
  • platforms: make platforms' websites and submit urls more prominent (61cf8fa)
  • podcast-form: move fediverse section below author section (1861d67)
  • reorder podcast form fields + extract sync feeds to its own form (2d52fa1)

Features

  • admin: add rss feed link to podcast side navigation (18e2633)
  • icons: update new Deezer logo (f2d5b27)
  • install: init database and create superadmin using CLI (02d4ba6), closes #380
  • ux: add episode description to episode cards (5f8d413)

1.6.5 (2023-09-26)

Bug Fixes

  • fediverse: use NoteObject including episode link in content (hotfix) (ffa530e)

1.6.4 (2023-09-17)

Bug Fixes

  • fediverse: do not cache remote action form + fix typo on post routes for passing post uuid (4ecb42f)
  • fediverse: update post controller namespace in routes (3189f12)

1.6.3 (2023-09-14)

Bug Fixes

  • fediverse: add index to post controller-method to access post's jsonld contents (35142d8)

1.6.2 (2023-09-11)

Bug Fixes

  • migrations: remove if exists modifier for drop index (82013c9), closes #382

1.6.1 (2023-09-09)

Bug Fixes

  • admin: redirect root fediverse route to fediverse-blocked-actors (ba5324e)
  • analytics: show full referrer domain in web pages visits reports (6be38e9), closes #367
  • auth: overwrite Shield's PermissionFilter (c6e8000)
  • auth: update shield from v1.0.0-beta.3 to v1.0.0-beta.6 (23842df)
  • platforms: add missing tiktok to social platforms seed (8dfdaf3)
  • remove fediverse prefix to prevent migration error + load routes during podcast import (7ff1dbe)
  • routes: overwrite RouteCollection to include all routes + update js and php dependencies (b4f1b91)
  • update Router to include latest CI changes with alternate-content logic (ae57601)
  • use podcast-activity named route instead of not existing actor route (3c35718)

1.6.0 (2023-08-28)

Bug Fixes

  • home: update where clause when getting all podcasts to prevent draft podcasts from showing up (7a1eea5)
  • media: copy and delete temp file when saving instead of moving it for FS FileManager (9346e78), closes #338
  • media: get path using media_path_absolute when saving media file (754e7a6)
  • media: init file properties in setAttributes' Model method + set defaults to pathinfo data (0775add)
  • premium-podcasts: show premium flag only when podcast has published premium episodes (d10c4fd)
  • s3: add a flag to serve media files by redirecting to a presigned url instead of default proxy (11aa358)

Features

  • episode: add preview link in admin to view and share episode before publication (7d21b35)

1.5.2 (2023-07-31)

Bug Fixes

  • credits: remove undefined $podcast variable from page layout (73a5b68), closes #359
  • platforms: change twitter to X + add buymeacoffee and kofi as funding (d69b4e4), closes #353 #361

1.5.1 (2023-07-29)

Bug Fixes

  • admin-ui: remove button labels on smaller screens in podcast view (9cc5ffd)
  • rss: set srt transcripts' mimetype to application/x-subrip with rel="captions" attribute (16a3fdb), closes #360
  • rss: update podcast extension namespace (6833dd0), closes #360

1.5.0 (2023-07-27)

Bug Fixes

  • admin-ui: truncate header title + remove sticky podcast banner card on mobile (63c20da)

Features

  • add podcast links page including social, podcasting and funding links (8ae2929)

1.4.7 (2023-07-19)

Bug Fixes

  • s3: allow CORS for served static files (9b955c9)

1.4.6 (2023-07-11)

Bug Fixes

  • fediverse: expand object before sending accept follow request (082cdc9), closes #350
  • podcast-import: remove error log when no import in queue, exit with success instead (5e719f3)

1.4.5 (2023-07-04)

Bug Fixes

  • s3: handle range requests to serve media files (41a5932)

1.4.4 (2023-07-02)

Bug Fixes

  • audio-clipper: init segment position on firstUpdate + improve UX by adding ghost handle (aa68386), closes #351
  • set resized images to 72dpi for compatibility with Apple Podcasts (0b327cb), closes #282

1.4.3 (2023-06-29)

Bug Fixes

  • video-clipper: add -t option to ffmpeg command to stop generation after duration (60814b8), closes #341

1.4.2 (2023-06-27)

Bug Fixes

  • fediverse: check that actor's images mimetype is present or guess it otherwise (06c4f15), closes #348
  • podcast-import: show cancel or retry action depending on task status (e42258d)

1.4.1 (2023-06-22)

Bug Fixes

  • podcast-import: set default values for person group and role if not found in taxonomy (aa46dca)

1.4.0 (2023-06-21)

Bug Fixes

  • charts: set duration charts label to HHhMM for listening time analytics (3fc1d8e)
  • embed: set height of player iframe from config (4665741)
  • s3: serve files without cache if dummy cache handler + add http referer header to redirect (30db9f0)
  • s3: use presigned request uri to serve static files (cb92dc7)
  • webmanifest: import misc helper to get site_icon_url (548a11d)

Features

  • import: run podcast imports' processes asynchronously using tasks (d8e1d40)
  • rest-api: add endpoints for episodes and full text search for podcasts and episodes (85505d4), closes #296

1.3.5 (2023-05-09)

Bug Fixes

  • replace essence with embera to create preview cards (c682f03)

1.3.4 (2023-05-05)

Bug Fixes

  • import-update: insert episodes incrementally into database (108fdf8)

1.3.3 (2023-04-17)

Bug Fixes

  • unnescape podcast title special characters in "find us on" section (f727276), closes #323
  • websub: add missing misc helper import (855aacc)

1.3.2 (2023-04-14)

Bug Fixes

  • remove path key when getting default avatar path (c5a1359)
  • s3: serve files using media base url to allow for CDN setup (502f53c)

1.3.1 (2023-04-13)

Bug Fixes

  • s3: add proxy to serve images from s3 to client (a76724a), closes #321

1.3.0 (2023-04-03)

Bug Fixes

  • delete files using file_manager when deleting episode and podcast (41d8efe)

Features

  • media: set media storage directory as configurable (7e1a470)

1.2.4 (2023-03-23)

Bug Fixes

  • allow images to have .jpeg extension consistently (ae5e12b)
  • s3: delete persons image sizes from bucket + add keyPrefix to config (208c271)
  • s3: do not create bucket if not exists, check if healthy instead (da7076f)

Reverts

  • homepage: remove redirect to install if database is not setup (d4954e0)

1.2.3 (2023-03-18)

Bug Fixes

  • notifications: set mark-all-as-read parameter to be podcast_id instead of actor_id (2748f23)

1.2.2 (2023-03-18)

Bug Fixes

  • migration: change old media file_key to file_path (a414142), closes #314

1.2.1 (2023-03-17)

Bug Fixes

  • change app.mediaBaseURL to media.baseURL in install, docker entrypoints and docs (b3c6e05)

1.2.0 (2023-03-17)

Bug Fixes

  • analytics: check the x_forwarded_for client header (1111177)
  • auth: update podcast editors' permissions (a9b6308)
  • contributors: add dash to prevent deleting permissions from other podcast (5d2a2d4), closes #310
  • display bandwidth limit on dashboard when set in .env (a2a87ab)
  • docker: update nginx configuration (8884598)
  • platforms: update 'submit_url' for Antennapod (9fc49a7)

Features

  • add downloads count to episode list (b63c1dc)
  • add health route to check if db, cache and file manager are ok (1dde11f)
  • media: add s3 to manage media files (d93fc98)

Reverts

  • install: reset condition to look for instance owner before continuing install (fc009f3)

1.1.2 (2022-12-14)

Bug Fixes

  • analytics: set EpisodeAudioController to init user session data (77ccb30)

1.1.1 (2022-12-13)

Bug Fixes

  • op3: remove scheme when wraping audio URI (0ad22e4)
  • rss: add file extension to enclosure url (964cbba)

1.1.0 (2022-12-09)

Bug Fixes

  • notifications: remove cache inconsistencies when marking notification as read (46d7054)
  • notifications: retrieve activity from database instead of getting cache (7fbbd08)
  • podcast:soundbite: rename start time attribute to follow spec (689831c)

Features

  • analytics: add OP3 analytics service option + update episode audio url (16527ed)

1.0.5 (2022-11-25)

Bug Fixes

  • router: revert to CI4 v4.2.7 to include all routes (c13cfa0)

1.0.4 (2022-11-21)

Bug Fixes

  • update actorUsername regex to get url_to actor (1d6b177)

1.0.3 (2022-11-17)

Bug Fixes

  • dashboard-ui: fill the blank gaps between cards on smaller screen sizes (00836cc)

1.0.2 (2022-11-04)

Bug Fixes

  • auth: disallow registration by default (379b9be)
  • contributors: add prefix to podcast group to delete contributor (9f785db)
  • extract podcast ids from user groups using a regex (e26215a)
  • notifications: add manage-notifications permission to podcast (ed7c247)
  • platforms: convert special characters to htmlentities to validate url (82310a2)

1.0.1 (2022-11-01)

Bug Fixes

  • platforms: trim platform url before validation and storage (259fe5f)

1.0.0 (2022-10-20)

Bug Fixes

  • a11y: replace active tab color to contrast with background on podcast and episode pages (f3785e1)
  • activity-pub: cache issues when navigating to activity stream urls (7bcbfb3)
  • activity-pub: get database records using new model instances (92536dd)
  • activitypub: add conditions for possibly missing actor properties + add user-agent to requests (8fbf948)
  • activitypub: add target actor id to like / announce activities to send directly to note's actor (962dd30)
  • activitypub: add target_actor_id for create activity to broadcast post reply (0128a21)
  • activitypub: allow cors on get requests for routes exposing acitivitypub objects (2f24809)
  • activitypub: set created_by to null for reblog if no user + update episode oembed data (209dfbd)
  • add admin-audio-player to vite config to have admin player show up (93cb9b2)
  • add application/octet-stream mimetype to mp3 and m4a extensions to prevent ext_in error (339bef8), closes #145
  • add category_label component to include parent category in about podcast page (74e7d68)
  • add explicit int conversion when formatting episode duration (1253096)
  • add head request to analytics_hit route (f0a2f0b)
  • add href to castopod website on login page (cc54257)
  • add missing explicit badge for podcasts and episodes (cdf9f9d)
  • add open graph size for podcast images to replace the inadequate large format (33aae1f)
  • add public/media folder to castopod bundle (8053d35), closes #52
  • add translation key for audio-clipper trim labels (db191ac)
  • add underline and semibold font weight for prose links to have them stand out (d4d8671)
  • add where condition to get episode count without deleted episodes (7661734), closes #67
  • admin: save block and lock switches (b66c0af)
  • analytics: redirect to mp3 file even when referer was not set (9fc388d)
  • analytics: remove charts empty values + remove useless language cache (1678794)
  • analytics: set duration field to precise decimal as episode's audio file duration (d772685)
  • analytics: set initial value for duration and bandwidth (ee50539)
  • analytics: update migrations to set decimal precision for latitude and longitude (714d6b5)
  • analytics: update service management so that it works with new OPAWG slug values (7fe9d42)
  • audio-clipper: add mouse position offset when stretching clip to prevent content from jumping (602654b)
  • audio-clipper: show audio playing progress + put waveform behind audio clipper (01a09dc)
  • avatar: use default avatar when no avatar url has been set (9d23c7e), closes #111
  • bundle: include modules and themes when copying files with rsync (cd5bb88)
  • bundle: update vite input files path + add set -e in bash scripts to fail if command fails (0ee53c7)
  • cache: add locale for podcast and episode pages + clear some persisting cache in models (9cec8a8), closes #42 #61
  • cache: delete posts and comments pages cache when updating platform links (f7c3e5b), closes #169
  • cache: return a non cached view when connected (e2e7358)
  • cache: suffix cache names with authenticated for credits, map and pages (418a70b)
  • cast actor_id to pass as int to set_interact_as_actor() function (56a8e5d)
  • category: remove uncategorized option to enforce users in choosing a category (8c64f25)
  • change image size requirement hints (ea20206)
  • change message upon cancellation of episode publication (9859c74)
  • check for database connection and podcasts table existence before redirecting to install (eb74e81)
  • check that additional files are valid when creating episode (eac5bc8)
  • check that note has a preview_card_id before displaying it (acb8b3a), closes #114
  • clear cache when deleting podcast banner (99bb40b)
  • comment all cache clean after page update to prevent analytics cache deletion (e6197a4)
  • comments: add comment view partials for public pages (fcecbe1)
  • correct chart data (4d3e9c8)
  • correct percona compatibility issue (e53f819)
  • correct php-fpm issues (1ef55d7)
  • correct referrer bug (ed69b2f)
  • correction for servers with low int precision (31b7828)
  • cors: add preflight option routes for episode, podcast and status objects (a281abf)
  • declare typed properties in PHPDoc for php<7.4 (14dd44d), closes #23
  • define podcast_id and platform_slug as foreign keys in podcasts_plaforms table (6e9451a)
  • define podcastNamespaceLink value (0d744d2)
  • email: set the correct url in the activation and forgot emails (10fc6f1), closes #204
  • embeddable-player: enable any ancestor when X-Frame-Options is set on server (44a4962)
  • embed: open embedded player's links in new tab (4aa73d7)
  • episode-form: show warning to set memory_limit, upload_max_filesize & post_max_size (3b3c218), closes #5 #86
  • episode-unpublish: set consistent posts_counts' increments/decrements for actors and episodes (8acdafd), closes #233
  • episodeCount: add missing brackets to French language file (c1b4112)
  • episode: replace guid's empty string value to null (441052a)
  • episodes-page: handle defaultQuery being null when no podcast episodes (15183b7), closes #100
  • episodes-table: set descriptions to be not null (6774ec1)
  • episodes: add publication status + set publication date to null when none has been set (d882981), closes #70
  • escape characters for min in format_duration_symbol (3b6722a)
  • escape generated feed tag values and remove new lines from public pages meta description (6238a43), closes #57 #46
  • expire default query cache upon scheduled episode publication (b72e7c8), closes #81
  • explicitly cast seconds to int in iso8601_duration helper function (779653f)
  • fediverse: set default castopod avatar url when actor avatar is not present (460f52f)
  • fediverse: set model instances as non shared to prevent overlapping (91128fa)
  • fix layout bugs in admin and update translation files (a834171), closes #40
  • follow: add missing helpers to Actor controller (ee53a73)
  • get_browser_language: return defaultLocale if browser doesn't send user preferred language (9cc2996)
  • handle HEAD requests on podcast_feed route (74b2640), closes #79
  • home: remove hardcoded prefix in getAllPodcasts query (92d5cc5)
  • housekeeping: replace the use of GLOB_BRACE with looping over file extensions (42d92d0), closes #154
  • housekeeping: set default sizes value + ignore illegal IFD size error to proceed with script (f21ca57)
  • housekeeping: use EpisodeModel's builder to reset comments count (65e9c0b)
  • htaccess: add ? after index.php in RewriteRule (d9d139e), closes #152
  • http-signature: update SIGNATURE_PATTERN allowing signature keys to be sent in any order (b7f285e)
  • images: set default mimetype if none is specified when getting size info (6e4acc6)
  • import-with-escaped-characters: remove \CodeIgniter\HTTP\URI in download_file, closes #103 (35b5be0)
  • import: add extension when downloading file without + truncate slug if too long (c5f18bb)
  • import: add validation for handle field to prevent Router.invalidParameterType error (5bf7200), closes #119
  • import: cast description's SimpleXMLElement to string (02d17be)
  • import: remove query string from files url (109c4aa)
  • import: save media files during podcast import + set missing media fields (a9989d8)
  • import: set default episode type if not set (d7250ab)
  • import: set episode and season numbers to null when not present in item tag (3211398)
  • import: use tag when no itunes:image is present (20e607a)
  • include missing variables on public ui's episode page and remote_actions (193b373)
  • input-component: unset required attribute to prevent rendering it when false (db9ac13)
  • install: add password validation when creating super admin (5a2ca0c)
  • install: redirect manually to install wizard on first visit (2ceaaca)
  • install: redirect to host_url install route on instanceConfig validation error (99250b1)
  • install: redirect to input baseUrl after instance config (2426af7), closes #53
  • install: set message block on forms to show error messages (3a0a20d), closes #157
  • interact-as: set actor_id instead of podcast id upon login event (5dfade7), closes #104
  • json-ld: add missing properties to PodcastSeries object (e97266c)
  • keep subtitle line breaks when parsing srt file to json (cfb3da6)
  • layouts: replace holy-grail layout with tailwind config + widen public podcast layout (be5a287)
  • map: update episode markers query to discard unpublished episodes (b3caac4)
  • markdown-editor: remove unnecessary buttons for podcast and episode editors + add extensions (9c4f60e)
  • md-editor: build new markdown editor with lit + github/markdown-toolbar-element (9ec1cb9), closes #93 #94 #120
  • migrations: ignore invalid utf8 chars for media files metadata + update transcript parser (45e8f99)
  • minor corrections (13be386)
  • move analytics to helper (d311917)
  • move html escaping on credits page (fbffdbd)
  • multiselect: add missing class names in choices options for purge to work properly (719538d)
  • notifications: add trigger after activities update + update insert trigger (e5d16e8)
  • notifications: notify actors after activities insert / update using model callback methods (e08555a)
  • open-graph: replace non existant episode description to podcast description in podcast page (b02584e)
  • overwrite common lang function to escape returned string (4c490c1), closes #196 #198
  • overwrite getActorById to return app's Actor entity (f2bc2f7)
  • package.json: update destination of postcss generation scripts (21413f8)
  • pages: add locale to page cache (8f999ce)
  • partner: set correct image URL (61554be)
  • pass timezone to relative time component to show the localized time in the UI (b9db936)
  • persons: prevent overflow of persons list by adding horizontal scroll (9e8995d)
  • persons: set person picture as optional for better ux (7fdea63), closes #125
  • platforms: display platform link only when visible is toggled on (6e503c8), closes #39
  • player-styling: revert vite to 2.8 to reference the player css (e07d3af)
  • podcast-activity: check if transcript and chapters are set before including them in audio (5855a25)
  • podcast-import: move guid attribute declaration for Episode entity to include slug data (5d02ae3)
  • podcast: use markdown description value for editor + set prose class to about description (f304d97), closes #156
  • prefill description footer input when creating a new episode (9ea5ca3)
  • premium-podcasts: display unlock button in embed when premium episode (ca109ba)
  • premium-podcasts: remove cache in unlock form + redirect to podcast if podcast is not premium (242352c)
  • premium-podcasts: return different cached page when podcast is unlocked (b1303c5)
  • pwa: add scope to webmanifests to allow installing an app per podcast (74c683e)
  • pwa: set app display as standalone in the webmanifests (7aa37d2)
  • re-order graph values (35f633b)
  • redirect to non cached views when authenticated in public views (482b47b)
  • release: add missing version number to castopod-host package (8f3e9d9)
  • remove cache from remote follow form to display error messages (90e4443)
  • remove defer from js script declaration as it is a module (18ae557)
  • remove fixed size from podcast sidebar + rearrange account info + space out import radio inputs (776eec6)
  • remove heavy image cover data from audio file metadata (f74403b)
  • remove required for other_categories field and add podcast_id to latest podcasts query (5417be0)
  • remove required property to persons picture (c546be3), closes #125
  • remove value escaping for form inputs and textareas (bc6dea2)
  • rename field status to task_status to get scheduled activities (4ff82a5)
  • rename issue_templates labels (9f00305)
  • rename MyAccount controller file (e109df3), closes #60
  • rename podcast name to podcast handle to clarify field usage (9dd4c77), closes #126
  • reorder fields as composite primary keys for analytics tables (9660aa9)
  • replace deletedField with published_at for episodes (14d7d07)
  • replace getWebEnclosureUrl with getEnclosureWebUrl (8122cea)
  • replace hardcoded style links with vite service + set default value for remote transcript url (3f2e056), closes #149 #150
  • replace website key for webpages in breadcrumb translate file (50e32ff)
  • restore default podcast icon on public website (342778b)
  • revert to beta.1's codeigniter4 version (e831411)
  • rewrite regenerate image function to use saveSizes method from Image entity (3889912)
  • router: check if Accept header is set before getting value (10a2ae0), closes #228
  • router: trim URI slash to match same routes for URIs with and without trailing slash (9e9375f)
  • rss-import: add Castopod user-agent, handle redirects for downloaded files, add Content namespace (214243b)
  • rss: cast number type values to string in rss_helper (7180ae9), closes #148
  • rss: do not escape podcast and episode titles in the xml (0dd3b7e), closes #138 #71
  • rss: remove escaping for publisher and owner name (6fc6347)
  • rss: round episode durations and soundbites (c9fb987), closes #214
  • rss: set ❬itunes:author❭ tag to owner_name if publisher not specified (2271c14), closes #96
  • rss: use originalPath instead of originalMediaPath in Image library (b4012b7)
  • save transcript and chapters files to podcasts folder (63f49c7)
  • search-episodes: add fallback sql query using LIKE for search query with less than 4 characters (e66bf44), closes #236
  • security: add csrf filter + prevent xss attacks by escaping user input (cd2e1e1)
  • set cache expiration to next note publish to show note on publication date (0a66de3)
  • set episode description footer to null when empty value (3a7d97d)
  • set episode duration translation to hardcoded english (c39efc9), closes #64
  • set episode guid upon episode creation (ad8b153), closes #48
  • set episode numbers during import + remove all custom form_helpers + minor ui issues (99a3b8d)
  • set interact_as_actor for user upon password reset (ad8f5f5), closes #178
  • set localized slug_field key as string in french language (17fb29b)
  • set location to null when getting empty string (71b1b5f)
  • set storage limit as disk_total_space instead of free space (7512e2e)
  • settings: add .jpg extension to site-icon file input to display all jpeg images (f611a16)
  • socialinteract: move social interact uri into uri attribute + update social data upon import (12b2200)
  • sort episodes by published_at with unpublished episodes at the begining (1686f84), closes #249
  • sort episodic podcasts by season (d7b6794)
  • themes: update themes stylesheet route and remove css extension (e4e7e00)
  • types: update fake seeders types + fix bugs (76a4bf3)
  • ui: remove empty tooltip when hovering on sponsor button (40aa661)
  • unpublish episode before deleting it + add validation step before deletion (f75bd76), closes #112 #55
  • update .htaccess for shared hosting config (2379826)
  • update broken contributor dropdown fields (e5b7515)
  • update condition in AnalyticsTrait (fbc0967)
  • update condition in home controller to redirect to install page (33f1b91)
  • update conditions when checking for empty max_episodes and season_number (fbad0b5)
  • update form_textarea to prevent escaping value (78548b5)
  • update iso-369 language table seeder (0c90db4)
  • update ivoox podcasting icon (f2b69a4)
  • update MarkdownEditor component + restyle Button and other components (b05d177)
  • update purgecss content path for php helper files (eb70bb4), closes #59
  • update translations for settings' tasks to include what they should be used for (06b1a8b)
  • use slash instead of backslash to call layout (a80adb2)
  • use UTC_TIMESTAMP() to get current utc date instead of NOW() in sql queries (4e22a0d)
  • users: remove required roles input when editing user + prevent owner's roles from being edited (1c8af75), closes #239
  • ux: allow for empty message upon episode publication and warn user on submit (33d01b8), closes #129
  • ux: have podcast dashboard card link to podcast dashboard if only one podcast in instance (7dabee5)
  • ux: redirect user to install page on database error in home page (9017e30)
  • validate slug length when submitting episode form + clean permalink edit prefix (b07ac09)
  • video-clips: check if created video exists before recreating it and failing (dff1208)
  • video-clips: clear video clip cache after process has finished (3ae6232)
  • video-clips: create unique temporary files for resources to be deleted after generation (7f7c878)
  • video-clips: set audio codec to aac, fixing audio issue on twitter (3c22c68)
  • video-clips: set longer podcast and episode lengths for squared format (c030113)
  • video-clips: tweak portrait parameters to have subtitles display without overflowing (2385b1a)
  • video-clips: update condition to check if ffmpeg is installed (b57f0b6), closes #163
  • xml-editor: escape xml editor's content + restyle form sections to prevent overflowing (588590b)
  • xml-editor: prettify xml even without root node (ca55c24)

Features

  • activitypub: add Podcast actor and PodcastEpisode object with comments (9e1e5d2)
  • add about page in admin with instance info + database update button (d0836f3)
  • add alternate rss feed link tag to podcast page head (a973c09), closes #35
  • add analytics and unknown useragents (ec92e65)
  • add audio-clipper toolbar + add video-clip-previewer (0255753)
  • add audio-clipper webcomponent (wip) (21d4251)
  • add autofocus to input field "Email or username" on login page (19caed4)
  • add basic stats on podcast about page (1670558)
  • add breadcrumb in admin area (7fb1de2), closes #17
  • add cache to ActivityPub sql queries + cache activity and note pages (2d297f4)
  • add CDN url (972bcbf), closes #37
  • add codemirror to display xml editor for custom rss field (f15f262)
  • add cumulative listening time charts (588b4d2)
  • add default icons to Alert component (0d98001)
  • add DropdownMenu component + remove global audio player in admin (abb7fba)
  • add episode_numbering() component helper to display episode and season numbers (3f4a6bd)
  • add french translation (196920d)
  • add heading component + update ecs rules to fix views (23bdc6f)
  • add housekeeping task to run after migrations (89dee41)
  • add install wizard form to bootstrap database and create the first superadmin user (cba871c), closes #2
  • add instructions on production error page to ease Castopod debugging process (9eab54e), closes #224
  • add ISO 3166 country codes (97cd94b)
  • add js audio player on podcast, admin and embeddable player pages + fix admon episodes ux (0e14eb4), closes #131
  • add label to sponsor button on podcast page (c29c018), closes #162
  • add legalNoticeURL to app config for setting an external url to legal notice (711843a)
  • add lock podcast according to the Podcastindex podcast-namespace to prevent unauthozized import (72b3012)
  • add map analytics, add episodes analytics, clean analytics page layout, translate countries (07eae83)
  • add media entity and link documents, images and audio files to it (6ecf286)
  • add notifications inbox for actors (999999e), closes #215
  • add Noto Sans Mono font to use for durations + button to access new video clip form in list (7609bb6)
  • add npm for js dependencies + move src/ files to root folder (cbb83a6)
  • add Open Graph and Twitter meta tags (af970b8), closes #41
  • add pages table to store custom instance pages (eg. legal-notice, cookie policy, etc.) (9c224a8), closes #24
  • add permanent delete feature for podcasts 🎉 (dbb4030), closes #89
  • add platform models (a333d29)
  • add platforms form in podcast settings (043f49c)
  • add platforms tables (ce59344)
  • add podcast banner field for each podcast + refactor images configuration (4a8147b)
  • add premium podcasts to manage subscriptions for premium episodes (3234500), closes #193
  • add publish feature for podcasts and set draft by default (3d363f2), closes #128 #220
  • add remote_url alternative for transcript and chapters files (3143c9a)
  • add replied to post or comment to reply element (d0f9c60)
  • add schema.org json-ld objects to podcasts, episodes, posts and comments pages (902f959)
  • add task to housekeeping setting for resetting all instance counts (9303e51)
  • add unique listeners analytics (3a49258)
  • add update rss feed feature for podcasts to import their latest episodes (5eb9dc1), closes #183
  • add user permissions and basic groups to handle authorizations (d58e518), closes #3 #18
  • add WebSub module for pushing feed updates to open hubs (10d3f73)
  • admin: add instance wide dashboard with storage and bandwidth usage (b1a6c02), closes #216
  • admin: add search form in podcast episodes list (6be5d12), closes #26
  • admin: make header stick on scroll and show title + action buttons using css only (d60498c)
  • admin: update admin layout for better ux + update brand pine colors (d86142e)
  • allow cross origin requests on episode comments (e12f95a)
  • analytics-gdpr: update cached personal data to expire at midnight (0188b67)
  • analytics: add 'other' group to pie charts in order to display more accurate data (73acef9)
  • analytics: add charts and data export (78625c4)
  • analytics: add current date and secret salt to analytics hash for improved privacy (6f2e7c0)
  • analytics: add service name from rss user-agent (7202b98)
  • analytics: add weekday and hour bar charts (8ab3132)
  • api: add rest api with podcasts read endpoints (e64001d), closes #210
  • apply colour theme to embed player (9548337), closes #201
  • auth: add auth.enable2FA config to enable two-factor authentication (7213ed2)
  • build hashed static files to renew browser cache (37c54d2), closes #107
  • cache: add podcast and episode pages to cache + clear them after insert or update (da0f047)
  • categories: create model, entity, migrations and seeds (f73b042)
  • clips: setup clip entities and model + save video clip to have it generated in the background (2f6fdf9)
  • comments: add comments to episodes + update naming of status to post (bb4752c)
  • comments: add like / undo like to comment + add comment page (0c187ef)
  • components: add custom view renderer with ComponentRenderer adapted from bonfire2 (a95de8b)
  • create optimized & resized images upon upload (02e4441), closes #6
  • custom-rss: add custom xml tag injection in rss feed for ❬channel❭ and ❬item❭ (6ecdaad)
  • datetime-picker: set material_green theme to flatpickr (3ce6541)
  • devcontainer: add devcontainer settings for dev environment (69e7266)
  • display castopod version in admin footer (9f2574e), closes #68
  • display legal disclaimer and warning on podcast import page (2f07992), closes #34
  • edit + delete podcast and episode (ac5f0c7)
  • embeddable-player: add embeddable player widget (141788f)
  • enhance admin ui with responsive design and ux improvements (2d44b45), closes #31 #9
  • enhance ui using javascript in admin area (c0e66d5)
  • episode-unpublish: remove episode comments upon unpublish (78acd7f)
  • episode: add form to allow editing episode's publication date to a past date (d783d16), closes #97
  • episodes: add create form and view pages for episode (f3b2c8b), closes #1
  • episodes: add migrations, model and entity for episodes table (0444821)
  • episodes: replace all audio file URL parameters with base64 encoded data (e1f65cd)
  • episodes: replace soft delete with permanent delete (eb9ff52)
  • episodes: schedule episode with future publication_date by using cache expiration time (4f1e773), closes #47
  • fediverse: implement activitypub protocols + update user interface (2f525c0), closes #69 #65 #85 #51 #91 #92 #88
  • fonts: replace Montserrat with Inter for better readablity (bfa11d0)
  • GDPR: add GDPR.yml file to public/.well-known/ (86bccc3)
  • gdpr: add purpose for granting access to premium content (47d6d81)
  • home: sort podcasts by recent activity + add dropdown menu to choose between sorting options (7b89da6), closes #164
  • housekeeping: add clear_cache option to flush redis or files cache (99bfac0)
  • i18n: add 7 new languages + update german translations (d021abb)
  • i18n: add german language as supported locale + create Language files from english source (c220b31)
  • i18n: add Norwegian Nynorsk to supported locales (ced61fc)
  • i18n: add Polish translation (2d83b44)
  • i18n: add Spanish to supported locales (e340b54)
  • i18n: add support for German and Brazilian Portuguese languages (c9b9fe4)
  • i18n: add support for Simplified Chinese (zh-Hans) and Catalan (ca) locales (48d1443)
  • icons: add default icons for podcasting, social and funding platforms + remove complex icons (5bcdfeb), closes #166 #167 #170
  • icons: add podnews icon to podcasting platforms (5f42355), closes #190
  • import podcast from an rss feed url (9a5d5a1), closes #21
  • integrate stylized form components and update podcast edit page (6536729)
  • make displayed publication time as relative time using @github/time-elements (230e139)
  • make episode description more visible on episode pages (90533be), closes #171
  • map: display geolocated episodes on a map page (4357cc2)
  • media: clean media api + create an entity per media type (fafaa7e)
  • media: save audio, images, transcripts and chapters to media for episode and persons (58e2a00)
  • meta-tags: add activitypub alternate links to podcast, episode, comment and post pages (bd61752)
  • minor corrections to some tables (3bf9420)
  • monetization: add Web Monetization support (96a6026)
  • nodeinfo2: add .well-known route for nodeinfo2 containing metadata about the castopod instance (88fddc8)
  • partner: add link and image in episode description (ad07bb9)
  • person: add podcastindex.org namespace person tag (8acd011)
  • platforms: add AntennaPod (53e9cfd)
  • platforms: add Fediverse and some funding platforms, add link on logo (afc3d50)
  • platforms: add helloasso (16cb993)
  • platforms: add missing newpodcastapps.com's platforms (92dd370)
  • platforms: add pod.link (3d7a232)
  • platforms: add Podcast Index (ad52b1c)
  • platforms: add podfriend (9fdc8d3)
  • podcast-form: add new_feed_url field to set an url when changing domain or host (e7eec48)
  • podcast-form: update routes and redirect to podcast page (12ce905)
  • podcast: create a podcast using form (1202ba3)
  • podcasting 2.0: update podcast:social tag to adhere to latest spec (a597cf4)
  • prefill season and episode numbers + set episode number as mandatory for serial podcasts (07d740b), closes #134 #136
  • public-ui: adapt public podcast and episode pages to wireframes (40a0535), closes #30 #13
  • pwa: add service-worker + webmanifest for each podcasts to have them install on devices (fee2c1c)
  • redesign public podcast and episode pages + remove any information clutter for better ux (9321400)
  • replace form helper functions with components in admin template (e64548b)
  • replace slug field with interactive permalink component (578022b)
  • restyle episode and person cards + add focus style to interactive elements for a11y (a505a1d)
  • rss: add ˂podcast:guid˃ tag for channel (1fab10e)
  • rss: add podcast-namespace tags for platforms + previousUrl tag (dbba8dc), closes #73 #75 #76 #80
  • rss: add podcast:comments tag to link to episode comments (32e8c7c)
  • rss: add podcast:location tag (c0a2282)
  • rss: add rss feed route without the .xml extension (94c0b7c), closes #247
  • rss: add soundbites according to the podcastindex specs (6b34617), closes #83
  • rss: add transcript and chapters support (e769d83), closes #72 #82
  • rss: generate rss feed from podcast entity (c815ecd)
  • rss: update monetization tag so that it meets PodcastIndex requirements (4c7ecbe)
  • select: enhance select input with choices.js (910d457)
  • set app parameter forceGlobalSecureRequests = true forcing requests to go through https (d9dff1b)
  • set podcast / episode description in the pages description meta tag (1c4a504), closes #44
  • settings: add general config for instance (site name, description and icon) (5c56f3e)
  • settings: add theme settings to set an accent color for all public pages (5c529a8)
  • simplify podcast page's layout for better ux (2c0efc6)
  • soundbites: add soundbite list and creation forms with audio-clipper component (de19317)
  • style file inputs using tailwind's file class (8208ab6)
  • themes: add ViewThemes library to set views in root themes folder (7a27676)
  • themes: set different default banner per theme (11c916f)
  • themes: set generic css variables for colors to enable instance themes (a746a78)
  • toggle podcast sidebar on smaller screens (f0205ec)
  • transcript: parse srt subtitles into json file + add max file size info below audio file input (0098761)
  • ui: create ViewComponents library to enable building class and view files components (94872f2)
  • update analytics so to meet IABv2 requirements (03e23a2), closes #10
  • update pine colors + create charts components (a50abc1)
  • users: add myth-auth to handle users crud + add admin gateway only accessible by login (c63a077), closes #11
  • ux: remove admin dashboard and redirect directly to podcast list (27c48b8)
  • video-clip: add video-clip page with video preview + logs (42538dd)
  • video-clip: generate video clips in the bg using a cron job + add video clip page + tidy up UI (db0e427)
  • video-clips: add dimensions for portrait and squared formats (3af404d)
  • video-clips: add new themes + add castopod logo as a watermark (1d1490b)
  • video-clips: add route for scheduled video clips + list video clips with status (2065ebb)
  • video-clips: allow episodeNumbering text to stand in the indent of episodeTitle paragraph (71a063d)
  • video-clips: generate a 16:9 video using ffmpeg (35aa7ea)
  • video-clips: generate subtitles clip using transcript json to have subtitles accross video (3ce07e4)
  • video-clips: replace hardcoded colors with config's theme colors (e462abf)
  • vite: add vite config to decouple it from CI_ENVIRONMENT (8721719)
  • write id3v2 tags to episode's audio file (4651d01)

Performance Improvements

  • cache: update CI4 to use cache's deleteMatching method (54b84f9)
  • cache: use deleteMatching method to prevent forgetting cached elements in models (76afc0c)
  • defer javascript + lazy load images for faster page loads (f0685e4)
  • docker: add redis caching service for development (05ace8c)

Reverts

  • install: redirect to install in homepage if no database was set (73f094d)
  • set deprecated config options back in App config (433745f)
  • soundbites: remove soundbite table from episode's public page (5dc0f19)
  • use basic input file for episodes audio files instead of button for better UX (d5f22fb)

BREAKING CHANGES

  • analytics: analytics_podcasts_by_player table and analytics_podcasts procedure were updated

1.0.0-beta.24 (2022-10-14)

Bug Fixes

  • router: trim URI slash to match same routes for URIs with and without trailing slash (9e9375f)

Features

  • episode: add form to allow editing episode's publication date to a past date (d783d16), closes #97
  • rss: add rss feed route without the .xml extension (94c0b7c), closes #247

1.0.0-beta.23 (2022-09-29)

Bug Fixes

  • premium-podcasts: display unlock button in embed when premium episode (ca109ba)
  • premium-podcasts: remove cache in unlock form + redirect to podcast if podcast is not premium (242352c)
  • premium-podcasts: return different cached page when podcast is unlocked (b1303c5)

Features

  • add instructions on production error page to ease Castopod debugging process (9eab54e), closes #224
  • add premium podcasts to manage subscriptions for premium episodes (3234500), closes #193
  • gdpr: add purpose for granting access to premium content (47d6d81)

1.0.0-beta.22 (2022-09-23)

Bug Fixes

  • fediverse: set default castopod avatar url when actor avatar is not present (460f52f)
  • import: set default episode type if not set (d7250ab)
  • input-component: unset required attribute to prevent rendering it when false (db9ac13)
  • notifications: notify actors after activities insert / update using model callback methods (e08555a)
  • overwrite getActorById to return app's Actor entity (f2bc2f7)
  • remove heavy image cover data from audio file metadata (f74403b)
  • set storage limit as disk_total_space instead of free space (7512e2e)
  • ui: remove empty tooltip when hovering on sponsor button (40aa661)
  • users: remove required roles input when editing user + prevent owner's roles from being edited (1c8af75), closes #239
  • ux: have podcast dashboard card link to podcast dashboard if only one podcast in instance (7dabee5)

1.0.0-beta.21 (2022-09-06)

Bug Fixes

  • email: set the correct url in the activation and forgot emails (10fc6f1), closes #204
  • notifications: add trigger after activities update + update insert trigger (e5d16e8)

Features

  • i18n: add support for Simplified Chinese (zh-Hans) and Catalan (ca) locales (48d1443)

1.0.0-beta.20 (2022-08-12)

Bug Fixes

  • add underline and semibold font weight for prose links to have them stand out (d4d8671)
  • router: check if Accept header is set before getting value (10a2ae0), closes #228
  • search-episodes: add fallback sql query using LIKE for search query with less than 4 characters (e66bf44), closes #236
  • set interact_as_actor for user upon password reset (ad8f5f5), closes #178

Features

  • add label to sponsor button on podcast page (c29c018), closes #162
  • add notifications inbox for actors (999999e), closes #215

1.0.0-beta.19 (2022-07-21)

Bug Fixes

  • episode-unpublish: set consistent posts_counts' increments/decrements for actors and episodes (8acdafd), closes #233
  • get_browser_language: return defaultLocale if browser doesn't send user preferred language (9cc2996)

Features

  • episode-unpublish: remove episode comments upon unpublish (78acd7f)

1.0.0-beta.18 (2022-07-07)

Bug Fixes

  • player-styling: revert vite to 2.8 to reference the player css (e07d3af)

Features

  • add legalNoticeURL to app config for setting an external url to legal notice (711843a)

1.0.0-beta.17 (2022-07-06)

Bug Fixes

  • explicitly cast seconds to int in iso8601_duration helper function (779653f)
  • housekeeping: use EpisodeModel's builder to reset comments count (65e9c0b)
  • rss: round episode durations and soundbites (c9fb987), closes #214
  • xml-editor: prettify xml even without root node (ca55c24)

Features

  • add publish feature for podcasts and set draft by default (3d363f2), closes #128 #220
  • admin: add instance wide dashboard with storage and bandwidth usage (b1a6c02), closes #216
  • datetime-picker: set material_green theme to flatpickr (3ce6541)

1.0.0-beta.16 (2022-06-24)

Bug Fixes

  • change image size requirement hints (ea20206)

Features

  • add update rss feed feature for podcasts to import their latest episodes (5eb9dc1), closes #183
  • admin: add search form in podcast episodes list (6be5d12), closes #26
  • api: add rest api with podcasts read endpoints (e64001d), closes #210

1.0.0-beta.15 (2022-06-14)

Bug Fixes

  • replace deletedField with published_at for episodes (14d7d07)

Features

  • add default icons to Alert component (0d98001)
  • add permanent delete feature for podcasts 🎉 (dbb4030), closes #89
  • apply colour theme to embed player (9548337), closes #201
  • episodes: replace soft delete with permanent delete (eb9ff52)

1.0.0-beta.14 (2022-04-23)

Bug Fixes

  • home: remove hardcoded prefix in getAllPodcasts query (92d5cc5)
  • overwrite common lang function to escape returned string (4c490c1), closes #196 #198

Features

  • i18n: add Spanish to supported locales (e340b54)

1.0.0-beta.13 (2022-04-14)

Bug Fixes

  • rss: remove escaping for publisher and owner name (e2046e4)
  • use UTC_TIMESTAMP() to get current utc date instead of NOW() in sql queries (853a6ba)

Features

  • i18n: add Norwegian Nynorsk to supported locales (744340d)

1.0.0-beta.12 (2022-04-05)

Bug Fixes

  • update form_textarea to prevent escaping value (78548b5)

Features

  • i18n: add support for German and Brazilian Portuguese languages (19da003)

1.0.0-beta.11 (2022-04-01)

Bug Fixes

  • change message upon cancellation of episode publication (9859c74)
  • prefill description footer input when creating a new episode (9ea5ca3)
  • remove value escaping for form inputs and textareas (bc6dea2)
  • restore default podcast icon on public website (342778b)
  • socialinteract: move social interact uri into uri attribute + update social data upon import (12b2200)

Features

  • analytics-gdpr: update cached personal data to expire at midnight (0188b67)
  • analytics: add current date and secret salt to analytics hash for improved privacy (6f2e7c0)
  • i18n: add 7 new languages + update german translations (d021abb)
  • i18n: add german language as supported locale + create Language files from english source (c220b31)
  • icons: add podnews icon to podcasting platforms (5f42355), closes #190

1.0.0-beta.10 (2022-03-15)

Bug Fixes

  • add explicit int conversion when formatting episode duration (1253096)
  • add href to castopod website on login page (cc54257)
  • move html escaping on credits page (fbffdbd)
  • remove cache from remote follow form to display error messages (90e4443)

Features

  • add autofocus to input field "Email or username" on login page (19caed4)
  • add WebSub module for pushing feed updates to open hubs (10d3f73)
  • GDPR: add GDPR.yml file to public/.well-known/ (86bccc3)

1.0.0-beta.9 (2022-03-04)

Bug Fixes

  • cache: delete posts and comments pages cache when updating platform links (f7c3e5b), closes #169
  • escape characters for min in format_duration_symbol (3b6722a)
  • security: add csrf filter + prevent xss attacks by escaping user input (cd2e1e1)
  • update ivoox podcasting icon (f2b69a4)
  • video-clips: update condition to check if ffmpeg is installed (b57f0b6), closes #163

Features

  • i18n: add Polish translation (2d83b44)
  • icons: add default icons for podcasting, social and funding platforms + remove complex icons (5bcdfeb), closes #166 #167 #170
  • make episode description more visible on episode pages (90533be), closes #171
  • podcasting 2.0: update podcast:social tag to adhere to latest spec (a597cf4)

1.0.0-beta.8 (2022-02-10)

Features

  • podcast-form: add new_feed_url field to set an url when changing domain or host (e7eec48)

1.0.0-beta.7 (2022-02-05)

Bug Fixes

  • activitypub: allow cors on get requests for routes exposing acitivitypub objects (2f24809)
  • fediverse: set model instances as non shared to prevent overlapping (91128fa)
  • htaccess: add ? after index.php in RewriteRule (d9d139e), closes #152

Features

  • home: sort podcasts by recent activity + add dropdown menu to choose between sorting options (7b89da6), closes #164

1.0.0-beta.6 (2022-02-03)

Bug Fixes

  • activitypub: add conditions for possibly missing actor properties + add user-agent to requests (8fbf948)
  • activitypub: add target actor id to like / announce activities to send directly to note's actor (962dd30)
  • activitypub: add target_actor_id for create activity to broadcast post reply (0128a21)
  • http-signature: update SIGNATURE_PATTERN allowing signature keys to be sent in any order (b7f285e)
  • install: set message block on forms to show error messages (3a0a20d), closes #157
  • markdown-editor: remove unnecessary buttons for podcast and episode editors + add extensions (9c4f60e)
  • podcast-activity: check if transcript and chapters are set before including them in audio (5855a25)
  • podcast: use markdown description value for editor + set prose class to about description (f304d97), closes #156

1.0.0-beta.5 (2022-01-31)

Bug Fixes

  • analytics: set initial value for duration and bandwidth (ee50539)

1.0.0-beta.4 (2022-01-29)

Bug Fixes

  • housekeeping: replace the use of GLOB_BRACE with looping over file extensions (42d92d0), closes #154
  • housekeeping: set default sizes value + ignore illegal IFD size error to proceed with script (f21ca57)

Features

  • housekeeping: add clear_cache option to flush redis or files cache (99bfac0)

1.0.0-beta.3 (2022-01-28)

Bug Fixes

  • revert to beta.1's codeigniter4 version (e831411)

1.0.0-beta.2 (2022-01-28)

Bug Fixes

  • migrations: ignore invalid utf8 chars for media files metadata + update transcript parser (45e8f99)
  • video-clips: set audio codec to aac, fixing audio issue on twitter (3c22c68)
  • video-clips: set longer podcast and episode lengths for squared format (c030113)

1.0.0-beta.1 (2022-01-23)

Bug Fixes

  • a11y: replace active tab color to contrast with background on podcast and episode pages (f3785e1)
  • activity-pub: cache issues when navigating to activity stream urls (7bcbfb3)
  • activity-pub: get database records using new model instances (92536dd)
  • activitypub: set created_by to null for reblog if no user + update episode oembed data (209dfbd)
  • add admin-audio-player to vite config to have admin player show up (93cb9b2)
  • add application/octet-stream mimetype to mp3 and m4a extensions to prevent ext_in error (339bef8), closes #145
  • add category_label component to include parent category in about podcast page (74e7d68)
  • add head request to analytics_hit route (f0a2f0b)
  • add missing explicit badge for podcasts and episodes (cdf9f9d)
  • add open graph size for podcast images to replace the inadequate large format (33aae1f)
  • add public/media folder to castopod bundle (8053d35), closes #52
  • add translation key for audio-clipper trim labels (db191ac)
  • add where condition to get episode count without deleted episodes (7661734), closes #67
  • admin: save block and lock switches (b66c0af)
  • analytics: redirect to mp3 file even when referer was not set (9fc388d)
  • analytics: remove charts empty values + remove useless language cache (1678794)
  • analytics: set duration field to precise decimal as episode's audio file duration (d772685)
  • analytics: update migrations to set decimal precision for latitude and longitude (714d6b5)
  • analytics: update service management so that it works with new OPAWG slug values (7fe9d42)
  • audio-clipper: add mouse position offset when stretching clip to prevent content from jumping (602654b)
  • audio-clipper: show audio playing progress + put waveform behind audio clipper (01a09dc)
  • avatar: use default avatar when no avatar url has been set (9d23c7e), closes #111
  • bundle: include modules and themes when copying files with rsync (cd5bb88)
  • bundle: update vite input files path + add set -e in bash scripts to fail if command fails (0ee53c7)
  • cache: add locale for podcast and episode pages + clear some persisting cache in models (9cec8a8), closes #42 #61
  • cache: return a non cached view when connected (e2e7358)
  • cache: suffix cache names with authenticated for credits, map and pages (418a70b)
  • cast actor_id to pass as int to set_interact_as_actor() function (56a8e5d)
  • category: remove uncategorized option to enforce users in choosing a category (8c64f25)
  • check for database connection and podcasts table existence before redirecting to install (eb74e81)
  • check that additional files are valid when creating episode (eac5bc8)
  • check that note has a preview_card_id before displaying it (acb8b3a), closes #114
  • clear cache when deleting podcast banner (99bb40b)
  • comment all cache clean after page update to prevent analytics cache deletion (e6197a4)
  • comments: add comment view partials for public pages (fcecbe1)
  • correct chart data (4d3e9c8)
  • correct percona compatibility issue (e53f819)
  • correct php-fpm issues (1ef55d7)
  • correct referrer bug (ed69b2f)
  • correction for servers with low int precision (31b7828)
  • cors: add preflight option routes for episode, podcast and status objects (a281abf)
  • declare typed properties in PHPDoc for php<7.4 (14dd44d), closes #23
  • define podcast_id and platform_slug as foreign keys in podcasts_plaforms table (6e9451a)
  • define podcastNamespaceLink value (0d744d2)
  • embeddable-player: enable any ancestor when X-Frame-Options is set on server (44a4962)
  • embed: open embedded player's links in new tab (4aa73d7)
  • episode-form: show warning to set memory_limit, upload_max_filesize & post_max_size (3b3c218), closes #5 #86
  • episodeCount: add missing brackets to French language file (c1b4112)
  • episode: replace guid's empty string value to null (441052a)
  • episodes-page: handle defaultQuery being null when no podcast episodes (15183b7), closes #100
  • episodes-table: set descriptions to be not null (6774ec1)
  • episodes: add publication status + set publication date to null when none has been set (d882981), closes #70
  • escape generated feed tag values and remove new lines from public pages meta description (6238a43), closes #57 #46
  • expire default query cache upon scheduled episode publication (b72e7c8), closes #81
  • fix layout bugs in admin and update translation files (a834171), closes #40
  • follow: add missing helpers to Actor controller (ee53a73)
  • handle HEAD requests on podcast_feed route (74b2640), closes #79
  • images: set default mimetype if none is specified when getting size info (6e4acc6)
  • import-with-escaped-characters: remove \CodeIgniter\HTTP\URI in download_file, closes #103 (35b5be0)
  • import: add extension when downloading file without + truncate slug if too long (c5f18bb)
  • import: add validation for handle field to prevent Router.invalidParameterType error (5bf7200), closes #119
  • import: cast description's SimpleXMLElement to string (02d17be)
  • import: remove query string from files url (109c4aa)
  • import: save media files during podcast import + set missing media fields (a9989d8)
  • import: set episode and season numbers to null when not present in item tag (3211398)
  • import: use tag when no itunes:image is present (20e607a)
  • include missing variables on public ui's episode page and remote_actions (193b373)
  • install: redirect manually to install wizard on first visit (2ceaaca)
  • install: redirect to host_url install route on instanceConfig validation error (99250b1)
  • install: redirect to input baseUrl after instance config (2426af7), closes #53
  • interact-as: set actor_id instead of podcast id upon login event (5dfade7), closes #104
  • json-ld: add missing properties to PodcastSeries object (e97266c)
  • keep subtitle line breaks when parsing srt file to json (cfb3da6)
  • layouts: replace holy-grail layout with tailwind config + widen public podcast layout (be5a287)
  • map: update episode markers query to discard unpublished episodes (b3caac4)
  • md-editor: build new markdown editor with lit + github/markdown-toolbar-element (9ec1cb9), closes #93 #94 #120
  • minor corrections (13be386)
  • move analytics to helper (d311917)
  • multiselect: add missing class names in choices options for purge to work properly (719538d)
  • open-graph: replace non existant episode description to podcast description in podcast page (b02584e)
  • package.json: update destination of postcss generation scripts (21413f8)
  • pages: add locale to page cache (8f999ce)
  • partner: set correct image URL (61554be)
  • pass timezone to relative time component to show the localized time in the UI (b9db936)
  • persons: prevent overflow of persons list by adding horizontal scroll (9e8995d)
  • persons: set person picture as optional for better ux (7fdea63), closes #125
  • platforms: display platform link only when visible is toggled on (6e503c8), closes #39
  • podcast-import: move guid attribute declaration for Episode entity to include slug data (5d02ae3)
  • pwa: add scope to webmanifests to allow installing an app per podcast (74c683e)
  • pwa: set app display as standalone in the webmanifests (7aa37d2)
  • re-order graph values (35f633b)
  • redirect to non cached views when authenticated in public views (482b47b)
  • release: add missing version number to castopod-host package (8f3e9d9)
  • remove defer from js script declaration as it is a module (18ae557)
  • remove fixed size from podcast sidebar + rearrange account info + space out import radio inputs (776eec6)
  • remove required for other_categories field and add podcast_id to latest podcasts query (5417be0)
  • remove required property to persons picture (c546be3), closes #125
  • rename field status to task_status to get scheduled activities (4ff82a5)
  • rename issue_templates labels (9f00305)
  • rename MyAccount controller file (e109df3), closes #60
  • rename podcast name to podcast handle to clarify field usage (9dd4c77), closes #126
  • reorder fields as composite primary keys for analytics tables (9660aa9)
  • replace getWebEnclosureUrl with getEnclosureWebUrl (8122cea)
  • replace hardcoded style links with vite service + set default value for remote transcript url (3f2e056), closes #149 #150
  • replace website key for webpages in breadcrumb translate file (50e32ff)
  • rewrite regenerate image function to use saveSizes method from Image entity (3889912)
  • rss-import: add Castopod user-agent, handle redirects for downloaded files, add Content namespace (214243b)
  • rss: cast number type values to string in rss_helper (7180ae9), closes #148
  • rss: do not escape podcast and episode titles in the xml (0dd3b7e), closes #138 #71
  • rss: set ❬itunes:author❭ tag to owner_name if publisher not specified (2271c14), closes #96
  • rss: use originalPath instead of originalMediaPath in Image library (b4012b7)
  • save transcript and chapters files to podcasts folder (63f49c7)
  • set cache expiration to next note publish to show note on publication date (0a66de3)
  • set episode description footer to null when empty value (3a7d97d)
  • set episode duration translation to hardcoded english (c39efc9), closes #64
  • set episode guid upon episode creation (ad8b153), closes #48
  • set episode numbers during import + remove all custom form_helpers + minor ui issues (99a3b8d)
  • set localized slug_field key as string in french language (17fb29b)
  • set location to null when getting empty string (71b1b5f)
  • settings: add .jpg extension to site-icon file input to display all jpeg images (f611a16)
  • sort episodic podcasts by season (d7b6794)
  • themes: update themes stylesheet route and remove css extension (e4e7e00)
  • types: update fake seeders types + fix bugs (76a4bf3)
  • unpublish episode before deleting it + add validation step before deletion (f75bd76), closes #112 #55
  • update .htaccess for shared hosting config (2379826)
  • update broken contributor dropdown fields (e5b7515)
  • update condition in AnalyticsTrait (fbc0967)
  • update condition in home controller to redirect to install page (33f1b91)
  • update conditions when checking for empty max_episodes and season_number (fbad0b5)
  • update iso-369 language table seeder (0c90db4)
  • update MarkdownEditor component + restyle Button and other components (b05d177)
  • update purgecss content path for php helper files (eb70bb4), closes #59
  • update translations for settings' tasks to include what they should be used for (06b1a8b)
  • use slash instead of backslash to call layout (a80adb2)
  • ux: allow for empty message upon episode publication and warn user on submit (33d01b8), closes #129
  • ux: redirect user to install page on database error in home page (9017e30)
  • video-clips: check if created video exists before recreating it and failing (dff1208)
  • video-clips: clear video clip cache after process has finished (3ae6232)
  • video-clips: create unique temporary files for resources to be deleted after generation (7f7c878)
  • video-clips: tweak portrait parameters to have subtitles display without overflowing (2385b1a)
  • xml-editor: escape xml editor's content + restyle form sections to prevent overflowing (588590b)

Features

  • activitypub: add Podcast actor and PodcastEpisode object with comments (9e1e5d2)
  • add alternate rss feed link tag to podcast page head (a973c09), closes #35
  • add analytics and unknown useragents (ec92e65)
  • add audio-clipper toolbar + add video-clip-previewer (0255753)
  • add audio-clipper webcomponent (wip) (21d4251)
  • add basic stats on podcast about page (1670558)
  • add breadcrumb in admin area (7fb1de2), closes #17
  • add cache to ActivityPub sql queries + cache activity and note pages (2d297f4)
  • add CDN url (972bcbf), closes #37
  • add codemirror to display xml editor for custom rss field (f15f262)
  • add cumulative listening time charts (588b4d2)
  • add DropdownMenu component + remove global audio player in admin (abb7fba)
  • add episode_numbering() component helper to display episode and season numbers (3f4a6bd)
  • add french translation (196920d)
  • add heading component + update ecs rules to fix views (23bdc6f)
  • add housekeeping task to run after migrations (89dee41)
  • add install wizard form to bootstrap database and create the first superadmin user (cba871c), closes #2
  • add ISO 3166 country codes (97cd94b)
  • add js audio player on podcast, admin and embeddable player pages + fix admon episodes ux (0e14eb4), closes #131
  • add lock podcast according to the Podcastindex podcast-namespace to prevent unauthozized import (72b3012)
  • add map analytics, add episodes analytics, clean analytics page layout, translate countries (07eae83)
  • add media entity and link documents, images and audio files to it (6ecf286)
  • add Noto Sans Mono font to use for durations + button to access new video clip form in list (7609bb6)
  • add npm for js dependencies + move src/ files to root folder (cbb83a6)
  • add Open Graph and Twitter meta tags (af970b8), closes #41
  • add pages table to store custom instance pages (eg. legal-notice, cookie policy, etc.) (9c224a8), closes #24
  • add platform models (a333d29)
  • add platforms form in podcast settings (043f49c)
  • add platforms tables (ce59344)
  • add podcast banner field for each podcast + refactor images configuration (4a8147b)
  • add remote_url alternative for transcript and chapters files (3143c9a)
  • add replied to post or comment to reply element (d0f9c60)
  • add schema.org json-ld objects to podcasts, episodes, posts and comments pages (902f959)
  • add task to housekeeping setting for resetting all instance counts (9303e51)
  • add unique listeners analytics (3a49258)
  • add user permissions and basic groups to handle authorizations (d58e518), closes #3 #18
  • admin: make header stick on scroll and show title + action buttons using css only (d60498c)
  • admin: update admin layout for better ux + update brand pine colors (d86142e)
  • allow cross origin requests on episode comments (e12f95a)
  • analytics: add 'other' group to pie charts in order to display more accurate data (73acef9)
  • analytics: add charts and data export (78625c4)
  • analytics: add service name from rss user-agent (7202b98)
  • analytics: add weekday and hour bar charts (8ab3132)
  • build hashed static files to renew browser cache (37c54d2), closes #107
  • cache: add podcast and episode pages to cache + clear them after insert or update (da0f047)
  • categories: create model, entity, migrations and seeds (f73b042)
  • clips: setup clip entities and model + save video clip to have it generated in the background (2f6fdf9)
  • comments: add comments to episodes + update naming of status to post (bb4752c)
  • comments: add like / undo like to comment + add comment page (0c187ef)
  • components: add custom view renderer with ComponentRenderer adapted from bonfire2 (a95de8b)
  • create optimized & resized images upon upload (02e4441), closes #6
  • custom-rss: add custom xml tag injection in rss feed for ❬channel❭ and ❬item❭ (6ecdaad)
  • devcontainer: add devcontainer settings for dev environment (69e7266)
  • display castopod version in admin footer (9f2574e), closes #68
  • display legal disclaimer and warning on podcast import page (2f07992), closes #34
  • edit + delete podcast and episode (ac5f0c7)
  • embeddable-player: add embeddable player widget (141788f)
  • enhance admin ui with responsive design and ux improvements (2d44b45), closes #31 #9
  • enhance ui using javascript in admin area (c0e66d5)
  • episodes: add create form and view pages for episode (f3b2c8b), closes #1
  • episodes: add migrations, model and entity for episodes table (0444821)
  • episodes: replace all audio file URL parameters with base64 encoded data (e1f65cd)
  • episodes: schedule episode with future publication_date by using cache expiration time (4f1e773), closes #47
  • fediverse: implement activitypub protocols + update user interface (2f525c0), closes #69 #65 #85 #51 #91 #92 #88
  • fonts: replace Montserrat with Inter for better readablity (bfa11d0)
  • import podcast from an rss feed url (9a5d5a1), closes #21
  • integrate stylized form components and update podcast edit page (6536729)
  • make displayed publication time as relative time using @github/time-elements (230e139)
  • map: display geolocated episodes on a map page (4357cc2)
  • media: clean media api + create an entity per media type (fafaa7e)
  • media: save audio, images, transcripts and chapters to media for episode and persons (58e2a00)
  • meta-tags: add activitypub alternate links to podcast, episode, comment and post pages (bd61752)
  • minor corrections to some tables (3bf9420)
  • monetization: add Web Monetization support (96a6026)
  • nodeinfo2: add .well-known route for nodeinfo2 containing metadata about the castopod instance (88fddc8)
  • partner: add link and image in episode description (ad07bb9)
  • person: add podcastindex.org namespace person tag (8acd011)
  • platforms: add AntennaPod (53e9cfd)
  • platforms: add Fediverse and some funding platforms, add link on logo (afc3d50)
  • platforms: add helloasso (16cb993)
  • platforms: add missing newpodcastapps.com's platforms (92dd370)
  • platforms: add pod.link (3d7a232)
  • platforms: add Podcast Index (ad52b1c)
  • platforms: add podfriend (9fdc8d3)
  • podcast-form: update routes and redirect to podcast page (12ce905)
  • podcast: create a podcast using form (1202ba3)
  • prefill season and episode numbers + set episode number as mandatory for serial podcasts (07d740b), closes #134 #136
  • public-ui: adapt public podcast and episode pages to wireframes (40a0535), closes #30 #13
  • pwa: add service-worker + webmanifest for each podcasts to have them install on devices (fee2c1c)
  • redesign public podcast and episode pages + remove any information clutter for better ux (9321400)
  • replace form helper functions with components in admin template (e64548b)
  • replace slug field with interactive permalink component (578022b)
  • restyle episode and person cards + add focus style to interactive elements for a11y (a505a1d)
  • rss: add ˂podcast:guid˃ tag for channel (1fab10e)
  • rss: add podcast-namespace tags for platforms + previousUrl tag (dbba8dc), closes #73 #75 #76 #80
  • rss: add podcast:comments tag to link to episode comments (32e8c7c)
  • rss: add podcast:location tag (c0a2282)
  • rss: add soundbites according to the podcastindex specs (6b34617), closes #83
  • rss: add transcript and chapters support (e769d83), closes #72 #82
  • rss: generate rss feed from podcast entity (c815ecd)
  • rss: update monetization tag so that it meets PodcastIndex requirements (4c7ecbe)
  • select: enhance select input with choices.js (910d457)
  • set app parameter forceGlobalSecureRequests = true forcing requests to go through https (d9dff1b)
  • set podcast / episode description in the pages description meta tag (1c4a504), closes #44
  • settings: add general config for instance (site name, description and icon) (5c56f3e)
  • settings: add theme settings to set an accent color for all public pages (5c529a8)
  • simplify podcast page's layout for better ux (2c0efc6)
  • soundbites: add soundbite list and creation forms with audio-clipper component (de19317)
  • style file inputs using tailwind's file class (8208ab6)
  • themes: add ViewThemes library to set views in root themes folder (7a27676)
  • themes: set different default banner per theme (11c916f)
  • themes: set generic css variables for colors to enable instance themes (a746a78)
  • toggle podcast sidebar on smaller screens (f0205ec)
  • transcript: parse srt subtitles into json file + add max file size info below audio file input (0098761)
  • ui: create ViewComponents library to enable building class and view files components (94872f2)
  • update analytics so to meet IABv2 requirements (03e23a2), closes #10
  • update pine colors + create charts components (a50abc1)
  • users: add myth-auth to handle users crud + add admin gateway only accessible by login (c63a077), closes #11
  • ux: remove admin dashboard and redirect directly to podcast list (27c48b8)
  • video-clip: add video-clip page with video preview + logs (42538dd)
  • video-clip: generate video clips in the bg using a cron job + add video clip page + tidy up UI (db0e427)
  • video-clips: add dimensions for portrait and squared formats (3af404d)
  • video-clips: add new themes + add castopod logo as a watermark (1d1490b)
  • video-clips: add route for scheduled video clips + list video clips with status (2065ebb)
  • video-clips: allow episodeNumbering text to stand in the indent of episodeTitle paragraph (71a063d)
  • video-clips: generate a 16:9 video using ffmpeg (35aa7ea)
  • video-clips: generate subtitles clip using transcript json to have subtitles accross video (3ce07e4)
  • video-clips: replace hardcoded colors with config's theme colors (e462abf)
  • vite: add vite config to decouple it from CI_ENVIRONMENT (8721719)
  • write id3v2 tags to episode's audio file (4651d01)

Performance Improvements

  • cache: update CI4 to use cache's deleteMatching method (54b84f9)
  • cache: use deleteMatching method to prevent forgetting cached elements in models (76afc0c)
  • defer javascript + lazy load images for faster page loads (f0685e4)
  • docker: add redis caching service for development (05ace8c)

Reverts

  • set deprecated config options back in App config (433745f)
  • soundbites: remove soundbite table from episode's public page (5dc0f19)
  • use basic input file for episodes audio files instead of button for better UX (d5f22fb)

BREAKING CHANGES

  • analytics: analytics_podcasts_by_player table and analytics_podcasts procedure were updated

1.0.0-alpha.80 (2021-12-29)

Bug Fixes

  • add application/octet-stream mimetype to mp3 and m4a extensions to prevent ext_in error (339bef8), closes #145

1.0.0-alpha.79 (2021-12-20)

Bug Fixes

  • import: set episode and season numbers to null when not present in item tag (3211398)

1.0.0-alpha.78 (2021-12-15)

Bug Fixes

  • import: add extension when downloading file without + truncate slug if too long (c5f18bb)

1.0.0-alpha.77 (2021-11-23)

Bug Fixes

  • cors: add preflight option routes for episode, podcast and status objects (a281abf)
  • podcast-import: move guid attribute declaration for Episode entity to include slug data (5d02ae3)

1.0.0-alpha.76 (2021-10-26)

Bug Fixes

  • replace hardcoded style links with vite service + set default value for remote transcript url (3f2e056), closes #149 #150

1.0.0-alpha.75 (2021-10-05)

Bug Fixes

  • rss: cast number type values to string in rss_helper (7180ae9), closes #148

1.0.0-alpha.74 (2021-09-28)

Features

  • platforms: add missing newpodcastapps.com's platforms (92dd370)

1.0.0-alpha.73 (2021-09-22)

Bug Fixes

  • map: update episode markers query to discard unpublished episodes (b3caac4)

1.0.0-alpha.72 (2021-09-20)

Bug Fixes

  • rename field status to task_status to get scheduled activities (4ff82a5)

1.0.0-alpha.71 (2021-09-17)

Features

  • map: display geolocated episodes on a map page (4357cc2)

1.0.0-alpha.70 (2021-08-31)

Bug Fixes

  • partner: set correct image URL (61554be)

1.0.0-alpha.69 (2021-08-23)

Bug Fixes

  • import: cast description's SimpleXMLElement to string (02d17be)

1.0.0-alpha.68 (2021-08-19)

Bug Fixes

  • analytics: redirect to mp3 file even when referer was not set (9fc388d)

1.0.0-alpha.67 (2021-07-24)

Features

  • allow cross origin requests on episode comments (e12f95a)

1.0.0-alpha.66 (2021-07-24)

Features

  • rss: add podcast:comments tag to link to episode comments (32e8c7c)

1.0.0-alpha.65 (2021-07-22)

Bug Fixes

  • update conditions when checking for empty max_episodes and season_number (fbad0b5)

1.0.0-alpha.64 (2021-07-12)

Features

  • activitypub: add Podcast actor and PodcastEpisode object with comments (9e1e5d2)

1.0.0-alpha.63 (2021-07-12)

Features

  • build hashed static files to renew browser cache (37c54d2), closes #107

1.0.0-alpha.62 (2021-07-02)

Bug Fixes

  • episode: replace guid's empty string value to null (441052a)

1.0.0-alpha.61 (2021-06-23)

Bug Fixes

  • release: add missing version number to castopod-host package (8f3e9d9)
  • ux: allow for empty message upon episode publication and warn user on submit (33d01b8), closes #129

1.0.0-alpha.60 (2021-06-21)

Features

  • rss: add ˂podcast:guid˃ tag for channel (1fab10e)

1.0.0-alpha.59 (2021-06-15)

Bug Fixes

  • check that additional files are valid when creating episode (eac5bc8)

1.0.0-alpha.58 (2021-06-11)

Bug Fixes

  • cast actor_id to pass as int to set_interact_as_actor() function (56a8e5d)
  • analytics: set duration field to precise decimal as episode's audio file duration (d772685)
  • analytics: update migrations to set decimal precision for latitude and longitude (714d6b5)
  • check for database connection and podcasts table existence before redirecting to install (eb74e81)
  • save transcript and chapters files to podcasts folder (63f49c7)
  • set cache expiration to next note publish to show note on publication date (0a66de3)
  • set episode description footer to null when empty value (3a7d97d)
  • set location to null when getting empty string (71b1b5f)
  • update condition in home controller to redirect to install page (33f1b91)
  • activity-pub: cache issues when navigating to activity stream urls (7bcbfb3)
  • activity-pub: get database records using new model instances (92536dd)
  • category: remove uncategorized option to enforce users in choosing a category (8c64f25)
  • install: redirect manually to install wizard on first visit (2ceaaca)
  • types: update fake seeders types + fix bugs (76a4bf3)
  • update broken contributor dropdown fields (e5b7515)
  • ux: redirect user to install page on database error in home page (9017e30)
  • update condition in AnalyticsTrait (fbc0967)

Performance Improvements

  • cache: use deleteMatching method to prevent forgetting cached elements in models (76afc0c)

Reverts

  • set deprecated config options back in App config (433745f)

1.0.0-alpha.57 (2021-05-12)

Bug Fixes

  • follow: add missing helpers to Actor controller (ee53a73)

1.0.0-alpha.56 (2021-05-12)

Bug Fixes

  • rss: use originalPath instead of originalMediaPath in Image library (b4012b7)

1.0.0-alpha.55 (2021-05-03)

Features

  • add remote_url alternative for transcript and chapters files (3143c9a)

1.0.0-alpha.54 (2021-05-03)

Features

  • set app parameter forceGlobalSecureRequests = true forcing requests to go through https (d9dff1b)
  • ux: remove admin dashboard and redirect directly to podcast list (27c48b8)
  • add cache to ActivityPub sql queries + cache activity and note pages (2d297f4)

Performance Improvements

  • cache: update CI4 to use cache's deleteMatching method (54b84f9)
  • docker: add redis caching service for development (05ace8c)

1.0.0-alpha.53 (2021-04-16)

Bug Fixes

  • check that note has a preview_card_id before displaying it (acb8b3a), closes #114

1.0.0-alpha.52 (2021-04-16)

Bug Fixes

  • avatar: use default avatar when no avatar url has been set (9d23c7e), closes #111

1.0.0-alpha.51 (2021-04-15)

Bug Fixes

  • interact-as: set actor_id instead of podcast id upon login event (5dfade7), closes #104

1.0.0-alpha.50 (2021-04-14)

Bug Fixes

  • persons: prevent overflow of persons list by adding horizontal scroll (9e8995d)

1.0.0-alpha.49 (2021-04-12)

Bug Fixes

  • multiselect: add missing class names in choices options for purge to work properly (719538d)

1.0.0-alpha.48 (2021-04-10)

Bug Fixes

  • import-with-escaped-characters: remove \CodeIgniter\HTTP\URI in download_file, closes #103 (35b5be0)

1.0.0-alpha.47 (2021-04-10)

Bug Fixes

  • episodeCount: add missing brackets to French language file (c1b4112)

1.0.0-alpha.46 (2021-04-09)

Bug Fixes

  • episodes-page: handle defaultQuery being null when no podcast episodes (15183b7), closes #100

1.0.0-alpha.45 (2021-04-08)

Bug Fixes

  • add head request to analytics_hit route (f0a2f0b)

1.0.0-alpha.44 (2021-04-08)

Bug Fixes

  • rss: set ❬itunes:author❭ tag to owner_name if publisher not specified (2271c14), closes #96

1.0.0-alpha.43 (2021-04-08)

Bug Fixes

  • episode-form: show warning to set memory_limit, upload_max_filesize & post_max_size (3b3c218), closes #5 #86

1.0.0-alpha.42 (2021-04-02)

Features

1.0.0-alpha.41 (2021-03-30)

Features

  • partner: add link and image in episode description (ad07bb9)

1.0.0-alpha.40 (2021-03-19)

Features

  • custom-rss: add custom xml tag injection in rss feed for ❬channel❭ and ❬item❭ (6ecdaad)

1.0.0-alpha.39 (2021-03-01)

Bug Fixes

  • embeddable-player: enable any ancestor when X-Frame-Options is set on server (44a4962)

1.0.0-alpha.38 (2021-02-27)

Features

  • embeddable-player: add embeddable player widget (141788f)

1.0.0-alpha.37 (2021-02-17)

Bug Fixes

  • import: remove query string from files url (109c4aa)

1.0.0-alpha.36 (2021-02-16)

Features

  • platforms: add pod.link (3d7a232)

1.0.0-alpha.35 (2021-02-12)

Bug Fixes

  • admin: save block and lock switches (b66c0af)

1.0.0-alpha.34 (2021-02-11)

Bug Fixes

  • rss-import: add Castopod user-agent, handle redirects for downloaded files, add Content namespace (214243b)

1.0.0-alpha.33 (2021-02-10)

Features

  • platforms: add helloasso (16cb993)

1.0.0-alpha.32 (2021-02-10)

Features

  • person: add podcastindex.org namespace person tag (8acd011)

1.0.0-alpha.31 (2020-12-23)

Features

  • rss: add podcast:location tag (c0a2282)

1.0.0-alpha.30 (2020-12-21)

Features

  • rss: update monetization tag so that it meets PodcastIndex requirements (4c7ecbe)

1.0.0-alpha.29 (2020-12-10)

Bug Fixes

  • episodes: add publication status + set publication date to null when none has been set (d882981), closes #70

Reverts

  • soundbites: remove soundbite table from episode's public page (5dc0f19)

1.0.0-alpha.28 (2020-12-07)

Features

  • rss: add soundbites according to the podcastindex specs (6b34617), closes #83

1.0.0-alpha.27 (2020-12-07)

Features

  • platforms: add AntennaPod (53e9cfd)

1.0.0-alpha.26 (2020-11-30)

Bug Fixes

  • analytics: update service management so that it works with new OPAWG slug values (7fe9d42)

1.0.0-alpha.25 (2020-11-30)

Features

  • platforms: add podfriend (9fdc8d3)

1.0.0-alpha.24 (2020-11-26)

Features

  • monetization: add Web Monetization support (96a6026)

1.0.0-alpha.23 (2020-11-24)

Bug Fixes

  • define podcastNamespaceLink value (0d744d2)

1.0.0-alpha.22 (2020-11-24)

Features

  • rss: add transcript and chapters support (e769d83), closes #72 #82

1.0.0-alpha.21 (2020-11-24)

Features

  • platforms: add Fediverse and some funding platforms, add link on logo (afc3d50)

1.0.0-alpha.20 (2020-11-24)

Bug Fixes

Features

  • rss: add podcast-namespace tags for platforms + previousUrl tag (dbba8dc), closes #73 #75 #76 #80

1.0.0-alpha.19 (2020-11-13)

Bug Fixes

  • handle HEAD requests on podcast_feed route (74b2640), closes #79

1.0.0-alpha.18 (2020-11-09)

Features

  • platforms: add Podcast Index (ad52b1c)

1.0.0-alpha.17 (2020-11-05)

Bug Fixes

  • open-graph: replace non existant episode description to podcast description in podcast page (b02584e)

1.0.0-alpha.16 (2020-11-04)

Features

  • add Open Graph and Twitter meta tags (af970b8), closes #41

1.0.0-alpha.15 (2020-11-03)

Features

  • analytics: add 'other' group to pie charts in order to display more accurate data (73acef9)

1.0.0-alpha.14 (2020-11-02)

Features

  • analytics: add weekday and hour bar charts (8ab3132)

1.0.0-alpha.13 (2020-10-29)

Bug Fixes

  • episodes-table: set descriptions to be not null (6774ec1)

Features

  • add episode_numbering() component helper to display episode and season numbers (3f4a6bd)
  • episodes: replace all audio file URL parameters with base64 encoded data (e1f65cd)

1.0.0-alpha.12 (2020-10-26)

Bug Fixes

  • replace getWebEnclosureUrl with getEnclosureWebUrl (8122cea)

1.0.0-alpha.11 (2020-10-26)

Features

1.0.0-alpha.10 (2020-10-26)

Bug Fixes

  • install: redirect to host_url install route on instanceConfig validation error (99250b1)

1.0.0-alpha.9 (2020-10-26)

Features

  • display castopod version in admin footer (9f2574e), closes #68

1.0.0-alpha.8 (2020-10-22)

Features

  • episodes: schedule episode with future publication_date by using cache expiration time (4f1e773), closes #47

1.0.0-alpha.7 (2020-10-21)

Features

  • analytics: add service name from rss user-agent (7202b98)

BREAKING CHANGES

  • analytics: analytics_podcasts_by_player table and analytics_podcasts procedure were updated

1.0.0-alpha.6 (2020-10-20)

Bug Fixes

  • cache: add locale for podcast and episode pages + clear some persisting cache in models (9cec8a8), closes #42 #61

1.0.0-alpha.5 (2020-10-20)

Features

  • add lock podcast according to the Podcastindex podcast-namespace to prevent unauthozized import (72b3012)

1.0.0-alpha.4 (2020-10-20)

Features

  • analytics: add charts and data export (78625c4)

1.0.0-alpha.3 (2020-10-19)

Bug Fixes

  • analytics: remove charts empty values + remove useless language cache (1678794)

1.0.0-alpha.2 (2020-10-19)

Features

  • add cumulative listening time charts (588b4d2)

1.0.0-alpha.1 (2020-10-16)

Bug Fixes

  • add public/media folder to castopod bundle (8053d35), closes #52
  • add where condition to get episode count without deleted episodes (7661734), closes #67
  • comment all cache clean after page update to prevent analytics cache deletion (e6197a4)
  • correct chart data (4d3e9c8)
  • correct percona compatibility issue (e53f819)
  • correct php-fpm issues (1ef55d7)
  • correct referrer bug (ed69b2f)
  • correction for servers with low int precision (31b7828)
  • declare typed properties in PHPDoc for php<7.4 (14dd44d), closes #23
  • escape generated feed tag values and remove new lines from public pages meta description (6238a43), closes #57 #46
  • fix layout bugs in admin and update translation files (a834171), closes #40
  • minor corrections (13be386)
  • move analytics to helper (d311917)
  • re-order graph values (35f633b)
  • remove required for other_categories field and add podcast_id to latest podcasts query (5417be0)
  • rename issue_templates labels (9f00305)
  • rename MyAccount controller file (e109df3), closes #60
  • reorder fields as composite primary keys for analytics tables (9660aa9)
  • replace website key for webpages in breadcrumb translate file (50e32ff)
  • set episode duration translation to hardcoded english (c39efc9), closes #64
  • set episode guid upon episode creation (ad8b153), closes #48
  • update purgecss content path for php helper files (eb70bb4), closes #59
  • install: redirect to input baseUrl after instance config (2426af7), closes #53
  • platforms: display platform link only when visible is toggled on (6e503c8), closes #39
  • sort episodic podcasts by season (d7b6794)
  • update .htaccess for shared hosting config (2379826)
  • update iso-369 language table seeder (0c90db4)
  • package.json: update destination of postcss generation scripts (21413f8)
  • use slash instead of backslash to call layout (a80adb2)

Features

  • add alternate rss feed link tag to podcast page head (a973c09), closes #35
  • add analytics and unknown useragents (ec92e65)
  • add breadcrumb in admin area (7fb1de2), closes #17
  • add french translation (196920d)
  • add install wizard form to bootstrap database and create the first superadmin user (cba871c), closes #2
  • add ISO 3166 country codes (97cd94b)
  • add map analytics, add episodes analytics, clean analytics page layout, translate countries (07eae83)
  • add npm for js dependencies + move src/ files to root folder (cbb83a6)
  • add pages table to store custom instance pages (eg. legal-notice, cookie policy, etc.) (9c224a8), closes #24
  • add platform models (a333d29)
  • add platforms form in podcast settings (043f49c)
  • add platforms tables (ce59344)
  • add unique listeners analytics (3a49258)
  • add user permissions and basic groups to handle authorizations (d58e518), closes #3 #18
  • create optimized & resized images upon upload (02e4441), closes #6
  • display legal disclaimer and warning on podcast import page (2f07992), closes #34
  • edit + delete podcast and episode (ac5f0c7)
  • enhance admin ui with responsive design and ux improvements (2d44b45), closes #31 #9
  • enhance ui using javascript in admin area (c0e66d5)
  • import podcast from an rss feed url (9a5d5a1), closes #21
  • set podcast / episode description in the pages description meta tag (1c4a504), closes #44
  • update analytics so to meet IABv2 requirements (03e23a2), closes #10
  • cache: add podcast and episode pages to cache + clear them after insert or update (da0f047)
  • categories: create model, entity, migrations and seeds (f73b042)
  • devcontainer: add devcontainer settings for dev environment (69e7266)
  • episodes: add create form and view pages for episode (f3b2c8b), closes #1
  • episodes: add migrations, model and entity for episodes table (0444821)
  • podcast: create a podcast using form (1202ba3)
  • podcast-form: update routes and redirect to podcast page (12ce905)
  • public-ui: adapt public podcast and episode pages to wireframes (40a0535), closes #30 #13
  • rss: generate rss feed from podcast entity (c815ecd)
  • users: add myth-auth to handle users crud + add admin gateway only accessible by login (c63a077), closes #11
  • minor corrections to some tables (3bf9420)
  • write id3v2 tags to episode's audio file (4651d01)

Reverts

  • use basic input file for episodes audio files instead of button for better UX (d5f22fb)