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,
|
||||
if a DNS implementation is given, and supports StartTLS.
|
||||
|
||||
### moxxmpp_color
|
||||
|
||||
Implementation of [XEP-0392](https://xmpp.org/extensions/xep-0392.html).
|
||||
|
||||
## Development
|
||||
|
||||
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