git-touch-android-ios-app/lib/models/github.dart

214 lines
4.6 KiB
Dart
Raw Normal View History

2019-12-08 07:21:14 +01:00
import 'package:git_touch/utils/utils.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:tuple/tuple.dart';
2019-12-12 07:02:48 +01:00
part 'github.g.dart';
2019-12-08 07:21:14 +01:00
@JsonSerializable(fieldRename: FieldRename.snake)
class GithubEvent {
2019-12-20 13:52:49 +01:00
GithubEventUser actor;
2019-12-08 07:21:14 +01:00
String type;
GithubEventRepo repo;
2019-12-20 13:52:49 +01:00
DateTime createdAt;
GithubEventPayload payload;
2019-12-08 07:21:14 +01:00
Tuple2<String, String> _repo;
String get repoOwner {
if (_repo == null) {
_repo = parseRepositoryFullName(repo.name);
}
return _repo.item1;
}
String get repoName {
if (_repo == null) {
_repo = parseRepositoryFullName(repo.name);
}
return _repo.item2;
}
GithubEvent();
factory GithubEvent.fromJson(Map<String, dynamic> json) =>
_$GithubEventFromJson(json);
}
@JsonSerializable(fieldRename: FieldRename.snake)
2019-12-20 13:52:49 +01:00
class GithubEventUser {
2019-12-08 07:21:14 +01:00
String login;
String avatarUrl;
2019-12-20 13:52:49 +01:00
GithubEventUser();
2019-12-08 07:21:14 +01:00
2019-12-20 13:52:49 +01:00
factory GithubEventUser.fromJson(Map<String, dynamic> json) =>
_$GithubEventUserFromJson(json);
2019-12-08 07:21:14 +01:00
}
@JsonSerializable(fieldRename: FieldRename.snake)
class GithubEventRepo {
String name;
GithubEventRepo();
factory GithubEventRepo.fromJson(Map<String, dynamic> json) =>
_$GithubEventRepoFromJson(json);
}
2019-12-12 07:02:48 +01:00
2019-12-20 13:52:49 +01:00
@JsonSerializable(fieldRename: FieldRename.snake)
class GithubEventPayload {
GithubEventIssue issue;
GithubEventIssue pullRequest;
GithubEventComment comment;
2019-12-25 03:46:56 +01:00
GithubEventRelease release;
2019-12-20 13:52:49 +01:00
String action;
String ref;
2019-12-25 03:56:30 +01:00
String refType;
2019-12-20 13:52:49 +01:00
String before;
2019-12-20 15:41:38 +01:00
String head;
2019-12-20 13:52:49 +01:00
List<GithubEventCommit> commits;
Map<String, dynamic> forkee;
GithubEventPayload();
factory GithubEventPayload.fromJson(Map<String, dynamic> json) =>
_$GithubEventPayloadFromJson(json);
}
@JsonSerializable(fieldRename: FieldRename.snake)
class GithubEventIssue {
String title;
GithubEventUser user;
int number;
String body;
dynamic pullRequest;
2019-12-20 15:41:38 +01:00
String state;
int comments;
bool merged;
DateTime createdAt;
2019-12-20 15:41:38 +01:00
bool get isPullRequestComment => pullRequest != null;
2019-12-20 13:52:49 +01:00
GithubEventIssue();
factory GithubEventIssue.fromJson(Map<String, dynamic> json) =>
_$GithubEventIssueFromJson(json);
}
2019-12-25 03:46:56 +01:00
@JsonSerializable(fieldRename: FieldRename.snake)
2019-12-20 13:52:49 +01:00
class GithubEventComment {
String body;
GithubEventUser user;
GithubEventComment();
factory GithubEventComment.fromJson(Map<String, dynamic> json) =>
_$GithubEventCommentFromJson(json);
}
2019-12-25 03:46:56 +01:00
@JsonSerializable(fieldRename: FieldRename.snake)
2019-12-20 13:52:49 +01:00
class GithubEventCommit {
String sha;
String message;
GithubEventCommit();
factory GithubEventCommit.fromJson(Map<String, dynamic> json) =>
_$GithubEventCommitFromJson(json);
}
2019-12-25 03:46:56 +01:00
@JsonSerializable(fieldRename: FieldRename.snake)
class GithubEventRelease {
String htmlUrl;
String tagName;
GithubEventRelease();
factory GithubEventRelease.fromJson(Map<String, dynamic> json) =>
_$GithubEventReleaseFromJson(json);
}
2019-12-26 11:00:36 +01:00
// Notification
@JsonSerializable(fieldRename: FieldRename.snake)
class GithubNotificationItem {
String id;
String htmlUrl;
GithubNotificationItemSubject subject;
DateTime updatedAt;
GithubNotificationItemRepo repository;
bool unread;
@JsonKey(ignore: true)
String state;
String get key => '_$hashCode';
GithubNotificationItem();
factory GithubNotificationItem.fromJson(Map<String, dynamic> json) =>
_$GithubNotificationItemFromJson(json);
}
@JsonSerializable(fieldRename: FieldRename.snake)
class GithubNotificationItemSubject {
String title;
String type;
String url;
int _number;
int get number {
if (_number == null) {
_number = int.parse(url?.split('/')?.last ?? '0');
}
return _number;
}
GithubNotificationItemSubject();
factory GithubNotificationItemSubject.fromJson(Map<String, dynamic> json) =>
_$GithubNotificationItemSubjectFromJson(json);
}
@JsonSerializable(fieldRename: FieldRename.snake)
class GithubNotificationItemRepo {
String fullName;
Tuple2<String, String> _repo;
String get owner {
if (_repo == null) {
_repo = parseRepositoryFullName(fullName);
}
return _repo.item1;
}
String get name {
if (_repo == null) {
_repo = parseRepositoryFullName(fullName);
}
return _repo.item2;
}
GithubNotificationItemRepo();
factory GithubNotificationItemRepo.fromJson(Map<String, dynamic> json) =>
_$GithubNotificationItemRepoFromJson(json);
}
// Trending
2019-12-12 07:02:48 +01:00
@JsonSerializable()
class GithubTrendingItem {
String author;
String name;
String avatar;
String description;
String language;
String languageColor;
int stars;
int forks;
int currentPeriodStars;
GithubTrendingItem();
factory GithubTrendingItem.fromJson(Map<String, dynamic> json) =>
_$GithubTrendingItemFromJson(json);
}