| 898 | } |
| 899 | |
| 900 | bool ProjectController::fetchProjectFromUrl(const QUrl& repoUrl, FetchFlags fetchFlags) |
| 901 | { |
| 902 | Q_D(ProjectController); |
| 903 | |
| 904 | IPlugin* vcsOrProviderPlugin = nullptr; |
| 905 | |
| 906 | // TODO: query also projectprovider plugins, and that before plain vcs plugins |
| 907 | // e.g. KDE provider plugin could catch URLs from mirror or pickup kde:repo things |
| 908 | auto* pluginController = d->m_core->pluginController(); |
| 909 | const auto& vcsPlugins = pluginController->allPluginsForExtension(QStringLiteral("org.kdevelop.IBasicVersionControl")); |
| 910 | |
| 911 | for (auto* plugin : vcsPlugins) { |
| 912 | auto* iface = plugin->extension<IBasicVersionControl>(); |
| 913 | if (iface->isValidRemoteRepositoryUrl(repoUrl)) { |
| 914 | vcsOrProviderPlugin = plugin; |
| 915 | break; |
| 916 | } |
| 917 | } |
| 918 | if (!vcsOrProviderPlugin) { |
| 919 | if (fetchFlags.testFlag(FetchShowErrorIfNotSupported)) { |
| 920 | const QString messageText = |
| 921 | i18n("No enabled plugin supports this repository URL: %1", repoUrl.toDisplayString()); |
| 922 | auto* message = new Sublime::Message(messageText, Sublime::Message::Error); |
| 923 | ICore::self()->uiController()->postMessage(message); |
| 924 | } |
| 925 | return false; |
| 926 | } |
| 927 | |
| 928 | const QUrl url = d->dialog->askProjectConfigLocation(true, QUrl(), repoUrl, vcsOrProviderPlugin); |
| 929 | |
| 930 | if (!url.isEmpty()) { |
| 931 | d->importProject(url); |
| 932 | } |
| 933 | |
| 934 | return true; |
| 935 | } |
| 936 | |
| 937 | void ProjectController::fetchProject() |
| 938 | { |
no test coverage detected