File indexing completed on 2024-03-24 05:43:52
0001 /* 0002 SPDX-FileCopyrightText: 2011 Vishesh Yadav <vishesh3y@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "servedialog.h" 0008 #include "servewrapper.h" 0009 #include "fileviewhgpluginsettings.h" 0010 #include "hgwrapper.h" 0011 0012 #include <QSpinBox> 0013 #include <QTextEdit> 0014 #include <QLabel> 0015 #include <QDesktopServices> 0016 #include <KLocalizedString> 0017 #include <KMessageBox> 0018 0019 HgServeDialog::HgServeDialog(QWidget *parent) : 0020 DialogBase(QDialogButtonBox::NoButton) 0021 { 0022 Q_UNUSED(parent) 0023 // dialog properties 0024 this->setWindowTitle(xi18nc("@title:window", 0025 "<application>Hg</application> Serve")); 0026 0027 // 0028 m_serverWrapper = HgServeWrapper::instance(); 0029 0030 // 0031 setupUI(); 0032 loadConfig(); 0033 0034 // Load saved settings 0035 FileViewHgPluginSettings *settings = FileViewHgPluginSettings::self(); 0036 this->resize(QSize(settings->serveDialogWidth(), 0037 settings->serveDialogHeight())); 0038 0039 // connections 0040 connect(this, SIGNAL(finished(int)), this, SLOT(saveGeometry())); 0041 connect(m_startButton, &QAbstractButton::clicked, this, &HgServeDialog::slotStart); 0042 connect(m_stopButton, &QAbstractButton::clicked, this, &HgServeDialog::slotStop); 0043 connect(m_browseButton, &QAbstractButton::clicked, this, &HgServeDialog::slotBrowse); 0044 connect(m_serverWrapper, &HgServeWrapper::finished, 0045 this, &HgServeDialog::slotUpdateButtons); 0046 connect(m_serverWrapper, &HgServeWrapper::started, 0047 this, &HgServeDialog::slotUpdateButtons); 0048 connect(m_serverWrapper, &HgServeWrapper::error, 0049 this, &HgServeDialog::slotUpdateButtons); 0050 connect(m_serverWrapper, &HgServeWrapper::error, 0051 this, &HgServeDialog::slotServerError); 0052 connect(m_serverWrapper, &HgServeWrapper::readyReadLine, 0053 this, &HgServeDialog::appendServerOutput); 0054 } 0055 0056 void HgServeDialog::setupUI() 0057 { 0058 m_portNumber = new QSpinBox; 0059 m_portNumber->setMinimum(0); 0060 m_portNumber->setMaximum(65535); 0061 m_portNumber->setValue(8000); 0062 0063 m_startButton = new QPushButton(xi18nc("@label:button", "Start Server")); 0064 m_stopButton = new QPushButton(xi18nc("@label:button", "Stop Server")); 0065 m_browseButton = new QPushButton(xi18nc("@label:button", "Open in browser")); 0066 m_browseButton->setDisabled(true); 0067 0068 m_logEdit = new QTextEdit; 0069 m_repoPathLabel = new QLabel; 0070 m_logEdit->setReadOnly(true); 0071 m_logEdit->setFontFamily(QLatin1String("Monospace")); 0072 0073 QVBoxLayout *buttonLayout = new QVBoxLayout; 0074 buttonLayout->addWidget(m_startButton); 0075 buttonLayout->addWidget(m_stopButton); 0076 buttonLayout->addStretch(1); 0077 buttonLayout->addWidget(m_browseButton); 0078 buttonLayout->addStretch(2); 0079 0080 QHBoxLayout *portLayout = new QHBoxLayout; 0081 portLayout->addWidget(new QLabel(xi18nc("@label", "Port"))); 0082 portLayout->addWidget(m_portNumber); 0083 portLayout->addStretch(); 0084 0085 QHBoxLayout *midLayout = new QHBoxLayout; 0086 midLayout->addWidget(m_logEdit); 0087 midLayout->addLayout(buttonLayout); 0088 0089 QVBoxLayout *lay = new QVBoxLayout; 0090 lay->addWidget(m_repoPathLabel); 0091 lay->addLayout(portLayout); 0092 lay->addLayout(midLayout); 0093 0094 layout()->insertLayout(0, lay); 0095 } 0096 0097 void HgServeDialog::loadConfig() 0098 { 0099 HgWrapper *hgw = HgWrapper::instance(); 0100 m_repoPathLabel->setText(QLatin1String("<b>") + hgw->getBaseDir() + QLatin1String("</b>")); 0101 0102 slotUpdateButtons(); 0103 } 0104 0105 void HgServeDialog::slotUpdateButtons() 0106 { 0107 if (m_serverWrapper->running(HgWrapper::instance()->getBaseDir())) { 0108 m_startButton->setEnabled(false); 0109 m_stopButton->setEnabled(true); 0110 m_portNumber->setEnabled(false); 0111 } 0112 else { 0113 m_startButton->setEnabled(true); 0114 m_stopButton->setEnabled(false); 0115 m_portNumber->setEnabled(true); 0116 m_serverWrapper->cleanUnused(); 0117 } 0118 } 0119 0120 void HgServeDialog::slotStart() 0121 { 0122 m_serverWrapper->startServer(HgWrapper::instance()->getBaseDir(), 0123 m_portNumber->value()); 0124 m_browseButton->setDisabled(false); 0125 } 0126 0127 void HgServeDialog::slotStop() 0128 { 0129 m_serverWrapper->stopServer(HgWrapper::instance()->getBaseDir()); 0130 m_browseButton->setDisabled(true); 0131 } 0132 0133 void HgServeDialog::slotBrowse() 0134 { 0135 QDesktopServices::openUrl(QUrl(QStringLiteral("http://localhost:%1"). 0136 arg(m_portNumber->value()))); 0137 } 0138 0139 0140 void HgServeDialog::slotServerError() 0141 { 0142 m_serverWrapper->cleanUnused(); 0143 } 0144 0145 void HgServeDialog::appendServerOutput(const QString &repoLocation, const QString &line) 0146 { 0147 if (HgWrapper::instance()->getBaseDir() == repoLocation) { 0148 m_logEdit->append(line); 0149 } 0150 } 0151 0152 void HgServeDialog::saveGeometry() 0153 { 0154 FileViewHgPluginSettings *settings = FileViewHgPluginSettings::self(); 0155 settings->setServeDialogHeight(this->height()); 0156 settings->setServeDialogWidth(this->width()); 0157 settings->save(); 0158 } 0159 0160 0161 0162 0163 #include "moc_servedialog.cpp"