From c5135ff8227a6e206570ec1a11ad69f7d01fbb26 Mon Sep 17 00:00:00 2001 From: Vishesh Handa Date: Fri, 25 Jan 2019 11:34:30 +0100 Subject: [PATCH] OnBoarding: Integrate GitLab api Now we can also automatically create a GitLab repo + configure it. --- lib/screens/onboarding_autoconfigure.dart | 28 +++++++----------- lib/screens/onboarding_screens.dart | 36 +++++++++++------------ 2 files changed, 27 insertions(+), 37 deletions(-) diff --git a/lib/screens/onboarding_autoconfigure.dart b/lib/screens/onboarding_autoconfigure.dart index d3b6f690..4dd3f6c2 100644 --- a/lib/screens/onboarding_autoconfigure.dart +++ b/lib/screens/onboarding_autoconfigure.dart @@ -1,24 +1,15 @@ import 'package:flutter/material.dart'; - -import 'package:journal/apis/github.dart'; import 'package:journal/apis/git.dart'; - -enum GitRemoteRepo { - GitHub, - Gitlab, - Custom, -} +import 'package:journal/apis/githost_factory.dart'; class OnBoardingAutoConfigure extends StatefulWidget { - final GitRemoteRepo remoteRepo; + final GitHostType gitHostType; final Function onDone; OnBoardingAutoConfigure({ - @required this.remoteRepo, + @required this.gitHostType, @required this.onDone, - }) { - assert(remoteRepo == GitRemoteRepo.GitHub); - } + }); @override OnBoardingAutoConfigureState createState() { @@ -27,22 +18,23 @@ class OnBoardingAutoConfigure extends StatefulWidget { } class OnBoardingAutoConfigureState extends State { - var gitHub = new GitHub(); + GitHost gitHost; @override void initState() { super.initState(); - gitHub.init(() async { + gitHost = createGitHost(widget.gitHostType); + gitHost.init(() async { print("GitHub Initalized"); - var repo = await gitHub.createRepo("journal"); + var repo = await gitHost.createRepo("journal"); var publicKey = await generateSSHKeys(comment: "GitJournal"); - await gitHub.addDeployKey(publicKey, repo.fullName); + await gitHost.addDeployKey(publicKey, repo.fullName); widget.onDone(repo.cloneUrl); }); - gitHub.launchOAuthScreen(); + gitHost.launchOAuthScreen(); } @override diff --git a/lib/screens/onboarding_screens.dart b/lib/screens/onboarding_screens.dart index 8df3d847..0a0839f8 100644 --- a/lib/screens/onboarding_screens.dart +++ b/lib/screens/onboarding_screens.dart @@ -1,19 +1,17 @@ import 'dart:io'; +import 'package:dots_indicator/dots_indicator.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:url_launcher/url_launcher.dart'; - -import 'package:path/path.dart' as p; -import 'package:dots_indicator/dots_indicator.dart'; - import 'package:journal/analytics.dart'; -import 'package:journal/state_container.dart'; import 'package:journal/apis/git.dart'; - -import 'package:journal/screens/onboarding_git_url.dart'; -import 'package:journal/screens/onboarding_git_clone.dart'; +import 'package:journal/apis/githost_factory.dart'; import 'package:journal/screens/onboarding_autoconfigure.dart'; +import 'package:journal/screens/onboarding_git_clone.dart'; +import 'package:journal/screens/onboarding_git_url.dart'; +import 'package:journal/state_container.dart'; +import 'package:path/path.dart' as p; +import 'package:url_launcher/url_launcher.dart'; class OnBoardingScreen extends StatefulWidget { final Function onBoardingCompletedFunction; @@ -35,7 +33,7 @@ class OnBoardingScreenState extends State { var _pageSshKeyDone = false; var _autoConfigureStarted = false; var _autoConfigureDone = false; - GitRemoteRepo _remoteRepo; + GitHostType _gitHostType; var _gitCloneUrl = ""; String gitCloneErrorMessage = ""; @@ -99,9 +97,9 @@ class OnBoardingScreenState extends State { if (pos == 1 && _createNewRepo) { return OnBoardingCreateRepo( - onDone: (GitRemoteRepo remoteRepo, bool autoConfigure) { + onDone: (GitHostType gitHostType, bool autoConfigure) { if (!autoConfigure) { - _launchCreateRepoPage(remoteRepo); + _launchCreateRepoPage(gitHostType); } setState(() { @@ -109,7 +107,7 @@ class OnBoardingScreenState extends State { _pageCreateNewRepoDone = true; _autoConfigureStarted = autoConfigure; _autoConfigureDone = false; - _remoteRepo = remoteRepo; + _gitHostType = gitHostType; pageController.nextPage( duration: Duration(milliseconds: 200), @@ -122,7 +120,7 @@ class OnBoardingScreenState extends State { if (pos == 2 && _createNewRepo && _autoConfigureStarted) { return OnBoardingAutoConfigure( - remoteRepo: _remoteRepo, + gitHostType: _gitHostType, onDone: (String gitCloneUrl) { setState(() { _gitCloneUrl = gitCloneUrl; @@ -316,11 +314,11 @@ class OnBoardingScreenState extends State { } } - void _launchCreateRepoPage(GitRemoteRepo repo) async { + void _launchCreateRepoPage(GitHostType hostType) async { try { - if (repo == GitRemoteRepo.GitHub) { + if (hostType == GitHostType.GitHub) { await launch("https://github.com/new"); - } else if (repo == GitRemoteRepo.Gitlab) { + } else if (hostType == GitHostType.GitLab) { await launch("https://gitlab.com/projects/new"); } } catch (err, stack) { @@ -449,7 +447,7 @@ class OnBoardingCreateRepo extends StatelessWidget { iconUrl: 'assets/icon/github-icon.png', onPressed: () { var switchWidget = _configureKey.currentWidget as Switch; - onDone(GitRemoteRepo.GitHub, switchWidget.value); + onDone(GitHostType.GitHub, switchWidget.value); }, ), SizedBox(height: 8.0), @@ -458,7 +456,7 @@ class OnBoardingCreateRepo extends StatelessWidget { iconUrl: 'assets/icon/gitlab-icon.png', onPressed: () async { var switchWidget = _configureKey.currentWidget as Switch; - onDone(GitRemoteRepo.Gitlab, switchWidget.value); + onDone(GitHostType.GitLab, switchWidget.value); }, ), SizedBox(height: 8.0),