Skip to content

Commit 07acfca

Browse files
committed
repos detail readme db
1 parent 65021d8 commit 07acfca

File tree

6 files changed

+139
-58
lines changed

6 files changed

+139
-58
lines changed

lib/common/ab/provider/repos/RepositoryDetailDbProvider.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class RepositoryDetailDbProvider extends BaseDbProvider {
5151
}
5252

5353

54-
Future _getUserProvider(Database db, String fullName) async {
54+
Future _getProvider(Database db, String fullName) async {
5555
List<Map<String, dynamic>> maps =
5656
await db.query(name, columns: [columnId, columnFullName, columnData], where: "$columnFullName = ?", whereArgs: [fullName]);
5757
if (maps.length > 0) {
@@ -64,8 +64,8 @@ class RepositoryDetailDbProvider extends BaseDbProvider {
6464
///插入到数据库
6565
Future insert(String fullName, String dataMapString) async {
6666
Database db = await getDataBase();
67-
var userProvider = await _getUserProvider(db, fullName);
68-
if (userProvider != null) {
67+
var provider = await _getProvider(db, fullName);
68+
if (provider != null) {
6969
await db.delete(name, where: "$columnFullName = ?", whereArgs: [fullName]);
7070
}
7171
return await db.insert(name, toMap(fullName, dataMapString));
@@ -74,9 +74,9 @@ class RepositoryDetailDbProvider extends BaseDbProvider {
7474
///获取详情
7575
Future<Repository> getRepository(String fullName) async {
7676
Database db = await getDataBase();
77-
var userProvider = await _getUserProvider(db, fullName);
78-
if (userProvider != null) {
79-
return Repository.fromJson(json.decode(userProvider.data));
77+
var provider = await _getProvider(db, fullName);
78+
if (provider != null) {
79+
return Repository.fromJson(json.decode(provider.data));
8080
}
8181
return null;
8282
}

lib/common/ab/provider/repos/RepositoryDetailReadmeDbProvider.dart

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
import 'dart:async';
2+
13
import 'package:gsy_github_app_flutter/common/ab/SqlProvider.dart';
4+
import 'package:sqflite/sqflite.dart';
25

36
/**
47
* 仓库readme文件表
@@ -18,8 +21,10 @@ class RepositoryDetailReadmeDbProvider extends BaseDbProvider {
1821
final String columnBranch = "branch";
1922
final String columnData = "data";
2023

21-
Map<String, dynamic> toMap() {
22-
Map<String, dynamic> map = {columnFullName: fullName, columnBranch: branch, columnData: data};
24+
RepositoryDetailReadmeDbProvider();
25+
26+
Map<String, dynamic> toMap(String fullName, String branch, String dataMapString) {
27+
Map<String, dynamic> map = {columnFullName: fullName, columnBranch: branch, columnData: dataMapString};
2328
if (id != null) {
2429
map[columnId] = id;
2530
}
@@ -32,12 +37,50 @@ class RepositoryDetailReadmeDbProvider extends BaseDbProvider {
3237
branch = map[columnBranch];
3338
data = map[columnData];
3439
}
35-
3640
@override
37-
tableSqlString() {}
41+
tableSqlString() {
42+
return tableBaseString(name, columnId) +
43+
'''
44+
$columnFullName text not null,
45+
$columnBranch text not null,
46+
$columnData text not null)
47+
''';
48+
}
3849

3950
@override
4051
tableName() {
4152
return name;
4253
}
54+
55+
56+
Future _getProvider(Database db, String fullName, String branch) async {
57+
List<Map<String, dynamic>> maps =
58+
await db.query(name, columns: [columnId, columnFullName, columnData], where: "$columnFullName = ? and $columnBranch = ?", whereArgs: [fullName, branch]);
59+
if (maps.length > 0) {
60+
RepositoryDetailReadmeDbProvider provider = RepositoryDetailReadmeDbProvider.fromMap(maps.first);
61+
return provider;
62+
}
63+
return null;
64+
}
65+
66+
///插入到数据库
67+
Future insert(String fullName, String branch, String dataMapString) async {
68+
Database db = await getDataBase();
69+
var provider = await _getProvider(db, fullName, branch);
70+
if (provider != null) {
71+
await db.delete(name, where: "$columnFullName = ? and $columnBranch = ?", whereArgs: [fullName, branch]);
72+
}
73+
return await db.insert(name, toMap(fullName, branch, dataMapString));
74+
}
75+
76+
///获取readme详情
77+
Future<String> getRepositoryReadme(String fullName, String branch) async {
78+
Database db = await getDataBase();
79+
var provider = await _getProvider(db, fullName, branch);
80+
if (provider != null) {
81+
return provider.data;
82+
}
83+
return null;
84+
}
85+
4386
}

lib/common/dao/ReposDao.dart

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:dio/dio.dart';
66
import 'package:fluttertoast/fluttertoast.dart';
77
import 'package:get_version/get_version.dart';
88
import 'package:gsy_github_app_flutter/common/ab/provider/repos/RepositoryDetailDbProvider.dart';
9+
import 'package:gsy_github_app_flutter/common/ab/provider/repos/RepositoryDetailReadmeDbProvider.dart';
910
import 'package:gsy_github_app_flutter/common/ab/provider/repos/TrendRepositoryDbProvider.dart';
1011
import 'package:gsy_github_app_flutter/common/config/Config.dart';
1112
import 'package:gsy_github_app_flutter/common/dao/DaoResult.dart';
@@ -96,6 +97,7 @@ class ReposDao {
9697
return new DataResult(null, false);
9798
}
9899
}
100+
99101
if (needDb) {
100102
Repository repository = await provider.getRepository(fullName);
101103
if (repository == null) {
@@ -379,14 +381,32 @@ class ReposDao {
379381
/**
380382
* 详情的remde数据
381383
*/
382-
static getRepositoryDetailReadmeDao(userName, reposName, branch) async {
383-
String url = Address.readmeFile(userName + '/' + reposName, branch);
384-
var res = await HttpManager.netFetch(url, null, {"Accept": 'application/vnd.github.VERSION.raw'}, new Options(contentType: ContentType.TEXT));
385-
//var res = await HttpManager.netFetch(url, null, {"Accept": 'application/vnd.github.html'}, new Options(contentType: ContentType.TEXT));
386-
if (res != null && res.result) {
387-
return new DataResult(res.data, true);
384+
static getRepositoryDetailReadmeDao(userName, reposName, branch, {needDb = true}) async {
385+
String fullName = userName + "/" + reposName;
386+
RepositoryDetailReadmeDbProvider provider = new RepositoryDetailReadmeDbProvider();
387+
388+
next() async {
389+
String url = Address.readmeFile(userName + '/' + reposName, branch);
390+
var res = await HttpManager.netFetch(url, null, {"Accept": 'application/vnd.github.VERSION.raw'}, new Options(contentType: ContentType.TEXT));
391+
//var res = await HttpManager.netFetch(url, null, {"Accept": 'application/vnd.github.html'}, new Options(contentType: ContentType.TEXT));
392+
if (res != null && res.result) {
393+
if (needDb) {
394+
provider.insert(fullName, branch, res.data);
395+
}
396+
return new DataResult(res.data, true);
397+
}
398+
return new DataResult(null, false);
388399
}
389-
return new DataResult(null, false);
400+
401+
if (needDb) {
402+
String readme = await provider.getRepositoryReadme(fullName, branch);
403+
if (readme == null) {
404+
return await next();
405+
}
406+
DataResult dataResult = new DataResult(readme, true, next: next());
407+
return dataResult;
408+
}
409+
return await next();
390410
}
391411

392412
/**

lib/page/RepositoryDetailPage.dart

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ class _RepositoryDetailPageState extends State<RepositoryDetailPage> {
4040

4141
final String reposName;
4242

43-
final ReposDetailInfoPageControl reposDetailInfoPageControl = new ReposDetailInfoPageControl();
44-
4543
final TarWidgetControl tarBarControl = new TarWidgetControl();
4644

4745
final ReposDetailParentControl reposDetailParentControl = new ReposDetailParentControl("master");
@@ -60,26 +58,6 @@ class _RepositoryDetailPageState extends State<RepositoryDetailPage> {
6058

6159
_RepositoryDetailPageState(this.userName, this.reposName);
6260

63-
_getReposDetail() {
64-
ReposDao.getRepositoryDetailDao(userName, reposName, reposDetailParentControl.currentBranch).then((result) {
65-
if (result != null && result.result) {
66-
setState(() {
67-
reposDetailInfoPageControl.repository = result.data;
68-
titleOptionControl.url = reposDetailInfoPageControl.repository.htmlUrl;
69-
});
70-
return result.next;
71-
}
72-
return new Future.value(null);
73-
}).then((result) {
74-
if (result != null && result.result) {
75-
setState(() {
76-
reposDetailInfoPageControl.repository = result.data;
77-
titleOptionControl.url = reposDetailInfoPageControl.repository.htmlUrl;
78-
});
79-
}
80-
});
81-
}
82-
8361
_getReposStatus() async {
8462
var result = await ReposDao.getRepositoryStatusDao(userName, reposName);
8563
String watchText = result.data["watch"] ? "UnWatch" : "Watch";
@@ -103,7 +81,6 @@ class _RepositoryDetailPageState extends State<RepositoryDetailPage> {
10381
}
10482

10583
_refresh() {
106-
this._getReposDetail();
10784
this._getReposStatus();
10885
}
10986

@@ -239,12 +216,18 @@ class _RepositoryDetailPageState extends State<RepositoryDetailPage> {
239216
return [
240217
///Release Page
241218
new GSYOptionModel(GSYStrings.repos_option_release, GSYStrings.repos_option_release, (model) {
242-
String releaseUrl = reposDetailInfoPageControl.repository == null
243-
? GSYStrings.app_default_share_url
244-
: reposDetailInfoPageControl.repository.htmlUrl + "/releases";
245-
String tagUrl = reposDetailInfoPageControl.repository == null
246-
? GSYStrings.app_default_share_url
247-
: reposDetailInfoPageControl.repository.htmlUrl + "/tags";
219+
String releaseUrl = "";
220+
String tagUrl = "";
221+
if (infoListKey == null || infoListKey.currentState == null) {
222+
releaseUrl = GSYStrings.app_default_share_url;
223+
tagUrl = GSYStrings.app_default_share_url;
224+
} else {
225+
releaseUrl = infoListKey.currentState.repository == null
226+
? GSYStrings.app_default_share_url
227+
: infoListKey.currentState.repository.htmlUrl + "/releases";
228+
tagUrl =
229+
infoListKey.currentState.repository == null ? GSYStrings.app_default_share_url : infoListKey.currentState.repository.htmlUrl + "/tags";
230+
}
248231
NavigatorUtils.goReleasePage(context, userName, reposName, releaseUrl, tagUrl);
249232
}),
250233
];
@@ -265,7 +248,7 @@ class _RepositoryDetailPageState extends State<RepositoryDetailPage> {
265248
tarWidgetControl: tarBarControl,
266249
tabItems: _renderTabItem(),
267250
tabViews: [
268-
new ReposDetailInfoPage(reposDetailInfoPageControl, userName, reposName, reposDetailParentControl, key: infoListKey),
251+
new ReposDetailInfoPage(userName, reposName, reposDetailParentControl, titleOptionControl, key: infoListKey),
269252
new RepositoryDetailReadmePage(userName, reposName, reposDetailParentControl, key: readmeKey),
270253
new RepositoryDetailIssuePage(userName, reposName),
271254
new RepositoryDetailFileListPage(userName, reposName, reposDetailParentControl, key: fileListKey),

lib/page/RepositoryDetailReadmePage.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:async';
2+
13
import 'package:flutter/material.dart';
24
import 'package:flutter_spinkit/flutter_spinkit.dart';
35
import 'package:gsy_github_app_flutter/common/dao/ReposDao.dart';
@@ -40,6 +42,16 @@ class RepositoryDetailReadmePageState extends State<RepositoryDetailReadmePage>
4042

4143
refreshReadme() {
4244
ReposDao.getRepositoryDetailReadmeDao(userName, reposName, reposDetailParentControl.currentBranch).then((res) {
45+
if (res != null && res.result) {
46+
if (isShow) {
47+
setState(() {
48+
markdownData = res.data;
49+
});
50+
return res.next;
51+
}
52+
}
53+
return new Future.value(null);
54+
}).then((res) {
4355
if (res != null && res.result) {
4456
if (isShow) {
4557
setState(() {

lib/page/RepostoryDetailInfoPage.dart

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import 'dart:async';
2+
13
import 'package:flutter/material.dart';
24
import 'package:gsy_github_app_flutter/common/dao/ReposDao.dart';
35
import 'package:gsy_github_app_flutter/common/model/RepoCommit.dart';
@@ -6,6 +8,7 @@ import 'package:gsy_github_app_flutter/common/utils/EventUtils.dart';
68
import 'package:gsy_github_app_flutter/common/utils/NavigatorUtils.dart';
79
import 'package:gsy_github_app_flutter/page/RepositoryDetailPage.dart';
810
import 'package:gsy_github_app_flutter/widget/EventItem.dart';
11+
import 'package:gsy_github_app_flutter/widget/GSYCommonOptionWidget.dart';
912
import 'package:gsy_github_app_flutter/widget/GSYListState.dart';
1013
import 'package:gsy_github_app_flutter/widget/GSYPullLoadWidget.dart';
1114
import 'package:gsy_github_app_flutter/widget/ReposHeaderItem.dart';
@@ -19,14 +22,15 @@ class ReposDetailInfoPage extends StatefulWidget {
1922
final String userName;
2023

2124
final String reposName;
22-
final ReposDetailInfoPageControl reposDetailInfoPageControl;
2325

2426
final ReposDetailParentControl reposDetailParentControl;
2527

26-
ReposDetailInfoPage(this.reposDetailInfoPageControl, this.userName, this.reposName, this.reposDetailParentControl, {Key key}) : super(key: key);
28+
final OptionControl titleOptionControl;
29+
30+
ReposDetailInfoPage(this.userName, this.reposName, this.reposDetailParentControl, this.titleOptionControl, {Key key}) : super(key: key);
2731

2832
@override
29-
ReposDetailInfoPageState createState() => ReposDetailInfoPageState(reposDetailInfoPageControl, userName, reposName, reposDetailParentControl);
33+
ReposDetailInfoPageState createState() => ReposDetailInfoPageState(userName, reposName, reposDetailParentControl, titleOptionControl);
3034
}
3135

3236
// ignore: mixin_inherits_from_not_object
@@ -35,17 +39,19 @@ class ReposDetailInfoPageState extends GSYListState<ReposDetailInfoPage> {
3539

3640
final String reposName;
3741

38-
final ReposDetailInfoPageControl reposDetailInfoPageControl;
39-
4042
final ReposDetailParentControl reposDetailParentControl;
4143

44+
final OptionControl titleOptionControl;
45+
46+
Repository repository = Repository.empty();
47+
4248
int selectIndex = 0;
4349

44-
ReposDetailInfoPageState(this.reposDetailInfoPageControl, this.userName, this.reposName, this.reposDetailParentControl);
50+
ReposDetailInfoPageState(this.userName, this.reposName, this.reposDetailParentControl, this.titleOptionControl);
4551

4652
_renderEventItem(index) {
4753
if (index == 0) {
48-
return new ReposHeaderItem(ReposHeaderViewModel.fromHttpMap(userName, reposName, reposDetailInfoPageControl.repository), (index) {
54+
return new ReposHeaderItem(ReposHeaderViewModel.fromHttpMap(userName, reposName, repository), (index) {
4955
selectIndex = index;
5056
clearData();
5157
showRefreshLoading();
@@ -77,11 +83,32 @@ class ReposDetailInfoPageState extends GSYListState<ReposDetailInfoPage> {
7783
return await ReposDao.getRepositoryEventDao(userName, reposName, page: page, branch: reposDetailParentControl.currentBranch);
7884
}
7985

86+
_getReposDetail() {
87+
ReposDao.getRepositoryDetailDao(userName, reposName, reposDetailParentControl.currentBranch).then((result) {
88+
if (result != null && result.result) {
89+
setState(() {
90+
repository = result.data;
91+
titleOptionControl.url = repository.htmlUrl;
92+
});
93+
return result.next;
94+
}
95+
return new Future.value(null);
96+
}).then((result) {
97+
if (result != null && result.result) {
98+
setState(() {
99+
repository = result.data;
100+
titleOptionControl.url = repository.htmlUrl;
101+
});
102+
}
103+
});
104+
}
105+
80106
@override
81107
bool get wantKeepAlive => true;
82108

83109
@override
84110
requestRefresh() async {
111+
_getReposDetail();
85112
return await _getDataLogic();
86113
}
87114

@@ -108,7 +135,3 @@ class ReposDetailInfoPageState extends GSYListState<ReposDetailInfoPage> {
108135
);
109136
}
110137
}
111-
112-
class ReposDetailInfoPageControl {
113-
Repository repository = Repository.empty();
114-
}

0 commit comments

Comments
 (0)