Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions commet/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
.history
.svn/
*.g.dart
*.reflectable.dart
*.widgetbook.dart
migrate_working_dir/

Expand Down
2 changes: 2 additions & 0 deletions commet/lib/client/client_manager.dart
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,10 @@ import 'package:commet/client/matrix/matrix_client.dart';
import 'package:commet/client/stale_info.dart';
import 'package:commet/client/tasks/client_connection_status_task.dart';
import 'package:commet/main.dart';
import 'package:commet/ui/pages/developer/app_inspector/value_reflector_widget.dart';
import 'package:commet/utils/notifying_list.dart';

@Reflector()
class ClientManager {
final Map<String, Client> _clients = {};

Expand Down
4 changes: 4 additions & 0 deletions commet/lib/client/matrix/matrix_client.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ import 'package:commet/debug/log.dart';
import 'package:commet/diagnostic/diagnostics.dart';
import 'package:commet/main.dart';
import 'package:commet/ui/navigation/adaptive_dialog.dart';
import 'package:commet/ui/pages/developer/app_inspector/value_reflector_widget.dart';
import 'package:commet/ui/pages/matrix/authentication/matrix_uia_request.dart';
import 'package:commet/utils/list_extension.dart';
import 'package:commet/utils/notifying_list.dart';
Expand All @@ -37,6 +38,7 @@ import 'matrix_room.dart';
import 'matrix_space.dart';
import 'package:olm/olm.dart' as olm;

@Reflector()
class MatrixClient extends Client {
late matrix.Client _matrixClient;
late final List<Component<MatrixClient>> componentsInternal;
Expand All @@ -45,6 +47,8 @@ class MatrixClient extends Client {

matrix.ServerConfig? config;

matrix.Client get matrixClient => _matrixClient;

late String _id;

final NotifyingList<Room> _rooms = NotifyingList.empty(
Expand Down
2 changes: 2 additions & 0 deletions commet/lib/client/matrix/matrix_profile.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
import 'package:commet/client/matrix/matrix_member.dart';
import 'package:commet/client/matrix/matrix_mxc_image_provider.dart';
import 'package:commet/client/profile.dart';
import 'package:commet/ui/pages/developer/app_inspector/value_reflector_widget.dart';
import 'package:flutter/widgets.dart';
import 'package:matrix/matrix.dart' as matrix;

@Reflector()
class MatrixProfile implements Profile {
matrix.Profile profile;
matrix.Client client;
Expand Down
2 changes: 2 additions & 0 deletions commet/lib/client/matrix/matrix_room.dart
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import 'package:commet/client/timeline_events/timeline_event_message.dart';
import 'package:commet/config/build_config.dart';
import 'package:commet/debug/log.dart';
import 'package:commet/main.dart';
import 'package:commet/ui/pages/developer/app_inspector/value_reflector_widget.dart';
import 'package:commet/utils/image_utils.dart';
import 'package:commet/utils/mime.dart';
import 'package:flutter/material.dart';
Expand All @@ -49,6 +50,7 @@ import '../attachment.dart';
import '../client.dart';
import 'package:matrix/matrix.dart' as matrix;

@Reflector()
class MatrixRoom extends Room {
late matrix.Room _matrixRoom;

Expand Down
2 changes: 2 additions & 0 deletions commet/lib/client/matrix/matrix_space.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ import 'package:commet/client/matrix/matrix_room_permissions.dart';
import 'package:commet/client/matrix/matrix_room_preview.dart';
import 'package:commet/client/permissions.dart';
import 'package:commet/client/room_preview.dart';
import 'package:commet/ui/pages/developer/app_inspector/value_reflector_widget.dart';
import 'package:commet/utils/notifying_list.dart';
import 'package:flutter/material.dart';
import 'package:matrix/matrix.dart' as matrix;

import 'matrix_peer.dart';

@Reflector()
class MatrixSpace extends Space {
late matrix.Room _matrixRoom;
late matrix.Client _matrixClient;
Expand Down
2 changes: 2 additions & 0 deletions commet/lib/client/matrix/matrix_timeline.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ import 'package:commet/client/matrix/timeline_events/matrix_timeline_event.dart'
import 'package:commet/client/timeline_events/timeline_event.dart';
import 'package:commet/client/timeline_events/timeline_event_message.dart';
import 'package:commet/client/timeline_events/timeline_event_sticker.dart';
import 'package:commet/ui/pages/developer/app_inspector/value_reflector_widget.dart';

import '../client.dart';
import 'package:matrix/matrix.dart' as matrix;

@Reflector()
class MatrixTimeline extends Timeline {
matrix.Timeline? _matrixTimeline;
late matrix.Room _matrixRoom;
Expand Down
2 changes: 2 additions & 0 deletions commet/lib/ui/molecules/message_input.dart
Original file line number Diff line number Diff line change
Expand Up @@ -593,6 +593,8 @@ class MessageInputState extends State<MessageInput> {
style: Theme.of(context).textTheme.bodyMedium!,
maxLines: null,
contextMenuBuilder: contextMenuBuilder,
keyboardType: TextInputType.text,
textCapitalization: TextCapitalization.sentences,
decoration: InputDecoration(
contentPadding:
EdgeInsets.fromLTRB(8, padding / 2, 4, padding / 2),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import 'package:commet/main.dart';
import 'package:commet/ui/atoms/scaled_safe_area.dart';
import 'package:commet/ui/pages/developer/app_inspector/value_reflector_widget.dart';
import 'package:flutter/material.dart';
import 'package:tiamat/tiamat.dart' as tiamat;

class AppInspectorPage extends StatelessWidget {
const AppInspectorPage({super.key});

@override
Widget build(BuildContext context) {
return Scaffold(
body: SingleChildScrollView(
child: ScaledSafeArea(
child: SelectionArea(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: tiamat.CircleButton(
icon: Icons.arrow_back,
radius: 27,
onPressed: () => Navigator.of(context).pop(),
),
),
const Padding(
padding: EdgeInsets.all(20.0),
child: tiamat.Text.body(
"Warning: This inspector allows you to view lots of information that would typically be hidden, some of which could be sensitive. It is recommended that you do not view this page if your screen may be visible to others\n\nWhile effort has been made to redact sensitive information, we cannot guarantee that we have caught everything. Continue at your own risk."),
),
ValueReflectorWidget(value: clientManager!)
],
),
),
),
),
);
}
}
143 changes: 143 additions & 0 deletions commet/lib/ui/pages/developer/app_inspector/field_inspector.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
import 'package:commet/ui/pages/developer/app_inspector/reflectable_extensions.dart';
import 'package:commet/ui/pages/developer/app_inspector/value_reflector_widget.dart';
import 'package:flutter/material.dart';
import 'package:reflectable/reflectable.dart';
import 'package:tiamat/tiamat.dart' as tiamat;

class FieldInspector extends StatefulWidget {
const FieldInspector(
{required this.declaration, required this.instance, super.key});
final MethodMirror declaration;
final dynamic instance;
@override
State<FieldInspector> createState() => FieldInspectorState();
}

class FieldInspectorState extends State<FieldInspector> {
dynamic fieldValue;

@override
void initState() {
try {
final result = ReflectableExtensions.invoke(
widget.instance, widget.declaration.simpleName);
fieldValue = result;
} catch (_) {}

super.initState();
}

static String displayValue(dynamic value) {
if (value == null) {
return "null";
}

if (value is String) {
return value;
}

try {
var v = "$value name: ${value.name}";
return v;
} catch (_) {}

try {
var v = "$value displayname: ${value.displayname}";
return v;
} catch (_) {}

try {
var v = "$value displayName: ${value.displayName}";
return v;
} catch (_) {}

try {
var v = "$value id: ${value.id}";
return v;
} catch (_) {}

return value.toString();
}

@override
Widget build(BuildContext context) {
final color = (Theme.of(context).brightness == Brightness.dark
? Colors.white
: Colors.black)
.withAlpha(7);

return ExpansionTile(
expandedCrossAxisAlignment: CrossAxisAlignment.start,
expandedAlignment: Alignment.topLeft,
backgroundColor: color,
dense: true,
title: Row(
children: [
tiamat.Text(widget.declaration.simpleName.toString()),
const SizedBox(width: 20),
Flexible(
child: tiamat.Text.labelLow(
displayValue(fieldValue),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
)
],
),
children: [buildValue(fieldValue)],
);
}

Widget buildValue(dynamic value, {int index = 0}) {
if (value == null) {
return const tiamat.Text("null");
}

if (value is List) {
return Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: (value)
.mapIndexed((e, i) => Container(child: buildValue(e)))
.toList(),
);
}

if (value is Map) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: value.keys.mapIndexed((e, i) {
var label = displayValue(e);
if (label == "") {
label = "\"\"";
}
return Padding(
padding: const EdgeInsets.fromLTRB(10, 0, 0, 0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
tiamat.Text.labelLow(
"$label:",
),
Padding(
padding: const EdgeInsets.fromLTRB(10, 0, 0, 0),
child: buildValue(value[e], index: i),
)
],
),
);
}).toList(),
);
}

return Padding(
padding: const EdgeInsets.fromLTRB(20, 0, 0, 0),
child: ValueReflectorWidget(
value: value,
index: index,
),
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// ignore: implementation_imports
import 'package:reflectable/src/reflectable_builder_based.dart' as builder;

class ReflectableExtensions {
static Object? invoke(dynamic object, String name) {
var getter = builder.data.values.first.getters[name]!;
var result = getter(object);
return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import 'package:commet/ui/pages/developer/app_inspector/value_reflector_widget.dart';
import 'package:matrix/matrix.dart' as matrix;
// ignore: implementation_imports
import 'package:matrix/src/utils/space_child.dart';

@Reflector()
class ReflectableMatrixClient extends matrix.Client {
ReflectableMatrixClient(super.clientName);
}

@Reflector()
class ReflectableMatrixRoom extends matrix.Room {
ReflectableMatrixRoom({required super.id, required super.client});
}

@Reflector()
class ReflectableMatrixEvent extends matrix.Event {
ReflectableMatrixEvent(
{required super.content,
required super.type,
required super.eventId,
required super.senderId,
required super.originServerTs,
required super.room});
}

@Reflector()
class ReflectableMatrixSpaceChild extends SpaceChild {
ReflectableMatrixSpaceChild.fromState(super.state) : super.fromState();
}

@Reflector()
class ReflectableMatrixSpaceParent extends SpaceParent {
ReflectableMatrixSpaceParent.fromState(super.state) : super.fromState();
}

@Reflector()
class ReflectableMatrixBasicEvent extends matrix.BasicEvent {
ReflectableMatrixBasicEvent({required super.type, required super.content});
}
Loading