“My RSS Reader” edges closer to release. Spent the whole of yesterday fiddling and tweaking with the code.
I've also “invented” a way of counting the number of lines (NOL) without doing a full rebuild. Imagine this, you wrote your own code, and include other people's components. You want to count the NOL of your own code, but you don't want to include the NOL of other components. What do you do? ;o)
If you compile your code, the Delphi IDE only counts the NOL for files that have changed. So, let's say you've got 5 files, and 4 files contain a total of 3000 lines, and the 5th file contains 300 lines, if you changed the 5th file and do a compile, the Delphi IDE reports only 300 lines compiled.
I've now implemented HTTP conditional GET. So, what else do I need to implement? I need to implement SkipDays and SkipHours. I also need to implement refreshing of feeds automatically. Currently, I do a poll by invoking “Refresh all”. “Refresh all” honours the etag and Last-Modified value-pair of HTTP headers, so in addition, I implemented a “Clear etag” menu that clears all the etag and Last-Modified value-pair of all feeds.
Look at the “My RSS Reader” gallery to see images of the development progress. Remember, you need to click on the image itself to see an enlarged version of it.
In 2017, with the release of Delphi 10.2 Tokyo, Embarcadero introduced a specialized implementation of the Observer pattern into the System.Classes unit. While it has been in the wild for 9 years, it remains a "hidden" architecture for many, primarily because it serves as the invisible engine behind LiveBindings. Other than live bindings, you can also use the Observer pattern as a way to update component settings to the Windows registry, an .ini file, or persist it elsewhere.
System.Classes