<table><tr><td style="">kossebau created this revision.<br />Restricted Application added a subscriber: kdevelop-devel.
</td><a style="text-decoration: none; padding: 4px 8px; margin: 0 8px 8px; float: right; color: #464C5C; font-weight: bold; border-radius: 3px; background-color: #F7F7F9; background-image: linear-gradient(to bottom,#fff,#f1f0f1); display: inline-block; border: 1px solid rgba(71,87,120,.2);" href="https://phabricator.kde.org/D4672" rel="noreferrer">View Revision</a></tr></table><br /><div><strong>REVISION SUMMARY</strong><div><p>For a project there can be lots of other activities besides actual<br />
code development, building and running/debugging. There are<br />
things like issue tracking, task organization, schedules, CI servers,<br />
communication, documentation, localization, and more. Which usually<br />
are organized with central services, either accessed via web browsers<br />
or specific clients (e.g. irc, mailinglist).<br />
For more _I_ in IDE it would be attractive to integrate more with those<br />
services when useful.</p>

<p>This patch adds a new lib KDevPlatformServices, to start support for<br />
connecting to such services and collecting any related classes & interfaces.<br />
Any plugin providing support for a given type of service would implement<br />
the new interface IProjectServiceHookup, next to IPlugin.<br />
The new plugin kdevprojectservicehookupmanager will collect any such<br />
plugins and enable to add to a project multiple hookup configurations<br />
using any of the available plugins.<br />
Each IProjectServiceHookup plugin would implement all kind of other<br />
interfaces, matching the capabilities of the respective service.<br />
And when their interface is used, they would respond using the<br />
respective configurations for the loaded projects.</p>

<p>There are three service hookup plugins in this patch:</p>

<ul class="remarkup-list">
<li class="remarkup-list-item">gitlab</li>
<li class="remarkup-list-item">phabricator</li>
<li class="remarkup-list-item">cgit</li>
</ul>

<p>Initially they all only implement the new IProjectServiceUrlMapper<br />
interface. This one maps urls to locations/items in services and<br />
locations/items in the local project. Initially this only covers<br />
getting matching urls for the current document + cursor position<br />
in a repo browsing service. The interface is planned to be extended<br />
to also cover the reverse and other items, like commits/change sets.</p>

<p>A new plugin kdevprojectserviceurlmapper, also in this patch,  makes<br />
use of this interface and integrates a submenu into the editor context<br />
menu, to open for the curremt document and cursor position the matching<br />
link of a repo browsing service in the browser or at least copy the link<br />
to the clipboard, to use it e.g. in a chat.</p>

