I have tamed time filtering and progress display for program loading under heavy volume, but have not integrated multiple filtering (channel and time range), because that's a matter of personal taste.
Here's my Designer view:
I added a Status Label to show where the app is in the progress of receiving and splitting the program listing xml data.
I also added a Horizontal Arrangement with enough in it to set a time range for time based filtering of the program list, to reduce its volume.

To avoid memory overflows and to avoid swamping the Companion connection, I display only summaries while processing unfiltered data.
(I should add another Label to summarize post filtered data, or use it as a .Text of its next filter control.)
To free up the main UI, I added Clock Timers for splitting and filtering.
I use global variables as stepping stones, to capture intermediate results.

Screen1.Initialize:
First I ask for the full XML file. (The site offers no upstream filtering, unfortunately.)
I also prime the time filter components with current time, for later when they are needed.
I also disable the Clock Timer that is not yet ready to Run, because it has no data yet.
When the Web Requested XML arrives ...
I announce the entry into the next phase of the data load, and save the response Content for the next phase. (It's also handy for debugging).
The next phase is being handled in a Clock Timer, to give the UI a chance to update.
The Clock Timer is meant for single shot usage, so I immediately disable it.
I abandoned my shred procedure, in favor of a simpler and faster text split at the front markup of each program. The breaks the XML of the fragments, but they're simple to parse individually using the Taifun parse procedure.

The first item of the split has the channel catalog, which is discarded from the program list. Lastly I announce the list length to mollify the user for waiting so long.
Next post: Filtering the program list.