From 21683b88bbe485c3ca6338d1f777f2346ba372b1 Mon Sep 17 00:00:00 2001 From: toki Date: Thu, 9 Mar 2023 23:50:47 +0900 Subject: [PATCH] Update slack --- lib/model/app_data.dart | 1 + lib/model/app_data.g.dart | 2 + lib/utils/slack/slack_data.dart | 80 ++++++++++++++++++++++++++++++- lib/utils/slack/slack_data.g.dart | 71 +++++++++++++++++++++++++++ lib/utils/slack/slack_sender.dart | 16 +++++-- 5 files changed, 164 insertions(+), 6 deletions(-) diff --git a/lib/model/app_data.dart b/lib/model/app_data.dart index 768f814..bcfc3d7 100644 --- a/lib/model/app_data.dart +++ b/lib/model/app_data.dart @@ -6,6 +6,7 @@ part 'app_data.g.dart'; class AppData { AppData(); + late String name; late String version; late String gitHash; late String buildDate; diff --git a/lib/model/app_data.g.dart b/lib/model/app_data.g.dart index 46bba23..437af19 100644 --- a/lib/model/app_data.g.dart +++ b/lib/model/app_data.g.dart @@ -7,11 +7,13 @@ part of 'app_data.dart'; // ************************************************************************** AppData _$AppDataFromJson(Map json) => AppData() + ..name = json['name'] as String ..version = json['version'] as String ..gitHash = json['gitHash'] as String ..buildDate = json['buildDate'] as String; Map _$AppDataToJson(AppData instance) => { + 'name': instance.name, 'version': instance.version, 'gitHash': instance.gitHash, 'buildDate': instance.buildDate, diff --git a/lib/utils/slack/slack_data.dart b/lib/utils/slack/slack_data.dart index b7e6418..c4f2521 100644 --- a/lib/utils/slack/slack_data.dart +++ b/lib/utils/slack/slack_data.dart @@ -9,6 +9,10 @@ import 'package:http/http.dart'; import 'package:http_parser/src/media_type.dart'; part 'slack_data.g.dart'; +enum SlackBlockType { header, section } + +enum SlackTextType { mrkdwn, plain_text } + enum SlackActionType { button, select } enum SlackActionStyle { danger, primary } @@ -16,7 +20,16 @@ enum SlackActionStyle { danger, primary } @JsonSerializable() class DataSlack { String? message; - late List attachments; + List blocks = []; + List attachments = []; + + String getBlocks() { + var list = []; + for (var item in blocks) { + list.add(item.toJson()); + } + return jsonEncode(list); + } String getAttachments() { var list = []; @@ -33,6 +46,71 @@ class DataSlack { Map toJson() => _$DataSlackToJson(this); } +@JsonSerializable() +class SlackBlock { + late SlackBlockType type; + + SlackBlock(); + + factory SlackBlock.fromJson(Map json) => + _$SlackBlockFromJson(json); + Map toJson() => _$SlackBlockToJson(this); +} + +@JsonSerializable() +class SlackBlockHeader extends SlackBlock { + late SlackBlockText text; + + SlackBlockHeader() { + super.type = SlackBlockType.header; + text = SlackBlockText(); + text.type = SlackTextType.plain_text; + } + + factory SlackBlockHeader.fromJson(Map json) => + _$SlackBlockHeaderFromJson(json); + @override + Map toJson() => _$SlackBlockHeaderToJson(this); +} + +@JsonSerializable() +class SlackBlockSection extends SlackBlock { + List fields = []; + + SlackBlockSection() { + super.type = SlackBlockType.section; + } + + factory SlackBlockSection.fromJson(Map json) => + _$SlackBlockSectionFromJson(json); + @override + Map toJson() => _$SlackBlockSectionToJson(this); +} + +@JsonSerializable() +class SlackBlockSectionField { + SlackTextType type = SlackTextType.mrkdwn; + String? text; + + SlackBlockSectionField(); + + factory SlackBlockSectionField.fromJson(Map json) => + _$SlackBlockSectionFieldFromJson(json); + Map toJson() => _$SlackBlockSectionFieldToJson(this); +} + +@JsonSerializable() +class SlackBlockText { + SlackTextType type = SlackTextType.mrkdwn; + String? text; + + SlackBlockText(); + + factory SlackBlockText.fromJson(Map json) => + _$SlackBlockTextFromJson(json); + Map toJson() => _$SlackBlockTextToJson(this); +} + @JsonSerializable() class SlackAttachment { String? fallback; diff --git a/lib/utils/slack/slack_data.g.dart b/lib/utils/slack/slack_data.g.dart index 62d2f2e..5a02a94 100644 --- a/lib/utils/slack/slack_data.g.dart +++ b/lib/utils/slack/slack_data.g.dart @@ -8,15 +8,86 @@ part of 'slack_data.dart'; DataSlack _$DataSlackFromJson(Map json) => DataSlack() ..message = json['message'] as String? + ..blocks = (json['blocks'] as List) + .map((e) => SlackBlock.fromJson(e as Map)) + .toList() ..attachments = (json['attachments'] as List) .map((e) => SlackAttachment.fromJson(e as Map)) .toList(); Map _$DataSlackToJson(DataSlack instance) => { 'message': instance.message, + 'blocks': instance.blocks, 'attachments': instance.attachments, }; +SlackBlock _$SlackBlockFromJson(Map json) => + SlackBlock()..type = $enumDecode(_$SlackBlockTypeEnumMap, json['type']); + +Map _$SlackBlockToJson(SlackBlock instance) => + { + 'type': _$SlackBlockTypeEnumMap[instance.type]!, + }; + +const _$SlackBlockTypeEnumMap = { + SlackBlockType.header: 'header', + SlackBlockType.section: 'section', +}; + +SlackBlockHeader _$SlackBlockHeaderFromJson(Map json) => + SlackBlockHeader() + ..type = $enumDecode(_$SlackBlockTypeEnumMap, json['type']) + ..text = SlackBlockText.fromJson(json['text'] as Map); + +Map _$SlackBlockHeaderToJson(SlackBlockHeader instance) => + { + 'type': _$SlackBlockTypeEnumMap[instance.type]!, + 'text': instance.text, + }; + +SlackBlockSection _$SlackBlockSectionFromJson(Map json) => + SlackBlockSection() + ..type = $enumDecode(_$SlackBlockTypeEnumMap, json['type']) + ..fields = (json['fields'] as List) + .map( + (e) => SlackBlockSectionField.fromJson(e as Map)) + .toList(); + +Map _$SlackBlockSectionToJson(SlackBlockSection instance) => + { + 'type': _$SlackBlockTypeEnumMap[instance.type]!, + 'fields': instance.fields, + }; + +SlackBlockSectionField _$SlackBlockSectionFieldFromJson( + Map json) => + SlackBlockSectionField() + ..type = $enumDecode(_$SlackTextTypeEnumMap, json['type']) + ..text = json['text'] as String?; + +Map _$SlackBlockSectionFieldToJson( + SlackBlockSectionField instance) => + { + 'type': _$SlackTextTypeEnumMap[instance.type]!, + 'text': instance.text, + }; + +const _$SlackTextTypeEnumMap = { + SlackTextType.mrkdwn: 'mrkdwn', + SlackTextType.plain_text: 'plain_text', +}; + +SlackBlockText _$SlackBlockTextFromJson(Map json) => + SlackBlockText() + ..type = $enumDecode(_$SlackTextTypeEnumMap, json['type']) + ..text = json['text'] as String?; + +Map _$SlackBlockTextToJson(SlackBlockText instance) => + { + 'type': _$SlackTextTypeEnumMap[instance.type]!, + 'text': instance.text, + }; + SlackAttachment _$SlackAttachmentFromJson(Map json) => SlackAttachment() ..fallback = json['fallback'] as String? diff --git a/lib/utils/slack/slack_sender.dart b/lib/utils/slack/slack_sender.dart index 7ca3644..ac6fd2e 100644 --- a/lib/utils/slack/slack_sender.dart +++ b/lib/utils/slack/slack_sender.dart @@ -39,8 +39,15 @@ class SlackSender { ? '' : Uri.encodeComponent(' ${message.message!}'); buffer.write('&text=$targetUser$sendMessage'); - buffer - .write('&attachments=${Uri.encodeComponent(message.getAttachments())}'); + if (message.blocks.isNotEmpty) { + var json = message.getBlocks(); + print(json); + buffer.write('&blocks=${Uri.encodeComponent(message.getBlocks())}'); + } + if (message.attachments.isNotEmpty) { + buffer.write( + '&attachments=${Uri.encodeComponent(message.getAttachments())}'); + } buffer.write('&link_names=true'); print(buffer.toString()); return buffer.toString(); @@ -152,7 +159,6 @@ class SlackSender { buildType == SlackBuildType.android ? ":android1: " : ":ios0: "; String osColor = buildType == SlackBuildType.ios ? "#ED145B" : "#81CA3F"; var message = DataSlack(); - message.attachments = []; var attachments = message.attachments; var attachment = SlackAttachment(); @@ -180,7 +186,7 @@ class SlackSender { } String buildTypeToString(SlackBuildType type) { - var typeStr = type.toString().replaceAll('SlackBuildType.', ''); - return toPascal(typeStr); + var typeStr = type.name; + return typeStr == 'ios' ? 'iOS' : toPascal(typeStr); } }