| 772 | |
| 773 | |
| 774 | void ProjectController::openProjectForUrl(const QUrl& sourceUrl) { |
| 775 | Q_D(ProjectController); |
| 776 | |
| 777 | Q_ASSERT(!sourceUrl.isRelative()); |
| 778 | QUrl dirUrl = sourceUrl; |
| 779 | if (sourceUrl.isLocalFile() && !QFileInfo(sourceUrl.toLocalFile()).isDir()) { |
| 780 | dirUrl = dirUrl.adjusted(QUrl::RemoveFilename); |
| 781 | } |
| 782 | QUrl testAt = dirUrl; |
| 783 | |
| 784 | d->m_foundProjectFile = false; |
| 785 | |
| 786 | while(!testAt.path().isEmpty()) { |
| 787 | KIO::ListJob* job = KIO::listDir(testAt); |
| 788 | |
| 789 | connect(job, &KIO::ListJob::entries, this, &ProjectController::eventuallyOpenProjectFile); |
| 790 | KJobWidgets::setWindow(job, ICore::self()->uiController()->activeMainWindow()); |
| 791 | job->exec(); |
| 792 | if(d->m_foundProjectFile) { |
| 793 | //Fine! We have directly opened the project |
| 794 | d->m_foundProjectFile = false; |
| 795 | return; |
| 796 | } |
| 797 | QUrl oldTest = testAt.adjusted(QUrl::RemoveFilename); |
| 798 | if(oldTest == testAt) |
| 799 | break; |
| 800 | } |
| 801 | |
| 802 | QUrl askForOpen = d->dialog->askProjectConfigLocation(false, dirUrl); |
| 803 | |
| 804 | if(askForOpen.isValid()) |
| 805 | openProject(askForOpen); |
| 806 | } |
| 807 | |
| 808 | void ProjectController::openProject( const QUrl &projectFile ) |
| 809 | { |
no test coverage detected