mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-29 02:07:39 +08:00
Do not let the user create a repo which already exists
Fixes APP-3C
This commit is contained in:
@ -16,7 +16,7 @@ import 'loading.dart';
|
|||||||
|
|
||||||
class GitHostSetupAutoConfigure extends StatefulWidget {
|
class GitHostSetupAutoConfigure extends StatefulWidget {
|
||||||
final GitHostType gitHostType;
|
final GitHostType gitHostType;
|
||||||
final Func1<GitHost, void> onDone;
|
final Func2<GitHost, UserInfo, void> onDone;
|
||||||
|
|
||||||
GitHostSetupAutoConfigure({
|
GitHostSetupAutoConfigure({
|
||||||
@required this.gitHostType,
|
@required this.gitHostType,
|
||||||
@ -57,12 +57,13 @@ class GitHostSetupAutoConfigureState extends State<GitHostSetupAutoConfigure> {
|
|||||||
}
|
}
|
||||||
Log.d("GitHost Initalized: " + widget.gitHostType.toString());
|
Log.d("GitHost Initalized: " + widget.gitHostType.toString());
|
||||||
|
|
||||||
|
UserInfo userInfo;
|
||||||
try {
|
try {
|
||||||
setState(() {
|
setState(() {
|
||||||
_message = tr('setup.autoconfigure.readUser');
|
_message = tr('setup.autoconfigure.readUser');
|
||||||
});
|
});
|
||||||
|
|
||||||
var userInfo = await gitHost.getUserInfo();
|
userInfo = await gitHost.getUserInfo();
|
||||||
var settings = Provider.of<Settings>(context, listen: false);
|
var settings = Provider.of<Settings>(context, listen: false);
|
||||||
if (userInfo.name != null && userInfo.name.isNotEmpty) {
|
if (userInfo.name != null && userInfo.name.isNotEmpty) {
|
||||||
settings.gitAuthor = userInfo.name;
|
settings.gitAuthor = userInfo.name;
|
||||||
@ -75,7 +76,7 @@ class GitHostSetupAutoConfigureState extends State<GitHostSetupAutoConfigure> {
|
|||||||
_handleGitHostException(e, stacktrace);
|
_handleGitHostException(e, stacktrace);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
widget.onDone(gitHost);
|
widget.onDone(gitHost, userInfo);
|
||||||
});
|
});
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
|
|||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:function_types/function_types.dart';
|
import 'package:function_types/function_types.dart';
|
||||||
import 'package:intl/intl.dart';
|
import 'package:intl/intl.dart';
|
||||||
|
import 'package:path/path.dart' as p;
|
||||||
import 'package:time/time.dart';
|
import 'package:time/time.dart';
|
||||||
import 'package:timeago/timeago.dart' as timeago;
|
import 'package:timeago/timeago.dart' as timeago;
|
||||||
|
|
||||||
@ -18,10 +19,12 @@ import 'package:gitjournal/utils/logger.dart';
|
|||||||
|
|
||||||
class GitHostSetupRepoSelector extends StatefulWidget {
|
class GitHostSetupRepoSelector extends StatefulWidget {
|
||||||
final GitHost gitHost;
|
final GitHost gitHost;
|
||||||
|
final UserInfo userInfo;
|
||||||
final Func1<GitHostRepo, void> onDone;
|
final Func1<GitHostRepo, void> onDone;
|
||||||
|
|
||||||
GitHostSetupRepoSelector({
|
GitHostSetupRepoSelector({
|
||||||
@required this.gitHost,
|
@required this.gitHost,
|
||||||
|
@required this.userInfo,
|
||||||
@required this.onDone,
|
@required this.onDone,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -123,11 +126,21 @@ class GitHostSetupRepoSelectorState extends State<GitHostSetupRepoSelector> {
|
|||||||
var filteredRepos = repos.where((r) {
|
var filteredRepos = repos.where((r) {
|
||||||
var repoName = r.fullName.split('/').last;
|
var repoName = r.fullName.split('/').last;
|
||||||
return repoName.toLowerCase().contains(q);
|
return repoName.toLowerCase().contains(q);
|
||||||
});
|
}).toList();
|
||||||
|
|
||||||
|
var repoExists = filteredRepos.indexWhere((r) {
|
||||||
|
var l = r.fullName.split('/');
|
||||||
|
var username = l.first;
|
||||||
|
var repoName = l.last;
|
||||||
|
return repoName.toLowerCase() == _textController.text &&
|
||||||
|
username == widget.userInfo.username;
|
||||||
|
}) !=
|
||||||
|
-1;
|
||||||
|
var createRepoTile = _textController.text.isNotEmpty && !repoExists;
|
||||||
|
|
||||||
Widget repoBuilder = ListView(
|
Widget repoBuilder = ListView(
|
||||||
children: <Widget>[
|
children: <Widget>[
|
||||||
if (_textController.text.isNotEmpty) _buildCreateRepoTile(),
|
if (createRepoTile) _buildCreateRepoTile(),
|
||||||
for (var repo in filteredRepos)
|
for (var repo in filteredRepos)
|
||||||
_RepoTile(
|
_RepoTile(
|
||||||
repo: repo,
|
repo: repo,
|
||||||
@ -211,10 +224,11 @@ class GitHostSetupRepoSelectorState extends State<GitHostSetupRepoSelector> {
|
|||||||
|
|
||||||
Widget _buildCreateRepoTile() {
|
Widget _buildCreateRepoTile() {
|
||||||
var repoName = _textController.text.trim();
|
var repoName = _textController.text.trim();
|
||||||
|
var fullRepoName = p.join(widget.userInfo.username, repoName);
|
||||||
|
|
||||||
return ListTile(
|
return ListTile(
|
||||||
leading: const Icon(Icons.add),
|
leading: const Icon(Icons.add),
|
||||||
title: Text(tr('setup.repoSelector.create', args: [repoName])),
|
title: Text(tr('setup.repoSelector.create', args: [fullRepoName])),
|
||||||
contentPadding: const EdgeInsets.all(0.0),
|
contentPadding: const EdgeInsets.all(0.0),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
|
@ -71,6 +71,8 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
|||||||
var pageController = PageController();
|
var pageController = PageController();
|
||||||
int _currentPageIndex = 0;
|
int _currentPageIndex = 0;
|
||||||
|
|
||||||
|
UserInfo _userInfo;
|
||||||
|
|
||||||
Widget _buildPage(BuildContext context, int pos) {
|
Widget _buildPage(BuildContext context, int pos) {
|
||||||
assert(_pageCount >= 1);
|
assert(_pageCount >= 1);
|
||||||
|
|
||||||
@ -175,9 +177,10 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
|||||||
} else if (_pageChoice[1] == PageChoice1.Auto) {
|
} else if (_pageChoice[1] == PageChoice1.Auto) {
|
||||||
return GitHostSetupAutoConfigure(
|
return GitHostSetupAutoConfigure(
|
||||||
gitHostType: _gitHostType,
|
gitHostType: _gitHostType,
|
||||||
onDone: (GitHost gitHost) {
|
onDone: (GitHost gitHost, UserInfo userInfo) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_gitHost = gitHost;
|
_gitHost = gitHost;
|
||||||
|
_userInfo = userInfo;
|
||||||
_pageCount = pos + 2;
|
_pageCount = pos + 2;
|
||||||
|
|
||||||
_nextPage();
|
_nextPage();
|
||||||
@ -251,6 +254,7 @@ class GitHostSetupScreenState extends State<GitHostSetupScreen> {
|
|||||||
} else if (_pageChoice[1] == PageChoice1.Auto) {
|
} else if (_pageChoice[1] == PageChoice1.Auto) {
|
||||||
return GitHostSetupRepoSelector(
|
return GitHostSetupRepoSelector(
|
||||||
gitHost: _gitHost,
|
gitHost: _gitHost,
|
||||||
|
userInfo: _userInfo,
|
||||||
onDone: (GitHostRepo repo) {
|
onDone: (GitHostRepo repo) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_gitHostRepo = repo;
|
_gitHostRepo = repo;
|
||||||
|
Reference in New Issue
Block a user