parent
276d7f548c
commit
6316dda939
|
|
@ -75,9 +75,15 @@ class ChatEmojiPicker extends StatelessWidget {
|
||||||
'body': sticker.body,
|
'body': sticker.body,
|
||||||
'info': sticker.info ?? {},
|
'info': sticker.info ?? {},
|
||||||
'url': sticker.url.toString(),
|
'url': sticker.url.toString(),
|
||||||
|
'm.relates_to': controller.replyEvent != null ? {
|
||||||
|
'm.in_reply_to': {
|
||||||
|
'event_id': controller.replyEvent!.eventId
|
||||||
|
}
|
||||||
|
} : null
|
||||||
},
|
},
|
||||||
type: EventTypes.Sticker,
|
type: EventTypes.Sticker,
|
||||||
);
|
);
|
||||||
|
controller.cancelReplyEventAction();
|
||||||
controller.hideEmojiPicker();
|
controller.hideEmojiPicker();
|
||||||
},
|
},
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import 'dart:ui' as ui;
|
import 'dart:ui' as ui;
|
||||||
|
|
||||||
|
import 'package:fluffychat/utils/poll_events.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
import 'package:flutter/services.dart';
|
||||||
|
|
||||||
|
|
@ -66,12 +67,12 @@ class Message extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final theme = Theme.of(context);
|
final theme = Theme.of(context);
|
||||||
|
|
||||||
if (!{
|
if (!{
|
||||||
EventTypes.Message,
|
EventTypes.Message,
|
||||||
EventTypes.Sticker,
|
EventTypes.Sticker,
|
||||||
EventTypes.Encrypted,
|
EventTypes.Encrypted,
|
||||||
EventTypes.CallInvite,
|
EventTypes.CallInvite,
|
||||||
|
PollEvents.PollStart,
|
||||||
}.contains(event.type)) {
|
}.contains(event.type)) {
|
||||||
if (event.type.startsWith('m.call.')) {
|
if (event.type.startsWith('m.call.')) {
|
||||||
return const SizedBox.shrink();
|
return const SizedBox.shrink();
|
||||||
|
|
@ -100,6 +101,7 @@ class Message extends StatelessWidget {
|
||||||
EventTypes.Message,
|
EventTypes.Message,
|
||||||
EventTypes.Sticker,
|
EventTypes.Sticker,
|
||||||
EventTypes.Encrypted,
|
EventTypes.Encrypted,
|
||||||
|
PollEvents.PollStart,
|
||||||
}.contains(nextEvent!.type) &&
|
}.contains(nextEvent!.type) &&
|
||||||
nextEvent!.senderId == event.senderId &&
|
nextEvent!.senderId == event.senderId &&
|
||||||
!displayTime;
|
!displayTime;
|
||||||
|
|
@ -109,6 +111,7 @@ class Message extends StatelessWidget {
|
||||||
EventTypes.Message,
|
EventTypes.Message,
|
||||||
EventTypes.Sticker,
|
EventTypes.Sticker,
|
||||||
EventTypes.Encrypted,
|
EventTypes.Encrypted,
|
||||||
|
PollEvents.PollStart,
|
||||||
}.contains(previousEvent!.type) &&
|
}.contains(previousEvent!.type) &&
|
||||||
previousEvent!.senderId == event.senderId &&
|
previousEvent!.senderId == event.senderId &&
|
||||||
previousEvent!.originServerTs.sameEnvironment(event.originServerTs);
|
previousEvent!.originServerTs.sameEnvironment(event.originServerTs);
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
|
||||||
|
import 'package:fluffychat/pages/chat/events/poll_content.dart';
|
||||||
|
import 'package:fluffychat/utils/poll_events.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
import 'package:fluffychat/generated/l10n/l10n.dart';
|
import 'package:fluffychat/generated/l10n/l10n.dart';
|
||||||
|
|
@ -106,6 +108,9 @@ class MessageContent extends StatelessWidget {
|
||||||
final fontSize = AppConfig.messageFontSize * AppConfig.fontSizeFactor;
|
final fontSize = AppConfig.messageFontSize * AppConfig.fontSizeFactor;
|
||||||
final buttonTextColor = textColor;
|
final buttonTextColor = textColor;
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
|
case PollEvents.PollStart:
|
||||||
|
Logs().v("Got poll event ${event.type}");
|
||||||
|
return PollWidget(event, color: textColor, linkColor: linkColor, fontSize: fontSize);
|
||||||
case EventTypes.Message:
|
case EventTypes.Message:
|
||||||
case EventTypes.Encrypted:
|
case EventTypes.Encrypted:
|
||||||
case EventTypes.Sticker:
|
case EventTypes.Sticker:
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,38 @@
|
||||||
|
import 'package:fluffychat/utils/poll_events.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:matrix/matrix.dart';
|
||||||
|
|
||||||
|
class PollWidget extends StatefulWidget {
|
||||||
|
final Color color;
|
||||||
|
final Color linkColor;
|
||||||
|
final double fontSize;
|
||||||
|
final Event event;
|
||||||
|
|
||||||
|
const PollWidget(
|
||||||
|
this.event, {
|
||||||
|
required this.color,
|
||||||
|
required this.linkColor,
|
||||||
|
required this.fontSize,
|
||||||
|
super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<StatefulWidget> createState() => PollWidgetState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class PollWidgetState extends State<PollWidget> {
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final event = widget.event;
|
||||||
|
final content = event.content[PollEvents.PollStart] as Map<String, dynamic?>;
|
||||||
|
return Padding(
|
||||||
|
padding: EdgeInsetsGeometry.all(16),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Text(content?['question']['m.text'] as String, style: TextStyle(fontWeight: FontWeight.bold))
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
import 'package:fluffychat/generated/l10n/l10n.dart';
|
import 'package:fluffychat/generated/l10n/l10n.dart';
|
||||||
|
import 'package:fluffychat/utils/poll_events.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
|
||||||
import 'package:collection/collection.dart';
|
import 'package:collection/collection.dart';
|
||||||
|
|
@ -124,6 +125,17 @@ abstract class ClientManager {
|
||||||
// To make room emotes work
|
// To make room emotes work
|
||||||
'im.ponies.room_emotes',
|
'im.ponies.room_emotes',
|
||||||
},
|
},
|
||||||
|
roomPreviewLastEvents: <String>{
|
||||||
|
EventTypes.Message,
|
||||||
|
EventTypes.Encrypted,
|
||||||
|
EventTypes.Sticker,
|
||||||
|
EventTypes.CallInvite,
|
||||||
|
EventTypes.CallAnswer,
|
||||||
|
EventTypes.CallReject,
|
||||||
|
EventTypes.CallHangup,
|
||||||
|
EventTypes.GroupCallMember,
|
||||||
|
PollEvents.PollStart,
|
||||||
|
},
|
||||||
logLevel: kReleaseMode ? Level.warning : Level.verbose,
|
logLevel: kReleaseMode ? Level.warning : Level.verbose,
|
||||||
database: await flutterMatrixSdkDatabaseBuilder(clientName),
|
database: await flutterMatrixSdkDatabaseBuilder(clientName),
|
||||||
supportedLoginTypes: {
|
supportedLoginTypes: {
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,4 @@
|
||||||
|
import 'package:fluffychat/utils/poll_events.dart';
|
||||||
import 'package:matrix/matrix.dart';
|
import 'package:matrix/matrix.dart';
|
||||||
|
|
||||||
import '../../config/app_config.dart';
|
import '../../config/app_config.dart';
|
||||||
|
|
@ -45,7 +46,7 @@ extension IsStateExtension on Event {
|
||||||
// if we enabled to hide all redacted events, don't show those
|
// if we enabled to hide all redacted events, don't show those
|
||||||
(!AppConfig.hideRedactedEvents || !redacted) &&
|
(!AppConfig.hideRedactedEvents || !redacted) &&
|
||||||
// if we enabled to hide all unknown events, don't show those
|
// if we enabled to hide all unknown events, don't show those
|
||||||
(!AppConfig.hideUnknownEvents || isEventTypeKnown) &&
|
(!AppConfig.hideUnknownEvents || isEventTypeKnown || type == PollEvents.PollStart) &&
|
||||||
// remove state events that we don't want to render
|
// remove state events that we don't want to render
|
||||||
(isState || !AppConfig.hideAllStateEvents) &&
|
(isState || !AppConfig.hideAllStateEvents) &&
|
||||||
// hide simple join/leave member events in public rooms
|
// hide simple join/leave member events in public rooms
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
class PollEvents {
|
||||||
|
static const String PollStart = 'org.matrix.msc3381.poll.start';
|
||||||
|
static const String TypeDisclosed = 'org.matrix.msc3381.poll.disclosed';
|
||||||
|
static const String TypeUndisclosed = 'org.matrix.msc3381.poll.undisclosed';
|
||||||
|
}
|
||||||
|
|
@ -1,45 +1,11 @@
|
||||||
name: fluffychat
|
name: extera-next
|
||||||
title: FluffyChat
|
title: Extera Next
|
||||||
base: core24
|
base: core24
|
||||||
version: git
|
version: git
|
||||||
license: AGPL-3.0
|
license: AGPL-3.0
|
||||||
summary: The cutest messenger in the Matrix network
|
summary: A fork of cutest messenger in the Matrix network
|
||||||
description: |
|
description: |
|
||||||
FluffyChat is an open source, nonprofit and cute matrix messenger app. The app is easy to use but secure and decentralized.
|
Extera Next is fork of FluffyChat with some additions
|
||||||
|
|
||||||
|
|
||||||
## Features
|
|
||||||
|
|
||||||
- Send all kinds of messages, images and files
|
|
||||||
- Voice messages
|
|
||||||
- Location sharing
|
|
||||||
- Push notifications
|
|
||||||
- Unlimited private and public group chats
|
|
||||||
- Public channels with thousands of participants
|
|
||||||
- Feature rich group moderation including all matrix features
|
|
||||||
- Discover and join public groups
|
|
||||||
- Dark mode
|
|
||||||
- Hides complexity of Matrix IDs behind simple QR codes
|
|
||||||
- Custom emotes and stickers
|
|
||||||
- Video calls via sharing links to Jitsi
|
|
||||||
- Spaces
|
|
||||||
- Compatible with Element, Nheko, NeoChat and all other Matrix apps
|
|
||||||
- End to end encryption
|
|
||||||
- Emoji verification & cross signing
|
|
||||||
- And much more...
|
|
||||||
|
|
||||||
|
|
||||||
## FluffyChat comes with a dream
|
|
||||||
|
|
||||||
Imagine a world where everyone can choose the messenger they like and is still able to chat with all of their friends.
|
|
||||||
|
|
||||||
A world where there are no companies spying on you when you send selfies to friends and lovers.
|
|
||||||
|
|
||||||
And a world where apps are made for fluffyness and not for profit. ♥
|
|
||||||
|
|
||||||
Join the community: https://matrix.to/#/#fluffychat:matrix.org
|
|
||||||
Website: http://fluffychat.im
|
|
||||||
Microblog: https://mastodon.art/@krille
|
|
||||||
|
|
||||||
grade: stable
|
grade: stable
|
||||||
confinement: strict
|
confinement: strict
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue