* Replace HAP with AngleSharp, add stream support to WebBrowser
* Fix skipped nullable operator
* Add extension method
* Rename function to be closer to HAP API
* Add JSON deserialization from stream, fix variable names, remove obsolete code
* Add more extension methods
* Fixes after review:
Remove excessive dependency
Move string value to const
Different handling for null and empty cases for confirmations
Use more human-friendly names
* Add http completion options, make GetToStream private
* Cleanup
* Add null checks, make StreamResponse disposable
* Refactor UrlGetToBinaryWithProgress into using UrlGetToStream
First important change is for all requests sent by ASF. Across those 4 years of development I do not remember a single situation where retrying on 4xx status code brought any improvement, bad request has to be handled by us, access denied and not found won't disappear after retry, all other ones are rather unused. Therefore, it makes sense to skip remaining tries on 4xx errors and do not flood the service with requests that are very unlikely to change anything.
Second change is smaller one and it allows the consumer of WebBrowser to declare that he's interested in handling client error codes himself. This way he can add extra logic and appropriately react to them - ASF uses it in statistics module, where the listing can signal refusal to list due to e.g. outdated ASF version through 403. Previously this was treated on the same level as timeout, which wasn't optimal.
* Add Utilities.MarkdownToText()
* Add GET /Api/WWW/MarkdownToText?text={text} and sort usings alphabetically
* Revert sorting usings
* Sort functions
* Remove Log if the user is at fault
* Rename variable and adjust if for errors
Previously ASF joined out-of-range arguments in string commands (input, nickname, owns) using a normal space, now original whitespace is preserved, which is especially useful for including custom whitespace characters in nickname command.