feat(xep): Provide an implementation of XEP-0392
This commit is contained in:
		
							parent
							
								
									4a681b9483
								
							
						
					
					
						commit
						c1c48d0a83
					
				| @ -15,6 +15,10 @@ Documentation is available [here](https://moxxy.org/developers/docs/moxxmpp/). | |||||||
| implements the RFC6120 connection algorithm and XEP-0368 direct TLS connections, | implements the RFC6120 connection algorithm and XEP-0368 direct TLS connections, | ||||||
| if a DNS implementation is given, and supports StartTLS. | if a DNS implementation is given, and supports StartTLS. | ||||||
| 
 | 
 | ||||||
|  | ### moxxmpp_color | ||||||
|  | 
 | ||||||
|  | Implementation of [XEP-0392](https://xmpp.org/extensions/xep-0392.html). | ||||||
|  | 
 | ||||||
| ## Development | ## Development | ||||||
| 
 | 
 | ||||||
| To begin, use [melos](https://github.com/invertase/melos) to bootstrap the project: `melos bootstrap`. Then, the example | To begin, use [melos](https://github.com/invertase/melos) to bootstrap the project: `melos bootstrap`. Then, the example | ||||||
|  | |||||||
							
								
								
									
										30
									
								
								packages/moxxmpp_color/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								packages/moxxmpp_color/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -0,0 +1,30 @@ | |||||||
|  | # Miscellaneous | ||||||
|  | *.class | ||||||
|  | *.log | ||||||
|  | *.pyc | ||||||
|  | *.swp | ||||||
|  | .DS_Store | ||||||
|  | .atom/ | ||||||
|  | .buildlog/ | ||||||
|  | .history | ||||||
|  | .svn/ | ||||||
|  | migrate_working_dir/ | ||||||
|  | 
 | ||||||
|  | # IntelliJ related | ||||||
|  | *.iml | ||||||
|  | *.ipr | ||||||
|  | *.iws | ||||||
|  | .idea/ | ||||||
|  | 
 | ||||||
|  | # The .vscode folder contains launch configuration and tasks you configure in | ||||||
|  | # VS Code which you may wish to be included in version control, so this line | ||||||
|  | # is commented out by default. | ||||||
|  | #.vscode/ | ||||||
|  | 
 | ||||||
|  | # Flutter/Dart/Pub related | ||||||
|  | # Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock. | ||||||
|  | /pubspec.lock | ||||||
|  | **/doc/api/ | ||||||
|  | .dart_tool/ | ||||||
|  | .packages | ||||||
|  | build/ | ||||||
							
								
								
									
										10
									
								
								packages/moxxmpp_color/.metadata
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								packages/moxxmpp_color/.metadata
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | # This file tracks properties of this Flutter project. | ||||||
|  | # Used by Flutter tool to assess capabilities and perform upgrades etc. | ||||||
|  | # | ||||||
|  | # This file should be version controlled and should not be manually edited. | ||||||
|  | 
 | ||||||
|  | version: | ||||||
|  |   revision: "efbf63d9c66b9f6ec30e9ad4611189aa80003d31" | ||||||
|  |   channel: "stable" | ||||||
|  | 
 | ||||||
|  | project_type: package | ||||||
							
								
								
									
										3
									
								
								packages/moxxmpp_color/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								packages/moxxmpp_color/CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | |||||||
|  | ## 0.1.0 | ||||||
|  | 
 | ||||||
|  | - Implement functions to compute a color from a given input, following XEP-0392. | ||||||
							
								
								
									
										22
									
								
								packages/moxxmpp_color/LICENSE
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								packages/moxxmpp_color/LICENSE
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | |||||||
|  | MIT License | ||||||
|  | 
 | ||||||
|  | Copyright (c) 2023 Alexander "PapaTutuWawa" | ||||||
|  | 
 | ||||||
|  | Permission is hereby granted, free of charge, to any person obtaining a copy | ||||||
|  | of this software and associated documentation files (the "Software"), to deal | ||||||
|  | in the Software without restriction, including without limitation the rights | ||||||
|  | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||||
|  | copies of the Software, and to permit persons to whom the Software is | ||||||
|  | furnished to do so, subject to the following conditions: | ||||||
|  | 
 | ||||||
|  | The above copyright notice and this permission notice shall be included in all | ||||||
|  | copies or substantial portions of the Software. | ||||||
|  | 
 | ||||||
|  | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||||
|  | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||||
|  | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||||
|  | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||||
|  | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||||
|  | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||||||
|  | SOFTWARE. | ||||||
|  | 
 | ||||||
							
								
								
									
										7
									
								
								packages/moxxmpp_color/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								packages/moxxmpp_color/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,7 @@ | |||||||
|  | # moxxmpp_color | ||||||
|  | 
 | ||||||
|  | An implementation of [XEP-0392](https://xmpp.org/extensions/xep-0392.html). | ||||||
|  | 
 | ||||||
|  | ## License | ||||||
|  | 
 | ||||||
|  | See `LICENSE`. | ||||||
							
								
								
									
										10
									
								
								packages/moxxmpp_color/analysis_options.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								packages/moxxmpp_color/analysis_options.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,10 @@ | |||||||
|  | include: package:very_good_analysis/analysis_options.yaml | ||||||
|  | linter: | ||||||
|  |   rules: | ||||||
|  |     public_member_api_docs: false | ||||||
|  |     lines_longer_than_80_chars: false | ||||||
|  |     use_setters_to_change_properties: false | ||||||
|  |     avoid_positional_boolean_parameters: false | ||||||
|  |     avoid_bool_literals_in_conditional_expressions: false | ||||||
|  |     file_names: false | ||||||
|  |     unnecessary_library_directive: false | ||||||
							
								
								
									
										56
									
								
								packages/moxxmpp_color/lib/moxxmpp_color.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								packages/moxxmpp_color/lib/moxxmpp_color.dart
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,56 @@ | |||||||
|  | library moxxmpp_color; | ||||||
|  | 
 | ||||||
|  | import 'dart:convert'; | ||||||
|  | import 'package:cryptography/cryptography.dart'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  | import 'package:hsluv/extensions.dart'; | ||||||
|  | 
 | ||||||
|  | /// The default saturation to use. | ||||||
|  | const _defaultSaturation = 50; | ||||||
|  | 
 | ||||||
|  | /// The default lightness to use. | ||||||
|  | const _defaultLightness = 50; | ||||||
|  | 
 | ||||||
|  | /// Implementation of the algorithm in XEP-0392. [hashBytes] are the bytes | ||||||
|  | /// of the SHA-1 hash of the input. | ||||||
|  | Color _computeColor( | ||||||
|  |   List<int> hashBytes, { | ||||||
|  |   double? saturation, | ||||||
|  |   double? lightness, | ||||||
|  | }) { | ||||||
|  |   final bytes = hashBytes.sublist(0, 2); | ||||||
|  |   final angle = (bytes.last << 8 + bytes.first).toDouble() / 65565; | ||||||
|  |   return hsluvToRGBColor([ | ||||||
|  |     angle * 360, | ||||||
|  |     (saturation ?? _defaultSaturation).remainder(360), | ||||||
|  |     (lightness ?? _defaultLightness).remainder(360), | ||||||
|  |   ]); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// Like [consistentColor], but synchronous. | ||||||
|  | Color consistentColorSync( | ||||||
|  |   String input, { | ||||||
|  |   double? saturation, | ||||||
|  |   double? lightness, | ||||||
|  | }) { | ||||||
|  |   return _computeColor( | ||||||
|  |     Sha1().toSync().hashSync(utf8.encode(input)).bytes, | ||||||
|  |     saturation: saturation, | ||||||
|  |     lightness: lightness, | ||||||
|  |   ); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /// Compute the color based on the algorithm described in XEP-0392. | ||||||
|  | /// [saturation] and [lightness] can be used to supply values to use | ||||||
|  | /// instead of the default. | ||||||
|  | Future<Color> consistentColor( | ||||||
|  |   String input, { | ||||||
|  |   double? saturation, | ||||||
|  |   double? lightness, | ||||||
|  | }) async { | ||||||
|  |   return _computeColor( | ||||||
|  |     (await Sha1().hash(utf8.encode(input))).bytes, | ||||||
|  |     saturation: saturation, | ||||||
|  |     lightness: lightness, | ||||||
|  |   ); | ||||||
|  | } | ||||||
							
								
								
									
										21
									
								
								packages/moxxmpp_color/pubspec.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								packages/moxxmpp_color/pubspec.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | |||||||
|  | name: moxxmpp_color | ||||||
|  | description: Implementation of XEP-0392 | ||||||
|  | version: 0.1.0 | ||||||
|  | homepage: | ||||||
|  | 
 | ||||||
|  | environment: | ||||||
|  |   sdk: '>=3.1.0 <4.0.0' | ||||||
|  |   flutter: ">=1.17.0" | ||||||
|  | 
 | ||||||
|  | dependencies: | ||||||
|  |   cryptography: ^2.7.0 | ||||||
|  |   flutter: | ||||||
|  |     sdk: flutter | ||||||
|  |   hsluv: ^1.1.3 | ||||||
|  | 
 | ||||||
|  | dev_dependencies: | ||||||
|  |   flutter_test: | ||||||
|  |     sdk: flutter | ||||||
|  |   very_good_analysis: ^5.1.0 | ||||||
|  | 
 | ||||||
|  | flutter: | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user