Skip to content

Commit ef37988

Browse files
committed
Fix issue report screenshot size validation
1 parent 41ae88c commit ef37988

8 files changed

Lines changed: 11 additions & 254 deletions

File tree

lib/features/report_issue/models/report_issue_attachment_rules.dart

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,8 @@ class ReportIssueAttachmentRulesUtils {
5757
}
5858

5959
static String? validateAttachments(
60-
Iterable<ReportIssueAttachment> attachments, {
61-
int reservedBytes = 0,
62-
}) {
60+
Iterable<ReportIssueAttachment> attachments,
61+
) {
6362
final items = attachments.toList(growable: false);
6463
if (items.length > maxCount) {
6564
return tooManyAttachmentsMessage;
@@ -71,7 +70,7 @@ class ReportIssueAttachmentRulesUtils {
7170
}
7271
}
7372

74-
if (reservedBytes + totalBytes(items) > maxTotalBytes) {
73+
if (totalBytes(items) > maxTotalBytes) {
7574
return totalSizeExceededMessage;
7675
}
7776

lib/features/report_issue/provider/attachment_budget.dart

Lines changed: 0 additions & 146 deletions
This file was deleted.

lib/features/report_issue/provider/report_issue_draft_notifier.dart

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,7 @@ class ReportIssueDraft extends _$ReportIssueDraft {
112112
state = state.copyWith(description: value);
113113
}
114114

115-
void addAttachments(
116-
Iterable<ReportIssueAttachment> attachments, {
117-
int reservedBytes = 0,
118-
}) {
115+
void addAttachments(Iterable<ReportIssueAttachment> attachments) {
119116
final incoming = attachments.toList(growable: false);
120117
if (incoming.isEmpty) {
121118
return;
@@ -142,7 +139,6 @@ class ReportIssueDraft extends _$ReportIssueDraft {
142139

143140
final validationError = ReportIssueAttachmentRulesUtils.validateAttachments(
144141
nextAttachments,
145-
reservedBytes: reservedBytes,
146142
);
147143
if (validationError != null) {
148144
state = state.copyWith(attachmentError: validationError);

lib/features/report_issue/provider/submitter.dart

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@ import 'package:lantern/core/utils/device_utils.dart';
77
import 'package:lantern/features/report_issue/models/report_issue_attachment.dart';
88
import 'package:lantern/features/report_issue/models/report_issue_attachment_rules.dart';
99
import 'package:lantern/features/report_issue/provider/attachment_access.dart';
10-
import 'package:lantern/features/report_issue/provider/attachment_budget.dart';
10+
import 'package:lantern/features/report_issue/provider/log_file_resolver.dart';
1111
import 'package:lantern/lantern/lantern_service.dart';
1212
import 'package:lantern/lantern/lantern_service_notifier.dart';
1313

1414
final reportIssueSubmitterProvider = Provider<ReportIssueSubmitter>(
1515
(ref) => ReportIssueSubmitter(
1616
ref.read(lanternServiceProvider),
1717
attachmentAccess: ref.read(reportIssueAttachmentAccessProvider),
18-
attachmentBudget: ref.read(reportIssueAttachmentBudgetProvider),
1918
),
2019
);
2120

@@ -25,21 +24,17 @@ class ReportIssueSubmitter {
2524
final LanternService _lanternService;
2625
final ReportIssueDeviceInfoLoader _deviceInfoLoader;
2726
final ReportIssueAttachmentAccess _attachmentAccess;
28-
final ReportIssueAttachmentBudget _attachmentBudget;
2927
final ReportIssueLogFileResolver _logFileResolver;
3028

3129
ReportIssueSubmitter(
3230
LanternService lanternService, {
3331
ReportIssueDeviceInfoLoader? deviceInfoLoader,
3432
ReportIssueAttachmentAccess? attachmentAccess,
35-
ReportIssueAttachmentBudget? attachmentBudget,
3633
ReportIssueLogFileResolver? logFileResolver,
3734
}) : _lanternService = lanternService,
3835
_deviceInfoLoader = deviceInfoLoader ?? DeviceUtils.getDeviceAndModel,
3936
_attachmentAccess =
4037
attachmentAccess ?? PlatformReportIssueAttachmentAccess(),
41-
_attachmentBudget =
42-
attachmentBudget ?? PlatformReportIssueAttachmentBudget(),
4338
_logFileResolver = logFileResolver ?? defaultReportIssueLogFileResolver;
4439

4540
Future<Either<Failure, Unit>> submit({
@@ -48,10 +43,8 @@ class ReportIssueSubmitter {
4843
required String description,
4944
required List<ReportIssueAttachment> attachments,
5045
}) async {
51-
final reservedBytes = await _attachmentBudget.reservedBytes();
5246
final validationError = ReportIssueAttachmentRulesUtils.validateAttachments(
5347
attachments,
54-
reservedBytes: reservedBytes,
5548
);
5649
if (validationError != null) {
5750
return Left(

lib/features/report_issue/report_issue.dart

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import 'package:lantern/features/report_issue/models/report_issue_attachment.dar
88
import 'package:lantern/features/report_issue/models/report_issue_attachment_rules.dart';
99
import 'package:lantern/features/report_issue/provider/report_issue_draft_notifier.dart';
1010
import 'package:lantern/features/report_issue/provider/attachment_picker.dart';
11-
import 'package:lantern/features/report_issue/provider/attachment_budget.dart';
1211
import 'package:lantern/features/report_issue/provider/submitter.dart';
1312
import 'package:lantern/features/report_issue/widgets/report_issue_attachment_dropzone.dart';
1413
import 'package:lantern/core/widgets/card_dropdown.dart';
@@ -255,17 +254,11 @@ class _ReportIssueState extends ConsumerState<ReportIssue> {
255254
return;
256255
}
257256

258-
final reservedBytes = await ref
259-
.read(reportIssueAttachmentBudgetProvider)
260-
.reservedBytes();
261-
262257
if (!mounted) {
263258
return;
264259
}
265260

266-
ref
267-
.read(reportIssueDraftProvider.notifier)
268-
.addAttachments(attachments, reservedBytes: reservedBytes);
261+
ref.read(reportIssueDraftProvider.notifier).addAttachments(attachments);
269262
}
270263

271264
void _clearDraft() {

test/features/report_issue/report_issue_attachment_budget_test.dart

Lines changed: 0 additions & 48 deletions
This file was deleted.

test/features/report_issue/report_issue_submitter_test.dart

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import 'package:lantern/core/utils/failure.dart';
66
import 'package:lantern/features/report_issue/models/report_issue_attachment.dart';
77
import 'package:lantern/features/report_issue/models/report_issue_attachment_rules.dart';
88
import 'package:lantern/features/report_issue/provider/attachment_access.dart';
9-
import 'package:lantern/features/report_issue/provider/attachment_budget.dart';
109
import 'package:lantern/features/report_issue/provider/submitter.dart';
1110
import 'package:lantern/lantern/lantern_service.dart';
1211

@@ -44,15 +43,6 @@ class _FakeLanternService implements LanternService {
4443
dynamic noSuchMethod(Invocation invocation) => super.noSuchMethod(invocation);
4544
}
4645

47-
class _FakeAttachmentBudget implements ReportIssueAttachmentBudget {
48-
int value;
49-
50-
_FakeAttachmentBudget({this.value = 0});
51-
52-
@override
53-
Future<int> reservedBytes() async => value;
54-
}
55-
5646
class _FakeAttachmentAccess implements ReportIssueAttachmentAccess {
5747
bool wasUsed = false;
5848
Object? error;
@@ -74,7 +64,6 @@ void main() {
7464
group('ReportIssueSubmitter', () {
7565
test('forwards attachments through to LanternService', () async {
7666
final fakeService = _FakeLanternService();
77-
final attachmentBudget = _FakeAttachmentBudget();
7867
final attachmentAccess = _FakeAttachmentAccess();
7968
const attachment = ReportIssueAttachment(
8069
name: 'vpn_error.png',
@@ -91,7 +80,6 @@ void main() {
9180
final submitter = ReportIssueSubmitter(
9281
fakeService,
9382
attachmentAccess: attachmentAccess,
94-
attachmentBudget: attachmentBudget,
9583
deviceInfoLoader: () async => ('macOS', 'MacBook Pro'),
9684
logFileResolver: () async => logFile,
9785
);
@@ -118,11 +106,9 @@ void main() {
118106

119107
test('rejects oversize totals before calling LanternService', () async {
120108
final fakeService = _FakeLanternService();
121-
final attachmentBudget = _FakeAttachmentBudget(value: 1024);
122109

123110
final submitter = ReportIssueSubmitter(
124111
fakeService,
125-
attachmentBudget: attachmentBudget,
126112
deviceInfoLoader: () async => ('iOS', 'iPhone'),
127113
logFileResolver: () async => null,
128114
);
@@ -136,7 +122,7 @@ void main() {
136122
name: 'huge.png',
137123
path: '/tmp/huge.png',
138124
mimeType: 'image/png',
139-
sizeBytes: ReportIssueAttachmentRulesUtils.maxTotalBytes,
125+
sizeBytes: ReportIssueAttachmentRulesUtils.maxTotalBytes + 1,
140126
),
141127
],
142128
);
@@ -164,7 +150,6 @@ void main() {
164150
final submitter = ReportIssueSubmitter(
165151
fakeService,
166152
attachmentAccess: attachmentAccess,
167-
attachmentBudget: _FakeAttachmentBudget(),
168153
deviceInfoLoader: () async => ('macOS', 'MacBook Pro'),
169154
logFileResolver: () async => null,
170155
);
@@ -201,7 +186,6 @@ void main() {
201186
final fakeService = _FakeLanternService();
202187
final submitter = ReportIssueSubmitter(
203188
fakeService,
204-
attachmentBudget: _FakeAttachmentBudget(),
205189
deviceInfoLoader: () async => ('Windows', 'Surface'),
206190
logFileResolver: () async => null,
207191
);

0 commit comments

Comments
 (0)