diff --git a/lib/setup/autoconfigure.dart b/lib/setup/autoconfigure.dart index 6d75c437..b0404c5d 100644 --- a/lib/setup/autoconfigure.dart +++ b/lib/setup/autoconfigure.dart @@ -16,7 +16,7 @@ import 'loading.dart'; class GitHostSetupAutoConfigure extends StatefulWidget { final GitHostType gitHostType; - final Func1 onDone; + final Func2 onDone; GitHostSetupAutoConfigure({ @required this.gitHostType, @@ -57,12 +57,13 @@ class GitHostSetupAutoConfigureState extends State { } Log.d("GitHost Initalized: " + widget.gitHostType.toString()); + UserInfo userInfo; try { setState(() { _message = tr('setup.autoconfigure.readUser'); }); - var userInfo = await gitHost.getUserInfo(); + userInfo = await gitHost.getUserInfo(); var settings = Provider.of(context, listen: false); if (userInfo.name != null && userInfo.name.isNotEmpty) { settings.gitAuthor = userInfo.name; @@ -75,7 +76,7 @@ class GitHostSetupAutoConfigureState extends State { _handleGitHostException(e, stacktrace); return; } - widget.onDone(gitHost); + widget.onDone(gitHost, userInfo); }); try { diff --git a/lib/setup/repo_selector.dart b/lib/setup/repo_selector.dart index 833c21c9..e17e9fe8 100644 --- a/lib/setup/repo_selector.dart +++ b/lib/setup/repo_selector.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:function_types/function_types.dart'; import 'package:intl/intl.dart'; +import 'package:path/path.dart' as p; import 'package:time/time.dart'; import 'package:timeago/timeago.dart' as timeago; @@ -18,10 +19,12 @@ import 'package:gitjournal/utils/logger.dart'; class GitHostSetupRepoSelector extends StatefulWidget { final GitHost gitHost; + final UserInfo userInfo; final Func1 onDone; GitHostSetupRepoSelector({ @required this.gitHost, + @required this.userInfo, @required this.onDone, }); @@ -123,11 +126,21 @@ class GitHostSetupRepoSelectorState extends State { var filteredRepos = repos.where((r) { var repoName = r.fullName.split('/').last; 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( children: [ - if (_textController.text.isNotEmpty) _buildCreateRepoTile(), + if (createRepoTile) _buildCreateRepoTile(), for (var repo in filteredRepos) _RepoTile( repo: repo, @@ -211,10 +224,11 @@ class GitHostSetupRepoSelectorState extends State { Widget _buildCreateRepoTile() { var repoName = _textController.text.trim(); + var fullRepoName = p.join(widget.userInfo.username, repoName); return ListTile( 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), onTap: () { setState(() { diff --git a/lib/setup/screens.dart b/lib/setup/screens.dart index db157027..601d3498 100644 --- a/lib/setup/screens.dart +++ b/lib/setup/screens.dart @@ -71,6 +71,8 @@ class GitHostSetupScreenState extends State { var pageController = PageController(); int _currentPageIndex = 0; + UserInfo _userInfo; + Widget _buildPage(BuildContext context, int pos) { assert(_pageCount >= 1); @@ -175,9 +177,10 @@ class GitHostSetupScreenState extends State { } else if (_pageChoice[1] == PageChoice1.Auto) { return GitHostSetupAutoConfigure( gitHostType: _gitHostType, - onDone: (GitHost gitHost) { + onDone: (GitHost gitHost, UserInfo userInfo) { setState(() { _gitHost = gitHost; + _userInfo = userInfo; _pageCount = pos + 2; _nextPage(); @@ -251,6 +254,7 @@ class GitHostSetupScreenState extends State { } else if (_pageChoice[1] == PageChoice1.Auto) { return GitHostSetupRepoSelector( gitHost: _gitHost, + userInfo: _userInfo, onDone: (GitHostRepo repo) { setState(() { _gitHostRepo = repo;