Currently, we simply hash the contents of the file with sha256, but in the future we can use something smarter,
which could find visual feature similarity between images
Introduce Encoder plugins Instead of abstract upload and thumb modules
Ported attachment routes. In v3 thumbnail depends on existing attachment
so route updated accordingly.
Some key points:
- Components and Plugins shouldn't extend Module directly
- Avatars should be fetched via GSActor ID, not by nickname as that isn't unique
- Avatar now is a separate Component
- Common file utilities are now to be placed in Core\GSFile, this will
handle storage and trigger validation
- Some bug fixes