<p>Future plans:<br />
Project providers, like the KDE provider, would automatically<br />
configure any known service hookup. No idea yet how to do that<br />
in a cross-plugin agnostic way. Unless the repo provider is<br />
part of a service suite, like github: there the provider plugin<br />
can be extended into a IProjectServiceHookup one and handle all<br />
this internally.</p></div></div><br /><div><strong>REPOSITORY</strong><div><div>R33 KDevPlatform</div></div></div><br /><div><strong>BRANCH</strong><div><div>addServiceLocationMapping</div></div></div><br /><div><strong>REVISION DETAIL</strong><div><a href="https://phabricator.kde.org/D4672" rel="noreferrer">https://phabricator.kde.org/D4672</a></div></div><br /><div><strong>AFFECTED FILES</strong><div><div>CMakeLists.txt<br />
plugins/CMakeLists.txt<br />
plugins/cgit/CMakeLists.txt<br />
plugins/cgit/Messages.sh<br />
plugins/cgit/cgithookupconfigpage.cpp<br />
plugins/cgit/cgithookupconfigpage.h<br />
plugins/cgit/cgithookupconfigpage.ui<br />
plugins/cgit/cgithookupconfiguration.cpp<br />
plugins/cgit/cgithookupconfiguration.h<br />
plugins/cgit/cgitplugin.cpp<br />
plugins/cgit/cgitplugin.h<br />
plugins/cgit/cgitplugin.json<br />
plugins/cgit/icons/96-apps-cgit.png<br />
plugins/cgit/icons/CMakeLists.txt<br />
plugins/cgit/projectvcstracker.cpp<br />
plugins/cgit/projectvcstracker.h<br />
plugins/gitlab/CMakeLists.txt<br />
plugins/gitlab/Messages.sh<br />
plugins/gitlab/gitlabhookupconfigpage.cpp<br />
plugins/gitlab/gitlabhookupconfigpage.h<br />
plugins/gitlab/gitlabhookupconfigpage.ui<br />
plugins/gitlab/gitlabhookupconfiguration.cpp<br />
plugins/gitlab/gitlabhookupconfiguration.h<br />
plugins/gitlab/gitlabplugin.cpp<br />
plugins/gitlab/gitlabplugin.h<br />
plugins/gitlab/gitlabplugin.json<br />
plugins/gitlab/icons/CMakeLists.txt<br />
plugins/gitlab/icons/sc-apps-gitlab.svg<br />
plugins/gitlab/projectvcstracker.cpp<br />
plugins/gitlab/projectvcstracker.h<br />
plugins/phabricator/CMakeLists.txt<br />
plugins/phabricator/Messages.sh<br />
plugins/phabricator/icons/CMakeLists.txt<br />
plugins/phabricator/icons/sc-apps-phabricator.svg<br />
plugins/phabricator/phabricatorhookupconfigpage.cpp<br />
plugins/phabricator/phabricatorhookupconfigpage.h<br />
plugins/phabricator/phabricatorhookupconfigpage.ui<br />
plugins/phabricator/phabricatorhookupconfiguration.cpp<br />
plugins/phabricator/phabricatorhookupconfiguration.h<br />
plugins/phabricator/phabricatorplugin.cpp<br />
plugins/phabricator/phabricatorplugin.h<br />
plugins/phabricator/phabricatorplugin.json<br />
plugins/phabricator/projectvcstracker.cpp<br />
plugins/phabricator/projectvcstracker.h<br />
plugins/projectservicemanager/CMakeLists.txt<br />
plugins/projectservicemanager/Messages.sh<br />
plugins/projectservicemanager/config/projectconfig.kcfg<br />
plugins/projectservicemanager/config/projectconfig.kcfgc<br />
plugins/projectservicemanager/config/projectconfigpage.cpp<br />
plugins/projectservicemanager/config/projectconfigpage.h<br />
plugins/projectservicemanager/config/projectconfigpage.ui<br />
plugins/projectservicemanager/config/projectservicehookuplistmodel.cpp<br />
plugins/projectservicemanager/config/projectservicehookuplistmodel.h<br />
plugins/projectservicemanager/kdevprojectservicehookupmanager.cpp<br />
plugins/projectservicemanager/kdevprojectservicehookupmanager.h<br />
plugins/projectservicemanager/kdevprojectservicehookupmanager.json<br />
plugins/projectserviceurlmapper/CMakeLists.txt<br />
plugins/projectserviceurlmapper/Messages.sh<br />
plugins/projectserviceurlmapper/kdevprojectserviceurlmapper.cpp<br />
plugins/projectserviceurlmapper/kdevprojectserviceurlmapper.h<br />
plugins/projectserviceurlmapper/kdevprojectserviceurlmapper.json<br />
services/CMakeLists.txt<br />
services/interfaces/iprojectservicehookup.cpp<br />
services/interfaces/iprojectservicehookup.h<br />
services/interfaces/iprojectservicehookupconfiguration.cpp<br />
services/interfaces/iprojectservicehookupconfiguration.h<br />
services/interfaces/iprojectserviceurlmapper.cpp<br />
services/interfaces/iprojectserviceurlmapper.h<br />
services/interfaces/projectservicehookupconfigpage.cpp<br />
services/interfaces/projectservicehookupconfigpage.h</div></div></div><br /><div><strong>EMAIL PREFERENCES</strong><div><a href="https://phabricator.kde.org/settings/panel/emailpreferences/" rel="noreferrer">https://phabricator.kde.org/settings/panel/emailpreferences/</a></div></div><br /><div><strong>To: </strong>kossebau, KDevelop<br /><strong>Cc: </strong>kdevelop-devel<br /></div>