Skip to content

Releases: h0lg/FOMOcal

Stable selection and highlighted matches

04 Jan 18:46

Choose a tag to compare

This version packs a bunch of process improvements and bug fixes as well as a few new features.

Scrape process

  • The date parser now retries parsing dates for date formats with week day but without year for the next two years instead of just the next year. This avoids scrape errors for events that are more than one year in the future, occurring towards the end of the calendar year if the week day doesn't match with this year's date or next year's.
  • When merging freshly scraped events into existing, previously scraped ones, the comparison used for de-duplication now avoids accidental hash collisions.
  • Furthermore, the entire scraped date range for a venue is now replaced in the existing events to get rid of outdated, canceled events within.
  • When running into an error, you now choose to open, share or ignore the generated error report from a custom action dialog with those options.

Bug fixes

  • A program page failing to load no longer causes a global error (on disposing VenueScrapeContext).
  • Similarly, the first lazy loaded page not containing any events will no longer throw an exception leading to an error report but instead just log a warning.

Event list

  • The header now wraps nicer on narrower screens.
  • Your selection is now stable across filter changes, allowing you to gather events while modifying the filter and exporting them once instead of having to export before a filter change.
  • A new toggle switches between viewing all events or selected events only.
image
  • The export buttons have new tooltips and were re-ordered according to their usefulness to the average user.
  • When filtering events, the matched text parts are now highlighted in the event list - so you can gauge the quality of the match quicker.
image

Venue editor

  • Setting the Name of a new Venue config from the document title of the loaded Program URL now works if the page throws JavaScript errors or times out.
  • The 📜 Scrape logs introduced in v3.1.0 are now correctly initialized empty for new venues.
  • A new 📨 Browser log at the bottom may be useful to debug the configuration process.

Dependency and framework updates

  • The new version targets .NET 10, the new LTS version of the framework.
  • It also includes the usual dependency updates - the biggest one among them being that to MAUI 10.

Full Changelog: v3.1.0...v3.2.0

Scrape diagnostics and de-duplication

29 Nov 02:38

Choose a tag to compare

This release focuses on improving the scrape process by making it more resilient and transparent.
Resilient against misconfiguration or unexpected web page behavior where possible -
and transparent where not - to enable detecting issues, monitor and debug unreliable scrape configurations.

Last ⛏ event count

FOMOcal now records and displays the last scrape's event count next to when it completed in the 🏟 Venues list as well as the Venue editor. This should make identifying faulty venue configurations easier.
The last scrape time display was shortened, unifying the date format with event list and dropping the year.
image

Monitoring scrape process & improved error reports

Both the scraper and the supporting script automating the browser now have some logging in place that enables monitoring the scrape process - to which end the browser script forwards log messages to the scraper. This opens a way for a user or developer to analyze what went wrong if necessary.

image

If scraping fails, the log written in the process as well as the scrape config are now automatically included into the generated error log file, making issues easier to reproduce and debug.

Recording and managing scrape logs

For scrape configs that don't run into an error but don't yield the expected results either, the Venue editor features a new widget to enable recording scrape logs, listing, opening and deleting them.
image

Testing and improving event paging strategies

Some of the supported paging strategies require a rather complex mechanism to decide when to stop paging.
That's because FOMOcal is trying to support the different formats and behaviors of event listings you may encounter out there in the wild - some of which are pretty weird, e.g. venues that list their future events first, then let you page into the past. You wouldn't want to wait for the scrape process to unnecessarily page through the past 20 years of events.
Selected event containers may not contain the necessary information to create an event, i.e. missing a name or date. This may indicate an issue with your scrape config or the web page that hosts the event listing. Either way, you wouldn't want to wait for the scrape process to page through unscrapable rubbish caused by a broken or misconfigured paging mechanism, getting stuck in an ever-lasting loop.
Some venues have a lot of noise in their event listings, like repeating parties or workshops you may have configured to exclude via the event container filter. You'll probably want to continue paging through those - events that interest you may follow.
Some paging strategies load more events into the same page, others different events. That makes determining how many relevant events the last page contained to decide whether it makes sense to continue paging not as easy as one might think.

What's more, duplicate events may occur at any time - again, if the paging is misconfigured or broken/changed or - when a venue lists the same event again on intention, e.g. in a different category. Throwing de-duplication of scraped events into the fun mix of existing conditions required some of the new diagnostic features above - as well as a new test suite for the paging strategies, for which the scraping implementation had to be isolated from the UI framework first. The improved logging and new test suite ended up catching a few bugs in the paging for existing strategies, including some severe ones that would lead to a scrape process never finishing - even if the scenarios are constructed and unlikely.

Venue editor fixes and improvements

