1 #include "consolewindow.h"
2 #include "ui_consolewindow.h"
3 
ConsoleWindow(QWidget * parent)4 ConsoleWindow::ConsoleWindow(QWidget *parent) :
5     QMainWindow(parent),
6     ui(new Ui::ConsoleWindow),
7     findNext(false)
8 {
9     ui->setupUi(this);
10     sourceModel = new ConsoleModel(this);
11     model = new SortFilterProxyModel(this);
12     model->setSourceModel(sourceModel);
13     model->setFilterKeyColumn(0);
14     ui->consoleListView->setModel(model);
15     ui->consoleListView->setColumnWidth(0, 2000);
16 
17     connect(sourceModel, SIGNAL(beforeInserting()),
18                      this, SLOT(setConditionalScroll()));
19     connect(sourceModel, SIGNAL(afterInserting()),
20                      this, SLOT(conditionalScroll()));
21 
22     connect(ui->btnSend, SIGNAL(clicked()),
23                      this, SLOT(cmdSendClicked()));
24     connect(ui->lineCmd, SIGNAL(textChanged(QString)),
25                      this, SLOT(lineCmdChanged(QString)));
26 
27     _levelFilter = new QSignalMapper(this);
28     connect(ui->checkEmerg, SIGNAL(clicked()), _levelFilter, SLOT(map()));
29     connect(ui->checkAlert, SIGNAL(clicked()), _levelFilter, SLOT(map()));
30     connect(ui->checkCrit, SIGNAL(clicked()), _levelFilter, SLOT(map()));
31     connect(ui->checkDebug, SIGNAL(clicked()), _levelFilter, SLOT(map()));
32     connect(ui->checkError, SIGNAL(clicked()), _levelFilter, SLOT(map()));
33     connect(ui->checkInfo, SIGNAL(clicked()), _levelFilter, SLOT(map()));
34     connect(ui->checkNotice, SIGNAL(clicked()), _levelFilter, SLOT(map()));
35     connect(ui->checkWarn, SIGNAL(clicked()), _levelFilter, SLOT(map()));
36     _levelFilter->setMapping(ui->checkEmerg, SWITCH_LOG_CONSOLE);
37     _levelFilter->setMapping(ui->checkAlert, SWITCH_LOG_ALERT);
38     _levelFilter->setMapping(ui->checkCrit, SWITCH_LOG_CRIT);
39     _levelFilter->setMapping(ui->checkDebug, SWITCH_LOG_DEBUG);
40     _levelFilter->setMapping(ui->checkError, SWITCH_LOG_ERROR);
41     _levelFilter->setMapping(ui->checkInfo, SWITCH_LOG_INFO);
42     _levelFilter->setMapping(ui->checkNotice, SWITCH_LOG_NOTICE);
43     _levelFilter->setMapping(ui->checkWarn, SWITCH_LOG_WARNING);
44     connect(_levelFilter, SIGNAL(mapped(int)), this, SLOT(filterModelLogLevel(int)));
45 
46     connect(ui->btnFilterClear, SIGNAL(clicked()),
47                      this, SLOT(filterClear()));
48     connect(ui->lineFilter, SIGNAL(textChanged(QString)),
49                      this, SLOT(filterStringChanged()));
50     connect(ui->filterCaseSensitivityCheckBox, SIGNAL(toggled(bool)),
51                      this, SLOT(filterStringChanged()));
52     connect(ui->filterSyntaxComboBox, SIGNAL(currentIndexChanged(int)),
53                      this, SLOT(filterStringChanged()));
54     connect(ui->filterReverseCheckBox, SIGNAL(toggled(bool)),
55                      this, SLOT(reverseFilterChecked()));
56 
57     connect(g_FSHost, SIGNAL(eventLog(QSharedPointer<switch_log_node_t>,switch_log_level_t)), this, SLOT(loggerHandler(QSharedPointer<switch_log_node_t>,switch_log_level_t)));
58 
59 }
60 
~ConsoleWindow()61 ConsoleWindow::~ConsoleWindow()
62 {
63     delete ui;
64 }
65 
changeEvent(QEvent * e)66 void ConsoleWindow::changeEvent(QEvent *e)
67 {
68     QMainWindow::changeEvent(e);
69     switch (e->type()) {
70     case QEvent::LanguageChange:
71         ui->retranslateUi(this);
72         break;
73     default:
74         break;
75     }
76 }
77 
setConditionalScroll()78 void ConsoleWindow::setConditionalScroll()
79 {
80     autoScroll = (ui->consoleListView->verticalScrollBar()->maximum() == ui->consoleListView->verticalScrollBar()->value());
81 }
82 
conditionalScroll()83 void ConsoleWindow::conditionalScroll()
84 {
85     if (autoScroll)
86         ui->consoleListView->scrollToBottom();
87 }
88 
cmdSendClicked()89 void ConsoleWindow::cmdSendClicked()
90 {
91     if (ui->lineCmd->text().isEmpty()) return;
92 
93     QString cmd = ui->lineCmd->text().split(" ", QString::SkipEmptyParts)[0];
94     if (cmd.isEmpty()) return;
95 
96     QStringList split = ui->lineCmd->text().split(" ", QString::SkipEmptyParts);
97     if (split.isEmpty()) return;
98     QString args;
99     for (int i=1; i<split.length(); i++)
100     {
101         args += split[i];
102         if (i!=split.length()-1)
103             args += " ";
104     }
105 
106     QString res;
107     g_FSHost->sendCmd(cmd.toAscii().data(), args.toAscii().data(), &res);
108     if (!res.isEmpty())
109     {
110          /* Remove \r\n */
111         QStringList textList = res.split(QRegExp("(\r+)"), QString::SkipEmptyParts);
112         QString final_str;
113         for (int line = 0; line<textList.size(); line++)
114         {
115             final_str += textList[line];
116         }
117         QStringList lines = final_str.split(QRegExp("(\n+)"), QString::SkipEmptyParts);
118         for (int line = 0; line < lines.size(); ++line)
119         {
120             QStandardItem *item = new QStandardItem(lines[line]);
121             item->setData(SWITCH_LOG_CONSOLE, ConsoleModel::LogLevelRole);
122             addNewConsoleItem(item);
123         }
124     }
125     ui->lineCmd->clear();
126 }
127 
lineCmdChanged(QString text)128 void ConsoleWindow::lineCmdChanged(QString text)
129 {
130     ui->btnSend->setDisabled(text.isEmpty());
131 }
132 
filterModelLogLevel(int level)133 void ConsoleWindow::filterModelLogLevel(int level)
134 {
135     model->setLogLevelFilter(level);
136 }
137 
loggerHandler(QSharedPointer<switch_log_node_t> node,switch_log_level_t level)138 void ConsoleWindow::loggerHandler(QSharedPointer<switch_log_node_t> node, switch_log_level_t level)
139 {
140     if (level > ui->comboLogLevel->currentIndex()) return;
141     QString text(node.data()->data);
142     if (!text.isEmpty())
143     {
144          /* Remove \r\n */
145         QStringList textList = text.split(QRegExp("(\r+)"), QString::SkipEmptyParts);
146         QString final_str;
147         for (int line = 0; line<textList.size(); line++)
148         {
149             final_str += textList[line];
150         }
151         QStringList lines = final_str.split(QRegExp("(\n+)"), QString::SkipEmptyParts);
152         for (int line = 0; line < lines.size(); ++line)
153         {
154             QStandardItem *item = new QStandardItem(lines[line]);
155             item->setData(level, ConsoleModel::LogLevelRole);
156             item->setData(node.data()->userdata, ConsoleModel::UUIDRole);
157             addNewConsoleItem(item);
158         }
159     }
160 }
161 
addNewConsoleItem(QStandardItem * item)162 void ConsoleWindow::addNewConsoleItem(QStandardItem *item)
163 {
164     QSettings settings;
165     settings.beginGroup("Console");
166     QPalette palette = settings.value(QString("log-level-%1-palette").arg(item->data(Qt::UserRole).toInt())).value<QPalette>();
167     QFont font = settings.value(QString("log-level-%1-font").arg(item->data(Qt::UserRole).toInt())).value<QFont>();
168     item->setBackground(palette.base());
169     item->setForeground(palette.text());
170     item->setFont(font);
171     sourceModel->appendRow(item);
172 }
173