mirror of
https://github.com/git-touch/git-touch
synced 2025-03-05 19:57:42 +01:00
feat(gitee): add tree screen
This commit is contained in:
parent
5f0dfd7600
commit
6870aa6ff1
@ -50,6 +50,7 @@ class GiteeRepo {
|
||||
String homepage;
|
||||
int openIssuesCount;
|
||||
bool pullRequestsEnabled;
|
||||
String defaultBranch;
|
||||
GiteeRepo();
|
||||
factory GiteeRepo.fromJson(Map<String, dynamic> json) =>
|
||||
_$GiteeRepoFromJson(json);
|
||||
@ -102,3 +103,14 @@ class GiteeCommitAuthor {
|
||||
factory GiteeCommitAuthor.fromJson(Map<String, dynamic> json) =>
|
||||
_$GiteeCommitAuthorFromJson(json);
|
||||
}
|
||||
|
||||
@JsonSerializable(fieldRename: FieldRename.snake)
|
||||
class GiteeTreeItem {
|
||||
String path;
|
||||
String type;
|
||||
String sha;
|
||||
int size;
|
||||
GiteeTreeItem();
|
||||
factory GiteeTreeItem.fromJson(Map<String, dynamic> json) =>
|
||||
_$GiteeTreeItemFromJson(json);
|
||||
}
|
||||
|
@ -78,7 +78,8 @@ GiteeRepo _$GiteeRepoFromJson(Map<String, dynamic> json) {
|
||||
..license = json['license'] as String
|
||||
..homepage = json['homepage'] as String
|
||||
..openIssuesCount = json['open_issues_count'] as int
|
||||
..pullRequestsEnabled = json['pull_requests_enabled'] as bool;
|
||||
..pullRequestsEnabled = json['pull_requests_enabled'] as bool
|
||||
..defaultBranch = json['default_branch'] as String;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GiteeRepoToJson(GiteeRepo instance) => <String, dynamic>{
|
||||
@ -98,6 +99,7 @@ Map<String, dynamic> _$GiteeRepoToJson(GiteeRepo instance) => <String, dynamic>{
|
||||
'homepage': instance.homepage,
|
||||
'open_issues_count': instance.openIssuesCount,
|
||||
'pull_requests_enabled': instance.pullRequestsEnabled,
|
||||
'default_branch': instance.defaultBranch,
|
||||
};
|
||||
|
||||
GiteeRepoOwner _$GiteeRepoOwnerFromJson(Map<String, dynamic> json) {
|
||||
@ -173,3 +175,19 @@ Map<String, dynamic> _$GiteeCommitAuthorToJson(GiteeCommitAuthor instance) =>
|
||||
'email': instance.email,
|
||||
'date': instance.date?.toIso8601String(),
|
||||
};
|
||||
|
||||
GiteeTreeItem _$GiteeTreeItemFromJson(Map<String, dynamic> json) {
|
||||
return GiteeTreeItem()
|
||||
..path = json['path'] as String
|
||||
..type = json['type'] as String
|
||||
..sha = json['sha'] as String
|
||||
..size = json['size'] as int;
|
||||
}
|
||||
|
||||
Map<String, dynamic> _$GiteeTreeItemToJson(GiteeTreeItem instance) =>
|
||||
<String, dynamic>{
|
||||
'path': instance.path,
|
||||
'type': instance.type,
|
||||
'sha': instance.sha,
|
||||
'size': instance.size,
|
||||
};
|
||||
|
@ -9,6 +9,7 @@ import 'package:git_touch/screens/code_theme.dart';
|
||||
import 'package:git_touch/screens/ge_commits.dart';
|
||||
import 'package:git_touch/screens/ge_repo.dart';
|
||||
import 'package:git_touch/screens/ge_repos.dart';
|
||||
import 'package:git_touch/screens/ge_tree.dart';
|
||||
import 'package:git_touch/screens/ge_user.dart';
|
||||
import 'package:git_touch/screens/ge_users.dart';
|
||||
import 'package:git_touch/screens/gh_commits.dart';
|
||||
@ -386,6 +387,7 @@ class GiteeRouter {
|
||||
GiteeRouter.watchers,
|
||||
GiteeRouter.forks,
|
||||
GiteeRouter.commits,
|
||||
GiteeRouter.tree,
|
||||
];
|
||||
static final user = RouterScreen('/:login', (context, p) {
|
||||
final login = p['login'].first;
|
||||
@ -422,4 +424,11 @@ class GiteeRouter {
|
||||
'/:owner/:name/commits',
|
||||
(_, p) => GeCommitsScreen(p['owner'].first, p['name'].first),
|
||||
);
|
||||
static final tree = RouterScreen(
|
||||
'/:owner/:name/tree/:sha',
|
||||
(context, parameters) {
|
||||
return GeTreeScreen(parameters['owner'].first, parameters['name'].first,
|
||||
parameters['sha'].first);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ class GeRepoScreen extends StatelessWidget {
|
||||
leftIconData: Octicons.code,
|
||||
text: Text('Code'),
|
||||
rightWidget: Text(p.license ?? ''),
|
||||
url: '/gitee/$owner/$name/blob',
|
||||
url: '/gitee/$owner/$name/tree/${p.defaultBranch}',
|
||||
),
|
||||
TableViewItem(
|
||||
leftIconData: Octicons.issue_opened,
|
||||
|
56
lib/screens/ge_tree.dart
Normal file
56
lib/screens/ge_tree.dart
Normal file
@ -0,0 +1,56 @@
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:git_touch/models/gitee.dart';
|
||||
import 'package:git_touch/scaffolds/refresh_stateful.dart';
|
||||
import 'package:git_touch/utils/utils.dart';
|
||||
import 'package:git_touch/widgets/app_bar_title.dart';
|
||||
import 'package:git_touch/widgets/object_tree.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:git_touch/models/auth.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class GeTreeScreen extends StatelessWidget {
|
||||
final String owner;
|
||||
final String name;
|
||||
final String sha;
|
||||
GeTreeScreen(this.owner, this.name, this.sha);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return RefreshStatefulScaffold<List<GiteeTreeItem>>(
|
||||
title: AppBarTitle('Files'),
|
||||
fetch: () async {
|
||||
final res = await context
|
||||
.read<AuthModel>()
|
||||
.fetchGitee('/repos/$owner/$name/git/trees/$sha');
|
||||
final items = [for (var v in res['tree']) GiteeTreeItem.fromJson(v)];
|
||||
items.sort((a, b) {
|
||||
return sortByKey('tree', a.type, b.type);
|
||||
});
|
||||
return items;
|
||||
},
|
||||
bodyBuilder: (data, _) {
|
||||
return ObjectTree(
|
||||
items: [
|
||||
for (var item in data)
|
||||
ObjectTreeItem(
|
||||
type: item.type,
|
||||
name: item.path,
|
||||
size: item.size,
|
||||
downloadUrl: '', // TODO:
|
||||
url: (() {
|
||||
switch (item.type) {
|
||||
case 'tree':
|
||||
return '/gitee/$owner/$name/tree/${item.sha}';
|
||||
case 'blob':
|
||||
return '/gitee/$owner/$name/blob/${item.sha}';
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
})(),
|
||||
)
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user