1 /*
2     SPDX-FileCopyrightText: 2007-2008 Robert Knight <robertknight@gmail.com>
3     SPDX-FileCopyrightText: 2020 Tomaz Canabrava <tcanabrava@gmail.com>
4 
5     SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #include "EscapeSequenceUrlFilter.h"
9 
10 #include "EscapeSequenceUrlExtractor.h"
11 #include "EscapeSequenceUrlFilterHotSpot.h"
12 #include "session/Session.h"
13 #include "terminalDisplay/TerminalDisplay.h"
14 
15 using namespace Konsole;
16 
EscapeSequenceUrlFilter(Session * session,TerminalDisplay * window)17 EscapeSequenceUrlFilter::EscapeSequenceUrlFilter(Session *session, TerminalDisplay *window)
18 {
19     _session = session;
20     _window = window;
21 }
22 
process()23 void EscapeSequenceUrlFilter::process()
24 {
25     if ((_window->screenWindow() == nullptr) && (_window->screenWindow()->screen() != nullptr)) {
26         return;
27     }
28     auto sWindow = _window->screenWindow();
29     const auto urls = sWindow->screen()->urlExtractor()->history();
30 
31     for (const auto &escapedUrl : urls) {
32         if (escapedUrl.begin.row < sWindow->currentLine() || escapedUrl.end.row > sWindow->currentLine() + sWindow->windowLines()) {
33             continue;
34         }
35 
36         const int beginRow = escapedUrl.begin.row - sWindow->currentLine();
37         const int endRow = escapedUrl.end.row - sWindow->currentLine();
38         QSharedPointer<HotSpot> spot(
39             // TODO:
40             // This uses Column / Row while everything else uses Row/Column.
41             // Move everything else to QPoint begin / QPoint End.
42             new EscapeSequenceUrlHotSpot(beginRow, escapedUrl.begin.col, endRow, escapedUrl.end.col, escapedUrl.text, escapedUrl.url));
43 
44         addHotSpot(spot);
45     }
46 }
47