Besides the new widget for managing scrape logs, the Venue editor now also enables

  • clearing the attribute of scrape jobs with a default attribute (📰 Event page, 🖼 Image and 🎫 Tickets) - this was broken and not possible before
  • date parsing using different date formats separated by || - for venues that omit the year for events in this year
  • saving new venue configs earlier, independent of event container selector and required event fields - to enable saving configs in a draft state.

Additionally, the skip/take steppers have been replaced with a custom built widget that supports

  • keyboard input and
  • holding the +/- buttons to continue stepping with ever-increasing step size.
image

Apart from that, some scrape job editor labels have been shortened or replaced using icons to require less reading and break up the different entries - and the replace entry now has a helpful placeholder.

image

Configurable browser automation

In line with the work to make the scrape process debuggable, the 🛠Settings page features a new section that allows you to tweak the browser automation timings to your internet or machine speed - if necessary. The new custom stepper really shines here.

image

As always, some dependencies updates are included.
Full Changelog: v3.0.0...v3.1.0

Recent Searches & Replaced Separators

12 Sep 01:16

Choose a tag to compare

This release makes breaking changes

  • in the ScrapeJob replacement separators to avoid collisions with commonly used text characters as well as RegEx control characters.
    Formerly, in order to have Pattern replaced with Replacement and Pattern2 removed without replacement,
    you would write Pattern => Replacement , Pattern2 => .
    Now you'd write Pattern }} Replacement || Pattern2 }} instead.
  • renaming
    • the PagingStrategy NavigateLinkToLoadMore to NavigateLinkToLoadDifferent to avoid confusion about what it does and cleanly distinguish loading more (current events remain) from loading different events (current events vanish)
    • the Venue field WaitForJsRendering to LazyLoaded to simplify and re-establish connection to the Venue editor UI
  • removing support for and migration of the old (pre-v2) XPath selector pattern

Your existing venue configurations are automatically migrated on the first change.

It also

  • fixes the XPath selector detection ignoring prefix casing and preceding whitespace
  • updates a few dependencies
  • enables saving, restoring and deleting recent searches
image

Full Changelog: v2.3.0...v3.0.0

Them Exportables

24 Aug 09:29

Choose a tag to compare

This release packs

  • two new event export formats image
    • HTML outputs an interactive document containing a paged, searchable and sortable table with navigable links making list-style exports containing many events manageable for the end user image
    • plain text outputs a file with one line per selected event in either
      • a condensed, raw form or
      • column-aligned using spaces including the column headers (aligns nicely in fixed-width fonts) image
  • a new Settings page accessible from the Venue list on Desktop to configure image
    • which event details are included in the new export formats and how to order them image
    • the Theme to use in the app independent of the operating system theme image
  • updates for a few dependencies
  • all binaries in a single file to make finding the executable in the app folder easier

Full Changelog: v2.2.0...v2.3.0

Tanz ums Sommerloch

03 Aug 02:06

Choose a tag to compare

This release focuses on features and fixes required for times like the summer season when bands are playing festivals instead of clubs: Venues fill their programs with repeating parties instead of concerts. Removing those parties via a filter in the selector caused a problem if the events were also paged - i.e. loaded in multiple steps according to the paging strategy configured for the venue: If an entire event page contained only events excluded by the filter, the paging for more events would stop or not even start.

New features

  • added a first-class event container filter option to enable
    • simpler selectors and plain-text filters
    • distinguishing between un/filtered events during paging
  • displaying selected and filtered event counts in labels
image
  • added ability to test-run the configured paging strategy in the venue editor to debug loading more events
image
  • added Progress Bars indicating
    • configuration progress until venue is scrapable in venue editor
image
  • progress of refreshing events of all venues in venue list
image

Fixes

  • the conditions for paging events: loading more if the current page contains new, scrapable events that are not already past - instead of if it contained events matching the filters
    • including the issue with paging stopping or not starting if the event filter doesn't match any events on the current page
    • including the issue with paging unnecessarily continuing if events are ordered descending by date and further pages contain older events instead of newer ones
  • the paging for
    • strategy different by clicking <element> to avoid skipping even pages
    • strategy different by navigating link for event pages with lazy-loaded events
    • some venues by positioning the off-screen loader differently
  • the info which page URL an event was scraped from if it doesn't have a detail page URL - for paging strategy different by navigating link

Minor changes

  • sped up scraping by skipping duplicate events early, before scraping their details
  • renamed the venue editor toggle wait for JS rendering to lazy (see screenshot above) to shorten and simplify
  • improved venue editor layout by moving event container preview and paging controls into separate rows
  • removed max value limitation from skip stepper
  • allowing saving venue independent of event container to enable changes without filtered events
  • improved help texts
  • updated a few dependencies

Full Changelog: v2.1.1...v2.2.0

Crashing less and with more style

27 Jun 22:25

Choose a tag to compare

This release

