Skip to content

Commit 706323d

Browse files
committed
display size of tracker and tag in filter section
1 parent ddcaab9 commit 706323d

File tree

4 files changed

+246
-106
lines changed

4 files changed

+246
-106
lines changed

lib/Api/event_handler_api.dart

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import 'dart:collection';
12
import 'dart:convert';
23
import 'package:awesome_notifications/awesome_notifications.dart';
34
import 'package:duration/duration.dart';
@@ -200,61 +201,83 @@ class EventHandlerApi {
200201
Provider.of<FilterProvider>(context, listen: false);
201202
var maptrackerURIs = {};
202203
var mapStatus = {};
203-
Map<String, dynamic> mapTags = {};
204204
List<String> statusList = [];
205-
filterProvider.tagListMain = [];
206-
filterProvider.mapTags = {'Untagged': 0};
207-
torrentLength = torrentList.length.toString();
205+
Map<String, dynamic> mapTags = {};
206+
List<Map<String, dynamic>> trackersSizeList = [];
207+
List<Map<String, dynamic>> tagsSizeList = [];
208208

209-
//For torrent TrackerURIs
210-
filterProvider.trackerURIsListMain = [];
209+
//For torrent trackerURI
210+
//make a List of Map for trackerURIs and their corresponding size
211211
try {
212212
for (int i = 0; i < torrentList.length; i++) {
213213
for (int j = 0; j < torrentList[i].trackerURIs.length; j++) {
214-
filterProvider.trackerURIsListMain
215-
.add(torrentList[i].trackerURIs[j].toString());
216-
filterProvider
217-
.settrackerURIsListMain(filterProvider.trackerURIsListMain);
214+
trackersSizeList.add({
215+
torrentList[i].trackerURIs[j].toString():
216+
torrentList[i].sizeBytes.toString()
217+
});
218218
}
219219
}
220+
filterProvider.setTrackersSizeList(trackersSizeList);
220221
} catch (e) {
221222
print(e);
222223
}
224+
//make a map of trackerURIs and their corresponding status
223225
try {
224-
filterProvider.trackerURIsListMain.forEach((element) {
225-
if (!maptrackerURIs.containsKey(element)) {
226-
maptrackerURIs[element] = 1;
226+
filterProvider.trackersSizeList.forEach((element) {
227+
if (!maptrackerURIs.containsKey(element.keys.first)) {
228+
maptrackerURIs[element.keys.first] = [
229+
1,
230+
double.parse(element.values.first)
231+
];
227232
} else {
228-
maptrackerURIs[element] += 1;
233+
maptrackerURIs.update(
234+
element.keys.first,
235+
(value) => [
236+
value[0] + 1,
237+
value[1] + double.parse(element.values.first)
238+
]);
229239
}
230240
});
241+
maptrackerURIs = SplayTreeMap<String, dynamic>.from(maptrackerURIs);
231242
filterProvider.setmaptrackerURIs(maptrackerURIs);
232243
} catch (e) {
233244
print(e);
234245
}
235246

236247
//For torrent tags
248+
//make a List of Map for tags and their corresponding size
237249
try {
238250
for (int i = 0; i < torrentList.length; i++) {
239251
if (torrentList[i].tags.isEmpty) {
240-
filterProvider.mapTags.update('Untagged', (value) => ++value);
241-
}
242-
for (int j = 0; j < torrentList[i].tags.length; j++) {
243-
filterProvider.tagListMain.add(torrentList[i].tags[j].toString());
244-
filterProvider.setTagsListMain(filterProvider.tagListMain);
252+
tagsSizeList.add({'Untagged': '0'});
253+
} else {
254+
for (int j = 0; j < torrentList[i].tags.length; j++) {
255+
tagsSizeList.add({
256+
torrentList[i].tags[j].toString():
257+
torrentList[i].sizeBytes.toString()
258+
});
259+
}
245260
}
246261
}
262+
filterProvider.setTagsSizeList(tagsSizeList);
247263
} catch (e) {
248264
print(e);
249265
}
266+
//make a map of tags and their corresponding status
250267
try {
251-
filterProvider.tagListMain.forEach((element) {
252-
if (!mapTags.containsKey(element)) {
253-
mapTags[element] = 1;
268+
filterProvider.tagsSizeList.forEach((element) {
269+
if (!mapTags.containsKey(element.keys.first)) {
270+
mapTags[element.keys.first] = [1, double.parse(element.values.first)];
254271
} else {
255-
mapTags[element] += 1;
272+
mapTags.update(
273+
element.keys.first,
274+
(value) => [
275+
value[0] + 1,
276+
value[1] + double.parse(element.values.first)
277+
]);
256278
}
257279
});
280+
mapTags = SplayTreeMap<String, dynamic>.from(mapTags);
258281
filterProvider.setmapTags(mapTags);
259282
} catch (e) {
260283
print(e);
@@ -271,6 +294,7 @@ class EventHandlerApi {
271294
} catch (e) {
272295
print(e);
273296
}
297+
274298
try {
275299
statusList.forEach((element) {
276300
if (!mapStatus.containsKey(element)) {

lib/Components/filter_by_status.dart

Lines changed: 114 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1+
import 'dart:math';
2+
13
import 'package:flood_mobile/Constants/theme_provider.dart';
24
import 'package:flutter/material.dart';
35
import 'package:provider/provider.dart';
4-
import '../Api/event_handler_api.dart';
56
import '../Provider/filter_provider.dart';
67
import '../Provider/home_provider.dart';
78

@@ -71,7 +72,7 @@ class _FilterByStatusState extends State<FilterByStatus> {
7172
width: 18,
7273
height: 18,
7374
child: Center(
74-
child: Text(torrentLength,
75+
child: Text(model.torrentList.length.toString(),
7576
style: TextStyle(
7677
color: ThemeProvider.theme.primaryColorLight,
7778
fontFamily: 'Montserrat',
@@ -634,9 +635,9 @@ class _FilterByStatusState extends State<FilterByStatus> {
634635
width: 18,
635636
height: 18,
636637
child: Center(
637-
child: Text(torrentLength,
638+
child: Text(model.torrentList.length.toString(),
638639
style: TextStyle(
639-
color: Colors.black45,
640+
color: ThemeProvider.theme.primaryColorLight,
640641
fontFamily: 'Montserrat',
641642
fontSize: 15,
642643
fontWeight: FontWeight.bold)),
@@ -703,12 +704,12 @@ class _FilterByStatusState extends State<FilterByStatus> {
703704
height: 18,
704705
child: Center(
705706
child: Text(
706-
filterModel.mapTags[filterModel
707-
.mapTags.keys
708-
.toList()[index]]
707+
filterModel.mapTags.values
708+
.toList()[index][0]
709709
.toString(),
710710
style: TextStyle(
711-
color: Colors.black45,
711+
color: ThemeProvider
712+
.theme.primaryColorLight,
712713
fontFamily: 'Montserrat',
713714
fontSize: 15,
714715
fontWeight: FontWeight.bold)),
@@ -724,23 +725,50 @@ class _FilterByStatusState extends State<FilterByStatus> {
724725
)
725726
],
726727
),
727-
trailing: Radio<String>(
728-
value: filterModel.mapTags.keys
729-
.toList()[index]
730-
.toString(),
731-
groupValue: filterModel.tagSelected,
732-
onChanged: (value) {
733-
Provider.of<FilterProvider>(context,
734-
listen: false)
735-
.setFilterSelected(null);
736-
Provider.of<FilterProvider>(context,
737-
listen: false)
738-
.setTagSelected(value.toString());
739-
Provider.of<FilterProvider>(context,
740-
listen: false)
741-
.settrackerURISelected('null');
742-
},
743-
activeColor: Colors.blue,
728+
trailing: Row(
729+
mainAxisSize: MainAxisSize.min,
730+
children: [
731+
filterModel.mapTags.values
732+
.toList()[index][1]
733+
.toString()
734+
.contains('0.0')
735+
? Container()
736+
: Text(
737+
humanReadableByteCountSI(filterModel
738+
.mapTags.values
739+
.toList()[index][1]
740+
.toString()),
741+
style: TextStyle(
742+
color: filterModel.mapTags.keys
743+
.toList()[index] ==
744+
filterModel.tagSelected
745+
.toString()
746+
? Colors.blue
747+
: Colors.blueGrey,
748+
fontFamily: 'Montserrat',
749+
fontSize: 13,
750+
fontWeight: FontWeight.bold,
751+
),
752+
),
753+
Radio<String>(
754+
value: filterModel.mapTags.keys
755+
.toList()[index]
756+
.toString(),
757+
groupValue: filterModel.tagSelected,
758+
onChanged: (value) {
759+
Provider.of<FilterProvider>(context,
760+
listen: false)
761+
.setFilterSelected(null);
762+
Provider.of<FilterProvider>(context,
763+
listen: false)
764+
.setTagSelected(value.toString());
765+
Provider.of<FilterProvider>(context,
766+
listen: false)
767+
.settrackerURISelected('null');
768+
},
769+
activeColor: Colors.blue,
770+
),
771+
],
744772
),
745773
);
746774
} else {
@@ -769,11 +797,11 @@ class _FilterByStatusState extends State<FilterByStatus> {
769797
height: 18,
770798
child: Center(
771799
child: Text(
772-
Provider.of<FilterProvider>(context)
773-
.mapTags['Untagged']
800+
filterModel.mapTags['Untagged'][0]
774801
.toString(),
775802
style: TextStyle(
776-
color: Colors.black45,
803+
color: ThemeProvider
804+
.theme.primaryColorLight,
777805
fontFamily: 'Montserrat',
778806
fontSize: 15,
779807
fontWeight: FontWeight.bold)),
@@ -843,7 +871,7 @@ class _FilterByStatusState extends State<FilterByStatus> {
843871
width: 18,
844872
height: 18,
845873
child: Center(
846-
child: Text(torrentLength,
874+
child: Text(model.torrentList.length.toString(),
847875
style: TextStyle(
848876
color: ThemeProvider.theme.primaryColorLight,
849877
fontFamily: 'Montserrat',
@@ -907,9 +935,8 @@ class _FilterByStatusState extends State<FilterByStatus> {
907935
height: 18,
908936
child: Center(
909937
child: Text(
910-
filterModel.maptrackerURIs[filterModel
911-
.maptrackerURIs.keys
912-
.toList()[index]]
938+
filterModel.maptrackerURIs.values
939+
.toList()[index][0]
913940
.toString(),
914941
style: TextStyle(
915942
color: ThemeProvider
@@ -927,23 +954,53 @@ class _FilterByStatusState extends State<FilterByStatus> {
927954
? Colors.blue
928955
: Colors.blueGrey,
929956
),
930-
)
957+
),
931958
],
932959
),
933-
trailing: Radio<String>(
934-
value: filterModel.maptrackerURIs.keys
935-
.toList()[index]
936-
.toString(),
937-
groupValue: filterModel.trackerURISelected,
938-
onChanged: (value) {
939-
Provider.of<FilterProvider>(context, listen: false)
940-
.setTagSelected('null');
941-
Provider.of<FilterProvider>(context, listen: false)
942-
.setFilterSelected(null);
943-
Provider.of<FilterProvider>(context, listen: false)
944-
.settrackerURISelected(value.toString());
945-
},
946-
activeColor: Colors.blue,
960+
trailing: Row(
961+
mainAxisSize: MainAxisSize.min,
962+
children: [
963+
filterModel.maptrackerURIs.values
964+
.toList()[index][1]
965+
.toString()
966+
.contains('0.0')
967+
? Container()
968+
: Text(
969+
humanReadableByteCountSI(filterModel
970+
.maptrackerURIs.values
971+
.toList()[index][1]
972+
.toString()),
973+
style: TextStyle(
974+
color: filterModel.maptrackerURIs.keys
975+
.toList()[index] ==
976+
filterModel.trackerURISelected
977+
.toString()
978+
? Colors.blue
979+
: Colors.blueGrey,
980+
fontFamily: 'Montserrat',
981+
fontSize: 13,
982+
fontWeight: FontWeight.bold,
983+
),
984+
),
985+
Radio<String>(
986+
value: filterModel.maptrackerURIs.keys
987+
.toList()[index]
988+
.toString(),
989+
groupValue: filterModel.trackerURISelected,
990+
onChanged: (value) {
991+
Provider.of<FilterProvider>(context,
992+
listen: false)
993+
.setTagSelected('null');
994+
Provider.of<FilterProvider>(context,
995+
listen: false)
996+
.setFilterSelected(null);
997+
Provider.of<FilterProvider>(context,
998+
listen: false)
999+
.settrackerURISelected(value.toString());
1000+
},
1001+
activeColor: Colors.blue,
1002+
),
1003+
],
9471004
),
9481005
);
9491006
}),
@@ -954,4 +1011,14 @@ class _FilterByStatusState extends State<FilterByStatus> {
9541011
});
9551012
});
9561013
}
1014+
1015+
String humanReadableByteCountSI(String bytesStr) {
1016+
// convert bytes to readable format from string
1017+
double bytes = double.parse(bytesStr);
1018+
int unit = 1024;
1019+
if (bytes < unit) return bytes.toString() + " B";
1020+
int exp = (log(bytes) / log(unit)).floor();
1021+
String pre = "kMGTPE"[exp - 1];
1022+
return (bytes / pow(unit, exp)).toStringAsFixed(1) + " " + pre + "B";
1023+
}
9571024
}

0 commit comments

Comments
 (0)