some shit happening idk

This commit is contained in:
dan63047 2023-05-11 23:08:01 +03:00
parent 6625c5efbc
commit 5feadcfe09
2 changed files with 106 additions and 35 deletions

View File

@ -1,4 +1,27 @@
import 'dart:math';
import 'package:http/http.dart' as http;
import 'dart:convert';
Future<TetrioPlayer> fetchTetrioRecords(String user) async {
var url = Uri.https('ch.tetr.io', 'api/users/$user/records');
final response = await http.get(url);
// final response = await http.get(Uri.parse('https://ch.tetr.io/'));
if (response.statusCode == 200) {
// If the server did return a 200 OK response,
// then parse the JSON.
return TetrioPlayer.fromJson(jsonDecode(response.body));
} else {
// If the server did not return a 200 OK response,
// then throw an exception.
throw Exception('Failed to fetch player');
}
}
Duration doubleSecondsToDuration(double value) {
value = value * 1000000;
return Duration(microseconds: value.floor());
}
class TetrioPlayer {
String? userId;
@ -13,7 +36,7 @@ class TetrioPlayer {
int? friendCount;
int? gamesPlayed;
int? gamesWon;
double? gameTime;
Duration? gameTime;
double? xp;
int? supporterTier;
bool? verified;
@ -52,35 +75,56 @@ class TetrioPlayer {
}
TetrioPlayer.fromJson(Map<String, dynamic> json) {
userId = json['data']['user']['_id'];
username = json['data']['user']['username'];
role = json['data']['user']['role'];
registrationTime = json['data']['user']['ts'] != null
? DateTime.parse(json['data']['user']['ts'])
: null;
if (json['data']['user']['badges'] != null) {
userId = json['_id'];
username = json['username'];
role = json['role'];
registrationTime = json['ts'] != null ? DateTime.parse(json['ts']) : null;
if (json['badges'] != null) {
badges = <Badge>[];
json['data']['user']['badges'].forEach((v) {
json['badges'].forEach((v) {
badges!.add(Badge.fromJson(v));
});
}
xp = json['data']['user']['xp'].toDouble();
gamesPlayed = json['data']['user']['gamesplayed'];
gamesWon = json['data']['user']['gameswon'];
gameTime = json['data']['user']['gametime'].toDouble();
country = json['data']['user']['country'];
supporterTier = json['data']['user']['supporter_tier'];
verified = json['data']['user']['verified'];
tlSeason1 = json['data']['user']['league'] != null
? TetraLeagueAlpha.fromJson(json['data']['user']['league'])
xp = json['xp'].toDouble();
gamesPlayed = json['gamesplayed'];
gamesWon = json['gameswon'];
gameTime = doubleSecondsToDuration(json['gametime'].toDouble());
country = json['country'];
supporterTier = json['supporter_tier'];
verified = json['verified'];
tlSeason1 = json['league'] != null
? TetraLeagueAlpha.fromJson(json['league'])
: null;
avatarRevision = json['data']['user']['avatar_revision'];
bannerRevision = json['data']['user']['banner_revision'];
bio = json['data']['user']['bio'];
connections = json['data']['user']['connections'] != null
? Connections.fromJson(json['data']['user']['connections'])
avatarRevision = json['avatar_revision'];
bannerRevision = json['banner_revision'];
bio = json['bio'];
connections = json['connections'] != null
? Connections.fromJson(json['connections'])
: null;
friendCount = json['data']['user']['friend_count'];
var url = Uri.https('ch.tetr.io', 'api/users/$userId/records');
Future response = http.get(url);
response.then((value) {
if (value.statusCode == 200) {
sprint = jsonDecode(value.body)['data']['records']['40l']['record'] !=
null
? [
RecordSingle.fromJson(
jsonDecode(value.body)['data']['records']['40l']['record'])
]
: null;
blitz =
jsonDecode(value.body)['data']['records']['blitz']['record'] != null
? [
RecordSingle.fromJson(jsonDecode(value.body)['data']
['records']['blitz']['record'])
]
: null;
zen = TetrioZen.fromJson(jsonDecode(value.body)['data']['zen']);
} else {
throw Exception('Failed to fetch player');
}
});
friendCount = json['friend_count'];
}
Map<String, dynamic> toJson() {
@ -271,7 +315,7 @@ class EndContextSingle {
int? lines;
int? score;
int? seed;
double? finalTime;
Duration? finalTime;
int? tSpins;
Clears? clears;
Finesse? finesse;
@ -297,7 +341,7 @@ class EndContextSingle {
lines = json['lines'];
inputs = json['inputs'];
holds = json['holds'];
finalTime = json['finalTime'];
finalTime = doubleSecondsToDuration(json['finalTime'].toDouble());
score = json['score'];
level = json['level'];
topCombo = json['topcombo'];
@ -554,7 +598,7 @@ class RecordSingle {
? EndContextSingle.fromJson(json['endcontext'])
: null;
replayId = json['replayid'];
timestamp = json['ts'];
timestamp = DateTime.parse(json['ts']);
userId = json['user']['_id'];
}

View File

@ -22,7 +22,7 @@ class _MainViewState extends State<MainView> {
if (response.statusCode == 200) {
// If the server did return a 200 OK response,
// then parse the JSON.
return TetrioPlayer.fromJson(jsonDecode(response.body));
return TetrioPlayer.fromJson(jsonDecode(response.body)['data']['user']);
} else {
// If the server did not return a 200 OK response,
// then throw an exception.
@ -52,6 +52,11 @@ class _MainViewState extends State<MainView> {
onChanged: (String value) {
_searchFor = value;
},
onSubmitted: (String value) {
setState(() {
me = fetchTetrioPlayer(value);
});
},
maxLength: 25,
)),
TextButton(
@ -65,15 +70,37 @@ class _MainViewState extends State<MainView> {
future: me,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Column(children: [
return Flexible(
child: Column(children: [
Text(snapshot.data!.username.toString()),
Text("Level ${snapshot.data!.getLevel()}"),
Text("Registered ${snapshot.data!.registrationTime}"),
Text("${snapshot.data!.tlSeason1!.rating} TR"),
Text(snapshot.data!.userId.toString()),
Text(snapshot.data!.role.toString()),
Text(
"${snapshot.data!.tlSeason1!.glicko}±${snapshot.data!.tlSeason1!.rd} GLICKO"),
Text("${snapshot.data!.zen}")
]);
"Level ${snapshot.data!.getLevel().toStringAsFixed(2)} (${snapshot.data!.xp} XP)"),
Text("Registered ${snapshot.data!.registrationTime}"),
Text("Bio: ${snapshot.data!.bio}", softWrap: true),
Text("Country: ${snapshot.data!.country}"),
Text("${snapshot.data!.friendCount} friends"),
Text(
"Won/PLayed: ${snapshot.data!.gamesWon}/${snapshot.data!.gamesPlayed}"),
Text("Gametime: ${snapshot.data!.gameTime}"),
Text("Supporter tier ${snapshot.data!.supporterTier}"),
const Text("\nTetra League", softWrap: true),
Text(
"${snapshot.data!.tlSeason1!.rating?.toStringAsFixed(2)} TR"),
Text(
"${snapshot.data!.tlSeason1!.glicko?.toStringAsFixed(2)}±${snapshot.data!.tlSeason1!.rd?.toStringAsFixed(2)} GLICKO"),
Text(
"Rank: ${snapshot.data!.tlSeason1!.rank?.toUpperCase()} (top ${(snapshot.data!.tlSeason1!.percentile! * 100).toStringAsFixed(2)}%)"),
Text(
"Won/Games: ${snapshot.data!.tlSeason1!.gamesPlayed}/${snapshot.data!.tlSeason1!.gamesWon}"),
Text(
"${snapshot.data!.tlSeason1!.standing} (№${snapshot.data!.tlSeason1!.standingLocal} in country)"),
Text(
"${snapshot.data!.tlSeason1!.apm} APM, ${snapshot.data!.tlSeason1!.pps} PPS, ${snapshot.data!.tlSeason1!.vs} VS"),
const Text("\n40 Lines", softWrap: true),
Text(snapshot.data!.sprint.toString()),
]));
} else if (snapshot.hasError) {
return Text('${snapshot.error}');
}