fixes

  • a nasty race condition between animating the pickaxe during scraping and stopping it that sometimes led to an unrecoverable crash, introduced in v2.1.0
  • recovering from a failure to load the already scraped events from the events.json file cache (e.g. caused by a crash during scraping) without manually deleting the file
  • using regexes instead of just plain text for replacements, as promised in the docs
  • displaying the scrape config info reliably on tap in the Venue editor, hiding it if it is already displayed - introduced by help text animation in v2.1.0
  • saving and deleting venue configs in AppShell (UI variant used on narrow screens like phones) after navigating away from the Venue Editor (e.g. to events or opening the program page in a browser) before using the back button

improves layout and styling in the Venue editor

  • selector input: aligning the button that opens the visual selector nicely with the input, increasing its size to make it easier to tap
  • Save and Delete buttons: on the same line, without repetition in labels
  • help texts, also avoiding ending them on an empty line

Full Changelog: v2.1.0...v2.1.1

A little less leaky, a little more linky

17 Jun 21:49

Choose a tag to compare

This release

fixes the behaviour of the toggle to display an empty (i.e. unfocusable) Scrape Job Editor

improves the Date Scrape Job default format to include the short weekday and the corresponding help text to include a description of the most common formats and an example

adds new features

  • linkifying URLs in descriptions of the Event list
  • enabling comments on a Venue config and individual Scrape Jobs

animates the displaying and hiding of

  • the event and scrape job preview or error list
  • the venue and scrape job editor help texts

for a less jarring visual experience

improves security by avoiding potential memory leaks (via undisposed resources and unsubscribed event handlers)
and updates some dependencies.

Full Changelog: v2.0.0...v2.1.0

Pickamulti Xircus

09 Jun 21:45

Choose a tag to compare

Breaking changes

The major change in this release allows for the Selector of a ScrapeJob to select multiple nodes instead of a single HTML element, joining their text contents if it does. That means text nodes - not just HTML tags - can now be selected using XPath syntax.

This will likely break existing ScrapeJob configurations for which the Selector matches more than one element or node,
which may either cause duplication in the output or outright parsing errors e.g. for the Date.

Another big change is that XPath selectors now only need an easier XPATH^ prefix as a hint for the selector syntax - instead of the previous more complicated wrapping expression. Existing selectors will be migrated automatically - which should only rarely cause issues by them selecting something different than they did before.

New features

  • Venue editor
    • added a button to open the event page in a browser
    • made text in the ScrapeJob editor preview and error list selectable - to enable copying it e.g. for RegEx Match or researching errors.
    • enabled overriding Encoding of HTML loaded from a Venue's event page - for when content doesn't match meta tag charset
  • Event list
    • added label featuring number of selected events as feedback
    • enabled deleting selected events

Minor changes

  • Venue editor > Visual Picker: The displayed selector details will - now that the ScrapeJob Selector matches more than one node - also include a position condition for the first selected element.

Minor improvements

  • Venue editor
    • validating a venue's event page URL on navigation failure, appending a hint if validation fails - as feedback the user can work on
    • Visual Picker: removing inversion filter from the picked element - because it may make the content of the picked element unreadable
  • Venue list
    • ordering unscraped (new) venues on top, then by latest refresh - so that a freshly configured venue shows up on top instead of at the bottom
    • enabling parallel refreshes of different individual venues
    • animating pickaxe of individual venues during refresh as a fun activity indicator
  • updated assembly info to include the app name in the label used for Windows task bar context menu

Bug fixes

  • avoiding navigation error when opening editor to add a new Venue (introduced by displaying alert for event page loading errors in v 1.1.0)
  • fixed restoring picked selector detail by applying it to the embedded browser (fixing remembering selector options in a JSON file from v 1.1.0)
  • preventing error caused by selector display text being null when tapping into and out of the selector entry before selecting an element (since always displaying picked selector in v 1.1.0)
  • preventing script error in automated browser during venue configuration by initializing anchor as a selector

Full Changelog: v1.1.0...v2.0.0

Picky Linkage

04 Jun 17:48

Choose a tag to compare

This release improves a few things around

  • event links: if an event has no detail page link, the link for the URL that it was scraped from is recorded and displayed instead
  • visually picking element and selectors:
    • chosen selector options are now remembered across app restarts
    • the picked selector is always displayed, normalized/in-lined if in visual selection mode - to make choosing the right element easier while keeping most of the space available for the embedded browser
    • the embedded browser now features a tooltip about zooming it and opening the Inspector

It will also display an alert for event page loading errors.

Full Changelog: v1.0.2...v1.1.0

Fixed venue editor & exporting .ics

24 May 16:22

Choose a tag to compare

This release

  • fixes several issues that led to errors when adding or editing venue configurations,
  • updates a few dependencies and
  • changes the calendar file export extension from .ical to .ics, which is better supported across different operating systems.

Full Changelog: v1.0.1...v1.0.2