File indexing completed on 2024-05-19 05:54:09

0001 /*
0002     SPDX-FileCopyrightText: 2007-2008 Robert Knight <robertknight@gmail.com>
0003     SPDX-FileCopyrightText: 2020 Tomaz Canabrava <tcanabrava@gmail.com>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "EscapeSequenceUrlFilter.h"
0009 
0010 #include "EscapeSequenceUrlExtractor.h"
0011 #include "EscapeSequenceUrlFilterHotSpot.h"
0012 #include "session/Session.h"
0013 #include "terminalDisplay/TerminalDisplay.h"
0014 
0015 using namespace Konsole;
0016 
0017 EscapeSequenceUrlFilter::EscapeSequenceUrlFilter(Session *session, TerminalDisplay *window)
0018     : _session(session)
0019     , _window(window)
0020 {
0021 }
0022 
0023 void EscapeSequenceUrlFilter::process()
0024 {
0025     if ((_window->screenWindow() == nullptr) && (_window->screenWindow()->screen() != nullptr)) {
0026         return;
0027     }
0028 
0029     QPointer<ScreenWindow> sWindow = _window->screenWindow();
0030     if (!sWindow->screen()->urlExtractor()) {
0031         return;
0032     }
0033 
0034     const auto urls = sWindow->screen()->urlExtractor()->history();
0035 
0036     for (const auto &escapedUrl : urls) {
0037         if (escapedUrl.begin.row < sWindow->currentLine() || escapedUrl.end.row > sWindow->currentLine() + sWindow->windowLines()) {
0038             continue;
0039         }
0040 
0041         const int beginRow = escapedUrl.begin.row - sWindow->currentLine();
0042         const int endRow = escapedUrl.end.row - sWindow->currentLine();
0043         QSharedPointer<HotSpot> spot(
0044             // TODO:
0045             // This uses Column / Row while everything else uses Row/Column.
0046             // Move everything else to QPoint begin / QPoint End.
0047             new EscapeSequenceUrlHotSpot(beginRow, escapedUrl.begin.col, endRow, escapedUrl.end.col, escapedUrl.text, escapedUrl.url));
0048 
0049         addHotSpot(spot);
0050     }
0051 }