mirror of
https://github.com/git-touch/git-touch
synced 2024-12-18 11:19:28 +01:00
refactor(gh): fetch contents with github lib
This commit is contained in:
parent
a4b54d317c
commit
0ee36143f8
@ -4,6 +4,7 @@ import 'dart:async';
|
|||||||
import 'package:git_touch/models/bitbucket.dart';
|
import 'package:git_touch/models/bitbucket.dart';
|
||||||
import 'package:git_touch/models/gitea.dart';
|
import 'package:git_touch/models/gitea.dart';
|
||||||
import 'package:git_touch/utils/request_serilizer.dart';
|
import 'package:git_touch/utils/request_serilizer.dart';
|
||||||
|
import 'package:github/github.dart';
|
||||||
import 'package:gql_http_link/gql_http_link.dart';
|
import 'package:gql_http_link/gql_http_link.dart';
|
||||||
import 'package:artemis/artemis.dart';
|
import 'package:artemis/artemis.dart';
|
||||||
import 'package:fimber/fimber.dart';
|
import 'package:fimber/fimber.dart';
|
||||||
@ -328,6 +329,7 @@ class AuthModel with ChangeNotifier {
|
|||||||
// https://stackoverflow.com/a/50116077
|
// https://stackoverflow.com/a/50116077
|
||||||
rootKey = UniqueKey();
|
rootKey = UniqueKey();
|
||||||
activeAccountIndex = index;
|
activeAccountIndex = index;
|
||||||
|
_ghClient = null;
|
||||||
_gqlClient = null;
|
_gqlClient = null;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
@ -339,6 +341,15 @@ class AuthModel with ChangeNotifier {
|
|||||||
var _timeoutDuration = Duration(seconds: 10);
|
var _timeoutDuration = Duration(seconds: 10);
|
||||||
// var _timeoutDuration = Duration(seconds: 1);
|
// var _timeoutDuration = Duration(seconds: 1);
|
||||||
|
|
||||||
|
GitHub _ghClient;
|
||||||
|
GitHub get ghClient {
|
||||||
|
if (token == null) return null;
|
||||||
|
if (_ghClient == null) {
|
||||||
|
_ghClient = GitHub(auth: Authentication.withToken(token));
|
||||||
|
}
|
||||||
|
return _ghClient;
|
||||||
|
}
|
||||||
|
|
||||||
ArtemisClient _gqlClient;
|
ArtemisClient _gqlClient;
|
||||||
ArtemisClient get gqlClient {
|
ArtemisClient get gqlClient {
|
||||||
if (token == null) return null;
|
if (token == null) return null;
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:flutter/cupertino.dart';
|
||||||
import 'package:git_touch/models/github.dart';
|
|
||||||
import 'package:git_touch/scaffolds/refresh_stateful.dart';
|
import 'package:git_touch/scaffolds/refresh_stateful.dart';
|
||||||
|
import 'package:git_touch/utils/utils.dart';
|
||||||
import 'package:git_touch/widgets/action_entry.dart';
|
import 'package:git_touch/widgets/action_entry.dart';
|
||||||
import 'package:git_touch/widgets/app_bar_title.dart';
|
import 'package:git_touch/widgets/app_bar_title.dart';
|
||||||
import 'package:git_touch/widgets/blob_view.dart';
|
import 'package:git_touch/widgets/blob_view.dart';
|
||||||
import 'package:git_touch/widgets/object_tree.dart';
|
import 'package:git_touch/widgets/object_tree.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:git_touch/models/auth.dart';
|
import 'package:git_touch/models/auth.dart';
|
||||||
|
import 'package:github/github.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:git_touch/utils/utils.dart';
|
|
||||||
|
|
||||||
class GhObjectScreen extends StatelessWidget {
|
class GhObjectScreen extends StatelessWidget {
|
||||||
final String owner;
|
final String owner;
|
||||||
@ -20,23 +20,32 @@ class GhObjectScreen extends StatelessWidget {
|
|||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return RefreshStatefulScaffold(
|
return RefreshStatefulScaffold<RepositoryContents>(
|
||||||
// canRefresh: !_isImage, // TODO:
|
// canRefresh: !_isImage, // TODO:
|
||||||
title: AppBarTitle(path == null ? 'Files' : path),
|
title: AppBarTitle(path == null ? 'Files' : path),
|
||||||
fetchData: () async {
|
fetchData: () async {
|
||||||
// Do not request again for images
|
// Do not request again for images
|
||||||
if (path != null &&
|
if (path != null &&
|
||||||
raw != null &&
|
raw != null &&
|
||||||
['png', 'jpg', 'jpeg', 'gif', 'webp'].contains(path.ext))
|
['png', 'jpg', 'jpeg', 'gif', 'webp'].contains(path.ext)) {
|
||||||
return {'download_url': raw};
|
return RepositoryContents(
|
||||||
|
file: GitHubFile(downloadUrl: raw, content: ''),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
final suffix = path == null ? '' : '/$path';
|
final suffix = path == null ? '' : '/$path';
|
||||||
final res = await Provider.of<AuthModel>(context)
|
final auth = Provider.of<AuthModel>(context);
|
||||||
.getWithCredentials('/repos/$owner/$name/contents$suffix?ref=$ref');
|
final res = await auth.ghClient.repositories
|
||||||
|
.getContents(RepositorySlug(owner, name), suffix, ref: ref);
|
||||||
|
if (res.isDirectory) {
|
||||||
|
res.tree.sort((a, b) {
|
||||||
|
return sortByKey('dir', a.type, b.type);
|
||||||
|
});
|
||||||
|
}
|
||||||
return res;
|
return res;
|
||||||
},
|
},
|
||||||
actionBuilder: (data, _) {
|
actionBuilder: (data, _) {
|
||||||
if (data is Map) {
|
if (data.isFile) {
|
||||||
return ActionEntry(
|
return ActionEntry(
|
||||||
iconData: Icons.settings,
|
iconData: Icons.settings,
|
||||||
url: '/choose-code-theme',
|
url: '/choose-code-theme',
|
||||||
@ -44,13 +53,9 @@ class GhObjectScreen extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
bodyBuilder: (data, _) {
|
bodyBuilder: (data, _) {
|
||||||
if (data is List) {
|
if (data.isDirectory) {
|
||||||
final items = data.map((t) => GithubTreeItem.fromJson(t)).toList();
|
|
||||||
items.sort((a, b) {
|
|
||||||
return sortByKey('dir', a.type, b.type);
|
|
||||||
});
|
|
||||||
return ObjectTree(
|
return ObjectTree(
|
||||||
items: items.map((v) {
|
items: data.tree.map((v) {
|
||||||
// if (item.type == 'commit') return null;
|
// if (item.type == 'commit') return null;
|
||||||
final uri = Uri(
|
final uri = Uri(
|
||||||
path: '/$owner/$name/blob/$ref',
|
path: '/$owner/$name/blob/$ref',
|
||||||
@ -71,11 +76,10 @@ class GhObjectScreen extends StatelessWidget {
|
|||||||
} else {
|
} else {
|
||||||
// TODO: Markdown base path
|
// TODO: Markdown base path
|
||||||
// basePaths: [owner, name, branch, ...paths]
|
// basePaths: [owner, name, branch, ...paths]
|
||||||
final v = GithubTreeItem.fromJson(data);
|
|
||||||
return BlobView(
|
return BlobView(
|
||||||
path,
|
path,
|
||||||
base64Text: v.content?.dropLineBreak,
|
text: data.file.text,
|
||||||
networkUrl: v.downloadUrl,
|
networkUrl: data.file.downloadUrl,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user