Do not let the user create a repo which already exists

Fixes APP-3C
This commit is contained in:
Vishesh Handa
2020-11-13 15:15:30 +01:00
parent bdc2f4ddc3
commit ba844282a6
3 changed files with 26 additions and 7 deletions

View File

@ -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 {

View File

@ -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(() {

View File

@ -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;